Проблемы
Предположим, что вы используете предварительно вычисляемые секции в репликации слиянием с параметризованными и присоединенными фильтрами в Microsoft SQL Server 2012 или Microsoft SQL Server 2014. При попытке использования инструкции INSERT в таблицах в корне фильтра (на стороне издателя) может возникнуть снижение производительности при вставке.
Решение
После применения этого исправления необходимо выполнить процедуру sp_vupgrade_mergeobjects вручную в опубликованной базе данных. Она помогает повторно создавать триггеры, хранимые процедуры, связанные с статьей, и представления, которые используются для отслеживания и применения изменений данных для репликации слиянием. Эта проблема впервые устранена в следующем накопительном обновлении SQL Server.
Накопительное обновление 5 для SQL Server 2014 /en-us/help/3011055
Накопительное обновление 3 для SQL Server 2012 с пакетом обновления 2 (SP2) /en-us/help/3002049
Все новые накопительные обновления для SQL Server содержат все исправления и все исправления для системы безопасности, которые были включены в предыдущий накопительный пакет обновления. Ознакомьтесь с самыми последними накопительными обновлениями для SQL Server.
Дополнительная информация
Вставьте в<таблицу> триггеры MSmerge_ins_XXXXслияния триггера, а триггер вызывает процедуру MSmerge_expand_sp_XXXX. Если вы столкнулись с этой проблемой, обратите внимание на то, что следующая инструкция INSERT/SELECT DISTINCT для процедуры расширения слияния MSmerge_expand_sp_XXXX потребляет большое количество времени. В этом случае производительность вставки уменьшается.
insert into dbo.MSmerge_current_partition_mappings with (rowlock) (publication_number, tablenick, rowguid, partition_id) select distinct 1, mc.tablenick, mc.rowguid, v.partition_id from dbo.MSmerge_contents mc with (rowlock) JOIN dbo.[MSmerge_dynamic_filter_merge_new_settings_PARTITION_VIEW] v with (rowlock) ON mc.tablenick = <tablenick> and mc.rowguid = v.[rowguid] and mc.marker = @child_marker and v.partition_id in (select partition_id from dbo.MSmerge_current_partition_mappings cpm with (rowlock) JOIN dbo.MSmerge_contents mc2 with (rowlock) ON cpm.rowguid = mc2.rowguid and mc2.marker = @marker) where not exists (select * from MSmerge_current_partition_mappings with (readcommitted, rowlock, readpast) where publication_number = 1 and tablenick = <tablenick> and rowguid = v.[rowguid] and partition_id = v.partition_id)
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".