慢查詢記錄

最後更新

本頁說明 query() 內建的慢查詢記錄:計時範圍、輸出格式與它不記錄的資訊。

行為

所有 SQL 都經過 query() 執行(src/MySQLPool.ts:362-392)。執行耗時超過 20ms 時,以 console.log 輸出一行:

[Slow Query: 37ms] [SELECT * FROM `users` WHERE `status` = ?]
項目 說明
門檻 20ms(大於 20 才記錄)
計時範圍 從呼叫 pool.getConnection() 前開始,到結果回來為止;包含等待空閒連線的排隊時間
輸出內容 耗時與帶 ? 佔位符的 SQL,不含綁定值
輸出位置 console.log(stdout)

判讀

因為計時包含取得連線的時間,連線池滿載時即使 SQL 本身很快也會被記錄。大量出現慢查詢時先確認:

現象 可能原因
同一條 SQL 時快時慢,負載高時集中出現 連線池排隊,考慮調高 connectionLimit(見 設定)
特定 SQL 一直超過門檻 SQL 本身慢,以 EXPLAIN 檢查索引

相關頁面

EN