簡體   English   中英

為什么 MySql 8.0.17 Select 查詢性能比 Mysql 5.7.26 慢?

[英]why MySql 8.0.17 Select query performance is slower than Mysql 5.7.26?

我們有非常基本的查詢,例如

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 開發人員機器(64 GB RAM、Ryzen 3900、NVE SSD)上的 MySQL 8.0.21 有同樣的問題,其中一個包含約 70.000 個數據集的簡單表的計數需要 22 秒。 按照上面的建議添加 WHERE id > 0 將查詢時間減少到 0.2 秒。 因此 MySQL 8 中肯定存在錯誤。在速度慢得多的 Windows 機器(Surface Pro 3)上使用 Maria 10 DB 或任何帶有 MySQL 5.7 的在線主機測試同一個表也可以立即得到結果。

https://bugs.mysql.com/bug.php?id=97709

這里有潛在的補丁: https : //bugs.mysql.com/bug.php?id=100966

但是,我的Mysql 8.0.23 還是有速度慢的問題。


該錯誤的建議臨時“修復”是將您的 MySQL 查詢(如果適用)更改為使用id > 0

SELECT COUNT(*) FROM yourtable 
WHERE id > 0

mysql 錯誤線程中的最后一條評論是:

我們遇到了同樣的問題,經過一些廣泛的測試我們發現將變量innodb_flush_method設置為 FSYNC。 性能顯着提高。

我已經使用SHOW VARIABLES檢查了我的數據庫,發現innodb_flush_method的值為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM