Как включить и проанализировать подробный лог в СУБД PostgreSQL

Обновлено и опубликовано Опубликовано:

Используемые термины: PostgreSQL, Linux.

При возникновении сложных проблем требуется посмотреть на более детальный лог. Он, по умолчанию, не включен, так как создает очень высокую нагрузку на систему и занимает много дискового пространства. Рассмотрим его включение и средства просмотра. Предполагается, что мы работаем в системе Linux и у нас уже установлена и работает СУБД PostgreSQL.

Сборка PostgreSQL

Для включения подробного лога, наша СУБД должна быть собрана с опцией debug. Посмотреть опции сборки установленного PostgreSQL можно с помощью команды pg_config. Так как она может быть установлена вне стандартного каталога для запуска, вводим:

find / -name pg_config -type f

Допустим, команда вернула:

/usr/pgsql-11/bin/pg_config

* далее, наша работа должна учитывать данный путь. Ниже по инструкции вам нужно будет менять мое значение /usr/pgsql-11/bin на свое.

Тогда запустим:

/usr/pgsql-11/bin/pg_config | grep -i debug

Если система ничего не вернула, то нам нужно пересобрать СУБД.

Для начала установим пакеты, которые нам понадобятся для сборки:

yum install centos-release-scl-rh epel-release

yum install wget systemtap-sdt-devel gcc llvm-libs llvm-toolset-7-clang-devel llvm5.0-devel libicu-devel perl-ExtUtils-Embed zlib-devel krb5-devel openssl-devel pam-devel libxml2-devel libxslt-devel openldap-devel libuuid-dev systemd-devel tcl-devel python-devel gcc-c++

Как видим, для сборки PostgreSQL требуется большое число библиотек. Чтобы не засорять систему, рекомендуется сделать сборку (configure, make) на другом компьютере или в контейнере Docker.

Смотрим версию установленного программного продукта:

В моем примере было:

psql (PostgreSQL) 11.14

На странице ftp.postgresql.org/pub/source можно найти все версии для исходников. Мы же поступим, немного, по-другому. Создадим переменную с нашей версией:

PG_VER=’11.14′

И загрузим исходник командой:

wget —no-check-certificate https://ftp.postgresql.org/pub/source/v$PG_VER/postgresql-$PG_VER.tar.gz

* если получим ошибку, вводим команду yum install wget.

Распаковываем скачанный архив:

tar zxf postgresql-*.tar.gz

Перейдем в распакованный каталог:

cd postgresql-*/

Смотрим, с какими опциями собрана наша установленная СУБД:

/usr/pgsql-11/bin/pg_config | grep -i configure

Берем полученные опции и добавляем при конфигурировании еще несколько — —enable-cassert —enable-debug:

./configure —enable-cassert —enable-debug ‘—enable-rpath’ ‘—prefix=/usr/pgsql-11’ ‘—includedir=/usr/pgsql-11/include’ ‘—libdir=/usr/pgsql-11/lib’ ‘—mandir=/usr/pgsql-11/share/man’ ‘—datadir=/usr/pgsql-11/share’ ‘—with-icu’ ‘—with-llvm’ ‘—with-perl’ ‘—with-python’ ‘—with-tcl’ ‘—with-tclconfig=/usr/lib64’ ‘—with-openssl’ ‘—with-pam’ ‘—with-gssapi’ ‘—with-includes=/usr/include’ ‘—with-libraries=/usr/lib64’ ‘—enable-nls’ ‘—enable-dtrace’ ‘—with-uuid=e2fs’ ‘—with-libxml’ ‘—with-libxslt’ ‘—with-ldap’ ‘—with-selinux’ ‘—with-systemd’ ‘—with-system-tzdata=/usr/share/zoneinfo’ ‘—sysconfdir=/etc/sysconfig/pgsql’ ‘—docdir=/usr/pgsql-11/doc’ ‘—htmldir=/usr/pgsql-11/doc/html’ ‘CFLAGS=-O2 -ggdb -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong —param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic’ ‘LLVM_CONFIG=/usr/lib64/llvm5.0/bin/llvm-config’ ‘CLANG=/opt/rh/llvm-toolset-7/root/usr/bin/clang’ ‘PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig’

* желтым отмечено то, что было добавлено в моем случае. Остальное, это то, что выдала команда /usr/pgsql-11/bin/pg_config | grep -i configure.

Собираем пакет:

Выполняем установку:

make install

Еще раз проверяем:

/usr/pgsql-11/bin/pg_config | grep -i debug

Теперь система должна вернуть строку с перечнем опций.

Запуск PostgreSQL в режиме отладки

Переходим в консоль под пользователем postgres:

su — postgres

Смотрим статус работы СУБД:

/usr/pgsql-11/bin/pg_ctl status

* напомним, что путь до файла pg_ctl может быть другим. Это зависит от версии postgres и операционной системы, с которой мы работаем. Как описано в начале инструкции, найти данный файл можно командой find / -name pg_ctl -type f.

Мы увидим что-то на подобие:

/usr/pgsql-11/bin/postgres «-D» «/var/lib/pgsql/11/data/»

Нас интересует значение для опции -D — это путь к рабочему каталогу с данными базы.

Останавливаем СУБД:

/usr/pgsql-11/bin/pg_ctl stop

Теперь снова стартуем PostgreSQL, применяя команду:

/usr/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11/data/ -c start

* мы используем опции -D для указания пути до рабочего каталога и -c для указания на запуск режима отладки.

Готово. Начинаем работать с СУБД. При возникновении сбоев в рабочем каталоге мы увидим лог, в названии которого будет core, например:

ls /var/lib/pgsql/11/data/

core.19438

Имейте в виду, что данный файл очень быстро растет и если на сервере мало дискового пространства, оно быстро закончится.

Просмотреть содержимое лога можно командой:

gdb /usr/pgsql-11/bin/postmaster core.19438

* путь /usr/pgsql-11/bin также зависит от версии PostgreSQL и операционной системы. Он должен совпадать с путем, по которому мы искали pg_ctl.

EnglishRussian