Назад | Перейти на главную страницу

FTS - восстановление индекса, вызывающее проблемы с ЦП (SQL Server 2008 R2)

Я столкнулся с некоторыми критическими проблемами в SQL Server 2008 в производственной среде; У нас есть база данных, содержащая индекс FTS; у нас также есть работа по обслуживанию, которая восстанавливает индекс FTS и обновляет статистику, подобную этой:

изменить полнотекстовый каталог [ftCatalogName] перестроить статистику обновления [tableNameWithFtIndex]

Работа выполняется еженедельно, в понедельник в 9 утра; он заканчивается примерно через 1 минуту и ​​всегда успешен;

Теперь проблема: каждый раз после завершения задания загрузка ЦП процесса sqlserver.exe увеличивается до 99%; регулярно загрузка процессора остается на уровне 70-80% (я знаю, что это очень много, и мы пытаемся это улучшить); и единственный способ вернуть его в обычное состояние (70-80%) - это только остановить IIS на всех интерфейсных серверах (у нас есть веб-ферма), а затем запустить их снова - таким образом, процессор для sqlserver.exe переходит на 0%, когда IIS остановлены, и обратно на 70-80%, когда IIS перезапускаются обратно;

Также я проанализировал поведение ЦП во время процесса восстановления: - запустить задание восстановления FTS (инструкции выше) - sqlserver.exe CPU = 75% (нормальный); fdhost.exe = 20-25% (нормально во время перестройки) - задание завершается через 51 секунду, а процессор fdhost переходит на 0%, а sqlserver.exe переходит на 99% и остается таким, пока я не применю описанный выше поток (запуск / остановка IIS на интерфейсных серверах)

Кто-нибудь знает, почему это происходит? По крайней мере, объяснение ... или несколько способов оптимизировать этот индекс и сделать его менее требовательным к ресурсам при восстановлении ...

Заранее спасибо!

Ваше заявление просто ТРИГГЕРЫ ремонт, а не ДЕЛАТЬ Это. Итак - вы инициировали работу ALTER FULLTEXT оператор, теперь вы можете дождаться его завершения следующим образом:

WHILE (SELECT COUNT(*) FROM sys.fulltext_catalogs WHERE FULLTEXTCATALOGPROPERTY(name, 'PopulateStatus') IN (1, 6, 7, 9)) > 0
    WAITFOR DELAY '0:00:00.1'