AWS CLI Performance Insights 的範例 - Amazon Relational Database Service

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

AWS CLI Performance Insights 的範例

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

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 用來產生兩個計數器測量結果圖表的相同資料。

對於LinuxmacOS、或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" } ]

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

對於LinuxmacOS、或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-timeand --end-time — 查詢期間的 ISO 8601 DateTime 值,具有多種支援的格式

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

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

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

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

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

{ "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 } } ]

執行下列命令。

對於LinuxmacOS、或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。如需此範例有效值的詳細資訊,請參閱 Perfor mance Insights API 參考DimensionGroup中的。

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

{ "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

對於LinuxmacOS、或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。如需此範例有效值的詳細資訊,請參閱 Perfor mance Insights API 參考DimensionGroup中的。

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

{ "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,或是 Performance Insights 為您產生的綜合 ID (如果原生資料庫 ID 無法使用)。此範例會傳回 pi-2372568224 合成 ID。

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

    在中 AWS Management Console,此識別碼稱為 Support 識別碼。之所以之所以命名,是因為 ID 是 Sup AWS port 人員可以檢查的資料,以協助您疑難排解資料庫問題的資料。 AWS 非常重視數據的安全性和隱私性,幾乎所有數據都使用您的密 AWS KMS 鑰進行加密存儲。因此,裡面沒有人 AWS 可以查看這些數據。在先前的範例中,tokenized.statementtokenized.db_id 都同時會以加密的形式存放。如果您的資料庫有問題,Sup AWS port 部門可以參考支 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" } } ]

對於LinuxmacOS、或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-metricspi describe-dimension-keys擷取的 SQL ID。

執行下列命令。

對於LinuxmacOS、或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不會列出此標籤。