Я пытался найти некоторые сведения о производительности инструкции Oracle MERGE по сравнению с традиционным Select Insert/Update, но не смог найти что-то с моей ситуацией.MERGE на столе Oracle с высоким коэффициентом обновления обновлений
Я использую MERGE заявление в своем коде как оператор UPSERT, пример ниже:
MERGE INTO table_a a USING dual d ON (a.keyone='a' AND a.keytwo='b')
WHEN MATCHED THEN UPDATE SET a_column='c'
WHEN NOT MATCHED THEN INSERT (keyone,keytwo,a_column) VALUES ('a','b','c')
Это всегда будет использоваться для обновления только одна запись в таблице, которая имеет почти 70 миллионов строк. Но я сталкиваюсь с некоторыми проблемами блокировки/блокировки.
мне было интересно, если другой процесс выдачи обновления одновременно с этим «TABLE_A», пример
UPDATE table_a SET a_column='c' WHERE keyone='d' AND keytwo='e'
но никогда против одних и тех же ключей, это может быть, что оператор MERGE принимает длительное время для выполнения с довольно большой таблицей, тем самым блокируя обновления, которые впоследствии попадают в строки с другими ключами? (Всегда будут разные ключами для обновления заявления)
Они бы все случающиеся примерно в то же время (одна услуги выдачи Слияния и другие выдающее обновление к TABLE_A)
я делаю неправильный подход? Должен ли я просто делать SELECT, а затем на основе результата INSERT или UPDATE для таблицы это большой? Я думал, что блокирование происходит только в том случае, если 2 оператора пытаются получить доступ к одному и тому же ресурсу строки.
EDIT: Забыл упомянуть, TABLE_A не имеет много столбцов, это по существу
key_one number
key_two number
key_three varchar(1)
creation_date_time, mod_date_time
привет Боб, спасибо, что ответ! Сегодня я использую MERGE, где я столкнулся с проблемой, когда у меня была блокировка, хотя оба процесса не имеют доступа к одной записи. Это привело только к тому, что MERGE занял некоторое время, и UPDATE был приостановлен, но я думал, что Oracle может справиться с этим без проблем. – Hellojeffy
Затем попробуйте заменить MERGE UPDATE/INSERT и посмотреть, не заботится ли об этом. –