Настройка и оптимизация производительности (полнотекстовый Full-Text Search)

Изменения: 14 апреля 2006 г.

На выполнение полнотекстового индексирования и полнотекстовых запросов влияют ресурсы оборудования, например объем памяти, производительность жесткого диска и ЦП.

Производительность полнотекстового индексирования

Основной причиной снижения производительности полнотекстового индексирования является ограничение ресурсов оборудования.

  • Если загрузка ЦП при работе службы MSFTESQL и SQL Server близка к 100 процентам, значит, узким местом является процессор.
  • Если средняя длина очереди ожидания обращения к жесткому диску в два или больше раз превышает количество головок диска, значит, узким местом является жесткий диск. Основным решением в этом случае является создание полнотекстовых каталогов, размещенных отдельно от файлов баз данных и журналов SQL Server. Разместите журналы, файлы баз данных и полнотекстовые каталоги на разных дисках. Кроме того, для повышения производительности индексирования можно приобрести более быстрый жесткий диск либо диск с поддержкой RAID.
  • При нехватке физической памяти (предел в 3 ГБ) и появлении в журнале сканирования сообщения о приостановке службы узким местом является память. Сведения об устранении этой проблемы см. в разделе Приостановка службы полнотекстового поиска (Microsoft) для SQL Server (MSFTESQL). Служба MSFTESQL не поддерживает AWE. Может помочь установка более 4 ГБ памяти SQL Server.

Если в системе отсутствуют узкие места оборудования, можно попробовать выполнить тонкую настройку системы для оптимизации производительности оборудования. Если узкие места оборудования отсутствуют, производительность полнотекстового поиска в Microsoft SQL Server 2005 зависит в основном от:

  • времени, которое требуется SQL Server для создания полнотекстовых пакетов.
  • скорости, с которой служба MSFTESQL может обрабатывать эти пакеты.

Оптимальной производительности можно достичь путем настройки взаимодействия SQL Server со службой MSFTESQL. Если SQL Server создает больше пакетов, чем может обработать служба MSFTESQL, то служба приостанавливает работу и формирует сообщение журнала сканирования, сигнализирующее о приостановке. Сведения об устранении этой проблемы см. в разделе Приостановка службы полнотекстового поиска (Microsoft) для SQL Server (MSFTESQL).

С другой стороны, если SQL Server создает недостаточно полнотекстовых пакетов для загрузки службы MSFTESQL, то служба простаивает, что также нежелательно. Данный режим не является оптимальным. На практике это является основной причиной медленного выполнения индексирования. Чтобы обеспечить оптимальную загрузку службы MSFTESQL, необходимо отслеживать и настраивать следующие счетчики:

  • Пакеты в счетчике состояния — управляющая программа фильтрации для полнотекстового поиска (Microsoft) (MSFTELFD).
    Этот счетчик должен быть либо равным количеству ЦП в системе, либо превосходить количество ЦП в два раза. Значения 0, 1 или 2 с низким использованием ЦП означают низкую производительность SQL Server. Например, если в системе используется 4 процессора, этот счетчик должен иметь значение от 4 до 8.
  • Пакеты в очереди — служба MSFTESQL.

Это значение должно быть близким к количеству диапазонов сканирования, умноженному на 10. Чтобы определить, сколько диапазонов используется для индексирования таблицы, выполните запрос к таблице sys.dm_fts_population_ranges.

Если значение счетчика слишком мало, его можно увеличить следующими способами:

  • Убедитесь, что для таблицы установлено несколько диапазонов сканирования. Для этого обратитесь с запросом к таблице sys.dm_fts_population_ranges. В идеале количество диапазонов сканирования должно быть в два раза больше количества ЦП. Диапазон сканирования ограничен количеством строк в таблице, количеством ЦП и параметром конфигурации max full-text crawl range. Чтобы изменение параметра max full-text crawl range вступило в силу, необходимо перезапустить процесс сканирования.
    ms142560.note(ru-ru,SQL.90).gifПримечание.
    Это относится только к полному сканированию.
  • Убедитесь, что для базовой таблицы установлен кластеризованный индекс. Первый столбец кластеризованного индекса должен иметь целочисленный тип данных. Старайтесь не использовать идентификатор GUID в качестве первого столбца кластеризованного индекса. Мультидиапазонное сканирование кластеризованного индекса может обеспечить наивысшую скорость сканирования.
  • Обновите статистику базовой таблицы с помощью инструкции UPDATE STATISTICS. Еще важнее обновить статистику кластеризованного индекса или полнотекстового ключа для полного сканирования. Это позволяет при мультидиапазонном сканировании создать в таблице хорошие секции.
  • Создайте вторичный индекс по столбцу временных меток, если нужно повысить производительность добавочного заполнения.
ms142560.note(ru-ru,SQL.90).gifПримечание.
В отличие от сканирования, добавочное, ручное и автоматическое заполнение отслеживания изменений не рассчитаны на максимизацию возможностей ресурсов оборудования с целью повышения скорости их работы. Поэтому данные предложения по настройке могут не дать результата в виде повышения производительности полнотекстового индексирования.

Рекомендации по увеличению производительности обработки полнотекстовых запросов

Ниже приведен список рекомендаций по увеличению производительности обработки полнотекстовых запросов.

  • Выполните дефрагментацию индекса базовой таблицы с помощью инструкции ALTER INDEX REORGANIZE.
  • Реорганизуйте полнотекстовый каталог с помощью инструкции ALTER FULLTEXT CATALOG REORGANIZE. Это необходимо сделать до тестирования производительности, поскольку выполнение данной инструкции приводит к общему слиянию полнотекстовых индексов в каталоге.
  • В качестве столбца полнотекстового ключа выбирайте небольшой столбец. Несмотря на поддержку столбцов длиной 900 байт, не рекомендуется создавать полнотекстовый индекс, в котором используется ключевой столбец такого размера.
  • Соедините несколько предикатов CONTAINS в один. В SQL Server в запросе с предикатом CONTAINS можно указывать список столбцов.
  • Если нужно лишь получить полнотекстовый ключ или сведения о ранжировании, вместо предикатов CONTAINS и FREETEXT используйте соответственно функции CONTAINSTABLE и FREETEXTTABLE.
  • Для ограничения количества результатов и повышения производительности используйте параметр TOP_N_BY_RANK функций FREETEXTTABLE и CONTAINSTABLE. Этот параметр следует применять, если нет необходимости получить все возможные совпадения.
  • Проверьте план полнотекстового запроса и убедитесь, что выбран подходящий план объединения. При необходимости используйте подсказку в объединении или подсказку в запросе. Если в полнотекстовом запросе используется параметр, его начальное значение определяется планом запроса. Для принудительной компиляции запроса с заданным значением используйте подсказку в запросе OPTIMIZE FOR. Это позволяет сделать план запроса детерминированным и повысить его производительность.

См. также

Основные понятия

Администрирование компонента Full-Text Search

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

14 апреля 2006 г.

Измененное содержимое
  • Существенно переработаны предложения по настройке производительности.