Согласно комментарию на этот вопрос, который я задавал о незанятых соединениях в PostgreSQL 9.2 , некоторые незафиксированные транзакции (возможно, связанные с некоторыми из этих незанятых соединений) могут вызывать проблемы с производительностью.
Какой хороший способ определить, есть ли незафиксированные транзакции (бонусные баллы, если есть способ узнать, является ли соединение, в котором они находятся, свободным или нет)?
Большое спасибо!
postgresql
database-design
performance
Хуан Карлос Кото
источник
источник
pgtop
. Вы также можете охотиться за строками, показывающими «простоя в транзакции» на выходеps aux
.pgtop
выглядит интересно; есть ли эквивалент для Windows?Ответы:
Если вы хотите узнать, сколько у вас свободных соединений с открытой транзакцией, вы можете использовать:
Это предоставит список открытых соединений, которые находятся в состоянии ожидания, которые также имеют открытую транзакцию.
Сказав это, я не могу воссоздать открытое соединение в состоянии ожидания, в котором есть открытая транзакция. Возможно, кто-то еще может предоставить подробную информацию о том, как это сделать.
источник
state
столбец присутствует только в 9.2. И для меня это выглядит так, как будто правильное состояние «бездействует в транзакции».state = 'idle'
это не указывает на открытую транзакцию.I cannot recreate an open connection in the idle state that has an open transaction.
Откройте два соединения с базой данных и введите «начало»; в одном. В другом случае запустите приведенный выше запрос, и вы получитеidle in transaction
.