PostgreSQLで遅いクエリ(スロークエリ)をログから確認する手順

 

★悩み★
・PostgreSQLで実行したクエリが遅い気がするけど、どう確認するべき?
・PostgreSQLで実行したクエリの処理時間って確認できないのか?
・PostgreSQLで遅いクエリ(スロークエリ)をログから確認する手順は?


こういった「悩み」に答えます。

 

★本記事の内容★
① PostgreSQLで遅いクエリ(スロークエリ)をログから確認するための準備
② PostgreSQLで遅いクエリ(スロークエリ)をログから確認する手順を解説



これからご紹介する「PostgreSQLで遅いクエリ(スロークエリ)をログから確認する手順」を実践したことで、筆者は10分以内でログからクエリの実行時間を取得できました。
 

記事の前半では「PostgreSQLで遅いクエリ(スロークエリ)をログから確認するための準備」を解説します。
記事の後半では「PostgreSQLで遅いクエリ(スロークエリ)をログから確認する手順」を紹介します。
 

この記事を読み終えることで、「PostgreSQLのログから遅いクエリ(スロークエリ)を確認できる」状態になります。
 

ちなみに、「pg_stat_statements」で遅いクエリ(スロークエリ)を確認する手順を知りたい方には、以下の記事がおすすめです。
 


 

 


 

PostgreSQLで遅いクエリ(スロークエリ)をログから確認するための準備


「PostgreSQLで遅いクエリ(スロークエリ)をログから確認するための準備」に関してご紹介します。
 

★PostgreSQLで遅いクエリ(スロークエリ)をログから確認する為の準備★
手順1:PostgreSQLをインストール
手順2:PostgreSQLの動作確認



上記の流れで、「PostgreSQLで遅いクエリ(スロークエリ)をログから確認するための準備」ができます。
 

上記の各手順は、以下の日時と環境で動作確認済みです。
PostgreSQLのバージョン:13
動作確認済み日時:2021年9月14日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)



以降で、上記「PostgreSQLで遅いクエリ(スロークエリ)をログから確認するための準備」の各手順に関してご説明します。
 

手順1:PostgreSQLをインストール

「手順1:PostgreSQLをインストール」に関してご説明します。
 

ログから遅いクエリ(スロークエリ)を確認するためにも、PostgreSQLをインストールしましょう。



「PostgreSQLのインストール手順」に関しては、以下の記事「5ステップでPostgreSQL13をインストールする方法」をご覧ください。
 


 

既にPostgreSQLをインストールされている方は、本手順を省略してください。



以上で、「手順1:PostgreSQLをインストール」は完了です。
 

手順2:PostgreSQLの動作確認

「手順2:PostgreSQLの動作確認」に関してご説明します。
 

PostgreSQLが正常に動作するかを確認しましょう。



「PostgreSQLが起動できるか」を確認し、PostgreSQLが正常に動作することを確認してください。起動手順に関しては、以下の記事をご覧ください。
 



以上で、「手順2:PostgreSQLの動作確認」は完了です。
 

上記の流れで、PostgreSQLで遅いクエリ(スロークエリ)をログから確認するための準備ができました。


 

PostgreSQLで遅いクエリ(スロークエリ)をログから確認する手順


「PostgreSQLで遅いクエリ(スロークエリ)をログから確認する手順」に関してご紹介します。
 

★PostgreSQLで遅いクエリ(スロークエリ)をログから確認する流れ★
手順1:PostgreSQLの設定ファイルを編集
手順2:PostgreSQLの再起動
手順3:PostgreSQLでクエリの実行とログから処理時間を把握



上記の流れで、「PostgreSQLで遅いクエリ(スロークエリ)をログから確認」できます。
 

上記の各手順は、以下の日時と環境で動作確認済みです。
PostgreSQLのバージョン:13
動作確認済み日時:2021年9月14日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)



以降で、上記「PostgreSQLで遅いクエリ(スロークエリ)をログから確認する流れ」の各手順に関してご説明します。
 

手順1:PostgreSQLの設定ファイルを編集

「手順1:PostgreSQLの設定ファイルを編集」に関して解説します。
 

クエリの実行時間をログに出力するために、PostgreSQLの設定ファイルを編集しましょう。



PostgreSQLの設定ファイルの1つである「postgresql.conf」を編集しましょう。
見直すべき設定値は、「log_min_duration_statement」となります。

↓↓ log_min_duration_statement(クエリの実行時間に関する閾値)の設定値を変更(今回は、1を指定) ↓↓
log_min_duration_statement = 1	# -1 is disabled, 0 logs all statements



上記の設定をすることで、「クエリの実行時間が、1ミリ秒以上であった」場合、ログに出力されます。
 

ちなみに、「log_min_duration_statement」の詳細を知りたい方は、以下の公式サイトをご覧ください。
参照:log_min_duration_statementの説明(公式サイト)
 


以上で、「手順1:PostgreSQLの設定ファイルを編集」は完了です。
 

手順2:PostgreSQLの再起動

「手順2:PostgreSQLの再起動」に関して解説します。
 

postgresql.confで書き換えた設定を反映させましょう。



postgresql.confの設定値を反映させるために、以下のコマンドでPostgreSQLを再起動してください。

# systemctl restart postgresql-13.service 



以上で、「手順2:PostgreSQLの再起動」は完了です。
 

手順3:PostgreSQLでクエリの実行とログから処理時間を把握

「手順3:PostgreSQLでクエリの実行とログから処理時間を把握」に関して解説します。
 

PostgreSQLでクエリを実行し、その処理時間を確認してみましょう。



クエリの実行時間を確認するために、以下のPostgreSQL環境でクエリを実行しました。

# su - postgres
-bash-4.2$ psql
psql (13.4)
"help"でヘルプを表示します。

postgres=# \c routefinder
データベース"routefinder"にユーザ"postgres"として接続しました。
routefinder=# \d
                リレーション一覧
 スキーマ |      名前      |  タイプ  |  所有者  
----------+----------------+----------+----------
 public   | album          | テーブル | postgres
 public   | route_data     | テーブル | postgres
(2 行)

routefinder=# select count(*) from route_data;
 count 
-------
 10286
(1 行)

routefinder=# select count(*) from album;
  count   
----------
 17882068
(1 行)



クエリ実行後、PostgreSQLのログを確認してください。

-bash-4.2$ tail 13/data/log/postgresql-Tue.log 
2021-09-14 16:02:56.593 JST [19908] LOG:  期間: 6.566 ミリ秒  文: select count(*) from route_data;
2021-09-14 16:03:03.944 JST [19908] LOG:  期間: 1766.490 ミリ秒  文: select count(*) from album;
-bash-4.2$ 



上記のように、「LOG: 期間 XXミリ秒」を確認することで、実行したクエリにかかった処理時間を把握できます。
上記のログを確認することで、「実行したクエリの中で特に遅いクエリ(スロークエリ)は?」を把握できます。
 

以上で、「手順3:PostgreSQLでクエリの実行とログから処理時間を把握」は完了です。
 

上記の流れで、PostgreSQLで遅いクエリ(スロークエリ)をログから確認することがきました。



ちなみに、「PostgreSQLのアーキテクチャを体系的に学びたい」や「その他のPostgreSQLのコマンドを知りたい」方は、以下の参考書がオススメです。


 

【まとめ】PostgreSQLで遅いクエリ(スロークエリ)をログから確認する手順


今回の記事を通して、「PostgreSQLで遅いクエリ(スロークエリ)をログから確認する手順」をご紹介することで、以下の悩みを解消しました。
 

★悩み★
・PostgreSQLで実行したクエリが遅い気がするけど、どう確認するべき?
・PostgreSQLで実行したクエリの処理時間って確認できないのか?
・PostgreSQLで遅いクエリ(スロークエリ)をログから確認する手順は?



「PostgreSQLで遅いクエリ(スロークエリ)をログから確認する手順?」で悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。