【工作筆記】SQL Timeout追蹤
幾個禮拜前去客戶那處理『SQL效能問題』,到場後,問題延伸為『SQL不定期發生Timeout的問題』 【客戶問題描述】 AP會建立100多個連線,且同時會將程式用幾十個連線來並行處理事務,會在不固定的時間會發生SQL Timeout的問題,由程式端無法定位是哪句SQL以及哪支程式導致的問題,在DB端也不會看到任何的錯誤訊息及警告訊息出現在Error Log中 【架構背景】 OS: CentOS 6.8, CPU 20 Cores, RAM 64G, HDD RAID 10 DB: MariaDB 10.0.1 Galera Cluster 【問題追踨】 在執行壓測過程中監控作業系統的狀態,包括CPU、RAM、IO的負載狀況 =>監控的結果CPU的load average大約在1,RAM有使用到少量的SWAP,cached的部份還有滿多可以使用,IO的負載不算太高,整體看來應該不是硬體方面造成的問題 在執行壓測過程中監控資料庫的錯誤日誌、慢查詢記錄、show processlist的狀況 =>錯誤日誌並未記錄到任何的錯誤及警告訊息,慢查詢只有其他資料庫中全表掃描的記錄,show processlist看到多數的連線均為sleep狀態,且SQL執行的時間都很短 在執行壓測過程中監控InnoDB的狀態 ------------------------ LATEST DETECTED DEADLOCK ------------------------ 2017-01-17 16:02:22 7fd7a00e6700 *** (1) TRANSACTION: TRANSACTION 755310052, ACTIVE 2 sec fetching rows mysql tables in use 1, locked 1 LOCK WAIT 6 lock struct(s), heap size 1184, 154 row lock(s) MySQL thread id 2916595, OS thread handle 0x7fdd2d9fe700, query id 213093063 192.168.3.2 tsap Sending data SELECT id, cid, time, retry FROM ss WHERE r