В случае, если пользователь или программа устанавливает соединение с экземпляром Oracle и выдает команды SQL или PL/SQL, процесс сервера приступает к работе по этим командам. Обработка операторов SQL разбивается на несколько фаз (в зависимости от того, является SQL оператором
select или
нет):анализ (Parse), определение (Define), связывание (Bind), выполнение (Execute)
и выборка (Fetch). Все операторы проходят первые четыре фазы, но только оператор
select
должен возвращать строки обратно в процесс пользователя. Ниже в таблице подводятся итоги того, что происходит на каждой из этих фаз.Фаза оператора SQL Описание
Анализ
|
Процесс сервера проверяет синтаксис оператора а также
|
выполняет разрешение объектов и проверки защиты для
|
|
выполнения SQL Затем он строит дерево разборки
|
|
и разрабатывает план выполнения оператора SQL
|
|
Определение
|
Наряду с другими действиями пользователь и процесс сервера
|
обмениваются информацией о типах данных, содержащихся в
|
|
столбцах, упоминающихся в операторах SQL В этом процессе
|
|
участвует SQL*Net или Net8/Net8i.
|
|
Связывание
|
Происходит разрешение значений переменных связи (:Ы, :v1),
|
на которые ссылается оператор SQL
|
|
Выполнение
|
Если необходимо, процесс сервера считывает в память блоки
|
данных из файла (только для операторов insert, update и delete)
|
|
и производит с ними манипуляции в памяти. Именно в этой
|
|
фазе происходит осуществление плана выполнения. Важно
|
|
отметить, что любая "параллелизация" запросов имеет место до
|
|
у
|
начала фазы выполнения.
|
Выборка
|
Для операторов select эта фаза означает чтение относящихся к
|
делу блоков в буферный кэш базы данных, применение плана
|
|
выполнения и возврат строк в инициировавшее запрос
|
|
приложение (процесс пользователя).
|
В фазе анализа процесс сервера хеширует оператор на основании значения в коде ASCII каждого символа. Получающееся в результате значение транслируется в адрес, соответствующий адресу размещения в библиотечном кэше в области коллективного пула. Если по хешированному адресу оператор не обнаруживается, то выполняются проверки оператора на корректность синтаксиса, привилегии защиты для выполняющего его пользователя и разрешение объектов для всех ссылочных объектов в SQL.
Прибыв по хешированному адресу, серверный процесс проверяет, хранится ли здесь уже оператор, соответствующий поступившему на вход анализатора оператору. Если такой не обнаруживается, поступивший оператор будет подвергнут жесткой разборке... Это означает, что должно быть что-то называемое мягкой разборкой. Ну да, конечно, есть и такая. И приложения, которым приходится выполнять повторяющиеся жесткие разборки, дают нам возможность смягчить удар. Это вовсе не каламбур. Мы поговорим об этом в следующем разделе.
Если по вычисленному хеш-адресу нет оператора SQL, процесс продолжается, выполняет другие рекурсивные операторы SQL и разрабатывает для этого оператора дерево разборки и план выполнения. Дерево разборки на самом деле представляет собой реформатированный и структурированный в виде дерева оператор SQL. План выполнения получается из этого отображения и диктует наилучший (в большинстве случаев) метод выборки данных.
В фазе определения для разрешения типов данных между процессами пользователя и сервера привлекаются SQTfNet или Net8/Net8i. Это представляется важным, так как клиент (процесс пользователя) может работать в среде Windows NT (для которой естественной кодировкой является ASCII), а сервер, возможно, является мэйнфреймом IBM, на котором работает Oracle для MVS (с естественной кодировкой EBCDIC). Значит, типы данных long, short, word, double и любые другие необходимо отобразить в естественную для обеих сторон среду. В этом и скрывается причина появления фазы определения.
В фазе связывания происходит разрешение значений переменных связи.
Применение переменных связи в операторах SQL прошло длинный путь "повторного использования SQL" и в то же время уменьшения конкуренции в области коллективного пула. Очень важно еще раз применить SQL. Добиться этого можно путем использования переменных связи.
Выполнение является стадией реального приложения плана выполнения, или отображения, к данным. Если оператор SQL - это оператор
insert, update
илиdelete,
то будут модифицироваться данные. Для этих операторов должны своевременно, т. е. до того, как данные модифицируются в памяти, генерироваться и регистрироваться релевантные элементы протокола (для восстановления экземпляра и базы данных) и элементы отката (для восстановленияФаза выборки применима только к операторам
select.
Именно в этой фазе реально происходит чтение данных в буферный кэш базы данных, применение плана выполнения и возврат отобранных строк процессу пользователя. Это последний шаг обработки SQL.< Предыдущая | Следующая > |
---|