Планировщик запросов

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Планировщик запросов представляет собой упорядоченный набор шагов, используемых для доступа к данным в системе управления реляционными базами данных SQL. Это конкретный случай концепции реляционных моделей планов доступа. Поскольку SQL является декларативным, обычно существует большое количество альтернативных способов выполнения заданного запроса с широким диапазоном производительности. Когда запрос отправляется в базу данных, оптимизатор запросов оценивает некоторые из различных, правильных возможных планов выполнения запроса и возвращает то, что он считает лучшим вариантом. Поскольку оптимизаторы запросов несовершенны, пользователям баз данных и администраторам иногда приходится вручную проверять и настраивать планы, созданные оптимизатором, для повышения производительности.

Создание планов запросов[править | править вики-текст]

Данная система управления базой данных может предложить один или несколько механизмов для возврата плана для заданного запроса. В некоторых пакетах есть инструменты, которые будут генерировать графическое представление плана запроса. Другие инструменты позволяют установить в соединении специальный режим, чтобы заставить СУБД возвращать текстовое описание плана запроса. Другой механизм для извлечения плана запроса включает запрос к таблице виртуальной базы данных после выполнения запроса, который нужно исследовать. В Oracle, например, это может быть достигнуто с помощью оператора EXPLAIN PLAN.

Графические планы[править | править вики-текст]

Например, инструмент SQL Server Management Studio, который поставляется с Microsoft SQL Server, показывает этот графический план при выполнении этого двухстолового соединения с образцовой базой данных:

SELECT *
FROM HumanResources.Employee AS e
   INNER JOIN Person.Contact AS c
   ON e.ContactID = c.ContactID

ORDER BY c.LastName Пользовательский интерфейс позволяет исследовать различные атрибуты операторов, участвующих в плане запроса, в том числе тип оператора, количество строк, которое каждый оператор потребляет или производит, а также ожидаемую стоимость работы каждого оператора.

Текстовые планы[править | править вики-текст]

Текстовый план, приведенный для того же запроса на скриншоте, показан здесь

StmtText
----
 |--Sort(ORDER BY:([c].[LastName] ASC))
      |--Nested Loops(Inner Join, OUTER REFERENCES:([e].[ContactID], [Expr1004]) WITH UNORDERED PREFETCH)
           |--Clustered Index Scan(OBJECT:([AdventureWorks].[HumanResources].[Employee].[PK_Employee_EmployeeID] AS [e]))
           |--Clustered Index Seek(OBJECT:([AdventureWorks].[Person].[Contact].[PK_Contact_ContactID] AS [c]),
              SEEK:([c].[ContactID]=[AdventureWorks].[HumanResources].[Employee].[ContactID] as [e].[ContactID]) ORDERED FORWARD)

Он указывает, что механизм запросов выполнит проверку индекса первичного ключа в таблице Employee и поиск по индексу первичного ключа (столбец ContactID) в таблице Contact, чтобы найти совпадающие строки. Результирующие строки с каждой стороны будут показаны вложенному оператору объединения вложенных циклов, отсортированы, а затем возвращены как результат, установленный для соединения. Чтобы настроить запрос, пользователь должен понимать различные операторы, которые может использовать база данных, и те, которые могут быть более эффективными, чем другие, при этом обеспечивая семантически правильные результаты запроса.

Настройка базы данных[править | править вики-текст]

Просмотр плана запроса может предоставить возможности для новых индексов или изменения существующих индексов. Он также может показать, что база данных неправильно использует существующие индексы (см. Оптимизатор запросов).

Настройка запросов[править | править вики-текст]

Основная статья: Оптимизатор запросов Оптимизатор запросов не всегда будет выбирать наиболее эффективный план запроса для данного запроса. В некоторых базах данных план запроса можно просмотреть, найти проблемы, а затем оптимизатор запросов дает подсказки о том, как его улучшить. В других базах данных можно попробовать альтернативы для выражения одного запроса (другие запросы, возвращающие те же результаты). Некоторые инструменты запросов могут генерировать встроенные подсказки в запросе для использования оптимизатором. Некоторые базы данных, такие как Oracle, предоставляют таблицу планов для настройки запросов. Эта таблица планов вернет стоимость и время выполнения запроса. Oracle предлагает два подхода к оптимизации:

  • Оптимизация на основе CBO или затрат
  • Оптимизация на основе RBO или правил

RBO медленно устаревает. Для использования CBO все таблицы, на которые ссылается запрос, должны быть проанализированы. Чтобы проанализировать таблицу, администратор базы данных может запустить код из пакета DBMS_STATS. Другие инструменты для оптимизации запросов:

Ссылки[править | править вики-текст]