УДАЛИТЬ блокировку ВСТАВИТЬ

Операционные системы : Солярис
База данных : Informix

У меня есть процесс, который имеет 2 потока:

Поток 1, имеющий дело с новыми транзакциями и делающий БД INSERTS
Поток 2, имеющий дело с существующими транзакциями и делающий БД DELETES

ПРОБЛЕМА

Поток 1 постоянно выполняет INSERTS (добавление новых транзакций) для таблицы.
Поток 2 постоянно выполняет DELETES (удаление транзакций с истекшим сроком) из той же таблицы на основе первичного ключа

INSERTS терпят неудачу из-за ошибки Informix 244 которые происходят из-за блокировки страницы / таблицы.

Я предполагаю, что DELETE выполняет блокировку таблицы вместо блокировки строк и не позволяет вставкам работать.

Можно ли как-нибудь предотвратить эту блокировку?


РЕДАКТИРОВАТЬ

Я нашел другую подсказку. 244 ошибка вызвана SELECT запрос.
И то и другое insert а также delete операция делает select из часто обновляемой таблицы, прежде чем делать операцию.

Изоляция установлена ​​как COMMITTED READ, Когда я вручную делаю select на этой таблице из dbaccess, когда происходит удаление, я получаю ту же ошибку.

1

Решение

Я был бы очень удивлен, если бы DELETE делал полную блокировку таблицы при удалении отдельных элементов по первичному ключу. Скорее всего, вероятно, что длительность одной (или обеих) самих транзакций в конечном итоге приводит к отключению блокировки таблицы из-за количества измененных строк. В общем, вы можете избежать взаимоблокировок в изменчивых таблицах, таких как эта, устраняя все операции, кроме однострочных, в каждой транзакции и гарантируя, что ваша модель транзакции будет зафиксирована для чтения. По крайней мере, таким был мой опыт.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector