GreatSQL社区

搜索

同样的一条 insert sql在greatsql中执行要较慢,在mariadb中较快

507 12 2024-7-23 18:07

架构:                           x86_64
CPU 运行模式:                   32-bit, 64-bit
字节序:                         Little Endian
Address sizes:                   39 bits physical, 48 bits virtual
CPU:                             4
在线 CPU 列表:                  0-3
每个核的线程数:                 1
每个座的核数:                   4
座:                             1
NUMA 节点:                      1
厂商 ID:                        GenuineIntel
CPU 系列:                       6
型号:                           158
型号名称:                       Intel(R) Xeon(R) E-2224G CPU @ 3.50GHz
步进:                           10
CPU MHz:                        3500.000
CPU 最大 MHz:                   4700.0000
CPU 最小 MHz:                   800.0000
BogoMIPS:                       7008.00
虚拟化:                         VT-x
L1d 缓存:                       128 KiB
L1i 缓存:                       128 KiB
L2 缓存:                        1 MiB
L3 缓存:                        8 MiB



RANGE                                  SIZE STATE REMOVABLE  BLOCK
0x0000000000000000-0x000000009fffffff  2.5G  在线        否   0-19
0x0000000100000000-0x000000045fffffff 13.5G  在线        否 32-139

Memory block size:       128M
Total online memory:      16G
Total offline memory:      0B


同一台机器 安装greatsql后执行后面的sql会比mariadb慢很多

INSERT INTO `device_wave_from1122` (`map_id`,`axis`,`create_time`,`wave_from`,`sampling_frequency`,`sampling_points`,`data_unit`,`device_speed`,`category_time`,`trigger_type`) VALUES (56081,3,'2024-07-23 17:36:19',X由于过长,此处部分省略',12800.000000,131072,0,3000.000000,1,0) on duplicate key update `map_id`=VALUES(`map_id`),`axis`=VALUES(`axis`),`create_time`=VALUES(`create_time`),`wave_from`=VALUES(`wave_from`),`sampling_frequency`=VALUES(`sampling_frequency`),`sampling_points`=VALUES(`sampling_points`),`data_unit`=VALUES(`data_unit`),`device_speed`=VALUES(`device_speed`),`category_time`=VALUES(`category_time`),`trigger_type`=VALUES(`trigger_type`);

全部回复(12)
yejr 2024-7-23 19:48:40
补充几个信息
1. GreatSQL的配置
2. 执行INSERT期间执行SHOW PROCESSLIST结果
3. slow query log里的相关信息
corey 2024-7-24 14:27:53
yejr 发表于 2024-7-23 19:48
补充几个信息
1. GreatSQL的配置
2. 执行INSERT期间执行SHOW PROCESSLIST结果

my.cnf
# Percona Server template configuration
#
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/ ... ation-defaults.html
[client]
user = root
socket = /data/mysql/mysql.sock

[mysqld]
user = mysql
port = 3306
datadir = /data/mysql
socket = /data/mysql/mysql.sock
log_error = /data/mysql/mysqld.log
sql_mode = NO_ENGINE_SUBSTITUTION
open_files_limit = 65535
max_connections = 1024
slow_query_log = on
slow_query_log_file = /data/mysql/slow-query.log


SHOW PROCESSLIST;
5        event_scheduler        localhost                Daemon        378        Waiting on empty queue                378852        0        0
14        root        192.168.30.75:56580                Query        0        init        SHOW PROCESSLIST        0        0        0
1167        root        localhost:51946        lot_wireless_system        Query        66        update        INSERT INTO `device_wave_from1026` (`map_id`,`axis`,`create_time`,`wave_from`,`sampling_frequency`,`        66769        0        0
1170        root        localhost:51986        lot_wireless_system        Query        66        Opening tables        INSERT INTO `vibration_data_tbl1157` (`map_id`,`create_time`,`temp`,`v_x`,`v_y`,`v_z`,`rms_z`,`p_p_z        66465        0        0
1269        root        localhost:59440        lot_wireless_system        Sleep        103                        103073        0        0
1273        root        localhost:59448        lot_wireless_system        Sleep        112                        111967        0        0
corey 2024-7-24 14:39:02
corey 发表于 2024-7-24 14:27
my.cnf
# Percona Server template configuration
#

slow_query_log

# Time: 2024-07-24T06:29:22.541538Z
# User@Host: root[root] @ localhost [127.0.0.1]  Id:  1170
# Schema: lot_wireless_system  Last_errno: 0  Killed: 0
# Query_time: 87.923407  Lock_time: 0.000015  Rows_sent: 0  Rows_examined: 0  Rows_affected: 30  Bytes_sent: 54
SET timestamp=1721802474;
INSERT INTO `device_wave_from1037` (`map_id`,`axis`,`create_time`,`wave_from`,`sampling_frequency`,`sampling_points`,`data_unit`,`device_speed`,`category_time`,`trigger_type`) VALUES (51817,3,'2024-07-24 14:22:20',X过长部分省略
corey 2024-7-24 14:42:38
yejr 发表于 2024-7-23 19:48
补充几个信息
1. GreatSQL的配置
2. 执行INSERT期间执行SHOW PROCESSLIST结果

同样的配置
搭载greatsql数据库


搭载mariadb数据库

corey 2024-7-24 14:47:26
yejr 发表于 2024-7-23 19:48
补充几个信息
1. GreatSQL的配置
2. 执行INSERT期间执行SHOW PROCESSLIST结果

业务场景是这样的:每隔几分钟,会分几批次执行批量插入几十条拼接的insert sql,但是greatsql就执行的很慢,导致下一个间隔到来,上一个间隔还没有执行完,就一直堆积程序的内存,导致内存慢慢被占满,然后服务挂掉自动重启,但是mariadb执行很快,不会卡住
corey 2024-7-24 14:59:48
corey 发表于 2024-7-24 14:47
业务场景是这样的:每隔几分钟,会分几批次执行批量插入几十条拼接的insert sql,但是greatsql就执行的很 ...

CREATE TABLE `device_wave_form`  (
  `id` int UNSIGNED NOT NULL AUTO_INCREMENT,
  `map_id` int UNSIGNED NOT NULL COMMENT '有效设备表的Id',
  `axis` int NOT NULL DEFAULT 0 COMMENT '轴向1,表示x轴,2表示y轴,3表示z轴',
  `create_time` timestamp NOT NULL DEFAULT '1993-03-20 00:00:00' COMMENT '设备上传的创建时间',
  `wave_from` mediumblob NOT NULL COMMENT '波形数据',
  `sampling_frequency` double NOT NULL DEFAULT 0 COMMENT '采样频率',
  `sampling_points` int NOT NULL DEFAULT 0,
  `data_unit` int NULL DEFAULT 0 COMMENT '数据单位',
  `device_speed` double NULL DEFAULT 0 COMMENT '设备转速',
  `trigger_type` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '触发类型',
  `category_time` int UNSIGNED NOT NULL DEFAULT 1 COMMENT '时间长度分类标签, 1为天, 2为周, 4为月, 8为年. 可相加表示多个',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `idx_device_info_id`(`map_id`, `create_time`, `axis`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 10731 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '设备上传波形表' ROW_FORMAT = Dynamic;
yejr 2024-7-24 17:15:19
corey 发表于 2024-7-24 14:59
CREATE TABLE `device_wave_form`  (
  `id` int UNSIGNED NOT NULL AUTO_INCREMENT,
  `map_id` int UNS ...

GreatSQL只配置了下面这点内容吗

  1. [mysqld]
  2. user = mysql
  3. port = 3306
  4. datadir = /data/mysql
  5. socket = /data/mysql/mysql.sock
  6. log_error = /data/mysql/mysqld.log
  7. sql_mode = NO_ENGINE_SUBSTITUTION
  8. open_files_limit = 65535
  9. max_connections = 1024
  10. slow_query_log = on
  11. slow_query_log_file = /data/mysql/slow-query.log
复制代码


这也就意味着很多参数都用默认值,包括 innodb_buffer_pool_size 这些,它的默认值是 128M,大部分情况下是远远不够的
corey 2024-7-24 17:18:23
yejr 发表于 2024-7-24 17:15
GreatSQL只配置了下面这点内容吗

开始用了很多,都试过了,innodb_buffer_pool_size也配置过4G等,但是效果都一样,都是很慢
corey 2024-7-24 17:20:03
corey 发表于 2024-7-24 17:18
开始用了很多,都试过了,innodb_buffer_pool_size也配置过4G等,但是效果都一样,都是很慢 ...

我现在得到的结论是跟配置无关,因为greatsql跟mariadb甚至都用基本的几条配置,mariadb不会出现说执行很慢的情况
12下一页
corey

2

主题

0

博客

13

贡献

新手上路

Rank: 1

积分
23

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-12-21 22:46 , Processed in 0.029977 second(s), 17 queries , Redis On.
快速回复 返回顶部 返回列表