Mysql

MYSQL 並行查詢性能問題

  • January 21, 2021

我正在為我的公司開發一個項目,該項目通過 Web API 向客戶銷售大量天氣數據。作為該 API 的一部分,有一個後端服務需要從MYSQL 數據庫(版本 5.1.1,InnoDB)中獲取數據。如果間隔設置為全年,數據集可以達到**50 000行12列,這是很常見的。**MYSQL 數據庫執行在 Red Hat Linux 64 位、4 核伺服器電腦上。

例如,計算50000 行集的每日平均值的查詢在 3.5 秒內執行。但是,如果我並行執行其中 4 個查詢,每個****查詢的執行時間平均達到8 秒。我還在數據庫上監視客戶端連接,我可以清楚地看到每個查詢有 4 個執行緒執行。執行期間伺服器上的 CPU 使用率從 0 變為 cca 50% 使用率。

我的問題是,如果我並行執行相同的查詢,為什麼執行時間會增加?我錯過了什麼或者這是預期的行為?

更多伺服器資訊:CPU:Intel Core I5-4440 @ 3.1 GHz(4 核),記憶體:8 GB

編輯:將 innodb_buffer_pool_size 從 530 MB 增加到 5.5 GB 解決了問題!

  • 升級到 5.5,然後是 5.6,然後是 5.7。您將能夠在每次升級*時同時執行更多查詢。*你真的是指“5.1.1”嗎?那是從 2005 年左右開始的 5.1 的預發布版本。
  • 對舊的靜態數據使用匯總表。(它是靜態的INSERTed,對嗎?)也許可以在午夜之後總結(例如 AVG、MAX、MIN)每日讀數?
  • 使用 InnoDB,而不是 MyISAM。更好地共享桌子。(每次版本升級都會變得更好。)
  • innodb_buffer_pool_size應該是關於5500M你的 8G 機器的。包括索引在內的數據集是否比這更大?如果是這樣,請使用條帶化和/或 SSD 獲得更多 RAM 和/或 RAID。
  • 匯總表是解決數據倉庫性能問題的主要方法。 進一步討論。將查詢加速 10 倍的情況並不少見,尤其是 I/O 密集型查詢。

“如何解決……”——大多數應用程序不會執行大量 3.5 秒的查詢。他們正在做“點查詢”,可能是 3.5毫秒

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