Индексирование SQL Server происходит медленно, в основном из-за его асинхронной схемы извлечения данных.
- Используйте отслеживание изменений с "обновлением
Индекс в фоновом режиме "вариант.
Самый простой способ повысить производительность полнотекстовой индексации - это использовать отслеживание изменений с опцией «обновить индекс в фоновом режиме». Когда вы индексируете таблицу (FTI, как и «стандартные» индексы SQL, работает на таблица), вы указываете полное население, добавочное население или отслеживание изменений. Когда вы выбираете полное заполнение, каждая строка в таблице, для которой выполняется полнотекстовое индексирование, извлекается и индексируется. Это двухступенчатый процесс.
Сначала вы (или Enterprise Manager) запускаете эту системную хранимую процедуру:
sp_fulltext_getdata CatalogID, object_id
После того, как все наборы результатов всех временных меток и значений PK будут возвращены в MSSearch, MSSearch выдаст еще одну процедуру sp_fulltext_getdata, но на этот раз один раз для каждой строки в вашей таблице. Так что, если в вашей базе данных есть 50 миллионов строк, эта процедура будет выдана 50 миллионов раз.
С другой стороны, если вы используете добавочную совокупность, MSSearch выдаст начальную букву:
sp_fulltext_getdata CatalogID, object_id
для каждой строки в таблице, для которой выполняется полнотекстовое индексирование. Таким образом, если у вас есть 50 миллионов строк в вашей базе данных, этот оператор также будет выполнен 50 миллионов раз. Зачем? Поскольку даже при добавочной совокупности MSSearch должен точно определить, какие строки были изменены, обновлены и удалены. Другая проблема с добавочными группами заключается в том, что они будут индексировать или переиндексировать строку, даже если было внесено изменение в столбец, для которого вы не выполняете полнотекстовую индексацию.
Хотя добавочная совокупность, как правило, быстрее, чем полная совокупность, вы можете заметить, что для больших таблиц любая из них отнимает много времени.
Я рекомендую вам включить отслеживание изменений с фоновым или запланированным обновлением. Если вы это сделаете, вы увидите, что MSSearch сначала выдаст другое:
sp_fulltext_getdata CatalogID, object_id
для каждой строки в таблице с включенным отслеживанием изменений. Затем для каждой строки, в которой есть столбец, для которого выполняется полнотекстовое индексирование и который был изменен после первоначального полного заполнения, информация о строке будет записана (в базе данных Вы индексируете) в таблицу sysfulltextnotify. Затем MSSearch выдаст следующее только для строк, которые появляются в этой таблице, и затем удалит их из таблицы sysfulltextnotify.
- Рассмотрите возможность использования отдельной сборки
Сервер
Таблицы, которые сильно обновляются во время индексирования, могут создавать проблемы с блокировкой, поэтому, если вы можете использовать каталог, который периодически устарел, и механизм MSSearch, который иногда недоступен, рассмотрите возможность использования отдельного сервера сборки. Это можно сделать, убедившись, что на сервере индексирования есть копия таблицы для полнотекстовой индексации, и экспортируйте каталог. Понятно, если вам нужны обновления каталога в реальном времени или почти в реальном времени, это не очень хорошее решение.
- Ограничить активность, когда население
работает
Когда выполняется заполнение, не запускайте Profiler и максимально ограничивайте другие действия с базой данных. Профилировщик потребляет значительные ресурсы.
- Увеличить количество тем для
процесс индексации
Увеличьте количество потоков, которые вы запускаете для процесса индексации. По умолчанию используется только пять, а на четырех или восьми направлениях вы можете увеличить это значение до гораздо более высоких значений. Однако MSSearch будет ограничивать себя, если отбирает слишком много данных из SQL Server, поэтому избегайте этого в однопроцессорных или двухпроцессорных системах.
- Остановите любой антивирус или откройте
ПО для резервного копирования файлового агента.
Если это невозможно, попробуйте запретить им проверять временные каталоги, используемые SQL FTI и каталогами каталогов
- Разместите каталог, временный каталог и
файлы подкачки на собственных контроллерах
Если вы можете сделать эти инвестиции. Поместите каталог на свой собственный контроллер, предпочтительно в массив RAID-1. Поместите временный каталог в массив RAID-1. Аналогично, рассмотрите возможность размещения файла подкачки в своем собственном массиве RAID-1 с собственным контроллером.
- Рассмотрите возможность создания вторичных данных
файлы для временной базы данных - 1 на процессор /
Ядро.