|
Определить, что строка заблокирована через select for update
|
|||
---|---|---|---|
#18+
Добрый день. У мен есть несколько процессов, работающие с одной таблицей. Один процесс делает select for update limit skip locked В другом процессе мне нужно запросить все записи из этой таблицы с флагом, какие записи сейчас заблокированы. Пока все, что придумал, это делать Код: plsql 1. 2. 3. 4. 5.
Соответственно, если какая-то строка заблокирована, ее не вернет подзапрос из t2 и мы можем это легко понять. Данный запрос выполняется в атомарной транзакции и занимает очень мало времени. Проблема в том, что пока этот запрос в процессе выполнения, как я понимаю, она блокирует строки. И если первый процесс именно в этот момент попробует получить новую пачку строк для обработки, он ничего не получит. Конечно, вероятность того, что эти два процесса так точно наложатся во времени, не высока, но само наличие такой ненулевой вероятности меня напрягает. Как можно понять, что строка заблокирована, не прибегая к, хоть и очень краткосрочной, но блокировке всех остальных строк? Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2018, 15:25 |
|
Определить, что строка заблокирована через select for update
|
|||
---|---|---|---|
#18+
Antipich, как вариант - взять из pg_stat_activity те процессы, которые потенциально могут блокировать строки в этой таблице (если это можно как-то выделить), взять их backend_xid'ы и искать строки в таблице с таким xmax. но не уверен что это хорошая идея. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2018, 16:50 |
|
Определить, что строка заблокирована через select for update
|
|||
---|---|---|---|
#18+
Alexius, уж скорее pg_locks читать ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2018, 16:59 |
|
Определить, что строка заблокирована через select for update
|
|||
---|---|---|---|
#18+
Вы говорите AntipichИ если первый процесс именно в этот момент попробует получить новую пачку строк для обработки, он ничего не получит. Конечно, вероятность того, что эти два процесса так точно наложатся во времени, не высока, но само наличие такой ненулевой вероятности меня напрягает. А вас не напрягает, что AntipichВ другом процессе мне нужно запросить все записи из этой таблицы с флагом, какие записи сейчас заблокированы. Полученные данные имеют не нулевую вероятность своей достоверности. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 10:21 |
|
|
start [/forum/topic.php?desktop=1&fid=53&tid=1995612]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 133ms |
0 / 0 |