Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
commit after select
|
|||
|---|---|---|---|
|
#18+
Привет, нужно ли делать commit после выполненного селекта - без for update? Вычитал что это снимает shared-локи. С другой стороны практика показывает что запрос типа db2 -c- "select * from x1" не блокирует запрос db2 "update x1 set data = 'some data'" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2010, 07:04 |
|
||
|
commit after select
|
|||
|---|---|---|---|
|
#18+
Добрый день. Нужно делать commit или нет - это от логики вашего приложения зависит. Если логике - всё равно, то лучше делать, т.к. блокировки действительно могут сниматься. А вот какие именно блокировки запросом накладываются, зависит от уровня изоляции, который используется для запроса. По умолчанию это CS (блокируется только запись, на которой курсор позиционирован) и при этом после выполнения в командной строке db2: db2 -c- "select * from x1" указатель будет позиционирован за последней строкой курсора (а может быть оно после выполнения запроса вообще закрывает курсор), что не будет блокировать update любой строки. Если охота поиграться с курсорами и разными уровнями изоляции и т.п., используйте: Код: plaintext 1. 2. 3. 4. 5. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2010, 10:25 |
|
||
|
commit after select
|
|||
|---|---|---|---|
|
#18+
Спасибо, буду смотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2010, 13:55 |
|
||
|
commit after select
|
|||
|---|---|---|---|
|
#18+
Появился вопрос в котором хотелось бы разобраться досконально - не понятно поведение курсора при уровне CS без FOR UPDATE: Судя по описанию блокировка накладывается на следующую запись - на деле другая сессия спокойно апдейтит и коммитит эту строку без всяких блокировок. Курсор фетчит старые данные. Не совсем понятно - откуда взялась старая версия данных? - они уже изменены другой транзакцией и изменения зафиксированы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2010, 09:49 |
|
||
|
commit after select
|
|||
|---|---|---|---|
|
#18+
IntserПоявился вопрос в котором хотелось бы разобраться досконально - не понятно поведение курсора при уровне CS без FOR UPDATE: Судя по описанию блокировка накладывается на следующую запись - на деле другая сессия спокойно апдейтит и коммитит эту строку без всяких блокировок. Курсор фетчит старые данные. Не совсем понятно - откуда взялась старая версия данных? - они уже изменены другой транзакцией и изменения зафиксированы.Почитайте про OPEN там, где описан "Effect of temporary tables:". В вашем случае, видимо, сначала делается open и для курсора формируется временная таблица. Последующий update из другой сессии не оказывает влияние на содержимое этой временной таблицы, а значит и данных для курсора. Если вы будете делать update ДО open, то open зависнет на формировании временной таблицы, т.к. open'у придётся для этого накладывать S-блокировку на каждую строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2010, 13:47 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=36638368&tid=1602753]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
172ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 269ms |

| 0 / 0 |
