Есть ли способ получить список операторов SQL, которые ранее выполнялись как часть данной транзакции в PostgreSQL? - PullRequest
2 голосов
/ 06 августа 2009

Я нахожусь в ситуации, когда у меня есть много соединений, которые являются "IDLE в транзакции" я заметил их сам. Я мог бы убить их, но это не помешало бы им от повторения На самом деле это происходит регулярно.

Есть ли способ получить список операторов SQL, которые были ранее выполнено как часть данной транзакции?

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

Ответы [ 2 ]

2 голосов
/ 07 августа 2009

В настоящее время в списке рассылки pgsql-hackers выполняется определенная работа по добавлению именно этой возможности под заголовком «Показать предыдущую строку запроса в режиме бездействия». Похоже, что в этом случае pg_stat_activity будет иметь новый столбец с именем что-то вроде «last_query», включающее необходимую информацию.

До тех пор, пока это не будет сделано и доступно, вероятно, в следующем выпуске, предложение от depesz, вероятно, будет таким же хорошим, как вы и собираетесь, - если только вы не хотите начать собирать ранние патчи, работающие над этой функцией, по мере их появления.

2 голосов
/ 06 августа 2009

В основном - вы должны включить запись всех операторов со временем выполнения. лучший способ добиться этого - использовать log_min_duration_statement со значением 0 и использовать log_line_prefix так, чтобы он включал информацию, необходимую для сопоставления строк, приходящих из одного и того же бэкенда.

Я обычно использую log_line_prefix = '% m% u @% d% p% r'.

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

...