Я столкнулся с некоторыми критическими проблемами в 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'