Mysql

如何確定為什麼 MySQL 伺服器變慢並且請求有時會超時?

  • December 11, 2020

我正在從事我的第一個項目,該項目大量使用 MySQL 數據庫,並且正在努力理解我遇到的性能問題。

大多數時候,響應會從伺服器快速返回,但是當我有某些腳本在後台執行大量查詢(讀取和寫入數據)時,我發現其他請求接收響應很慢,或完全超時。

例如,昨天當一個執行大量數據庫查詢的 PHP 腳本正在執行時,對在返迴響應之前進行了多次查詢的頁面的伺服器請求超時——我什至無法使用 Navicat 連接到數據庫,因為它也超時了。

在上面的範例中,我在 SSH 控制台中執行了 top/htop,發現 CPU 使用率非常低,記憶體使用率只有 50% 左右。因此,我認為問題出在數據庫上,但我無法理解導致問題的原因,例如它們是否可能是由於:

  • 慢查詢
  • 太多聯繫
  • 每秒查詢次數過多
  • 我不知道的其他潛在問題

我知道慢查詢日誌,但我的查詢都不是很慢。

我可以使用哪些方法或工具來確定是什麼導致 MySQL 數據庫變慢,有時甚至請求超時?

您需要調整數據庫。這是一個具有許多變數和決策樹的複雜過程。如果沒有具體細節,我們只能真正讓您從這裡開始。

如果您的腳本執行大量 SQL 並降低了數據庫速度,並且在執行時您的 CPU 和記憶體使用情況良好,那麼您可能遇到了 I/O 問題。即你正在敲擊磁碟。您需要查看腳本中使用的 SQL 並對其進行調整。例如,它可能會生成大量全表掃描或創建過多的事務日誌,從而降低數據庫速度。首先,檢查是否發生了任何不必要的全表掃描,並查看是否可以向相關列添加索引以減少 I/O。然後報告回來,我們可以從那裡開始。

上面連結的 MySQLtuner 腳本非常好,但是如果您對數據庫沒有經驗,那麼理解結果可能對您來說是一個挑戰。在開始之前請閱讀首頁上的免責聲明:https ://github.com/major/MySQLTuner-perl

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