Базовый механизм запуска SQL-запросов в Oracle

#c #sql #c #oracle

#c #sql #c #Oracle

Вопрос:

Когда мы запускаем SQL-запрос, подобный

ВЫБЕРИТЕ * ИЗ SOME_TABLE_NAME в ORACLE

Что именно происходит внутри? Есть ли какой-либо синтаксический анализатор на работе? Это на C / C ?

Может ли кто-нибудь объяснить, пожалуйста?

Заранее спасибо всем.

Ответ №1:

Короткий ответ: да, конечно, внутри Oracle есть модуль синтаксического анализа, который интерпретирует текст инструкции. Насколько я понимаю, основная часть исходного кода Oracle написана на C.

Для общей справки:

Любой оператор SQL потенциально проходит три этапа, когда Oracle запрашивает его выполнение. Часто управление возвращается клиенту между каждым из этих шагов, хотя детали могут зависеть от конкретного используемого клиента и способа выполнения вызовов.

(1) Синтаксический анализ — я считаю, что первое действие на самом деле состоит в том, чтобы проверить, есть ли у Oracle кэшированная копия точного текста инструкции. Если это так, это может сэкономить работу по повторному анализу вашего оператора. Если нет, он, конечно, должен проанализировать текст, а затем определить план выполнения, который Oracle считает оптимальным для оператора. Итак, концептуально, по крайней мере, на этом этапе работают две сущности — анализатор и оптимизатор.

(2) Execute — для оператора SELECT этот шаг обычно выполняет ровно столько плана выполнения, чтобы быть готовым вернуть некоторые строки клиенту. В зависимости от деталей плана это может означать выполнение всего процесса целиком или выполнение лишь очень малой части работы. Для любого другого типа инструкций фаза выполнения — это когда вся работа фактически выполнена.

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

Комментарии:

1. Большое спасибо за это понимание, Дэйв.

Ответ №2:

Манаси,

Я думаю, что внутри Oracle у Oracle будет свой собственный синтаксический анализатор, который выполняет синтаксический анализ и пытается скомпилировать запрос. Думаю, это не связано с C или C .

Но необходимо подтвердить.

-Джастин Сэмюэль.