すべてのプロダクト
Search
ドキュメントセンター

Database Autonomy Service:SQL Explorer

最終更新日:Nov 13, 2024

Database Autonomy Service (DAS) は、SQL Explorer機能を提供します。 SQL Explorerを使用して、SQL文のヘルスステータスを確認し、パフォーマンスの問題をトラブルシューティングできます。 このトピックでは、SQL Explorerおよび監査モジュールでSQL Explorer機能を使用する方法について説明します。

前提条件

  • 管理するデータベースインスタンスがDASに接続されており、[通常アクセス] 状態になっています。

  • データベースインスタンスに対して、SQL Explorerおよび監査モジュールが有効になっています。 詳細については、「概要」トピックの [SQLエクスプローラーの有効化と監査] セクションを参照してください。

説明

SQL Explorer機能は、実行されたすべてのデータクエリ言語 (DQL) 、DML、およびDDLステートメントに関する情報を記録します。 DASは、少量のCPUリソースしか消費しないデータベースカーネルから情報を取得します。

サポートされているデータベースとリージョン

SQL Explorerおよび監査モジュールは、DAS Enterprise Editionが有効化された後にのみ使用できます。 サポートされるデータベースとリージョンは、DAS Enterprise Editionのバージョンによって異なります。 詳細については、「DASエディションとサポートされている機能」トピックの「サポートされているデータベースとリージョン」をご参照ください。

使用上の注意

  • データベースインスタンスに対してSQL Explorerを有効にすると、SQL Explorerによって生成された分析データと統計データ (SQLの詳細を除く) を30日間保存できます。

  • SQL Explorerによって生成されるSQL詳細の保存期間は、データベースインスタンスに対してDAS Enterprise Editionを有効にしたときに指定された保存期間と同じです。

  • SQL Explorerおよび監査モジュールを無効にしても、ビジネスは影響を受けません。 ただし、SQL ExplorerおよびAuditによって生成されたすべてのデータはクリアされます。 この機能を無効にする前に、データをコンピューターにエクスポートして保存することをお勧めします。 詳細については、「概要」トピックの「SQLエクスプローラーと監査の無効化」セクションをご参照ください。

  • PolarDB-X 1.0にアタッチされているApsaraDB RDS for MySQLインスタンスでSQLステートメントが実行されると、シャーディングによりApsaraDB RDS for MySQLインスタンスに複数のSQLログが生成されます。

  • データベースインスタンスのデータ移行中に一時的な接続が発生する場合があります。 データ移行中、SQL Explorerのデータ損失は正常です。

  • データベースインスタンスの負荷が高い場合、データ損失が発生する可能性があります。 したがって、増分データに関してSQL Explorerによって収集される統計は不正確になる可能性があります。

  • SQLログに記録されるSQL文の長さは最大8,192バイトです。 パラメーターを設定して、ApsaraDB RDS for MySQLインスタンスまたはPolarDB for MySQLクラスターに記録されるSQL文の最大長を指定できます。

    • SQL文の最大長を8,192バイト以下に指定した場合, 指定した長さが上限となり, SQL文の超過部分は記録されません。 プレフィックスは、データの収集および処理中にSQL文に追加されます。 その結果、SQLログ内のSQL文の最大長は、指定された長さよりわずかに短くなります。

    • SQL文の最大長を8,192バイトを超える長さに指定した場合、デフォルトでは上限が8,192バイトになります。 SQL文の実際の長さが上限を超えた場合、超過部分は記録されません。 プレフィックスは、データの収集および処理中にSQL文に追加されます。 その結果、SQLログのSQL文の最大長は8,192バイトよりわずかに短くなります。

    説明
    • MySQL 5.6または5.7を実行するApsaraDB RDS For MySQLインスタンスおよびPolarDB for MySQLクラスターの場合、SQL文の最大長はloose_rds_audit_max_sql_sizeパラメーターで指定されます。

    • MySQL 8.0を実行するApsaraDB RDS For MySQLインスタンスおよびPolarDB for MySQLクラスターの場合、SQL文の最大長はloose_rds_audit_log_event_buffer_sizeパラメーターで指定されます。

  • ApsaraDB RDS for PostgreSQLインスタンスに対してPgBouncerが有効になっている場合、SQL ExplorerはPgBouncerを使用して実行されたSQL文を記録しません。

手順

  1. DASコンソールにログインします。

  2. 左側のナビゲーションウィンドウで、インスタンスモニターをクリックします。

  3. 表示されるページで、管理するデータベースインスタンスを見つけ、インスタンスIDをクリックします。 インスタンス詳細ページが表示されます。

  4. 左側のナビゲーションウィンドウで、リクエスト分析 > SQL Explorer and Audit を選択します。 表示されるページで、SQL Explorer タブをクリックします。

  5. [SQL Explorer] タブで、ビジネス要件に基づいて次の機能を使用します。

    説明

    時間範囲を選択するときは、終了時刻が開始時刻よりも遅く、開始時刻と終了時刻の間隔が24時間を超えないようにしてください。 データをクエリする時間範囲は、DAS Enterprise Editionが有効になっている時間よりも後で、SQL Explorerのデータストレージ期間内に収まる必要があります。

    • 時間範囲の表示: SQL Explorerの結果を照会する実行済みSQL文の時間範囲を選択します。 実行期間の文布実行時間 、および 実行回数 のすべてのSQL文に関する情報を表示できます。 期間内のすべてのSQL文の詳細を表示し、完全なリクエスト統計 セクションで詳細をエクスポートできます。

      説明

      最大1,000のSQLログをエクスポートできます。 より広い時間範囲内でより多くのSQLログを取得する場合は、検索 (監査) 機能を使用できます。

    • 比較リストの表示: SQL Explorerの結果を比較する実行済みSQL文の日付と時刻の範囲を選択します。 実行期間の文布実行時間 、および 実行回数 の比較結果を表示できます。 比較結果の詳細は、比較リストのリクエスト セクションで確認できます。

    • ソース統計: アクセスソースを収集するSQL文の実行時間範囲を選択します。 その後、時間範囲のすべてのリクエストソースを表示できます。

    • SQL レビュー: SQLレビュー機能は、指定された時間範囲およびベースライン時間範囲内のデータベースインスタンスでワークロード分析を実行し、データベースインスタンスで実行されているSQLクエリについて詳細な分析を実行します。 この機能は、インデックス最適化の提案、SQL書き換えの提案、リソースを消費する上位のSQL文、新しいSQL文、失敗したSQL文、SQL機能分析、実行ばらつきの高いSQL文、パフォーマンスの低下したSQL文、およびデータベースインスタンスのトラフィックが最も多いトップテーブルを表示します。 詳細については、「SQLレビュー」をご参照ください。

    • 関連する SQL の特定: 表示するメトリックを選択し、分析 をクリックします。 指定されたメトリックのパフォーマンスに最適なSQL文を特定するには、1〜5分かかります。

    重要
    • 7日以上前にホットストレージとコールドストレージモードを組み合わせて使用するSQL Explorerおよび監査モジュールによって生成されたデータは、コールドストレージモードで保存されます。 7日以上前に生成されたSQLの詳細を分析すると、DASは計算と分析のためのタスクを作成します。 タスクリスト をクリックすると、タスクの進行状況と履歴タスクが表示されます。

    • SQL Explorerおよび監査モジュールによって生成されたデータを7日以上前にクエリすると、従量課金制でクエリの料金が発生します。 詳細については、「課金の詳細」をご参照ください。

説明

  • 実行期間の文布: [実行時間の分布] タブで、指定した時間範囲に基づいてSQLクエリの実行時間の分布を表示できます。 統計データは毎分収集されます。 実行時間の範囲は 7 つに分けられます。

    • [0,1] ms: 実行期間が0 ms〜1 msであることを示します。 このグラフは、実行期間がこの範囲内にあるSQLクエリの割合を示しています。

    • (1,2) ms: 実行時間が1 msより大きく2 ms以下であることを示す。 このグラフは、実行期間がこの範囲内にあるSQLクエリの割合を示しています。

    • (2,3) ms: 実行時間が2 msより大きく3 ms以下であることを示す。 このグラフは、実行期間がこの範囲内にあるSQLクエリの割合を示しています。

    • (3,10) ms: 実行時間が3 msより大きく、10 ms以下であることを示す。 このグラフは、実行期間がこの範囲内にあるSQLクエリの割合を示しています。

    • (10,100) ms: 実行時間が10 msより長く100 ms以下であることを示す。 このグラフは、実行期間がこの範囲内にあるSQLクエリの割合を示しています。

    • (0.1,1]s: 実行時間が0.1秒より長く1秒以下であることを示します。 このグラフは、実行期間がこの範囲内にあるSQLクエリの割合を示しています。

    • > 1s: 実行期間が1sより大きいことを示します。 このグラフは、実行期間がこの範囲内にあるSQLクエリの割合を示しています。

    説明

    実行期間の文布 タブのセクションには、インスタンスでのSQL文の実行時間の経過が表示されます。 グラフの青い部分が大きいほど、SQL文がインスタンスで実行されたときのインスタンスはより健全になります。 グラフのオレンジと赤の領域が大きいほど、インスタンスでSQL文が実行されたときのインスタンスの健全性が低下します。

  • 実行時間: [実行時間] タブで、SQLクエリの実行時間を表示する時間範囲を指定できます。

  • 完全なリクエスト統計: 指定した時間範囲に基づいて、SQL文の詳細を表示できます。 詳細には、各SQL文のSQLテキスト、実行期間の割合、平均実行期間、および実行傾向が含まれます。

    説明

    特定のSQLテンプレートを使用するSQL文の実行時間の割合は、次の式に基づいて計算できます。実行時間の割合=(SQLテンプレートを使用するSQL文の実行時間 × SQL文の実行回数)/(すべてのSQL文の合計実行時間 × 実行回数) × 100% 。 実行期間の割合が高いほど、データベースインスタンスが対応するSQL文の実行に使用するMySQLリソースの数が多いことを示します。

  • SQL ID: SQL IDをクリックすると、対応するSQLテンプレートを使用するSQL文のパフォーマンスの傾向とサンプルデータを表示できます。

  • SQLサンプル: [SQLサンプル] タブで、各サンプルSQLリクエストを開始したクライアントを表示できます。

    説明

    UTF-8文字セットは、SQLサンプルのエンコードに使用されます。

よくある質問

Q: ログアウトは何ですか! [SQLエクスプローラー] タブの [完全なリクエスト統計] セクションのステートメントは、

A: ログアウト! 文は切断を示します。 ログアウト! の実行期間 ステートメントは、最後のインタラクション時間と切断が発生した時間の差です。 時間差の間、接続はアイドルのままである。 [ステータス] 列に表示される1158コードは, 次の原因によるネットワークの切断を示しています。

  • クライアント接続がタイムアウトします。

  • サーバーが切断されました。

  • 接続期間がinteractive_timeoutまたはwait_timeoutパラメーターで指定された値を超えると、サーバーへの接続がリセットされます。

Q: SQL Explorerタブの [ソース統計] タブの [アクセスソース] 列にパーセント記号 (%) が表示されるのはなぜですか。

A: ストアドプロシージャを使用すると、SQL Explorerタブの [ソース統計] タブの [アクセスソース] 列にパーセント記号 (%) が表示される場合があります。 この状況を再現するには、次の操作を実行します。

説明

この例では、データベースインスタンスはApsaraDB RDS for MySQLインスタンス、テストアカウントはtest_user、テストデータベースはtestdbです。

  1. ApsaraDB RDSコンソールで、データベースと標準アカウントを作成し、データベースに対する権限を標準アカウントに付与します。 詳細については、「アカウントとデータベースの作成」をご参照ください。

  2. CLIを使用してデータベースインスタンスに接続するには、test_userアカウントを使用します。 詳細については、「データベースクライアントまたはCLIを使用したApsaraDB RDS For MySQLインスタンスへの接続」をご参照ください。

  3. testdbデータベースに切り替え、次のステートメントを実行してストアドプロシージャを作成します。

    -- Switch to the testdb database.
    USE testdb;
    
    -- Create a stored procedure.
    DELIMITER $$
    DROP PROCEDURE IF EXISTS `das` $$
    CREATE DEFINER=`test_user`@`%` PROCEDURE `das`()
    BEGIN
    SELECT * FROM information_schema.processlist WHERE Id = CONNECTION_ID();
    END $$
    DELIMITER;
  4. 特権アカウントを使用してデータベースインスタンスに接続します。 詳細については、「データベースクライアントまたはCLIを使用したApsaraDB RDS For MySQLインスタンスへの接続」をご参照ください。

  5. 作成したストアドプロシージャを呼び出します。

    -- Switch to the testdb database.
    USE testdb;
    
    -- Call the stored procedure.
    CALL das();
    
    +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+
    | ID     | USER      | HOST   | DB     | COMMAND | TIME | STATE     | INFO                                                                    |
    +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+
    | 487818 | test_user | %:2065 | testdb | Query   |    0 | executing | SELECT * FROM information_schema.processlist WHERE Id = CONNECTION_ID() |
    +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+

Q: ログセクションに表示されるデータベース名がSQL文のデータベース名と一致しないのはなぜですか。

A: [ログ] セクションに表示されるデータベース名はセッションから取得されますが、SQL文のデータベース名はユーザーによって指定され、ユーザーの入力またはクエリ設計 (データベース間クエリや動的SQLなど) によって異なります。 これにより、SQL文と [ログ] セクションに表示されるデータベース名に矛盾が生じます。

関連する API 操作

API 操作

説明

GetErrorRequestSample

データベースインスタンスのSQL Explorerデータ内の失敗したSQLクエリに関する情報を非同期的にクエリします。 特定の時間範囲内で最大20の失敗したSQLクエリをクエリできます。

GetAsyncErrorRequestStatResult

データベースインスタンスのSQL Explorerデータ内のSQLテンプレートの実行失敗数を非同期的に照会します。

GetAsyncErrorRequestListByCode

データベースインスタンスのSQL ExplorerデータでMySQLエラーコードを生成するSQL文のIDを非同期的に照会します。

GetAsyncErrorRequestStatByCode

データベースインスタンスのSQL Explorerデータ内のMySQLエラーコードと、各エラーコードに対応するSQLクエリの数を非同期的に照会します。

GetFullRequestOriginStatByInstanceId

アクセスソース別に、データベースインスタンスのSQL Explorerデータの完全なリクエスト統計を照会します。

GetFullRequestStatResultByInstanceId

SQL IDを使用して、データベースインスタンスのSQL Explorerデータの完全なリクエスト統計を非同期に照会します。

GetFullRequestSampleByInstanceId

データベースインスタンスのSQL Explorerデータ内のサンプルSQL文をSQL IDで照会します。 最大20個のサンプルSQL文を照会できます。

GetDasSQLLogHotData

過去7日間にSQL Explorerおよび監査モジュールがデータベースインスタンスに対して生成したホットストレージデータの詳細を照会します。

ベストプラクティス

スロークエリのトラブルシューティング