powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / commit after select
5 сообщений из 5, страница 1 из 1
commit after select
    #36635456
Intser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, нужно ли делать commit после выполненного селекта - без for update?
Вычитал что это снимает shared-локи. С другой стороны практика показывает что запрос типа
db2 -c- "select * from x1"
не блокирует запрос
db2 "update x1 set data = 'some data'"
...
Рейтинг: 0 / 0
commit after select
    #36635683
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Нужно делать commit или нет - это от логики вашего приложения зависит.
Если логике - всё равно, то лучше делать, т.к. блокировки действительно могут сниматься.
А вот какие именно блокировки запросом накладываются, зависит от уровня изоляции, который используется для запроса.
По умолчанию это CS (блокируется только запись, на которой курсор позиционирован) и при этом после выполнения в командной строке db2:
db2 -c- "select * from x1"
указатель будет позиционирован за последней строкой курсора (а может быть оно после выполнения запроса вообще закрывает курсор), что не будет блокировать update любой строки.
Если охота поиграться с курсорами и разными уровнями изоляции и т.п., используйте:
Код: plaintext
1.
2.
3.
4.
5.
db2 +c "declare c1 cursor for select * from x1 [for [update|read only]] [with [ur|cs|rs|rr]]"
db2 +c open c1
db2 +c fetch c1
...
db2 +c fetch c1
И смотрите после open и каждого fetch, какие блокировки накладываются командой
Код: plaintext
db2 get snapshot for application agentid N
для номера агента, соотв. вашей сессии.
...
Рейтинг: 0 / 0
commit after select
    #36636508
Intser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, буду смотреть.
...
Рейтинг: 0 / 0
commit after select
    #36638368
Intser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Появился вопрос в котором хотелось бы разобраться досконально - не понятно поведение курсора при уровне CS без FOR UPDATE:
Судя по описанию блокировка накладывается на следующую запись - на деле другая сессия спокойно апдейтит и коммитит эту строку без всяких блокировок. Курсор фетчит старые данные. Не совсем понятно - откуда взялась старая версия данных? - они уже изменены другой транзакцией и изменения зафиксированы.
...
Рейтинг: 0 / 0
commit after select
    #36638995
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IntserПоявился вопрос в котором хотелось бы разобраться досконально - не понятно поведение курсора при уровне CS без FOR UPDATE:
Судя по описанию блокировка накладывается на следующую запись - на деле другая сессия спокойно апдейтит и коммитит эту строку без всяких блокировок. Курсор фетчит старые данные. Не совсем понятно - откуда взялась старая версия данных? - они уже изменены другой транзакцией и изменения зафиксированы.Почитайте про OPEN там, где описан "Effect of temporary tables:".
В вашем случае, видимо, сначала делается open и для курсора формируется временная таблица.
Последующий update из другой сессии не оказывает влияние на содержимое этой временной таблицы, а значит и данных для курсора.
Если вы будете делать update ДО open, то open зависнет на формировании временной таблицы, т.к. open'у придётся для этого накладывать S-блокировку на каждую строку.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / commit after select
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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