PolarDB-Xは、SQL監査および分析機能をサポートしています。 PolarDB-Xデータベースのログエントリが収集され、処理と分析のためにLog Serviceに送信されます。 このトピックでは、ログ分析の結果のクエリに使用される条件について説明し、条件の使用方法を示す例を示します。
前提条件
PolarDB-XインスタンスのSQL監査および分析機能が有効になっています。 詳細については、「SQL監査と分析の有効化」をご参照ください。
注意事項
同じリージョンにデプロイされているPolarDB-Xデータベースの監査ログは、Log Serviceの同じログストアに保存されます。 既定では、
__topic__フィールドは、SQL監査および分析ページの検索ボックスの条件として使用されます。 この条件に基づいてログエントリとログ分析の結果をクエリすると、返されるすべてのログエントリは、同じリージョンにデプロイされているPolarDB-Xデータベースに基づいて収集されます。 このトピックで説明する条件を__topic__フィールドの後に指定して、より詳細なクエリを実行できます。[生ログ] タブで、フィールドの値をクリックして、フィールドを条件として指定できます。
たとえば、
sql_typeフィールドの[Delete]値をクリックして、すべてのDELETEステートメントを照会する条件を指定できます。
指定されたSQL文の照会
SQL文を照会するには、次の種類の条件を指定できます。
条件としてキーワードを使用する
たとえば、次の条件を指定して、
200003キーワードを含むSQL文を照会できます。とsql: 200003組み込みフィールドを条件として使用する
組み込みのインデックスフィールドを指定して、指定したフィールドを含むSQL文を照会できます。 たとえば、次の条件を指定して、すべてのDROPステートメントを照会できます。
とsql_type: ドロップ複数の条件を使用する
複数の条件を指定し、条件間の関係を
andまたはorとして指定できます。 たとえば、次の条件を指定して、200003行で実行されたDELETEステートメントを照会できます。とsql: 200003とsql_type: 削除数値比較式を条件として使用する
この例では、
affect_rowsフィールドとresponse_timeフィールドの値は数値であり、比較演算子をサポートしています。 たとえば、次の条件を追加して、response_timeパラメーターの値が5より大きいDROPステートメントを照会できます。 単位は秒です。とresponse_time > 5とsql_type: ドロップ次の条件を指定して、100行を超えるデータを削除するために実行されたSQL文を照会することもできます。
とaffect_rows > 100とsql_type: 削除
SQL実行分析
次の文を実行して、SQL文の実行状態を照会できます。
失敗したSQLクエリの比率の照会
次のステートメントを実行して、失敗したSQLクエリの比率を照会できます。
| SELECT sum(case when fail = 1 then 1 else 0 end) * 1.0 / count(1) as fail_ratio説明ページの右上隅にある [アラートとして保存] をクリックし、ビジネス要件に基づいてアラートルールを作成します。
指定されたSQL文が実行された行の総数を照会する
次のステートメントを実行して、SELECTステートメントが実行された行の総数を照会できます。
とsql_type: 選択 | Select sum(affect_rows)さまざまな種類のSQLクエリの分布を照会する
次のステートメントを実行して、さまざまな種類のSQLクエリの分布を照会できます。
| SELECT sql_type, count(sql) as times GROUP BY sql_typeユーザーが使用したIPアドレスの分布を照会する
次のステートメントを実行して、ユーザーがリクエストを送信するために使用したIPアドレスの配布を照会できます。
| SELECT user, client_ip, count(sql) as times GROUP BY user, client_ip
パフォーマンス分析
次のステートメントを実行して、SQLパフォーマンス分析の結果を照会できます。
SELECTステートメントの平均実行時間の照会
次のステートメントを実行して、システムがSELECTステートメントを実行するのにかかった平均時間を照会できます。
とsql_type: | Select avg(response_time)実行期間ごとのSQL文の分布の照会
次の条件を指定して、実行期間ごとにSQL文の分布を照会できます。
response_time > 0 | response_time <=10の場合、response_time > 10およびresponse_time <=10の場合、response_time <= 100の場合、response_time > 100の場合、response_time <= 1000の場合、response_time > 1000の場合、response_lat_time <=1s'1s'1s'1s'1s'1s''1s'10s' 、resminminmininel''''''' count(1) by cnt group by latency_type order by latency_type DESC説明上記の条件では、
response_timeフィールドを使用して4つの時間範囲を指定します。 時間範囲は、10ミリ秒以下、10ミリ秒以上100ミリ秒以下、100ミリ秒以上1秒以下、1秒以上10秒以下である。response_timeフィールドの値を指定して、より詳細な結果を得ることができます。上位50の低速SQL文を照会する
次のステートメントを実行して、上位50個の低速SQLステートメントを照会できます。
| SELECT date_format(from_unixtime(__time__), '% m/% d % H:% i:% s') as time, user, client_ip, client_port, sql_type, affect_rows, response_time, sql ORDER BY response_time desc LIMIT 50最大量のリソースを消費した上位10個のSQLテンプレートの照会
ほとんどのアプリケーションでは、SQL文はテンプレートに基づいて動的に生成されます。 パラメータの値は、SQL文によって異なります。 次のステートメントを実行して、最大量のリソースを消費した上位10個のSQLテンプレートを照会できます。
| SELECT sql_codeを "Template ID" 、round(total_time * 1.0 /sum(total_time) over() * 100, 2) を "Execution duration ratio (%)" 、execute_timesを "Number of queries" 、round(avg_time) を "Average execution duration" 、round(avg_rows) を "CASE WHEN長 (sql) > 200 THEN concat(substr(sql, 1, 200), '......') ELSE trim(lpad(sql, 200, '')) end as" Sample SQL "FROM (SELECT sql_code、count(1) as execute_times、sum(response_time) 、total_time、avg (_avgrows) as_avgrows) arbitrary(sql) as sql FROM log GROUP BY sql_code) ORDER BY" Execution duration ratio (%) "desc limit 10結果情報には、各SQLテンプレートのID、すべてのSQL文の実行時間に対する各テンプレートに基づいて生成されたSQL文の実行時間の割合、各テンプレートに基づいて生成されたSQL文の数、各テンプレートに基づいて生成されたSQL文の平均実行時間、各テンプレートに基づいて生成されたSQL文が実行された行の平均数、および各テンプレートのサンプルSQL文。
説明この例では、SQLテンプレートは実行期間の比率でソートされています。 ビジネス要件に基づいて、平均実行期間またはSQL文の数でSQLテンプレートを並べ替えることができます。
トランザクションの平均実行期間を照会する
同じトランザクションで実行されるSQL文に関するログエントリでは、
trace_idパラメーターの値に同じプレフィックスが含まれます。 接尾辞は、「 − 」 + シリアル番号形式である。 トランザクションで実行されないSQL文の場合、trace_idパラメーターの値には'-'は含まれません。 次のステートメントを実行して、トランザクション処理のSQLクエリのパフォーマンスを照会できます。説明トランザクション分析は、システムがSQL文のプレフィックスをチェックするため、他のクエリ操作よりも効率が低くなります。
トランザクションの平均実行期間を照会する
次のステートメントを実行して、システムがトランザクションを実行するのにかかった平均時間を照会できます。
| SELECT sum(response_time) / COUNT(DISTINCT substr(trace_id, 1, strpos(trace_id, '-') - 1)) ここで、strpos(trace_id, '-') > 0上位10件の低速トランザクションの照会
次のステートメントを実行して、実行期間に基づいて低速トランザクションを照会できます。
| SELECT substr(trace_id, 1, strpos(trace_id, '-') - 1) as "Transaction ID" 、sum(response_time) as "Execution duration" ここで、strpos(trace_id, '-') > 0 GROUP BY substrus (trace_id, 1, strpos(trace_id, '-') - 1) - 1) ORDER "Execution duration" DESC 10次に、次のステートメントを実行して、トランザクションIDに基づいて低速トランザクションで実行されたSQLステートメントを照会できます。 これは、遅いトランザクションの原因を分析するのに役立ちます。
とtrace_id: db3226a20402000 *最大行数で実行された上位10件のトランザクションを照会します。
次のステートメントを実行して、最大数の行で実行された上位10個のトランザクションを照会できます。
| SELECT substr(trace_id, 1, strpos(trace_id, '-') - 1) as "Transaction ID" 、sum(affect_rows) as "Operated rows" ここで、strpos(trace_id, '-') > 0 GROUP BY substr(trace_id, 1, strpos (e_tracid, '-') - 1) ORDER BY "Operated rows" DESC "Operated" DESC10
SQLセキュリティ分析
次の条件を指定して、セキュリティ分析の結果を照会できます。
失敗したSQLクエリの分布を型別に照会する
次の条件を指定して、失敗したSQLクエリの分布をタイプ別に照会できます。
およびfail > 0 | select sql_type, count(1) as "number of failures" group by sql_type高リスクSQL文の照会
DROPおよびTRUNCATEステートメントは、PolarDB-Xの高リスクSQLステートメントです。 ビジネス要件に基づいてリスクの高いSQL文を識別するために使用するルールを指定できます。
次の条件を指定して、DROPまたはTRUNCATEステートメントを照会できます。
とsql_type: ドロップまたはsql_type: 切り捨て多数の行からデータを削除するために使用されるDELETEステートメントのクエリ
次の条件を指定して、100を超える行からデータを削除するために使用されるSQL文を照会できます。
とaffect_rows > 100とsql_type: 削除 | SELECT date_format(from_unixtime(__time__), '% m/% d % H:% i:% s') as time, user, client_ip, client_port, affect_rows, sql ORDER BY affect_desc rows LIMIT 50