Исходя из личного опыта, основная проблема с MERGE заключается в том, что, поскольку он блокирует страницу, он исключает любой параллелизм в ваших вставках, направленных на таблицу.Поэтому, если вы пойдете по этому пути, очень важно, чтобы вы упаковывали все обновления, которые попадут в таблицу, в одном устройстве записи.
Например: у нас была таблица, для которой INSERT занимал сумасшедшие 0,2 секунды на запись, большинствоэтого времени, казалось бы, было потрачено впустую на фиксацию транзакции, поэтому мы переключили это на использование MERGE, и некоторые быстрые тесты показали, что это позволило нам вставить 256 записей за 0,4 секунды или даже 512 за 0,5 секунды, мы проверили это с генераторами нагрузки, и все казалосьвсе будет в порядке, пока не произойдет попадание в производство, и все блокируется в ад на блокировках страницы, что приведет к гораздо более низкой общей пропускной способности, чем с отдельными INSERT.
Решение было в том, чтобы не только группировать записи от одного производителяв операции MERGE, но также для пакетной обработки от производителей, отправляющихся к отдельной БД, в одной операции MERGE через дополнительный уровень очереди (ранее также одно соединение на БД, но с использованием MARS для чередования всех вызовов производителей к хранимой процедуределафактической транзакции MERGE), таким образом, мы смогли без проблем обрабатывать многие тысячи INSERT в секунду.
Обязательно иметь подсказки NOLOCK для всех ваших операций чтения с внешнего интерфейса, всегда.