Mysql

MySQL 送出需要時間

  • May 4, 2017

我們正面臨一個問題,在某些時候,送出的數量會超過一秒。這樣做的時間間隔不是固定的。我們的應用程序發送了數千個送出,但在某些情況下,具有完全相同時間戳的送出會變慢。

這是從 MySQL 慢查詢日誌中提取的 在此處輸入圖像描述

慢查詢日誌中同時沒有任何其他查詢。關於如何進一步調查的任何指示?

我們在 Amazon RDS 上使用 MySQL 5.7.16。

由於您的送出正在停止,因此可以很安全地假設您正在執行innodb_flush_log_at_trx_commit=1請參閱此處的 #4),因此您可以做的一個明顯更改是切換到innodb_flush_log_at_trx_commit=0,但這可能不是您的正確選擇 - 請參閱上一個連結。

在任何情況下,COMMITs通常不要因為伺服器上的其他活動(如查詢)而停止,除非其他活動鎖定某種互斥鎖太久。

如果我不得不在沒有任何進一步證據的情況下猜測,我會說您的寫入非常密集,以至於 MySQL 無法使用自適應檢查點足夠快地刷新,因此它超過了 75% 的日誌容量並開始快速檢查點(這會阻止伺服器活動短時間)。

有幾種快速的方法可以讓 MySQL 更好地處理寫入(除了上面已經提到的一種):

  1. 增加 innodb 日誌文件 (innodb_log_file_size) - 您的日誌最多可以達到 4GB 左右(基於寫入量的零資訊估計),
  2. 增加數據驅動器的 pIOPS 容量
  3. 增加 innodb_io_capacity(高達 pIOPS 容量的 ~70-80%)

否則,查看來自 AWS 的磁碟活動、伺服器目前寫入的數據量將非常有用(您可以使用Log sequence number兩次連續show engine innodb status\G執行之間的增量來計算它)

還有其他方法,但為此,我需要更多關於實際工作量的詳細資訊。

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