PostgreSQLをスロークエリのログを取得できるように設定する

PostgreSQLをスロークエリのログを取得できるように設定する

PostgreSQLで、スロークエリのログを時間を設定して、取得できるようにする手順を記述してます。

環境

  • OS CentOS 7.9.2009 (Core)
  • PostgreSQL 13.1

スロークエリ設定

「postgresql.conf」に「log_min_duration_statement」に、まずlogとして吐き出したいクエリ時間を設定します。

ここでは「0.5」秒に設定してます。

log_min_duration_statement = 500

次に「log」を吐き出す設定になっていなければ、以下を「on」に変更しておきます。

logging_collector = on

logの形式は、下記で変更可能です。

log_line_prefix = '%m [%p] '		# special values:
					#   %a = application name
					#   %u = user name
					#   %d = database name
					#   %r = remote host and port
					#   %h = remote host
					#   %b = backend type
					#   %p = process ID
					#   %t = timestamp without milliseconds
					#   %m = timestamp with milliseconds
					#   %n = timestamp with milliseconds (as a Unix epoch)
					#   %i = command tag
					#   %e = SQL state
					#   %c = session ID
					#   %l = session line number
					#   %s = session start timestamp
					#   %v = virtual transaction ID
					#   %x = transaction ID (0 if none)
					#   %q = stop here in non-session
					#        processes
					#   %% = '%'
					# e.g. '<%u%%%d> '

再起動します。

sudo systemctl restart postgresql-13

log確認

「log」配下にあるlogデータに設定した値を超えるクエリのみがlogに書き出されていることが確認できます。

2021-xx-xx 11:11:04.370 JST [11786] LOG:  期間: 1716.706 ミリ秒  文: SELECT * FROM public.ptests