我现在得到的结论是跟配置无关,因为greatsql跟mariadb甚至都用基本的几条配置,mariadb不会出现说执行很 ...
可以在两边执行 mysqladmin var 的结果再做对比,虽然很多是默认配置,但不代表就都是一样的。
另外,从你的业务类型来看,是往GreatSQL中的宽表插入大量二进制数据(疑似图片或文件附件二进制内容),这种情况下本身就容易发生行溢出(innodb page分裂),肯定是要更慢的。同等条件下,如果也向mariadb中的宽表插入这些数据,它可以做到很快,这个明显也不科学。
如果不能提供详细信息,我们也帮不上。 帖子中由于插入字段过长,删减一部分SQL语句,使其它读者方便阅读
------
插入语句如下
建表语句如下
GreatSQL 相关信息
greatsql> show variables like '%version%';
+--------------------------------------------------+--------------------------------------------+
| Variable_name | Value |
+--------------------------------------------------+--------------------------------------------+
| admin_tls_version | TLSv1.2,TLSv1.3 |
| gdb_sqld_version | 8.0.32.5 |
| group_replication_allow_local_lower_version_join | OFF |
| group_replication_recovery_tls_version | TLSv1.2,TLSv1.3 |
| immediate_server_version | 999999 |
| innodb_version | 8.0.32-8.0.32 |
| original_server_version | 999999 |
| protocol_version | 10 |
| replica_type_conversions | |
| slave_type_conversions | |
| tls_version | TLSv1.2,TLSv1.3 |
| version | 8.0.32-25 |
| version_comment | GreatSQL, Release 25, Revision 79f57097e3f |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
| version_compile_zlib | 1.2.13 |
| version_suffix | |
+--------------------------------------------------+--------------------------------------------+
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)
单独运行
第一次
greatsql> source /usr/local/insert.sql;
Query OK, 61 rows affected, 10 warnings (0.23 sec)
Records: 61Duplicates: 0Warnings: 10第二次
greatsql> source /usr/local/insert.sql;
Query OK, 61 rows affected, 10 warnings (0.21 sec)
Records: 61Duplicates: 0Warnings: 10第三次
greatsql> source /usr/local/insert.sql;
Query OK, 61 rows affected, 10 warnings (0.19 sec)
Records: 61Duplicates: 0Warnings: 10脚本运行5次
#!/bin/bash
for i in {1..5}
do
echo "Execution $i:"
# 使用 `time` 命令来记录执行时间
{ 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
echo "---------------------------------------"
done结果如下
root@hyzhang:/usr/local# ./execute.sh
Execution 1:
real 0m0.303s
user 0m0.102s
sys 0m0.017s
---------------------------------------
Execution 2:
real 0m0.293s
user 0m0.100s
sys 0m0.013s
---------------------------------------
Execution 3:
real 0m0.315s
user 0m0.095s
sys 0m0.017s
---------------------------------------
Execution 4:
real 0m0.317s
user 0m0.125s
sys 0m0.009s
---------------------------------------
Execution 5:
real 0m0.291s
user 0m0.097s
sys 0m0.012s
---------------------------------------结论如下
同样的 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 等参数,倘若采用默认值,或许会对性能产生不利影响。
2024.07.26解决
经排查是配置文件问题,更换GreatSQL官网推荐配置文件后解决
页:
1
[2]