Вопросом, который обычно возникает, когда Database Engine (или любая другая система реляционной базы данных) выполняет запрос, является вопрос, как доступ к необходимым данным и обработка этих данных в запросе может быть выполнена с максимальной эффективностью. Компонент системы базы данных, ответственный за такую деятельность, называется оптимизатором запросов. Задачей оптимизатора запросов (или просто оптимизатора) является рассмотрение множества возможных стратегий выполнения поиска требуемых в запросе данных и выбор наиболее эффективной стратегии. Выбранная стратегия называется планом выполнения запроса. Оптимизатор принимает свои решения с учетом таких факторов, как: насколько велики по размерам таблицы, вовлеченные в запрос, какие существуют индексы и какие логические операции (and, or, not) используются в предложении where. Обычно такие факторы называются статистическими данными.
Оптимизатор запросов
Техника слияния соединения предоставляет рентабельную альтернативу создания индекса вложенным циклам. Строки соединяемых таблиц должны быть физически упорядочены с использованием значений столбца соединения. Обе таблицы затем сканируются в порядке столбцов соединения, отыскивая соответствующие строки с теми же значениями столбцов соединения. Псевдокод в примере 20.2 демонстрирует технику обработки процесса соединения для двух таблиц. Техника выполнения слияния соединения будет иметь высокие накладные расходы, если строки в обеих таблицах не отсортированы. Однако этот метод является предпочтительным, когда для значений обоих столбцов соединения выполнена предварительная сортировка. (Это всегда тот случай, когда оба соединяемых столбца являются первичными ключами в соответствующих таблицах, потому что…
Техника хеширования соединения обычно используется, когда не существует никаких индексов для соединяемых столбцов. В случае техники хеширования соединения обе таблицы, которые должны быть соединены, рассматриваются как два потока ввода: компонуемый ввод и контрольный ввод. (Наименьшая таблица обычно представляет компонуемый ввод.) Этот процесс работает следующим образом: 1. Значение соединяемого столбца строки из компонуемого ввода сохраняется в хешированном сегменте памяти в зависимости от количества, полученного от алгоритма хеширования. 2. Как только все строки из компонуемого ввода будут обработаны, начинается обработка строк из контрольного ввода. 3. Каждое значение соединяемого столбца строки из контрольного ввода обрабатывается с использованием того же алгоритма хеширования. 4. Отыскиваются…
Database Engine поддерживает несколько инструментов, которые позволяют редактировать конкретные действия оптимизатора запросов. Помимо прочих вы можете использовать следующие инструменты: ♦ оператор set (для отображения в виде текста или в формате XML планов выполнения); ♦ Management Studio (для отображения планов выполнения в графическом виде); ♦ представления динамического управления (Dynamic management views, DMV) и функции; ♦ SQL Server Profiler. В следующих разделах описываются первые три инструмента.
Для понимания различных опций оператора set вам нужно знать, что существуют три различные формы, в которых может отображаться план выполнения запроса: ♦ текстовая форма; ♦ использование XML; ♦ графическая форма. Первые две формы используют оператор set, так что эти две формы обсуждаются в следующих подразделах. Графическая форма плана выполнения обсуждается в разд. «Management Studio и графические планы выполнения» далее В этом разделе.
Результат текстовой формы плана выполнения возвращается в форме строк. Database Engine использует вертикальную полосу для отображения зависимостей между существующими операциями. Текстовая форма планов выполнения может отображаться с использованием следующих опций оператора set: ♦ showplan_text; ♦ showplan_all. Пользователи, выполняющие запрос, могут отображать текстовый план выполнения запроса при помощи активации (установив значение опции в on) либо у опции оператора showplan_text, либо у опции showplan_all до того, как они введут соответствующий оператор select. Опция showplanall отображает ту же детальную информацию относительно плана выполнения запроса, что и showplan_text с дополнительной оценкой требуемых ресурсов для этого оператора. В примере 20.3 показано использование опции set showplan_text.…
Фраза «план выполнения XML» означает, что план выполнения запроса отображается в документе XML. (Более подробную информацию об XML.) Наиболее важным преимуществом использования планов выполнения XML является то, что такие планы могут быть перенесены с одной системы на другую, позволяя использовать их в другом программном окружении. Оператор set имеет две опции, связанные с XML: ♦ showplan_xml; ♦ statistics xml. Опция showplan_xml возвращает информацию в виде набора документов XML. Другими словами, если вы активируете эту опцию, то Database Engine возвращает детальную информацию о том, как операторы будут выполняться в форме хорошо созданного документа XML без их фактического выполнения. Каждый оператор отображается в…
Оператор set имеет много других опций, которые используются по отношению к блокировке, транзакции и операторам даты-времени. В связи со статистическими данными Database Engine поддерживает следующие три опции оператора set: ♦ statistics io; ♦ statistics time; ♦ statistics profile. В случае задания опции statistics io система отображает статистическую информацию, связанную со степенью активности по отношению к диску, сгенерированную запросом - например, количество операций ввода/вывода, обработанных в запросе. При задании опции statistics time система отображает время обработки, оптимизации и выполнения запроса. Когда активирована опция statistics profile, каждый выполняемый запрос возвращает его обычный результирующий набор, за которым следует дополнительный результирующий набор, возвращающий набор…
Графический план выполнения является лучшим способом отображения плана выполнения запроса, если вы пока еще начинающий или просто хотите быстро просмотреть разные планы в короткое время. Эта форма отображения использует пиктограммы для представления операторов в плане запроса. В качестве примера того, как графические планы выполнения могут быть запущены и как они выглядят, посмотрите на рис. 20.2, который показывает графический план выполнения запроса из примера 20.3. Для отображения плана выполнения в графической форме запишите запрос в окне Query Editor утилиты SQL Server Management Studio и щелкните мышью по кнопке Display Estimated Execution Plan в панели инструментов Management Studio. Альтернативным способом является выбор…
В этом разделе представлено несколько запросов, связанных с базой данных Adventureworks вместе с их планами выполнения. Эти примеры демонстрируют уже рассмотренные темы, предоставляя вам возможность увидеть, как оптимизатор запросов работает на практике. В примере 20.6 вводится новая таблица (newaddresses) в базу данных sample. Пример 20.6 копирует содержимое таблицы address из схемы Person базы данных Adventureworks в новую таблицу базы данных sample. Это необходимо, потому что первая таблица содержит несколько индексов, которые препятствуют прямому использованию таблицы address из базы данных Adventureworks для демонстрации специфических свойств оптимизатора запросов. Кроме этого, в примере создается индекс для столбца stateProvinceiD этой таблицы. В примере…
Существует много представлений (и функций) динамического управления, которые напрямую связаны с оптимизатором запросов. В этом разделе рассматриваются следующие DMV (Dynamic Management View, представления динамического управления): ♦ sys. dm_exec_query_optimizer_infо; ♦ sys.dm_exec_query_plan; ♦ sys.dm_exec_query_stats; ♦ sys.dm_exec_sql_text; ♦ sys.dm_exec_text_query_plan; ♦ sys .dm_exec_procedure_stats (новое в SQL Server 2008). sys.dm_exec_query_optimizer_info Представление sys.dm_exec_query_optimizer_info, пожалуй, является наиболее важным DMV в плане работы оптимизатора запросов, потому что оно возвращает детальную статистику об операции оптимизатора. Вы можете использовать это представление при настройке рабочей нагрузки для определения проблем оптимизации запросов или для повышения производительности. Представление sys.dm_exec_query_optimizer_info содержит три столбца: counter, occurrence и value. Столбец counter содержит имя события оптимизатора, тогда…
© 2017 serversql.ru. Все права защищены.