低速の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行)