В Postgres, что на самом деле означает pg_stat_database.xact_commit? - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь понять SELECT xact_commit FROM pg_stat_database; Согласно документации, это "Количество транзакций в этой базе данных, которые были совершены". Но я включил ведение журнала всех запросов (log_min_duration = 0), и, кажется, есть и другие вещи, которые могут повлиять на xact_commit, чем просто запрос. Например, подключение клиента psql или ввод BEGIN; увеличит его на различные значения. В моем приложении есть шаг, который выполняет один запрос (что подтверждается журналом), но последовательно увеличивает счетчик на 15-20. Кто-нибудь знает что-то более конкретное о том, что учитывается в xact_commit, или есть ли способ подсчета только реальных запросов?

1 Ответ

0 голосов
/ 05 сентября 2018

pg_stat_database.xact_commit на самом деле - это число коммитов в базе данных (помните, что каждый оператор, который не выполняется в блоке транзакции, фактически выполняется в своей собственной маленькой транзакции, поэтому он вызовет фиксацию).

Тайна, которая остается разгаданной, заключается в том, что вы видите больше коммитов, чем операторов, что кажется совершенно невозможным (например, BEGIN запускает транзакцию, поэтому по определению она не может увеличиваться xact_commit) .

Решение, вероятно, состоит в том, что статистика активности базы данных собирается асинхронно: она отправляется в процесс сборщика статистики через сокет UDP, и сборщик статистики в конечном итоге обновляет статистику.

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

Попробуйте какое-то время оставить базу данных бездействующей, а затем повторите попытку, тогда вы увидите более медленное увеличение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...