Как понять откуда эксклюзивные блокировки в postgres ?
От: 1234  
Дата: 30.09.10 23:15
Оценка:
Доброго вечера/дня/утра.
Есть такая грустная ситуация: Есть база данных с которой работают из разных соединений, и соотвественно из разных транзакций.
Один из процессов работающих с базой данных, периодически пишет в таблицу A.
Запрос типа:
UPDATE A SET field1=TRUE WHERE id=111


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

Смотрел какие есть "висячие" запросы таким запросом:

SELECT * FROM pg_stat_activiy


Отображал связь какой запрос какой транзакцией заблокирован я вот таким скриптом.
SELECT
   waiting.locktype           AS waiting_locktype,
   waiting.relation::regclass AS waiting_table,
   waiting_stm.current_query  AS waiting_query,
   waiting.mode               AS waiting_mode,
   waiting.pid                AS waiting_pid,
   other.locktype             AS other_locktype,
   other.relation::regclass   AS other_table,
   other_stm.current_query    AS other_query,
   other.mode                 AS other_mode,
   other.pid                  AS other_pid,
   other.granted              AS other_granted
FROM
   pg_catalog.pg_locks AS waiting
JOIN
   pg_catalog.pg_stat_activity AS waiting_stm
   ON (
       waiting_stm.procpid = waiting.pid
   )
JOIN
   pg_catalog.pg_locks AS other
   ON (
       (
           waiting."database" = other."database"
       AND waiting.relation  = other.relation
       )
       OR waiting.transactionid = other.transactionid
   )
JOIN
   pg_catalog.pg_stat_activity AS other_stm
   ON (
       other_stm.procpid = other.pid
   )
WHERE
   NOT waiting.granted
AND
   waiting.pid <> other.pid;

Но это не очень помогло.
Люди, кто знает как получить знание о том какие действия/запросы привели к блокировке того или иного объекта в БД. Ну нельзя же сидеть и гадать на кофейной гуще!
По крайней мере должны быть чётко определённые правила, которых я пока что не нашёл.
Помогите плиз кто может по существу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.