本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon Neptune 慢查詢記錄
識別、偵錯和最佳化執行緩慢的查詢可能很困難。當 Neptune 的慢查詢記錄啟用時,系統會自動記錄所有長時間執行之查詢的屬性,讓這個程序更容易進行。
注意
慢查詢記錄是在 Neptune 引擎 1.2.1.0 版中引進的。
您可以使用 neptune_enable_slow_query_log 資料庫叢集參數,啟用慢查詢記錄。根據預設,此參數會設定為 disabled
。將其設定為 info
或 debug
可啟用慢查詢記錄。info
設定會記錄每個緩慢執行之查詢的一些有用屬性,而 debug
設定則會記錄所有可用的屬性。
若要設定被視為執行緩慢之查詢的閾值,請使用 neptune_slow_query_log_threshold 資料庫叢集參數,指定多少毫秒後,執行中查詢會被視為緩慢,並在慢查詢記錄啟用時加以記錄。預設值為 5000 毫秒 (5 秒)。
您可以在 中設定這些資料庫叢集參數 AWS Management Console,或使用 modify-db-cluster-parameter 群組 AWS CLI 命令或 ModifyDBClusterParameterGroup Word管理函數。
注意
慢查詢記錄參數是動態的,這表示變更其值不需要也不會導致重新啟動資料庫叢集。
在 中檢視慢查詢日誌 AWS Management Console
您可以在 中檢視和下載慢查詢日誌 AWS Management Console,如下所示:
在執行個體頁面上,選擇資料庫執行個體,然後捲動至日誌區段。您可以接著在那裡選擇一個日誌檔,然後選擇下載以下載它。
由 Neptune 慢查詢日誌產生的檔案
Neptune 中由慢查詢記錄所產生的日誌檔具有下列特性:
檔案編碼為 UTF-8。
查詢及其屬性會以 JSON 格式記錄。
除了
queryTime
資料外,不會記錄 Null 和空白屬性。日誌檔會跨越多個檔案,其數目隨著執行個體大小而不同。
日誌項目不會循序排列。您可以使用其
timestamp
值來排序它們。若要查看最新事件,您可能必須檢閱所有慢查詢日誌檔。
日誌檔合計達到 100 MB 時便會輪換。無法設定此限制。
在 info
模式中記錄的查詢屬性
當 neptune_enable_slow_query_log
資料庫叢集參數已設定為 info
時,系統會記錄慢查詢的下列屬性:
群組 | 屬性 | 描述 |
---|---|---|
requestResponseMetadata |
|
查詢的請求 ID。 |
|
請求類型,例如 HTTP 或 WebSocket。 |
|
|
查詢回應狀態碼,如 200。 |
|
|
查詢執行後所傳回錯誤的例外狀況類別。 |
|
queryStats |
|
查詢字串。 |
|
查詢的指紋。 |
|
|
查詢語言,例如 Gremlin、SPARQL 或 openCypher。 |
|
memoryStats |
|
分配給查詢的許可。 |
|
執行期間查詢所使用的大約記憶體。 |
|
queryTime |
|
查詢開始時間 (UTC)。 |
|
查詢總執行時間,以毫秒為單位。 |
|
|
查詢剖析時間,以毫秒為單位。 |
|
|
查詢Gremlin/SPARQL/openCypher佇列等待時間,以毫秒為單位 |
|
|
查詢執行時間,以毫秒為單位。 |
|
|
查詢序列化時間,以毫秒為單位。 |
|
statementCounters |
|
讀取的陳述式數目。 |
|
已寫入的陳述式數目。 |
|
|
已刪除的陳述式數目。 |
|
transactionCounters |
|
已完成的交易數目。 |
|
已復原的交易數目。 |
|
vertexCounters |
|
已新增的頂點數目。 |
|
已移除的頂點數目。 |
|
|
己新增的頂點屬性數目。 |
|
|
己移除的頂點屬性數目。 |
|
edgeCounters |
|
已新增的邊緣數目。 |
|
已移除的邊緣數目。 |
|
|
已新增的邊緣屬性數目。 |
|
|
已移除的邊緣屬性數目。 |
|
resultCache |
|
結果快取命中計數。 |
|
結果快取遺漏計數。 |
|
|
結果快取放置計數。 |
|
concurrentExecution |
|
開始時目前查詢執行接受的平行查詢。 |
|
開始時與目前查詢執行一起執行的平行查詢。 |
|
|
結束時目前查詢執行接受的平行查詢。 |
|
|
結束時與目前查詢執行一起執行的平行查詢。 |
|
queryBatch |
|
查詢處理期間的批次大小。 |
|
查詢序列化期間的批次大小。 |
在 debug
模式中記錄的查詢屬性
當 neptune_enable_slow_query_log
資料庫叢集參數已設定為 debug
時,除了在 info
模式中記錄的屬性之外,還會記錄下列儲存體計數器屬性:
屬性 | 描述 |
---|---|
|
在所有索引中掃描的陳述式。 |
|
在 SPOG 索引中掃描的陳述式。 |
|
在 POGS 索引中掃描的陳述式。 |
|
在 GPSO 索引中掃描的陳述式。 |
|
在 OSGP 索引中掃描的陳述式。 |
|
在區塊中一起掃描的陳述式。 |
|
掃描後篩選後留下的陳述式。 |
|
已掃描的不同陳述式。 |
|
在所有索引中掃描後置篩選之後讀取的陳述式。 |
|
在 SPOG 索引中掃描後篩選後讀取的陳述式。 |
|
在 POGS 索引中掃描後篩選後讀取的陳述式。 |
|
在 GPSO 索引中掃描後篩選後讀取的陳述式。 |
|
在 OSGP 索引中掃描後篩選後讀取的陳述式。 |
|
存取路徑搜尋次數。 |
|
完全界限金鑰存取路徑搜尋次數。 |
|
按字首搜尋的存取路徑數目。 |
|
有 1 筆或多筆記錄做為輸出的搜尋次數。 |
|
沒有記錄做為輸出的搜尋次數。 |
|
從所有搜尋中找到的記錄總數。 |
|
在所有索引中插入的陳述式數目。 |
|
在所有索引中更新的陳述式數目。 |
|
在所有索引中刪除的陳述式數目。 |
|
述詞數目。 |
|
字典從值讀取到 ID 資料表的次數。 |
|
字典 ID 讀取到值資料表的次數。 |
|
字典寫入到值再到 ID 資料表的次數。 |
|
字典寫入到 ID 再到值資料表的次數。 |
|
所有索引中範圍計數的數目。 |
|
查詢中的死結數目。 |
|
已執行的單一基數插入數目。 |
|
單一基數插入期間刪除的陳述式數目。 |
慢查詢的偵錯記錄範例
下列 Gemlin 查詢所需的執行時間可能會比針對慢查詢設定的閾值更長:
gremlin=g.V().has('code','AUS').repeat(out().simplePath()).until(has('code','AGR')).path().by('code').limit(20).fold()
然後,如果在偵錯模式下啟用了慢查詢記錄,將為查詢記錄下列屬性,其格式如下所示:
{ "requestResponseMetadata": { "requestId": "5311e493-0e98-457e-9131-d250a2ce1e12", "requestType": "HTTP_GET", "responseStatusCode": 200 }, "queryStats": { "query": "gremlin=g.V().has('code','AUS').repeat(out().simplePath()).until(has('code','AGR')).path().by('code').limit(20).fold()", "queryFingerprint": "g.V().has(string0,string1).repeat(__.out().simplePath()).until(__.has(string0,string2)).path().by(string0).limit(long0).fold()", "queryLanguage": "Gremlin" }, "memoryStats": { "allocatedPermits": 20, "approximateUsedMemoryBytes": 14838 }, "queryTimeStats": { "startTime": "23/02/2023 11:42:52.657", "overallRunTimeMs": 2249, "executionTimeMs": 2229, "serializationTimeMs": 13 }, "statementCounters": { "read": 69979 }, "transactionCounters": { "committed": 1 }, "concurrentExecutionStats": { "acceptedQueryCountAtStart": 1 }, "queryBatchStats": { "queryProcessingBatchSize": 1000, "querySerialisationBatchSize": 1000 }, "storageCounters": { "statementsScannedInAllIndexes": 69979, "statementsScannedSPOGIndex": 44936, "statementsScannedPOGSIndex": 4, "statementsScannedGPSOIndex": 25039, "statementsReadInAllIndexes": 68566, "statementsReadSPOGIndex": 43544, "statementsReadPOGSIndex": 2, "statementsReadGPSOIndex": 25020, "accessPathSearches": 27, "fullyBoundedAccessPathSearches": 27, "dictionaryReadsFromValueToIdTable": 10, "dictionaryReadsFromIdToValueTable": 17, "rangeCountsInAllIndexes": 4 } }