Поздно поздно я столкнулся с множеством споров о блокировке строк. Стол в споре, кажется, является конкретной таблицей.
Это вообще то, что происходит -
- Разработчик 1 запускает транзакцию с экрана интерфейса Oracle Forms
- Разработчик 2 запускает другую транзакцию из другого сеанса, используя тот же экран
~ 5 минут через, передний конец кажется не отвечает. Проверка сеансов показывает конфликт блокировки строк. «Решение», которое каждый выбрасывает, - убивать сессии: /
Как разработчик базы данных
- Что можно сделать, чтобы устранить проблемы блокировки строк?
- Можно ли выяснить, какая строка хранимой процедуры вызывает эти споры о блокировке строки
- Каково будет общее руководство для уменьшения / предотвращения / устранения таких проблем, которые связаны с кодированием?
Если этот вопрос кажется слишком открытым / недостаточно информации, пожалуйста, не стесняйтесь редактировать / дайте мне знать - я сделаю все возможное, чтобы добавить дополнительную информацию.
В этой таблице много вставок и обновлений, я бы сказал, что это одна из самых загруженных таблиц. SP довольно сложен - чтобы упростить - он выбирает данные из различных таблиц, заполняет их в рабочие таблицы, на рабочей таблице происходит много арифметических операций, и результат рабочей таблицы вставляется / обновляется в рассматриваемой таблице.
Версия базы данных - Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64-разрядная версия. Поток логики выполняется в одном и том же порядке в обеих сессиях, транзакция не остается открытой слишком долго (или, по крайней мере, мне так кажется ), и блокировки происходят во время активного выполнения транзакций.
Обновление: количество строк в таблице больше, чем я ожидал, около 3,1 миллиона строк. Кроме того, после отслеживания сеанса я обнаружил, что пара операторов обновления для этой таблицы не использует индекс. Почему это так - я не уверен. Столбец, указанный в предложении where, индексируется. В настоящее время я перестраиваю индекс.
COMMIT
или ROLLBACK
в разумные сроки, либо б) устроить так, чтобы одни и те же люди не всегда хотели один и тот же ряд в одно и то же время.