为什么MySql 8.0.17选择查询性能比MySql 5.7.26慢?

为什么MySql 8.0.17选择查询性能比MySql 5.7.26慢?,mysql,database-administration,Mysql,Database Administration,我们有非常基本的查询,比如 select * from Some_Table 在Mysql 5.7中,它曾经工作得很好。和Mysql 8中的相同数据。0需要的时间是时间的两倍(大约200万个数据)。我们已经从5.7升级到8.x,性能下降。我们还尝试更改my.cnf文件中以下系统变量的值,但问题仍然存在 sort_buffer_size read_buffer_size read_rnd_buffer_size myisam_sort_buffer_size max_allowed_pack

我们有非常基本的查询,比如

select * from Some_Table
在Mysql 5.7中,它曾经工作得很好。和Mysql 8中的相同数据。0需要的时间是时间的两倍(大约200万个数据)。我们已经从5.7升级到8.x,性能下降。我们还尝试更改my.cnf文件中以下系统变量的值,但问题仍然存在

sort_buffer_size 
read_buffer_size 
read_rnd_buffer_size
myisam_sort_buffer_size
max_allowed_packet 
wait_timeout
interactive_timeout
connect_timeout

任何帮助都将是巨大的,如何使8.x快于或等于5.7x似乎是一个未解决的错误

我想确认一下,我的Windows developer机器(64 GB RAM,Ryzen 3900,NVE SSD)上的MySQL 8.0.21也存在同样的问题,其中一个包含约70.000个数据集的简单表的计数需要22秒。如上所述添加whereid>0可将查询时间减少到0.2秒。所以MySQL 8中肯定有一个bug。在速度慢得多的windows机器(Surface Pro 3)上使用Maria 10 DB或任何使用MySQL 5.7的在线主机测试同一个表也会立即产生结果

这里有可能的补丁:

然而,我的Mysql 8.0.23仍然存在速度慢的问题


建议对该错误进行临时“修复”,将MySQL查询(如果适用)更改为使用
id>0

SELECT COUNT(*) FROM yourtable 
WHERE id > 0

最后一点意见是:

我们也遇到了同样的问题,在经过一些广泛的测试后,我们发现将变量设置为FSYNC。性能显著提高

我已经使用
SHOW VARIABLES
检查了我的数据库,并找到了
innodb\u flush\u方法
,该方法的值为
fsync
,因此这肯定不是该错误的修复方法

innodb_flush_log_at_timeout 1
innodb_flush_log_at_trx_commit 1
innodb_flush_method fsync
innodb_flush_neighbors 0
innodb_flush_sync ON
innodb_flushing_avg_loops 30

似乎是一个未解决的错误

我想确认一下,我的Windows developer机器(64 GB RAM,Ryzen 3900,NVE SSD)上的MySQL 8.0.21也存在同样的问题,其中一个包含约70.000个数据集的简单表的计数需要22秒。如上所述添加whereid>0可将查询时间减少到0.2秒。所以MySQL 8中肯定有一个bug。在速度慢得多的windows机器(Surface Pro 3)上使用Maria 10 DB或任何使用MySQL 5.7的在线主机测试同一个表也会立即产生结果

这里有可能的补丁:

然而,我的Mysql 8.0.23仍然存在速度慢的问题


建议对该错误进行临时“修复”,将MySQL查询(如果适用)更改为使用
id>0

SELECT COUNT(*) FROM yourtable 
WHERE id > 0

最后一点意见是:

我们也遇到了同样的问题,在经过一些广泛的测试后,我们发现将变量设置为FSYNC。性能显著提高

我已经使用
SHOW VARIABLES
检查了我的数据库,并找到了
innodb\u flush\u方法
,该方法的值为
fsync
,因此这肯定不是该错误的修复方法

innodb_flush_log_at_timeout 1
innodb_flush_log_at_trx_commit 1
innodb_flush_method fsync
innodb_flush_neighbors 0
innodb_flush_sync ON
innodb_flushing_avg_loops 30

升级后是否在同一硬件上运行?同样的操作系统?相同的设置?相同的引擎?只有操作系统不同,操作系统现在是sles 12 sp4,从sles 11 sp4升级。如果操作系统不同,是否恢复了sysctl设置?其中有许多影响磁盘和网络性能,默认值通常不足以用于数据库。我不认为它会影响我们尝试的相同操作系统,Mysql 5.7的性能优于8。X我们也有同样的问题Mysql 8的性能下降了50%:-/。。。我们记录了一天中的所有查询,并在相同的操作系统、相同的硬件、相同的引擎上重新导入此转储。。。但是一个是MySQL 5.5,另一个是MySQL 8。升级后它是否在同一个硬件上运行?同样的操作系统?相同的设置?相同的引擎?只有操作系统不同,操作系统现在是sles 12 sp4,从sles 11 sp4升级。如果操作系统不同,是否恢复了sysctl设置?其中有许多影响磁盘和网络性能,默认值通常不足以用于数据库。我不认为它会影响我们尝试的相同操作系统,Mysql 5.7的性能优于8。X我们也有同样的问题Mysql 8的性能下降了50%:-/。。。我们记录了一天中的所有查询,并在相同的操作系统、相同的硬件、相同的引擎上重新导入此转储。。。但是一个是MySQL 5.5,另一个是MySQL 8。