PostgreSQL pg_stat_statementsで統計情報を見てみよう

 2018.03.05  株式会社システムインテグレータ

今回はPostgreSQLについて書いていきたいと思います。PostgreSQLにてSQL実行時の統計情報を見る手段としてpg_stat_statementsがあります。この機能により、実行時間や回数、影響を受けたレコード数などを調べることが出来ます。

SI Object Browserでは「SQLキャッチ」「テーブルアクセス」画面にてこのpg_stat_statementsを利用し、統計情報を提供しています。
(テーブルアクセスに関してはOracle版とほぼ同じなので、今回は触れません)

1.png


しかし、この機能はPostgreSQLをインストールしただけでは使用することが出来ません。
別途、機能を有効化させる必要があります。
(有効化前ですと、下記のように警告ダイアログが表示されます。)

2.png

-インストール直後にSQLキャッチを開こうとしたとき-

pg_stat_statementsを有効にする

pg_stat_statementsモジュールの設定手順

1.設定ファイル postgresql.conf を編集します。

 shared_preload_libraries = 'pg_stat_statements'

 custom_variable_classes = 'pg_stat_statements' #(9.2以上の場合、この行は不要です)

 pg_stat_statements.max = 1000   # 収集する SQL の最大数

データベース開発に関するお役立ち資料

 pg_stat_statements.track = top    # topはクライアントから直接実行された SQL のみ

 pg_stat_statements.save = on     # onはデータベースサーバの停止時に保存

2.データベースサーバを再起動します。
shared_preload_librariesの変更は再起動が必要になります。)

3.pg_stat_statements モジュールの関数とビューを作成します。
使用しているデータベースのpublicスキーマにて以下のSQLを発行します。
create extension pg_stat_statements;
 [RELATED_POSTS]

SQLキャッチを見てみる

有効にしたので早速、「SQLキャッチ」機能を見てみましょう。

3.png

SQLキャッチ-

この状態で目視にて目的のSQLを探すのは厳しいので上部にある検索欄を有効に使いましょう。

4.png

-検索した状態-

また、処理時間で降順にソートすることで、単純に遅いSQLを探すことも出来ます。

5.png

-処理時間でソートした状態-

また、上部に[クリア]ボタンがありますが、このクリアはサーバーのpg_stat_statementsテーブルのクリアなので、同じ調査を複数人で行っている場合は声を掛け合って使用してください。

6.png

[クリア]ボタンについて-


使い終わったら

使用し終わったら、pg_stat_statements機能を無効にします。

pg_stat_statementsを使用しているとパフォーマンスが低下するため、特に本番環境やパフォーマンステストを行う際は無効にすることを推奨します。設定方法は設定ファイル(postgresql.conf)にて以下のパラメータをセットしなおす事で機能を無効にすることができます。 

#pg_stat_statements.track = top    # topはクライアントから直接実行された SQL のみpg_stat_statements.track = none    # noneで機能を無効にする

設定ファイル編集後、再起動でもいいですが、ON/OFF切り替えるたびに環境を止めては迷惑になりますので、SQL実行にてサーバプロセスに構成ファイルの再読み込みをさせるクエリを実行し、無効を反映させます。

「SELECT pg_reload_conf()」

いかがでしたか。PostgreSQLでパフォーマンス問題が発生し、遅いSQLを探す際には是非ご利用ください。

いまさら聞けない Oracleの基本

RECENT POST「OBをトコトン極める」の最新記事


この記事が気に入ったらいいねしよう!