慢查詢記錄
最後更新
本頁說明 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 檢查索引 |