powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Блокировки при удалении.
3 сообщений из 3, страница 1 из 1
Блокировки при удалении.
    #38439140
_Andreyka_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вень!

Помогите с решением одной проблемы. До этого с DB2 не сталкивался.
Версия СУБД - 9.7
Есть таблица А соответсвий записей из таблицы Х к множеству записей из таблицы У.
К таблице А постоянно идет большое количество запросов на чтение (используется во вьюшках для джойнов Х и У).
Есть хранимка, в которой для определенного набора записей из Х идет пересоздание связей, т.е. удаление всех соотвествий для записи из Х к записям из У и вставка новых соответсвий. Регулярно во время удаления случаются дидлоки. Как побороть?
По умолчанию в базе установлен уровень изоляции CURSOR STABILITY.
Бизнес требует, чтобы запросы на чтение не блокировались.
...
Рейтинг: 0 / 0
Блокировки при удалении.
    #38440163
m&
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m&
Гость
_Andreyka_,

удалять в одной транзакции не более 1 строки.
либо вообще ничего не удалять. добавить атрибут - признак актуальности данных о связях.
...
Рейтинг: 0 / 0
Блокировки при удалении.
    #38440346
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Andreyka_,

Деадлоки возможны только в ситуации, когда обращение к двум разным сущностям (строки/таблицы) в разных исполняемых модулях/ветках идёт в разном порядке.
Пример:
Программа P1 сначала изменяет строку A в некоторой таблице, потом изменяет/читает строку B, программа P2 - наоборот.
Таймлайн:
Код: plaintext
1.
P1: ----> изменение A (накладываем блокировку) ----> read B (lock wait)
P2: ----> изменение B (накладываем блокировку) ----> read A (lock wait)

Разрешить эту ситуацию кроме как прибиванием одного из этих процессов - невозможно.

Самое правильное - пересмотреть логику приложения, понять причину/место возникновения взаимных блокировок и исправить.
Для этого выставляем DB2_CAPTURE_LOCKTIMEOUT:
Код: plaintext
db2set DB2_CAPTURE_LOCKTIMEOUT=ON
смотрим, что падает в каталог, где "живёт" db2diag.log, изучаем db2locktimeout.*

Скорее всего вам поможет банальное
Код: plaintext
db2set  DB2_SKIPDELETED =ON
ну и заодно:
Код: plaintext
db2set  DB2_SKIPINSERTED =ON

Стоит также посмотреть на DB2_EVALUNCOMMITTED

Но перед использованием стоит внимательно прочитать и понять, как всё это может влиять на логику вашего ПО.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Блокировки при удалении.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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