Mysql

並行執行查詢

  • February 6, 2020

我在 mysql 5.7.18 ubuntu 伺服器 16.04 上執行一個 sql 腳本,它在一個表中執行大量更新。50k 更新中的每一個都需要不到一秒的時間,但總執行時間非常長(>20m)。

我可以從 PROCESSLIST 中看到只有一個執行緒正在執行並且正在逐一處理更新。

如何使用多個執行緒來加快執行速度?

因為您寫了“每個…”,所以聽起來您正在更新各個行。您是否嘗試過編寫 SQL,而不是一次執行一行,以便讓數據庫在一個 SQL 語句中更新許多行?與手動嘗試多執行緒相比,這可能會為您帶來更好的性能。

從書:High Performance MySQL - 2nd Ddition- 2008

MySQL 不能在多個 CPU 上並行執行單個查詢。這是一些其他數據庫伺服器提供的功能,但不是 MySQL。我們提到它,這樣您就不會花費大量時間試圖弄清楚如何在 MySQL 上獲得併行查詢執行!

https://www.oreilly.com/library/view/high-performance-mysql/9780596101718/ch04.html

來自Percona部落格 - 2019 年 1 月 23 日

最後:MySQL 8.0.14 具有(目前有限)執行並行查詢執行的能力。在撰寫本文時,它僅限於select count(*) from table查詢和檢查表查詢。

https://www.percona.com/blog/2019/01/23/mysql-8-0-14-a-road-to-parallel-query-execution-is-wide-open/

引用自:https://dba.stackexchange.com/questions/175888