定義
大于100毫秒的數據庫命令會被記錄到慢日志,可以是查詢命令、數據更新命令或者創建索引命令等。其中查詢耗時長是最常見的慢日志,原因一般都是未合理設置索引導致查詢對全表數據進行掃描導致,后文統稱這類命令為慢查詢。慢查詢是影響數據庫性能的第一原因,在出現慢日志后您需要盡快判斷是否為慢查詢,并根據慢日志詳情分析查詢條件合理設置索引。
當慢查詢在短時間內大量出現時,為保障其他租戶的權益,將會對您的服務空間進行限流。
慢查詢由數據庫內核對命令耗時進行統計,會存在性能毛刺,即一張表數據量很小的情況,查詢也被統計為慢日志,這類慢日志您可以放心忽略也不會限流。您只需要關注一張表存在數十萬甚至更多條數據的慢查詢情況并進行優化。
慢日志趨勢
打開控制臺可以查詢指定時間范圍的慢日志趨勢,支持查看一周內的統計數據。
慢日志數量曲線:記錄分鐘級的慢日志數量隨著時間的趨勢變化。
慢日志掃描文檔數曲線:記錄分鐘級的慢日志對全表數據進行掃描的文檔記錄總量總隨著時間的趨勢變化。
慢日志詳情
打開控制臺可以查詢慢日志詳情。支持查看一周內的慢日志詳情。支持按照集合表名進行過濾。支持按照執行時間、文檔掃描數量、索引掃描數量進行排序。
一行慢日志一般包含以下幾個字段,含義解釋如下:
字段 | 含義 |
集合名稱 | 命令操作的集合名稱 |
執行開始時間 | 該命令開始執行的時間 |
執行時長(毫秒) | 該命令執行耗時 |
文檔掃描行數 | 該命令對數據庫多少行數據進行了掃描。 說明 對于慢查詢命令,當索引設置合理時該數值應該和索引掃描行數、返回行數盡可能接近。 |
索引掃描行數 | 該命令對數據庫多少行索引進行了掃描。 說明 對于慢查詢命令,如果該值遠大于返回行數,說明您的索引是無效索引。 |
返回行數 | 該命令執行后匹配返回的數據行數。 |
慢日志語句 | 詳細的命令模板,您可以通過JSON工具美化方便進行分析。 說明 對于慢查詢命令您需要特別關注 filter 字段,例:...{"filter":{"userId":"xxx"}}...,表示以userId=xxx作為查詢條件進行的查詢。此時您可以檢查下是否建立了userId的索引。 |