本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
識別、偵錯和最佳化執行緩慢的查詢可能很困難。當 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-group AWS CLI 命令或 ModifyDBClusterParameterGroup 管理函數,來設定這些資料庫叢集參數
注意
慢查詢記錄參數是動態的,這表示變更其值不需要也不會導致重新啟動資料庫叢集。
在 中檢視慢查詢日誌 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
}
}