Индексирование SQL Server происходит медленно в первую очередь из-за его асинхронной схемы извлечения данных.
- Используйте отслеживание изменений с помощью «update index in background».
Самый простой способ повысить производительность полнотекстовой индексации - использовать отслеживание изменений с опцией «update index in background». Когда вы индексируете таблицу (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
для каждой строки в таблице с отслеживанием изменений enabled.Then, для каждой строки, которая имеет столбец, что вы полнотекстовое индексирование и это изменено после вашего первоначального полного населения, информация о строке будет записана (в индексируемой базе данных) в таблицу sysfulltextnotify. Затем MSSearch выдаст следующее только для строк, которые появляются в этой таблице, и затем удалит их из таблицы sysfulltextnotify.
- Рассмотрит с помощью отдельного Build сервера
таблицы, которые сильно обновляется в то время как вы индексирование может создавать проблемы с блокировками, так что если вы можете жить с каталогом, который Периодически из даты и MSSearch который иногда недоступен, используйте отдельный сервер сборки. Вы делаете это, убедившись, что индексный сервер имеет копию таблицы для полнотекстового индексирования и экспорта каталога. Очевидно, что если вам нужны обновления в реальном времени или почти в реальном времени в вашем каталоге, это нехорошее решение
- Предел активности, когда население работает
когда население бежит, не запускайте Profiler, и ограничить другую деятельность базы данных в максимально возможной степени. Profiler потребляет значительные ресурсы.
- Увеличение числа потоков для процесса индексации
Увеличение числа потоков выполнявшимися для процесса индексации. Значение по умолчанию - всего пять, а на квадрантах или в 8 направлениях вы можете увеличить это до более высоких значений. Тем не менее, MSSearch будет дросселировать, если это слишком много данных из SQL Server, поэтому избегайте делать это в одно- или двухпроцессорных системах.
- Остановить любое антивирусное или открытое программное обеспечение резервного копирования файлов-агентов .
Если это невозможно, постарайтесь, чтобы предотвратить их от сканирования временных каталогов, используемый SQL FTI и каталог каталогами
- Места каталога, темп каталог и файлов подкачки на своих собственных контроллерах
Если вы можете сделать это вложение. Добавьте каталог на свой собственный контроллер, желательно на массив RAID-1. Добавьте каталог temp в массив RAID-1. Аналогичным образом рассмотрим возможность размещения файла подкачки на собственном массиве RAID-1 со своим собственным контроллером.
- Рассмотрим создание вторичных данных файлы для Temp DB - 1 раз в CPU/ Core.
Благодарим вас за тщательный ответ. Я немного поработаю над этим и отчитаюсь. Все еще не уверен, как это может занять менее 5 минут на sql 2005 с меньшим количеством аппаратного обеспечения. – ScottE
В SQL 2005 существует специальная служба индексирования, которая работает непосредственно с SQL Serrver. Это ускоряет полнотекстовые операции и изолирует SQL Server от изменений в службе поиска, сделанных другими приложениями. Реальная архитектура механизма полнотекстового сбора и улучшения стратегии слияния индексов улучшили производительность индексирования в 2005 году.Например, на том же оборудовании с тем же набором данных построение полнотекстового индекса на 20 миллионов строк текстовых данных на основе символов заняло примерно 14 дней в SQL Server 2000, тогда как в SQL Server 2005 тот же индекс потребовал меньше чем 10 часов. – Raj
копия, вставленная с https://msdn.microsoft.com/en-us/library/aa175787(v=sql.80).aspx – Alex