GreatSQL社区

搜索

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

509 12 2024-7-23 18:07
全部回复(12)
yejr 2024-7-24 17:23:51
corey 发表于 2024-7-24 17:20
我现在得到的结论是跟配置无关,因为greatsql跟mariadb甚至都用基本的几条配置,mariadb不会出现说执行很 ...

可以在两边执行 mysqladmin var 的结果再做对比,虽然很多是默认配置,但不代表就都是一样的。

另外,从你的业务类型来看,是往GreatSQL中的宽表插入大量二进制数据(疑似图片或文件附件二进制内容),这种情况下本身就容易发生行溢出(innodb page分裂),肯定是要更慢的。同等条件下,如果也向mariadb中的宽表插入这些数据,它可以做到很快,这个明显也不科学。

如果不能提供详细信息,我们也帮不上。
KAiTO 2024-7-26 11:10:58
帖子中由于插入字段过长,删减一部分SQL语句,使其它读者方便阅读

------
插入语句如下
insert.sql (15.25 MB, 下载次数: 2)
建表语句如下
createtable.sql (1.08 KB, 下载次数: 1)

GreatSQL 相关信息
  1. greatsql> show variables like '%version%';
  2. +--------------------------------------------------+--------------------------------------------+
  3. | Variable_name                                    | Value                                      |
  4. +--------------------------------------------------+--------------------------------------------+
  5. | admin_tls_version                                | TLSv1.2,TLSv1.3                            |
  6. | gdb_sqld_version                                 | 8.0.32.5                                   |
  7. | group_replication_allow_local_lower_version_join | OFF                                        |
  8. | group_replication_recovery_tls_version           | TLSv1.2,TLSv1.3                            |
  9. | immediate_server_version                         | 999999                                     |
  10. | innodb_version                                   | 8.0.32-8.0.32                              |
  11. | original_server_version                          | 999999                                     |
  12. | protocol_version                                 | 10                                         |
  13. | replica_type_conversions                         |                                            |
  14. | slave_type_conversions                           |                                            |
  15. | tls_version                                      | TLSv1.2,TLSv1.3                            |
  16. | version                                          | 8.0.32-25                                  |
  17. | version_comment                                  | GreatSQL, Release 25, Revision 79f57097e3f |
  18. | version_compile_machine                          | x86_64                                     |
  19. | version_compile_os                               | Linux                                      |
  20. | version_compile_zlib                             | 1.2.13                                     |
  21. | version_suffix                                   |                                            |
  22. +--------------------------------------------------+--------------------------------------------+
  23. 17 rows in set (0.00 sec)
复制代码
使用 GreatSQL 为 8.0.32-25 版本

配置文件(my.cnf)如下,参考安装手册中提供的 my.cnf 此处没做修改
- Ubuntu系统中安装GreatSQL | GreatSQL用户手册
或推荐的 my.cnf 模板
- my.cnf参考模板 | GreatSQL用户手册
注意不要用全默认值,可能会导致 GreatSQL 性能较差,例如ibp只有128M等!若拿定不了参数值设置,可使用叶老师的小工具
- 老叶出品,方便可靠的MySQL my.cnf配置文件生成工具 (imysql.com)

单独运行
第一次
  1. greatsql> source /usr/local/insert.sql;
  2. Query OK, 61 rows affected, 10 warnings (0.23 sec)
  3. Records: 61  Duplicates: 0  Warnings: 10
复制代码
第二
  1. greatsql> source /usr/local/insert.sql;
  2. Query OK, 61 rows affected, 10 warnings (0.21 sec)
  3. Records: 61  Duplicates: 0  Warnings: 10
复制代码
第三
  1. greatsql> source /usr/local/insert.sql;
  2. Query OK, 61 rows affected, 10 warnings (0.19 sec)
  3. Records: 61  Duplicates: 0  Warnings: 10
复制代码
脚本运行5次
  1. #!/bin/bash

  2. for i in {1..5}
  3. do
  4.     echo "Execution $i:"
  5.     # 使用 `time` 命令来记录执行时间
  6.     { time ./GreatSQL-8.0.32-25-Linux-glibc2.28-x86_64/bin/mysql -S /data/greatsql/mysql.sock -uroot -Dtest < /usr/local/insert.sql; } 2>&1
  7.     echo "---------------------------------------"
  8. done
复制代码
结果如下
  1. root@hyzhang:/usr/local# ./execute.sh
  2. Execution 1:

  3. real    0m0.303s
  4. user    0m0.102s
  5. sys     0m0.017s
  6. ---------------------------------------
  7. Execution 2:

  8. real    0m0.293s
  9. user    0m0.100s
  10. sys     0m0.013s
  11. ---------------------------------------
  12. Execution 3:

  13. real    0m0.315s
  14. user    0m0.095s
  15. sys     0m0.017s
  16. ---------------------------------------
  17. Execution 4:

  18. real    0m0.317s
  19. user    0m0.125s
  20. sys     0m0.009s
  21. ---------------------------------------
  22. Execution 5:

  23. real    0m0.291s
  24. user    0m0.097s
  25. sys     0m0.012s
  26. ---------------------------------------
复制代码
结论如下
同样的 Insert 语句在 GreatSQL 数据库中并不会出现性能迟缓的情况。初步推断,此问题的成因在于 my.cnf 的配置有误。诸如 innodb_buffer_pool_size、innodb_log_buffer_size、tmp_table_size、max_heap_table_size、innodb_write_io_threads 以及 innodb_read_io_threads 等参数,倘若采用默认值,或许会对性能产生不利影响。

KAiTO 2024-7-26 14:11:00
2024.07.26解决
经排查是配置文件问题,更换GreatSQL官网推荐配置文件后解决
12

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

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