AWS CLI Performance Insights 的範例 - Amazon Aurora

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

AWS CLI Performance Insights 的範例

在下列各節中,進一步了解 Performance Insights 的 AWS Command Line Interface (AWS CLI),並使用 AWS CLI 範例。

for Performance Insights AWS CLI 的內建說明

您可以使用 AWS CLI檢視績效詳情資料。您可以在 AWS CLI 命令列中輸入以下內容,以檢視 Performance Insights 命令的說明。

aws pi help

如果您尚未 AWS CLI 安裝 ,請參閱AWS CLI 《 使用者指南》中的安裝 AWS CLI,以取得安裝相關資訊。

擷取計數器指標

下列螢幕擷取畫面顯示 AWS Management Console中的兩個計數器指標圖表。

計數器指標圖表。

下列範例示範如何收集 AWS Management Console 用來產生兩個計數器指標圖表的相同資料。

用於 Linux, macOS、 或 Unix:

aws pi get-resource-metrics \ --service-type RDS \ --identifier db-ID \ --start-time 2018-10-30T00:00:00Z \ --end-time 2018-10-30T01:00:00Z \ --period-in-seconds 60 \ --metric-queries '[{"Metric": "os.cpuUtilization.user.avg" }, {"Metric": "os.cpuUtilization.idle.avg"}]'

用於 Windows:

aws pi get-resource-metrics ^ --service-type RDS ^ --identifier db-ID ^ --start-time 2018-10-30T00:00:00Z ^ --end-time 2018-10-30T01:00:00Z ^ --period-in-seconds 60 ^ --metric-queries '[{"Metric": "os.cpuUtilization.user.avg" }, {"Metric": "os.cpuUtilization.idle.avg"}]'

您也可以透過指定 --metrics-query 選項的檔案來提高命令的可讀性。以下範例會將名為 query.json 的檔案用於此選項。此檔案的內容如下。

[ { "Metric": "os.cpuUtilization.user.avg" }, { "Metric": "os.cpuUtilization.idle.avg" } ]

執行下列命令來使用檔案。

用於 Linux, macOS、 或 Unix:

aws pi get-resource-metrics \ --service-type RDS \ --identifier db-ID \ --start-time 2018-10-30T00:00:00Z \ --end-time 2018-10-30T01:00:00Z \ --period-in-seconds 60 \ --metric-queries file://query.json

用於 Windows:

aws pi get-resource-metrics ^ --service-type RDS ^ --identifier db-ID ^ --start-time 2018-10-30T00:00:00Z ^ --end-time 2018-10-30T01:00:00Z ^ --period-in-seconds 60 ^ --metric-queries file://query.json

先前的範例會為選項指定下列值:

  • --service-typeRDS 適用於 Amazon RDS

  • --identifier– 資料執行個體的資源 ID

  • --start-time--end-time – ISO 要查詢的期間 8601 DateTime值,具有多種支援的格式

它會查詢一小時的時間範圍:

  • --period-in-seconds60 適用於每分鐘的查詢

  • --metric-queries– 兩個查詢的陣列,一個指標剛好一個查詢。

    此指標名稱會使用點將指標分類在實用的類別,其中最後一個元素則做為函數。在此範例中,此函數是每個查詢的 avg。與 Amazon 一樣 CloudWatch,支援的函數為 mintotalmaxavg

回應看起來類似以下的內容。

{ "Identifier": "db-XXX", "AlignedStartTime": 1540857600.0, "AlignedEndTime": 1540861200.0, "MetricList": [ { //A list of key/datapoints "Key": { "Metric": "os.cpuUtilization.user.avg" //Metric1 }, "DataPoints": [ //Each list of datapoints has the same timestamps and same number of items { "Timestamp": 1540857660.0, //Minute1 "Value": 4.0 }, { "Timestamp": 1540857720.0, //Minute2 "Value": 4.0 }, { "Timestamp": 1540857780.0, //Minute 3 "Value": 10.0 } //... 60 datapoints for the os.cpuUtilization.user.avg metric ] }, { "Key": { "Metric": "os.cpuUtilization.idle.avg" //Metric2 }, "DataPoints": [ { "Timestamp": 1540857660.0, //Minute1 "Value": 12.0 }, { "Timestamp": 1540857720.0, //Minute2 "Value": 13.5 }, //... 60 datapoints for the os.cpuUtilization.idle.avg metric ] } ] //end of MetricList } //end of response

回應具有 IdentifierAlignedStartTimeAlignedEndTime--period-in-seconds 值為 60,開始和結束時間皆一致使用分鐘。如果 --period-in-seconds3600,開始和結束時間則會一致使用小時。

回應中的 MetricList 擁有許多項目,每個都包含 KeyDataPoints 項目。每個 DataPoint 都有 TimestampValue。每個 Datapoints 清單有 60 個資料點,因為查詢是適用於一小時中的每分鐘資料,內含 Timestamp1/Minute1Timestamp2/Minute2 等,最多可達 Timestamp60/Minute60

因為此查詢是適用於兩個不同的計數器指標,回應 MetricList 中會有兩個元素。

擷取最久等待事件的資料庫負載平均值

下列範例與 AWS Management Console 用來產生堆疊區域線圖的查詢相同。此範例會使用根據前七個最久的等待事件而區分的負載來擷取前一小時的 db.load.avg。此命令與 擷取計數器指標 中的命令相同。然而,查詢 query.json 檔案有以下內容。

[ { "Metric": "db.load.avg", "GroupBy": { "Group": "db.wait_event", "Limit": 7 } } ]

執行下列命令。

用於 Linux, macOS、 或 Unix:

aws pi get-resource-metrics \ --service-type RDS \ --identifier db-ID \ --start-time 2018-10-30T00:00:00Z \ --end-time 2018-10-30T01:00:00Z \ --period-in-seconds 60 \ --metric-queries file://query.json

用於 Windows:

aws pi get-resource-metrics ^ --service-type RDS ^ --identifier db-ID ^ --start-time 2018-10-30T00:00:00Z ^ --end-time 2018-10-30T01:00:00Z ^ --period-in-seconds 60 ^ --metric-queries file://query.json

此範例會指定 db.load.avg 指標與前七個最久等待事件的 GroupBy。如需此範例有效值的詳細資訊,請參閱 效能詳情參考DimensionGroup中的 。 API

回應看起來類似以下的內容。

{ "Identifier": "db-XXX", "AlignedStartTime": 1540857600.0, "AlignedEndTime": 1540861200.0, "MetricList": [ { //A list of key/datapoints "Key": { //A Metric with no dimensions. This is the total db.load.avg "Metric": "db.load.avg" }, "DataPoints": [ //Each list of datapoints has the same timestamps and same number of items { "Timestamp": 1540857660.0, //Minute1 "Value": 0.5166666666666667 }, { "Timestamp": 1540857720.0, //Minute2 "Value": 0.38333333333333336 }, { "Timestamp": 1540857780.0, //Minute 3 "Value": 0.26666666666666666 } //... 60 datapoints for the total db.load.avg key ] }, { "Key": { //Another key. This is db.load.avg broken down by CPU "Metric": "db.load.avg", "Dimensions": { "db.wait_event.name": "CPU", "db.wait_event.type": "CPU" } }, "DataPoints": [ { "Timestamp": 1540857660.0, //Minute1 "Value": 0.35 }, { "Timestamp": 1540857720.0, //Minute2 "Value": 0.15 }, //... 60 datapoints for the CPU key ] }, //... In total we have 8 key/datapoints entries, 1) total, 2-8) Top Wait Events ] //end of MetricList } //end of response

在此回應中,MetricList 中有八個項目。有一個項目適用於總計 db.load.avg,有七個項目,分別適用於根據前七個最久等待事件區份的 db.load.avg。與第一個範例不同,因為其中有分組維度,每個指標分組都必須有一個索引鍵。每個指標不能只有一個索引鍵,如同基本計數器指標使用案例。

擷取頂端的資料庫負載平均值 SQL

下列範例db.wait_events依前 10 個SQL陳述式分組。SQL 陳述式有兩個不同的群組:

  • db.sql – 完整SQL陳述式,例如 select * from customers where customer_id = 123

  • db.sql_tokenized – 字符化SQL陳述式,例如 select * from customers where customer_id = ?

分析資料庫效能時,將僅因其參數而不同的SQL陳述式視為一個邏輯項目非常有用。因此,您可以在查詢時使用 db.sql_tokenized。不過,特別是當您有興趣解釋計劃時,有時使用參數檢查完整SQL陳述式,以及依 進行查詢分組會比較有用db.sql。字符化和完整 之間存在父子關係SQL,多個完整 SQL(子) 分組在相同的字符化 SQL(父) 下。

此範例中的命令與 擷取最久等待事件的資料庫負載平均值 中的命令類似。然而,查詢 query.json 檔案有以下內容。

[ { "Metric": "db.load.avg", "GroupBy": { "Group": "db.sql_tokenized", "Limit": 10 } } ]

以下範例使用 db.sql_tokenized

用於 Linux, macOS、 或 Unix:

aws pi get-resource-metrics \ --service-type RDS \ --identifier db-ID \ --start-time 2018-10-29T00:00:00Z \ --end-time 2018-10-30T00:00:00Z \ --period-in-seconds 3600 \ --metric-queries file://query.json

用於 Windows:

aws pi get-resource-metrics ^ --service-type RDS ^ --identifier db-ID ^ --start-time 2018-10-29T00:00:00Z ^ --end-time 2018-10-30T00:00:00Z ^ --period-in-seconds 3600 ^ --metric-queries file://query.json

此範例會查詢超過 24 小時,其中包含一小時 period-in-seconds。

此範例會指定 db.load.avg 指標與前七個最久等待事件的 GroupBy。如需此範例有效值的詳細資訊,請參閱 效能詳情參考DimensionGroup中的 。 API

回應看起來類似以下的內容。

{ "AlignedStartTime": 1540771200.0, "AlignedEndTime": 1540857600.0, "Identifier": "db-XXX", "MetricList": [ //11 entries in the MetricList { "Key": { //First key is total "Metric": "db.load.avg" } "DataPoints": [ //Each DataPoints list has 24 per-hour Timestamps and a value { "Value": 1.6964980544747081, "Timestamp": 1540774800.0 }, //... 24 datapoints ] }, { "Key": { //Next key is the top tokenized SQL "Dimensions": { "db.sql_tokenized.statement": "INSERT INTO authors (id,name,email) VALUES\n( nextval(?) ,?,?)", "db.sql_tokenized.db_id": "pi-2372568224", "db.sql_tokenized.id": "AKIAIOSFODNN7EXAMPLE" }, "Metric": "db.load.avg" }, "DataPoints": [ //... 24 datapoints ] }, // In total 11 entries, 10 Keys of top tokenized SQL, 1 total key ] //End of MetricList } //End of response

此回應在 中有 11 個項目 MetricList(總共 1 個,10 個字符最高 SQL),每個項目每小時 24 個DataPoints

對於字符化 SQL,每個維度清單中有三個項目:

  • db.sql_tokenized.statement – 字符化SQL陳述式。

  • db.sql_tokenized.db_id – 用於參考 的原生資料庫 IDSQL,或者如果原生資料庫 ID 無法使用,Performance Insights 會為您產生的合成 ID。此範例會傳回 pi-2372568224 合成 ID。

  • db.sql_tokenized.id– 績效詳情中查詢的 ID。

    在 中 AWS Management Console,此 ID 稱為支援 ID。其名稱為這個,因為 ID 是 AWS 支援可以檢查的資料,以協助您對資料庫的問題進行故障診斷。 非常重視資料 AWS 的安全性和隱私權,而且幾乎所有資料都會以您的 AWS KMS 金鑰加密。因此,內部沒有人 AWS 可以查看此資料。在先前的範例中,tokenized.statementtokenized.db_id 都同時會以加密的形式存放。如果您的資料庫有問題, AWS Support 可以透過參考支援 ID 來協助您。

進行查詢時,在 Group 中指定 GroupBy 可能會讓您省下不少心力。然而,如需對已傳回的資料進行更精細的控制,請指定維度的清單。例如,如果所需的是 db.sql_tokenized.statement,則可將 Dimensions 屬性新增至 query.json 檔案。

[ { "Metric": "db.load.avg", "GroupBy": { "Group": "db.sql_tokenized", "Dimensions":["db.sql_tokenized.statement"], "Limit": 10 } } ]

擷取依 篩選的資料庫負載平均值 SQL

依SQL圖表篩選。

先前的影像顯示已選取特定的查詢,最高平均作用中工作階段堆疊區域折線圖的範圍仍涵蓋至該查詢。雖然此查詢仍適用於前七個整體等待事件,系統仍會將回應值篩選出來。此篩選條件會在工作階段符合特定篩選條件時,才進行篩選。

此範例中對應的API查詢類似於 中的 命令擷取頂端的資料庫負載平均值 SQL。然而,查詢 query.json 檔案有以下內容。

[ { "Metric": "db.load.avg", "GroupBy": { "Group": "db.wait_event", "Limit": 5 }, "Filter": { "db.sql_tokenized.id": "AKIAIOSFODNN7EXAMPLE" } } ]

用於 Linux, macOS、 或 Unix:

aws pi get-resource-metrics \ --service-type RDS \ --identifier db-ID \ --start-time 2018-10-30T00:00:00Z \ --end-time 2018-10-30T01:00:00Z \ --period-in-seconds 60 \ --metric-queries file://query.json

用於 Windows:

aws pi get-resource-metrics ^ --service-type RDS ^ --identifier db-ID ^ --start-time 2018-10-30T00:00:00Z ^ --end-time 2018-10-30T01:00:00Z ^ --period-in-seconds 60 ^ --metric-queries file://query.json

回應看起來類似以下的內容。

{ "Identifier": "db-XXX", "AlignedStartTime": 1556215200.0, "MetricList": [ { "Key": { "Metric": "db.load.avg" }, "DataPoints": [ { "Timestamp": 1556218800.0, "Value": 1.4878117913832196 }, { "Timestamp": 1556222400.0, "Value": 1.192823803967328 } ] }, { "Key": { "Metric": "db.load.avg", "Dimensions": { "db.wait_event.type": "io", "db.wait_event.name": "wait/io/aurora_redo_log_flush" } }, "DataPoints": [ { "Timestamp": 1556218800.0, "Value": 1.1360544217687074 }, { "Timestamp": 1556222400.0, "Value": 1.058051341890315 } ] }, { "Key": { "Metric": "db.load.avg", "Dimensions": { "db.wait_event.type": "io", "db.wait_event.name": "wait/io/table/sql/handler" } }, "DataPoints": [ { "Timestamp": 1556218800.0, "Value": 0.16241496598639457 }, { "Timestamp": 1556222400.0, "Value": 0.05163360560093349 } ] }, { "Key": { "Metric": "db.load.avg", "Dimensions": { "db.wait_event.type": "synch", "db.wait_event.name": "wait/synch/mutex/innodb/aurora_lock_thread_slot_futex" } }, "DataPoints": [ { "Timestamp": 1556218800.0, "Value": 0.11479591836734694 }, { "Timestamp": 1556222400.0, "Value": 0.013127187864644107 } ] }, { "Key": { "Metric": "db.load.avg", "Dimensions": { "db.wait_event.type": "CPU", "db.wait_event.name": "CPU" } }, "DataPoints": [ { "Timestamp": 1556218800.0, "Value": 0.05215419501133787 }, { "Timestamp": 1556222400.0, "Value": 0.05805134189031505 } ] }, { "Key": { "Metric": "db.load.avg", "Dimensions": { "db.wait_event.type": "synch", "db.wait_event.name": "wait/synch/mutex/innodb/lock_wait_mutex" } }, "DataPoints": [ { "Timestamp": 1556218800.0, "Value": 0.017573696145124718 }, { "Timestamp": 1556222400.0, "Value": 0.002333722287047841 } ] } ], "AlignedEndTime": 1556222400.0 } //end of response

在此回應中,會根據 query.json 檔案中SQLAKIAIOSFODNN7EXAMPLE指定的字符化貢獻來篩選所有值。金鑰也可能遵循與沒有篩選條件的查詢不同的順序,因為它是影響篩選的前五大等待事件SQL。

擷取SQL陳述式的完整文字

下列範例會擷取資料庫執行個體 SQL陳述式的完整文字db-10BCD2EFGHIJ3KL4M5NO6PQRS5--group 即為 db.sql,而 --group-identifier 即為 db.sql.id。在此範例中, my-sql-id代表叫用 pi get-resource-metrics或 擷取的 SQL IDpi describe-dimension-keys

執行下列命令。

用於 Linux, macOS、 或 Unix:

aws pi get-dimension-key-details \ --service-type RDS \ --identifier db-10BCD2EFGHIJ3KL4M5NO6PQRS5 \ --group db.sql \ --group-identifier my-sql-id \ --requested-dimensions statement

用於 Windows:

aws pi get-dimension-key-details ^ --service-type RDS ^ --identifier db-10BCD2EFGHIJ3KL4M5NO6PQRS5 ^ --group db.sql ^ --group-identifier my-sql-id ^ --requested-dimensions statement

在此範例中,維度詳細資訊可供使用。因此,Performance Insights 會擷取SQL陳述式的完整文字,而不會截斷陳述式。

{ "Dimensions":[ { "Value": "SELECT e.last_name, d.department_name FROM employees e, departments d WHERE e.department_id=d.department_id", "Dimension": "db.sql.statement", "Status": "AVAILABLE" }, ... ] }

建立一段時間區間的績效分析報告

下列範例會以 db-loadtest-0 資料庫的 1682969503 開始時間和 1682979503 結束時間建立績效分析報告。

aws pi create-performance-analysis-report \ --service-type RDS \ --identifier db-loadtest-0 \ --start-time 1682969503 \ --end-time 1682979503 \ --region us-west-2

回應為 report-0234d3ed98e28fb17,是報告的唯一識別碼。

{ "AnalysisReportId": "report-0234d3ed98e28fb17" }

擷取績效分析報告

下列範例擷取 report-0d99cc91c4422ee61 報告的分析報告詳細資訊。

aws pi get-performance-analysis-report \ --service-type RDS \ --identifier db-loadtest-0 \ --analysis-report-id report-0d99cc91c4422ee61 \ --region us-west-2

回應提供報告狀態、ID、時間詳細資訊和洞見。

{ "AnalysisReport": { "Status": "Succeeded", "ServiceType": "RDS", "Identifier": "db-loadtest-0", "StartTime": 1680583486.584, "AnalysisReportId": "report-0d99cc91c4422ee61", "EndTime": 1680587086.584, "CreateTime": 1680587087.139, "Insights": [ ... (Condensed for space) ] } }

列出資料庫執行個體的所有績效分析報告

下列範例會列出 db-loadtest-0 資料庫所有可用的績效分析報告。

aws pi list-performance-analysis-reports \ --service-type RDS \ --identifier db-loadtest-0 \ --region us-west-2

回應將列出所有報告,其中包含報告 ID,狀態和時間區間的詳細資訊。

{ "AnalysisReports": [ { "Status": "Succeeded", "EndTime": 1680587086.584, "CreationTime": 1680587087.139, "StartTime": 1680583486.584, "AnalysisReportId": "report-0d99cc91c4422ee61" }, { "Status": "Succeeded", "EndTime": 1681491137.914, "CreationTime": 1681491145.973, "StartTime": 1681487537.914, "AnalysisReportId": "report-002633115cc002233" }, { "Status": "Succeeded", "EndTime": 1681493499.849, "CreationTime": 1681493507.762, "StartTime": 1681489899.849, "AnalysisReportId": "report-043b1e006b47246f9" }, { "Status": "InProgress", "EndTime": 1682979503.0, "CreationTime": 1682979618.994, "StartTime": 1682969503.0, "AnalysisReportId": "report-01ad15f9b88bcbd56" } ] }

刪除績效分析報告

下列範例會刪除 db-loadtest-0 資料庫的績效分析報告。

aws pi delete-performance-analysis-report \ --service-type RDS \ --identifier db-loadtest-0 \ --analysis-report-id report-0d99cc91c4422ee61 \ --region us-west-2

將標籤新增至績效分析報告

下列範例會將帶有金鑰 name 和值 test-tag 的標籤新增至 report-01ad15f9b88bcbd56 報告。

aws pi tag-resource \ --service-type RDS \ --resource-arn arn:aws:pi:us-west-2:356798100956:perf-reports/RDS/db-loadtest-0/report-01ad15f9b88bcbd56 \ --tags Key=name,Value=test-tag \ --region us-west-2

列出績效分析報告的所有標籤

下列範例會列出 report-01ad15f9b88bcbd56 報告的所有標籤。

aws pi list-tags-for-resource \ --service-type RDS \ --resource-arn arn:aws:pi:us-west-2:356798100956:perf-reports/RDS/db-loadtest-0/report-01ad15f9b88bcbd56 \ --region us-west-2

回應會列出新增至報告的所有標籤值和金鑰:

{ "Tags": [ { "Value": "test-tag", "Key": "name" } ] }

從績效分析報告中刪除標籤

下列範例會從 report-01ad15f9b88bcbd56 報告刪除 name 標籤。

aws pi untag-resource \ --service-type RDS \ --resource-arn arn:aws:pi:us-west-2:356798100956:perf-reports/RDS/db-loadtest-0/report-01ad15f9b88bcbd56 \ --tag-keys name \ --region us-west-2

刪除標籤後,呼叫 list-tags-for-resourceAPI不會列出此標籤。