Я хочу собрать посмертную отладочную информацию как о «победившей» транзакции, так и о «проигравшей» транзакции в тупиковой ситуации PostgreSQL.
- Я нашел эту вики-страницу, на которой есть несколько хороших просмотров в реальном времени, которые могут дать подсказки о том, что такое в настоящее время происходит неправильно, но, если я правильно понимаю, к тому времени, когда проигрышная транзакция уже откатывается, большая часть самой полезной информации уже будет удалена из этих живых представлений.
- Я видел такие варианты, как deadlock_timeout и log_lock_waits которые регистрируют информацию о проигрышной транзакции, но не о выигрышной транзакции. Кажется, нет никакого способа настроить вывод журнала, чтобы включить более подробную информацию, чем эта (в частности, ни одно из этих целых чисел ничего не значит, когда я отлаживаю на основе журналов постфактум):
LOG: process 11367 still waiting for ShareLock on transaction 717 after 1000.108 ms DETAIL: Process holding the lock: 11366. Wait queue: 11367. CONTEXT: while updating tuple (0,2) in relation "foo" STATEMENT: UPDATE foo SET value = 3;
Есть ли лучший источник данных, который я могу использовать для сбора этой информации?
deadlock_timeout
, все вовлеченные процессы должны были вызватьlog_lock_waits
. Какой информации вам не хватает? - person Nick Barnes   schedule 09.04.2015