powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли узнать какой пользователь заблокировал запись в таблице?
10 сообщений из 35, страница 2 из 2
Можно ли узнать какой пользователь заблокировал запись в таблице?
    #40016530
alex_by_guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Да, в принципе так и сделал в итоге.
А про "невозможно" - в оракле, например, это решается именованными блокировками. Если не ошибаюсь начиная еще с версии 9i.
...
Рейтинг: 0 / 0
Можно ли узнать какой пользователь заблокировал запись в таблице?
    #40016581
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_by_guest,

Если у вас возникают такие ситуации, значит у вас однозначно есть долгие сессии в `idle in transaction` состоянии в базе.
Вместо того, чтобы городить поиск “кто заблокировал?” напишите скрипт для их отстрела или ограничьте настройками время `idle in transaction` до 5 минут.
Как, впрочем, и время обычных `active` сессий надо ограничить, скажем 30 минутами, всякие отчёты запускать от выделенного пользователя и для него сделать лимит больше, 2 часа к примеру.
...
Рейтинг: 0 / 0
Можно ли узнать какой пользователь заблокировал запись в таблице?
    #40016586
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_by_guest

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

Речь о dbms_lock? Тогда в постгресе это рекомендательные блокировки .
...
Рейтинг: 0 / 0
Можно ли узнать какой пользователь заблокировал запись в таблице?
    #40016680
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_by_guest,

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


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Можно ли узнать какой пользователь заблокировал запись в таблице?
    #40022055
alex_by_guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov
alex_by_guest,

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


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

Вопрос был в том - как найти пользователя? Как уже написал ранее - мы эту задачу успешно решили через pg_background и locktree.sql.
Спасибо!
...
Рейтинг: 0 / 0
Можно ли узнать какой пользователь заблокировал запись в таблице?
    #40022057
alex_by_guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов,
Интересная тема. Надо будет почитать.
Спасибо!
...
Рейтинг: 0 / 0
Можно ли узнать какой пользователь заблокировал запись в таблице?
    #40022091
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_by_guest
Павел Лузанов,
Интересная тема. Надо будет почитать.
Спасибо!


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

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Можно ли узнать какой пользователь заблокировал запись в таблице?
    #40022165
alex_by_guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Да, но там указали, что имя пользователя все равно не получится выдернуть - поэтому не стал заострять внимание.
...
Рейтинг: 0 / 0
Можно ли узнать какой пользователь заблокировал запись в таблице?
    #40022209
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_by_guest

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


это точно ненормально! `idle in transaction` говорит о том, что приложение не даёт базе никакой работы при открытой транзакции.
такая ситуация не должна возникать, транзакции не для этого.
наличие таких сессий показывает либо проблемы в коде (некорректная работа с транзакциями), либо нехватку ресурсов на стороне приложения (перегрузка по CPU) либо проблемы с третьими сервисами, куда приложение ходит по сети удерживая открытую транзакцию.
...
Рейтинг: 0 / 0
Можно ли узнать какой пользователь заблокировал запись в таблице?
    #40022420
alex_by_guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov,
Вы слишком категоричны.

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

Не хочу вдаваться в подробности и в стопицотый раз развязывать по этому поводу холивар - просто поверьте, что это вполне себе рабочая ситуация.
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли узнать какой пользователь заблокировал запись в таблице?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]