О функции отсутствующих индексов
Изменения: 14 апреля 2006 г.
Функция отсутствующих индексов использует объекты DMO и классы событий Showplan для получения сведений об отсутствующих индексах, благодаря которым можно повысить производительность обработки запросов в SQL Server.
Компоненты
При формировании плана запроса оптимизатор запросов анализирует, какие индексы наилучшим образом подойдут для конкретного условия фильтра. Если наиболее подходящие индексы не существуют, оптимизатор запросов формирует близкий к оптимальному план запроса, однако по-прежнему сохраняет сведения об этих индексах. Функция отсутствующих индексов позволяет получить сведения об этих индексах, что дает возможность решить, стоит ли их реализовывать или нет.
Функция отсутствующих индексов состоит из следующих компонентов.
- Набор объектов DMO, к которым можно обращаться с запросами для извлечения сведений об отсутствующих индексах.
- Элемент MissingIndexes в классах событий XML Showplans, соотносящий индексы, являющиеся по мнению оптимизатора запросов отсутствующими, с запросами, для которых они считаются отсутствующими.
Компоненты функции отсутствующих индексов подробно описываются в следующих подразделах.
Объекты DMO
При выполнении типичной рабочей нагрузки на сервере SQL Server можно получить сведения об отсутствующих индексах, обратившись с запросом к объектам DMO, перечисленным в следующей таблице. Эти объекты DMO хранятся в базе данных master.
Объект DMO | Возвращаемые сведения |
---|---|
Возвращает сводные сведения о группах отсутствующих индексов, например сведения о возможном увеличении производительности, которое может быть достигнуто за счет реализации конкретных групп отсутствующих индексов. |
|
Возвращает сведения о конкретной группе отсутствующих индексов, например идентификатор группы и идентификаторы всех отсутствующих индексов, содержащихся в этой группе. |
|
Возвращает подробные сведения об отсутствующем индексе, например имя и идентификатор таблицы, в которой отсутствует индекс, а также имена и типы столбцов, на основе которых должен быть сформирован отсутствующий индекс. |
|
Возвращает информацию о столбцах таблицы в базе данных, которых не хватает в индексе. |
Информацию, возвращаемую этими объектами DMO, можно использовать в программных средствах и сценариях, в которых на основе этих сведений формируются DDL-инструкции CREATE INDEX, реализующие названные отсутствующие индексы.
Согласованность транзакций
Частные изменения отдельных строк данных объектов DMO не являются транзакционно согласованными. Это значит, что при отмене запроса или откате транзакции, включающей в себя этот запрос, строки, содержащие сведения об отсутствующих индексах для данного запроса, продолжат свое существование.
Поддерживаются только транзакции целиком. Контрольные точки и частичный откат не поддерживаются.
Примечание. |
---|
При изменении метаданных таблицы из этих объектов DMO удаляются все сведения об отсутствующих индексах для данной таблицы. Изменения метаданных таблицы могут возникать, например при добавлении или удалении столбцов из таблицы или при создании индекса по столбцу таблицы. |
элемент MissingIndexes класса событий XML Showplan
Для соотнесения запросов, имеющих отсутствующие индексы, перечисленные в результатах объектов DMO, можно просмотреть элемент MissingIndexes класса событий XML Showplans. Элемент MissingIndexes проиллюстрирован в следующем примере.
<ShowPlanXML…>
<BatchSequence>
<Batch>
<Statements>
<StmtSimple…>
<StatementSetOptions… />
<QueryPlan…>
``<MissingIndexes>
<MissingIndexGroup Impact="22.8764">
<MissingIndex Database="[ADVENTUREWORKS]" Schema="[Person]" Table="[Address]">
<ColumnGroup Usage="EQUALITY">
<Column Name="[PostalCode]" ColumnId="4" />
</ColumnGroup>
<ColumnGroup Usage="INEQUALITY">
<Column Name="[ModifiedDate]" ColumnId="5" />
</ColumnGroup>
<ColumnGroup Usage="INCLUDE">
<Column Name="[AddressLine1]" ColumnId="2" />
<Column Name="[AddressLine2]" ColumnId="3" />
<Column Name="[StateProvinceID]" ColumnId="1" />
</ColumnGroup>
</MissingIndex>
</MissingIndexGroup>
</MissingIndexes>
Благодаря сведениям, содержащимся в элементе MissingIndexes, можно определить, какие именно индексы помогут поднять производительность выполнения конкретного запроса, описанного в элементе StmtSimple, который сам включает в себя инструкцию языка Transact-SQL. Затем с помощью сведений, возвращенных для данного элемента, можно написать собственную DDL-инструкцию CREATE INDEX.
Включение и выключение функции отсутствующих индексов
Функция отсутствующих индексов по умолчанию включена. Отсутствуют управляющие элементы, позволяющие включать или выключать ее, а также сбрасывать таблицы, возвращаемые при обращении с запросом к объектам DMO. При перезапуске SQL Server удаляются все сведения об отсутствующих индексах.
Данную функцию можно отключить только в том случае, если экземпляр SQL Server запускается с аргументом -x с помощью программы командной строки sqlservr. Дополнительные сведения см. в разделе Приложение sqlservr.
См. также
Основные понятия
Использование сведений об отсутствующих индексах для формирования инструкций CREATE INDEX
Ограничения на использование функции отсутствующих индексов
Возможности, относящиеся к настройке запросов
Другие ресурсы
Справка и поддержка
Получение помощи по SQL Server 2005
Журнал изменений
Версия | Журнал |
---|---|
14 апреля 2006 г. |
|