管理要使用的 Neptune DFE 統計資料 - Amazon Neptune

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

管理要使用的 Neptune DFE 統計資料

注意

支援 for openCypher 取決於 Neptune 中的 DFE 查詢引擎。

DFE 引擎在 Neptune 引擎版本 1.0.3.0 的實驗室模式中首次可用,從 Neptune 引擎版本 1.0.5.0 開始,預設會啟用,但僅適用於查詢提示和 for openCypher 支援。

Neptune 引擎 1.1.1.0 版開始,DFE 引擎不再處於實驗室模式,現在使用neptune_dfe_query_engine執行個體的資料庫參數群組中的執行個體參數進行控制。

DFE 引擎會使用 Neptune 圖表中資料的相關資訊,在規劃查詢執行時做出有效的權衡。這項資訊採取統計資料的形式,其中包括所謂的特性集和述詞統計資料,可以引導查詢規劃。

引擎 1.2.1.0 版開始,您可以使用 GetGraphSummary API或summary端點從這些統計資料中擷取圖表的摘要資訊

只要圖形中超過 10% 的資料變更,或最新統計資料超過 10 天,這些 DFE 統計資料目前就會重新產生。不過,這些觸發條件日後可能會變更。

注意

統計資料產生會在 T3T4g 執行個體上停用,因為它可能超過這些執行個體類型的記憶體容量。

您可以透過下列其中一個端點來管理 DFE 統計資料的產生:

  • https://your-neptune-host:port/rdf/statistics (適用於 SPARQL)。

  • https://your-neptune-host:port/propertygraph/statistics(適用於 Gremlin 和 openCypher) 及其替代版本:https://your-neptune-host:port/pg/statistics

注意

引擎 1.1.1.0 版開始,Gramlin 統計資料端點 (https://your-neptune-host:port/gremlin/statistics) 已被棄用以支持 propertygraphpg 端點。基於回溯相容性仍支援它,但可能會在未來的版本中將其移除。

截至引擎 1.2.1.0 版,SPARQL 統計資料端點 (https://your-neptune-host:port/sparql/statistics) 已棄用,以有利於rdf端點。基於回溯相容性仍支援它,但可能會在未來的版本中將其移除。

在下列範例中, $STATISTICS_ENDPOINT 代表任何這些端點 URLs。

注意

如果 DFE 統計資料端點位於讀取器執行個體上,則其可處理的唯一請求是狀態請求。其他請求將由於 ReadOnlyViolationException 而失敗。

產生 DFE 統計資料的大小限制

目前,如果達到以下任一大小限制,DFE 統計資料產生會停止:

  • 所產生的特性集數目不得超過 50,000 個。

  • 所產生的述詞統計資料數目不得超過一百萬個。

這些限制可能會變更。

DFE 統計資料的目前狀態

您可以使用下列curl請求檢查 DFE 統計資料的目前狀態:

curl -G "$STATISTICS_ENDPOINT"

對狀態請求的回應包含下列欄位:

  • status– 請求的 HTTP 傳回碼。如果請求成功,則傳回碼為 200。如需常見錯誤的清單,請參閱 常見錯誤

  • payload:

    • autoCompute – (布林值) 指示是否啟用自動產生統計資料。

    • active– (布林值) 指出是否完全啟用 DFE 統計資料產生。

    • statisticsId – 報告目前統計資料產生執行的 ID。值 -1 指示尚未產生任何統計資料。

    • date– 最近產生 DFE 統計資料的 Word UTC時間,格式為 ISO 8601。

      注意

      引擎 1.2.1.0 版之前,這是以分鐘精確度表示,但從引擎 1.2.1.0 版開始,它是以毫秒精確度表示 (例如,2023-01-24T00:47:43.319Z)。

    • note – 關於統計資料無效情況下問題的說明。

    • signatureInfo – 包含統計資料中所產生之特性集的相關資訊 (在引擎 1.2.1.0 版之前,此欄位已命名為 summary)。這些通常不能直接採取行動:

      • signatureCount – 所有特性集的簽章總數。

      • instanceCount – 特性集執行個體的總數。

      • predicateCount – 唯一述詞的總數。

未產生統計資料時,對狀態請求的回應如下所示:

{ "status" : "200 OK", "payload" : { "autoCompute" : true, "active" : false, "statisticsId" : -1 } }

如果有可用的 DFE 統計資料,回應如下所示:

{ "status" : "200 OK", "payload" : { "autoCompute" : true, "active" : true, "statisticsId" : 1588893232718, "date" : "2020-05-07T23:13Z", "summary" : { "signatureCount" : 5, "instanceCount" : 1000, "predicateCount" : 20 } } }

如果產生 DFE 統計資料失敗,例如因為它超過統計資料大小限制,回應如下所示:

{ "status" : "200 OK", "payload" : { "autoCompute" : true, "active" : false, "statisticsId" : 1588713528304, "date" : "2020-05-05T21:18Z", "note" : "Limit reached: Statistics are not available" } }

停用自動產生 DFE 統計資料

根據預設,當您啟用 DFE 時,會啟用自動產生 DFE 統計資料。

您可以停用自動產生,如下所示:

curl -X POST "$STATISTICS_ENDPOINT" -d '{ "mode" : "disableAutoCompute" }'

如果請求成功,則 HTTP 回應碼為 200,回應為:

{ "status" : "200 OK" }

您可以發出狀態請求並檢查回應中的 autoCompute 欄位是否設定為 false,以確認已停用自動產生。

停用自動產生統計資料並不會終止進行中的統計資料計算。

如果您請求停用對讀取器執行個體的自動產生,而不是資料庫叢集的寫入器執行個體,則請求會失敗,並傳回 HTTP 碼為 400,輸出如下所示:

{ "detailedMessage" : "Writes are not permitted on a read replica instance", "code" : "ReadOnlyViolationException", "requestId":"8eb8d3e5-0996-4a1b-616a-74e0ec32d5f7" }

如需其他常見錯誤的清單,請參閱 常見錯誤

重新啟用自動產生 DFE 統計資料

根據預設,當您啟用 DFE 時,已啟用自動產生 DFE 統計資料。如果您停用自動產生,您可以稍後重新啟用它,如下所示:

curl -X POST "$STATISTICS_ENDPOINT" -d '{ "mode" : "enableAutoCompute" }'

如果請求成功,則 HTTP 回應碼為 200,回應為:

{ "status" : "200 OK" }

您可以發出狀態請求並檢查回應中的 autoCompute 欄位是否設定為 true,以確認已啟用自動產生。

手動觸發產生 DFE 統計資料

您可以手動啟動 DFE 統計資料產生,如下所示:

curl -X POST "$STATISTICS_ENDPOINT" -d '{ "mode" : "refresh" }'

如果請求成功,輸出如下所示,HTTP 傳回碼為 200:

{ "status" : "200 OK", "payload" : { "statisticsId" : 1588893232718 } }

輸出中的 statisticsId 是目前正在發生之統計資料產生執行的識別符。如果執行已在請求時已處理中,則請求會傳回該執行的 ID,而不是啟動新的 ID。一次僅能發生一個統計資料產生執行。

如果在產生 DFE 統計資料時發生容錯移轉,新的寫入器節點將取得最後一個處理的檢查點,並繼續從該處執行統計資料。

使用 StatsNumStatementsScanned CloudWatch 指標監控統計資料運算

StatsNumStatementsScanned CloudWatch 指標會傳回自伺服器啟動以來針對統計資料運算掃描的陳述式總數。它是在每個統計資料計算部分處更新。

每次觸發統計資料計算時,這個數字都會增加,並且當沒有計算發生時,它會保持不變。因此,查看隨時間變化的 StatsNumStatementsScanned 值圖,可以很清楚地了解統計資料計算何時發生以及有多快:

Word StatsNumStatementsScanned 指標值的圖形

進行計算時,圖形的斜坡會向您顯示有多快 (斜坡越陡,統計資料的計算速度越快)。

如果圖形只是一條位於 0 的平直線,表示已啟用統計資料功能,但根本沒有計算任何統計資料。如果已停用統計資料功能,或者如果您使用的引擎版本不支援統計資料計算,則 StatsNumStatementsScanned 不存在。

如前所述,您可以使用統計資料 API 停用統計資料計算,但將其關閉可能會導致統計資料無法更新,進而導致 DFE 引擎產生查詢計畫不佳。

如需如何使用 CloudWatch 的資訊使用 Amazon CloudWatch 監控 Neptune,請參閱 。

使用 AWS Identity and Access Management (IAM) 身分驗證與 DFE 統計資料端點

您可以使用 awscurl 或任何其他可與 DFE 和 IAM 搭配使用的工具,透過 HTTPS 驗證安全地存取 IAM 統計資料端點。請參閱 使用 awscurl搭配臨時登入資料,在啟用 IAM 身分驗證的情況下安全地連線至資料庫叢集 以了解如何設定適當的憑證。一旦完成了該操作,您就可以提出如下的狀態請求:

awscurl "$STATISTICS_ENDPOINT" \ --region (your region) \ --service neptune-db

例如,您可以建立名為 的 JSON 檔案request.json,其中包含:

{ "mode" : "refresh" }

您可以接著手動啟動統計資料產生,如下所示:

awscurl "$STATISTICS_ENDPOINT" \ --region (your region) \ --service neptune-db \ -X POST -d @request.json

刪除 DFE 統計資料

您可以向統計資料端點提出 HTTP DELETE請求,以刪除資料庫中的所有統計資料:

curl -X "DELETE" "$STATISTICS_ENDPOINT"

有效的單HTTP傳回碼為:

  • 200 – 刪除成功。

    在此情況下,典型的回應如下所示:

    { "status" : "200 OK", "payload" : { "active" : false, "statisticsId" : -1 } }
  • 204 – 沒有任何要刪除的統計資料。

    在此情況下,回應是空白的 (沒有回應)。

如果將刪除請求傳送至讀取器節點上的統計資料端點,則會擲回 ReadOnlyViolationException

DFE 統計資料請求的常見錯誤代碼

以下是當您對統計資料端點提出請求時可能發生的常見錯誤清單:

  • AccessDeniedException傳回碼:400訊息:Missing Authentication Token

  • BadRequestException (適用於 Gremlin 和 openCypher) – 傳回代碼:400訊息:Bad route: /pg/statistics

  • BadRequestException (適用於 RDF 資料) – 傳回代碼:400訊息:Bad route: /rdf/statistics

  • InvalidParameterException傳回碼:400訊息:Statistics command parameter 'mode' has unsupported value 'the invalid value'

  • MissingParameterException傳回碼:400訊息:Content-type header not specified.

  • ReadOnlyViolationException傳回碼:400訊息:Writes are not permitted on a read replica instance

例如,如果您在未啟用 DFE 和統計資料時提出請求,您會得到如下所示的回應:

{ "code" : "BadRequestException", "requestId" : "b2b8f8ee-18f1-e164-49ea-836381a3e174", "detailedMessage" : "Bad route: /sparql/statistics" }