使用 Amazon Neptune 慢查詢記錄 - Amazon Neptune

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon Neptune 慢查詢記錄

識別、偵錯和最佳化執行緩慢的查詢可能很困難。當 Neptune 的慢查詢記錄啟用時,系統會自動記錄所有長時間執行之查詢的屬性,讓這個程序更容易進行。

注意

慢查詢記錄是在 Neptune 引擎 1.2.1.0 版中引進的。

您可以使用 neptune_enable_slow_query_log 資料庫叢集參數,啟用慢查詢記錄。根據預設,此參數會設定為 disabled。將其設定為 infodebug 可啟用慢查詢記錄。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

requestId

查詢的請求 ID。

requestType

請求類型,例如 HTTP 或 WebSocket。

responseStatusCode

查詢回應狀態碼,如 200。

exceptionClass

查詢執行後所傳回錯誤的例外狀況類別。

queryStats

query

查詢字串。

queryFingerprint

查詢的指紋。

queryLanguage

查詢語言,例如 Gremlin、SPARQL 或 openCypher。

memoryStats

allocatedPermits

分配給查詢的許可。

approximateUsedMemoryBytes

執行期間查詢所使用的大約記憶體。

queryTime

startTime

查詢開始時間 (UTC)。

overallRunTimeMs

查詢總執行時間,以毫秒為單位。

parsingTimeMs

查詢剖析時間,以毫秒為單位。

waitingTimeMs

查詢Gremlin/SPARQL/openCypher佇列等待時間,以毫秒為單位

executionTimeMs

查詢執行時間,以毫秒為單位。

serializationTimeMs

查詢序列化時間,以毫秒為單位。

statementCounters

read

讀取的陳述式數目。

written

已寫入的陳述式數目。

deleted

已刪除的陳述式數目。

transactionCounters

committed

已完成的交易數目。

rolledBack

已復原的交易數目。

vertexCounters

added

已新增的頂點數目。

removed

已移除的頂點數目。

propertiesAdded

己新增的頂點屬性數目。

propertiesRemoved

己移除的頂點屬性數目。

edgeCounters

added

已新增的邊緣數目。

removed

已移除的邊緣數目。

propertiesAdded

已新增的邊緣屬性數目。

propertiesRemoved

已移除的邊緣屬性數目。

resultCache

hitCount

結果快取命中計數。

missCount

結果快取遺漏計數。

putCount

結果快取放置計數。

concurrentExecution

acceptedQueryCountAtStart

開始時目前查詢執行接受的平行查詢。

runningQueryCountAtStart

開始時與目前查詢執行一起執行的平行查詢。

acceptedQueryCountAtEnd

結束時目前查詢執行接受的平行查詢。

runningQueryCountAtEnd

結束時與目前查詢執行一起執行的平行查詢。

queryBatch

queryProcessingBatchSize

查詢處理期間的批次大小。

querySerialisationBatchSize

查詢序列化期間的批次大小。

debug 模式中記錄的查詢屬性

neptune_enable_slow_query_log 資料庫叢集參數已設定為 debug 時,除了在 info 模式中記錄的屬性之外,還會記錄下列儲存體計數器屬性:

屬性 描述

statementsScannedInAllIndexes

在所有索引中掃描的陳述式。

statementsScannedSPOGIndex

在 SPOG 索引中掃描的陳述式。

statementsScannedPOGSIndex

在 POGS 索引中掃描的陳述式。

statementsScannedGPSOIndex

在 GPSO 索引中掃描的陳述式。

statementsScannedOSGPIndex

在 OSGP 索引中掃描的陳述式。

statementsScannedInChunk

在區塊中一起掃描的陳述式。

postFilteredStatementScans

掃描後篩選後留下的陳述式。

distinctStatementScans

已掃描的不同陳述式。

statementsReadInAllIndexes

在所有索引中掃描後置篩選之後讀取的陳述式。

statementsReadSPOGIndex

在 SPOG 索引中掃描後篩選後讀取的陳述式。

statementsReadPOGSIndex

在 POGS 索引中掃描後篩選後讀取的陳述式。

statementsReadGPSOIndex

在 GPSO 索引中掃描後篩選後讀取的陳述式。

statementsReadOSGPIndex

在 OSGP 索引中掃描後篩選後讀取的陳述式。

accessPathSearches

存取路徑搜尋次數。

fullyBoundedAccessPathSearches

完全界限金鑰存取路徑搜尋次數。

accessPathSearchedByPrefix

按字首搜尋的存取路徑數目。

searchesWhereRecordsWereFound

有 1 筆或多筆記錄做為輸出的搜尋次數。

searchesWhereRecordsWereNotFound

沒有記錄做為輸出的搜尋次數。

totalRecordsFoundInSearches

從所有搜尋中找到的記錄總數。

statementsInsertedInAllIndexes

在所有索引中插入的陳述式數目。

statementsUpdatedInAllIndexes

在所有索引中更新的陳述式數目。

statementsDeletedInAllIndexes

在所有索引中刪除的陳述式數目。

predicateCount

述詞數目。

dictionaryReadsFromValueToIdTable

字典從值讀取到 ID 資料表的次數。

dictionaryReadsFromIdToValueTable

字典 ID 讀取到值資料表的次數。

dictionaryWritesToValueToIdTable

字典寫入到值再到 ID 資料表的次數。

dictionaryWritesToIdToValueTable

字典寫入到 ID 再到值資料表的次數。

rangeCountsInAllIndexes

所有索引中範圍計數的數目。

deadlockCount

查詢中的死結數目。

singleCardinalityInserts

已執行的單一基數插入數目。

singleCardinalityInsertDeletions

單一基數插入期間刪除的陳述式數目。

慢查詢的偵錯記錄範例

下列 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 } }