powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Определить, что строка заблокирована через select for update
4 сообщений из 4, страница 1 из 1
Определить, что строка заблокирована через select for update
    #39694394
Antipich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
У мен есть несколько процессов, работающие с одной таблицей.
Один процесс делает select for update limit skip locked

В другом процессе мне нужно запросить все записи из этой таблицы с флагом, какие записи сейчас заблокированы.

Пока все, что придумал, это делать
Код: plsql
1.
2.
3.
4.
5.
select t1.id, t2.id is null as locked 
from t as t1
left join (
   select id from t for update skip locked
) t2 on t1.id = t2.id



Соответственно, если какая-то строка заблокирована, ее не вернет подзапрос из t2 и мы можем это легко понять.
Данный запрос выполняется в атомарной транзакции и занимает очень мало времени.

Проблема в том, что пока этот запрос в процессе выполнения, как я понимаю, она блокирует строки. И если первый процесс именно в этот момент попробует получить новую пачку строк для обработки, он ничего не получит.
Конечно, вероятность того, что эти два процесса так точно наложатся во времени, не высока, но само наличие такой ненулевой вероятности меня напрягает.

Как можно понять, что строка заблокирована, не прибегая к, хоть и очень краткосрочной, но блокировке всех остальных строк?

Спасибо!
...
Рейтинг: 0 / 0
Определить, что строка заблокирована через select for update
    #39694486
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antipich,

как вариант - взять из pg_stat_activity те процессы, которые потенциально могут блокировать строки в этой таблице (если это можно как-то выделить), взять их backend_xid'ы и искать строки в таблице с таким xmax. но не уверен что это хорошая идея.
...
Рейтинг: 0 / 0
Определить, что строка заблокирована через select for update
    #39694488
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexius,

уж скорее pg_locks читать
...
Рейтинг: 0 / 0
Определить, что строка заблокирована через select for update
    #39694741
big-trot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы говорите
AntipichИ если первый процесс именно в этот момент попробует получить новую пачку строк для обработки, он ничего не получит.
Конечно, вероятность того, что эти два процесса так точно наложатся во времени, не высока, но само наличие такой ненулевой вероятности меня напрягает.

А вас не напрягает, что AntipichВ другом процессе мне нужно запросить все записи из этой таблицы с флагом, какие записи сейчас заблокированы.
Полученные данные имеют не нулевую вероятность своей достоверности.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Определить, что строка заблокирована через select for update
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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