|
Особенность блокировок в SPL
|
|||
---|---|---|---|
#18+
Обнаружил, что из хранимой процедуры ... begin work; foreach c1 for select ... for update end foreach; commit work; ... ставит блокировку на чтение. облом ... хотелось бы поставить изменяемую. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2003, 16:05 |
|
Особенность блокировок в SPL
|
|||
---|---|---|---|
#18+
>for update for readolny ? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2003, 16:24 |
|
Особенность блокировок в SPL
|
|||
---|---|---|---|
#18+
нет такой буквы... есть конструкция foreach select ... end foreach которая и открывает неявно курсор на чтение а есть foreach C1 for select ... ... update ... where current of C1; ... end foreach; она по идее должна неявно открывать курсор for update, но не открывает :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2003, 18:51 |
|
Особенность блокировок в SPL
|
|||
---|---|---|---|
#18+
> ставит блокировку на чтение Не совсем понял, что это обозначает. Есть разделяемые(S) и монопольные (эксклюзивные)(X) блокировки, есть их комбинация - изменяемая(U). Ты, возможно, хотел сказать, что при работе данной процедуры другие сессии не могут читать эти строки пока не завершится транзакция ? Так так и надо. А что, ты хочешь прочитать фантомы (т.е. незакомитченные данные) ? Если так, то ставь уровень изоляции в читающем процессе dirty read. Или что то другое ? В любом случае полезно посмотреть в доке описание уровней изоляции и особенно cursor stability. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2003, 15:20 |
|
Особенность блокировок в SPL
|
|||
---|---|---|---|
#18+
ага почитай почитай... а я напомню, что поставить изменяемую блокировку (U) может только один процесс (также как и монопольную X), но в отличии от X U позволяет читать блокированные данные другим процессам. так вот конструкция на esqlc $begin work; $declare c1 cursor for select ... from update; $open c1; $fetch c1; -- установит блокировку U ... а аналог в SPL установит блокировку S ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2003, 14:24 |
|
Особенность блокировок в SPL
|
|||
---|---|---|---|
#18+
> $begin work; > $declare c1 cursor for select ... from update; > $open c1; > $fetch c1; -- установит блокировку U > ... > а аналог в SPL установит блокировку S И чем это плохо ? Строки будут читаться другими процессами (твой процесс не мешает им читать) до того времени, пока ты не изменишь строку . После этого на строку будет установлена Х-блокировка до конца транзакции. Может все таки попробуй объяснить более подробно, в чем суть вопроса ? Чего ты хочешь добиться ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2003, 15:17 |
|
Особенность блокировок в SPL
|
|||
---|---|---|---|
#18+
>> $begin work; >> $declare c1 cursor for select ... from update; >> $open c1; >> $fetch c1; -- установит блокировку U >> ... >> а аналог в SPL установит блокировку S >И чем это плохо ? Строки будут читаться другими процессами (твой процесс >не мешает им читать) до того времени, пока ты не изменишь строку . После >этого на строку будет установлена Х-блокировка до конца транзакции. >Может все таки попробуй объяснить более подробно, в чем суть вопроса ? >Чего ты хочешь добиться ? Дело в том, что мне как раз и нет надобности менять менять строку в C1, мне надо провести некоторые изменения в других таблицах, связанных с этой строкой, и эти изменения должны выполняться строго последовательно. Изменения строки С1 обеспечит последовательную обработку, но повлечет невозможность доступа к этой строке для процессов которые только читают эту строку, а это плохо, тк вероятность такого рода запросов достаточно высока. В то же время читающие процессы не могут работать в режиме изоляции dirty read. Мне пришлось для решения этой проблемы блокировать монопольно (изменять) в еще одной таблице строку соответствующую строке C1 и это нормально работает (благо что эта доп таблица нужна сама по себе). Но случаи то разные бывают... Получается что такого рода действия должны быть реализованы только из программ esqlc или 4gl, что тоже не всегда возможно. Понятно что системы резервирования авиабилетов пишут на си, но я то занимаюсь учетно-финансовыми системами. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2003, 20:02 |
|
|
start [/forum/topic.php?fid=44&fpage=69&tid=1609430]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
others: | 300ms |
total: | 417ms |
0 / 0 |