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

PolarDB:SQLパフォーマンス分析

最終更新日:Jun 05, 2024

低速のSQLクエリが発生する場合、またはSQL文が大量のシステムメモリ領域を占有する場合は、実際の状況に基づいてクエリを分析します。

遅いSQL文の確認

実行済みまたは実行中の低速SQL文を確認できます。
  • 実行された低速SQL文を表示します。
    pg_stat_statementsビューを使用して、低速のSQL文を確認します。
    SELECT total_time /がAS avg、クエリを呼び出します
    pg_stat_statementsからORDER BY avg DESC LIMIT 10; 
  • 実行中の低速SQL文を表示します。
    実行時間が1秒より長い各SQL文を確認します。
    select * from pg_stat_activity where state<>'idle' and now()-query_start > interval '1s' order by query_start ;

EXPLAINステートメントを実行してSQL実行計画を照会する

EXPLAINステートメントを実行して、SQL実行計画を照会できます。 これらの実行計画を使用して、SQL文によって消費されたリソースとSQL文の実行時間を分析できます。

EXPLAINステートメントを実行してSQL実行プランを照会するときは、次の構文
を使用します。EXPLAIN [ ANALYZE ] [ VERBOSE] ステートメント

ここで、オプションは次のいずれかになります。

    ANALYZE [ブール値]
    VERBOSE [ブール値]
    コスト [ブール値]
    BUFFERS [ブール]
    FORMAT {テキスト | XML | JSON | YAML } 
次の表に、上記のコードのパラメーターを示します。
パラメーター説明
ANALYZE実行計画を返すために実行するSQL文を指示します。 デフォルト値は FALSE です。 データを変更するSQL文を最適化する場合、SQL文を実行する必要がありますが、既存のデータを変更する必要はありません。 この場合、これらのSQL文をトランザクションに含めて、トランザクションを実行できます。 SQL文が分析されたら、トランザクションをロールバックします。
バーボース実行プランに関する追加情報を表示します。 デフォルト値は FALSE です。 追加情報には、実行プランの各ノードの出力列リスト、テーブルスキーマ、関数スキーマ、式で指定された列が属するテーブルのエイリアス、および呼び出されるトリガーの名前が含まれます。
コスト各プランノードの推定起動コストと総コストを表示します。 推定行数と各行の推定幅も返されます。 推定スタートアップコストは、指定された条件を満たす最初のレコードを見つけるために消費されたコストを意味します。 デフォルト値は、TRUE です。
バッファバッファ使用量に関する情報を表示します。 デフォルト値は FALSE です。 このパラメーターは、ANALYZEパラメーターをTRUEに設定した後にのみ使用できます。 バッファ情報には、共有ブロック、ローカルブロック、テンポラリブロックのうち、ヒットブロック数、更新ブロック数、削除ブロック数が含まれる。 共有ブロックは、通常テーブルおよびインデックスブロックからのデータを含む。 ローカルブロックは、一時テーブルまたはインデックスブロックからのデータを含む。 一時ブロックには、ソートやハッシュなどの操作で使用される短期データが含まれます。
フォーマット出力形式を指定します。 デフォルト値はTEXTです。 指定した形式に関係なく、同じ結果が返されます。 XML、JSON、およびYAML形式は、プログラムがSQL文の実行計画を解析するために他の形式よりも簡単です。

ビューの分析

pg_stat_statementsおよびpolar_stat_sqlビューを確認して、SQL文の実行に必要なリソースを分析します。 各ビューに対応するプラグインを作成し、各プラグインを有効にする必要があります。
拡張の作成pg_stat_statements;
拡張の作成polar_stat_sql;

postgres=# alter system set polar_stat_sql.enable_stat=on;
ALTERシステム
postgres=# alter system set polar_stat_sql.enable_qps_monitor=on;
ALTERシステム
postgres=# select pg_reload_conf();
 pg_reload_conf
----------------
 t
(1行) 
  • pg_stat_statementsビューの詳細については、pg_stat_statements をご参照ください。
  • polar_stat_sqlビューには、SQL文のモニタリング情報が含まれます。

    情報は次の4つの部分で構成されています。

    • 実行計画が実行されるノードに関する統計。 ノードは、スキャン、結合、集約、ソート、およびハッシュが実行されるノードを含む。
    • CPUがシステムモードおよびユーザーモードで実行されている時間、I/O、メモリ、受信および要求されたプロセス間通信 (IPC) メッセージの数、およびSQLレベルでの自発的なCPUコンテキストスイッチおよび非自発的なCPUコンテキストスイッチ。 I/Oは、読み取り /書き込みバイト数によって測定されます。 メモリは、要求されたページの数およびページスワップの数によって測定される。
    • SQL文を実行する各フェーズで消費される時間。 時間には、SQL文の解析、分析、および書き換え、実行計画の生成、およびSQL文の実行の時間が含まれます。
    • ラッチとロックの統計。
    polar_stat_sqlビューは、蓄積されたデータを記録します。 データの正確性を確保するには、SQL文を実行する前に既存のデータをクリアしてください。
    postgres=# select polar_stat_sql_reset();
     polar_stat_sql_reset
    ----------------------
     
    (1行)