Показать сообщение отдельно
Старый 22.08.2019, 10:22   #7  
Masel is offline
Masel
Участник
 
39 / 527 (18) +++++++
Регистрация: 19.09.2007
Интересная тема, никогда не пробовал смотреть что там делается при синхронизации. Я посмотрел первый запрос, который по 70 мс у вас выполняется. Если его запускать, то любой повторный запуск у меня отрабатывает 0мс на тестовой базе. Это наталкивает на мысль, что все время там тратится на парсинг и построение плана. Так происходит потому, что запрос с литералами, а именно название таблицы туда передается. Я попробовал убрать литералы через план гайд, т.е. сделать параметризованный запрос, тогда времени на него почти не тратится. Делается это простым скриптом:
PHP код:
DECLARE @stmt nvarchar(max);  
DECLARE @
params nvarchar(max);  
EXEC sp_get_query_template   
    N
'select name, change_tracking_state_desc from sys.columns AS Cols inner join sys.fulltext_index_columns AS FTSCols inner join sys.fulltext_indexes as FTS on FTSCols.object_id = FTS.object_id on Cols.object_id = FTSCols.object_id where Cols.column_id = FTSCols.column_id and Cols.object_id = object_id(''SYSINETCSS'')',  
    @
stmt OUTPUT,   
    @
params OUTPUT;  
select @stmt;
EXEC sp_create_plan_guide   
    N
'SyncTemplateGuide',   
    @
stmt,   
    
N'TEMPLATE',   
    
NULL,   
    @
params,   
    
N'OPTION(PARAMETERIZATION FORCED)'
На медленной тестовой базе это ускорило синхронизацию с 28 до 7 минут примерно.
Попробуйте у себя. Плюс в том что не нужно патчить exe.
За это сообщение автора поблагодарили: mazzy (10), AlGol (3), KiselevSA (6), Ser (1), fed (20), Vadik (1), trud (10), raz (10), Hyper (1), sukhanchik (10), AlexeyS (10), Logger (10), Roman777 (2), Ivanhoe (20), gl00mie (20), -DocSerzh- (1), VORP (1), madm (1), SRF (5), JeS (1), Melkiades (1), Товарищ ♂uatr (2), 6a6kin (1).