Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Можно ли узнать какой пользователь заблокировал запись в таблице?  [new]
alex_by_guest
Member

Откуда:
Сообщений: 10
Maxim Boguk,

Да, в принципе так и сделал в итоге.
А про "невозможно" - в оракле, например, это решается именованными блокировками. Если не ошибаюсь начиная еще с версии 9i.
9 ноя 20, 15:19    [22228805]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать какой пользователь заблокировал запись в таблице?  [new]
vyegorov
Member

Откуда: Рига
Сообщений: 1212
alex_by_guest,

Если у вас возникают такие ситуации, значит у вас однозначно есть долгие сессии в `idle in transaction` состоянии в базе.
Вместо того, чтобы городить поиск “кто заблокировал?” напишите скрипт для их отстрела или ограничьте настройками время `idle in transaction` до 5 минут.
Как, впрочем, и время обычных `active` сессий надо ограничить, скажем 30 минутами, всякие отчёты запускать от выделенного пользователя и для него сделать лимит больше, 2 часа к примеру.
9 ноя 20, 16:51    [22228885]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать какой пользователь заблокировал запись в таблице?  [new]
Павел Лузанов
Member

Откуда:
Сообщений: 753
alex_by_guest

А про "невозможно" - в оракле, например, это решается именованными блокировками. Если не ошибаюсь начиная еще с версии 9i.

Речь о dbms_lock? Тогда в постгресе это рекомендательные блокировки.
9 ноя 20, 17:05    [22228898]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать какой пользователь заблокировал запись в таблице?  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4395
alex_by_guest,

Кстати да как Виктор выше написал - это лечится установкой разумного idle in transaction timeout через крон или настройку базы.
Допустимая длина транзакции определяется из бизнес требований.


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru

Сообщение было отредактировано: 10 ноя 20, 00:17
9 ноя 20, 23:37    [22229180]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать какой пользователь заблокировал запись в таблице?  [new]
alex_by_guest
Member

Откуда:
Сообщений: 10
vyegorov
alex_by_guest,

Если у вас возникают такие ситуации, значит у вас однозначно есть долгие сессии в `idle in transaction` состоянии в базе.
Вместо того, чтобы городить поиск “кто заблокировал?” напишите скрипт для их отстрела или ограничьте настройками время `idle in transaction` до 5 минут.
Как, впрочем, и время обычных `active` сессий надо ограничить, скажем 30 минутами, всякие отчёты запускать от выделенного пользователя и для него сделать лимит больше, 2 часа к примеру.


Спасибо за совет, но предлагаемое вами решение в нашей ситуации неприемлемо.
"значит у вас однозначно есть долгие сессии в `idle in transaction` состоянии в базе." - на самом деле в этом нет ничего страшного или ненормального.

Вопрос был в том - как найти пользователя? Как уже написал ранее - мы эту задачу успешно решили через pg_background и locktree.sql.
Спасибо!
25 ноя 20, 13:19    [22238288]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать какой пользователь заблокировал запись в таблице?  [new]
alex_by_guest
Member

Откуда:
Сообщений: 10
Павел Лузанов,
Интересная тема. Надо будет почитать.
Спасибо!
25 ноя 20, 13:20    [22238290]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать какой пользователь заблокировал запись в таблице?  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4395
alex_by_guest
Павел Лузанов,
Интересная тема. Надо будет почитать.
Спасибо!


advisory locks обсуждались со всех сторон в начале этой темы.
у них есть свои плюсы и минусы но при аккуратном использовании - работают.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
25 ноя 20, 14:12    [22238330]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать какой пользователь заблокировал запись в таблице?  [new]
alex_by_guest
Member

Откуда:
Сообщений: 10
Maxim Boguk,

Да, но там указали, что имя пользователя все равно не получится выдернуть - поэтому не стал заострять внимание.
25 ноя 20, 18:25    [22238451]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать какой пользователь заблокировал запись в таблице?  [new]
vyegorov
Member

Откуда: Рига
Сообщений: 1212
alex_by_guest

"значит у вас однозначно есть долгие сессии в `idle in transaction` состоянии в базе." - на самом деле в этом нет ничего страшного или ненормального.


это точно ненормально! `idle in transaction` говорит о том, что приложение не даёт базе никакой работы при открытой транзакции.
такая ситуация не должна возникать, транзакции не для этого.
наличие таких сессий показывает либо проблемы в коде (некорректная работа с транзакциями), либо нехватку ресурсов на стороне приложения (перегрузка по CPU) либо проблемы с третьими сервисами, куда приложение ходит по сети удерживая открытую транзакцию.
25 ноя 20, 20:13    [22238520]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать какой пользователь заблокировал запись в таблице?  [new]
alex_by_guest
Member

Откуда:
Сообщений: 10
vyegorov,
Вы слишком категоричны.

"наличие таких сессий показывает либо проблемы в коде (некорректная работа с транзакциями), либо нехватку ресурсов на стороне приложения (перегрузка по CPU) либо проблемы с третьими сервисами, куда приложение ходит по сети удерживая открытую транзакцию." - нет. ничего из перечисленного в нашем случае нет. всё в порядке :)

Не хочу вдаваться в подробности и в стопицотый раз развязывать по этому поводу холивар - просто поверьте, что это вполне себе рабочая ситуация.

Сообщение было отредактировано: вчера, 12:54
вчера, 12:52    [22238792]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / PostgreSQL Ответить