Обработка SQL-запроса
Вновь решил затронуть тему оптимизации. Речь пойдет об обработке запроса, важно понимать как и что устроено, хотя бы на общем уровне.
Обработка состоит из нескольких стадий (см рисунок):
- парсинг или разбор (parsing)
- оптимизация (optimization)
- генерация плана (row source generation)
- выполнение (execution).
В зависимости от запроса, база данных может опустить некоторые из стадий.
Если запрос не найден в общей области памяти (shared pool), т.е. ни разу не разбирался, то будет выполнен ресурсоемкий жесткий разбор (hard parse), иначе мягкий разбор (soft parse).
Стадии парсинга (parse):
- проверка синтаксиса (syntax check)
- семантическая проверка (semantic check)
- проверка на наличие такого же запроса в разделяемой области памяти (shared pool check).
- и некоторые другие проверки.
В следующих постах будут подробности о стадиях, в т.ч. парсинге.
#архитектура #оптимизация #parsing
Вновь решил затронуть тему оптимизации. Речь пойдет об обработке запроса, важно понимать как и что устроено, хотя бы на общем уровне.
Обработка состоит из нескольких стадий (см рисунок):
- парсинг или разбор (parsing)
- оптимизация (optimization)
- генерация плана (row source generation)
- выполнение (execution).
В зависимости от запроса, база данных может опустить некоторые из стадий.
Если запрос не найден в общей области памяти (shared pool), т.е. ни разу не разбирался, то будет выполнен ресурсоемкий жесткий разбор (hard parse), иначе мягкий разбор (soft parse).
Стадии парсинга (parse):
- проверка синтаксиса (syntax check)
- семантическая проверка (semantic check)
- проверка на наличие такого же запроса в разделяемой области памяти (shared pool check).
- и некоторые другие проверки.
В следующих постах будут подробности о стадиях, в т.ч. парсинге.
#архитектура #оптимизация #parsing
Parsing (Разбор)
Запрос разделяется на части и помещается в специальную структуру для работы с ним.
Далее происходит следующее:
1. Синтаксическая и семантическая проверки.
2. Проверка прав доступа к объектам.
3. Выделение места в Private SQL Area (приватная область в памяти сессии) под запрос.
4. Поиск в библиотечном кэше разделяемой области памяти (shared pool) такого запроса. Если запрос найден (library cache hit), то происходит его немедленное выполнение (soft parse). Если не найден (library cache miss), то происходит его обработка и помещение в shared pool (hard parse). Поиск происходит по sql_id.
sql_id - уникальное хэш-значение текста запроса (см. представление v$sql).
Синтаксический анализ не может отловить все ошибки (дублирование значения в PK и др). Эти ошибки возникнут только на этапе выполнения.
Поскольку, hard parse трудоемкая операция необходимо стараться снижать количество жестких разборов. Например, использовать связные переменные (bind variables).
#архитектура #оптимизация #parsing
Запрос разделяется на части и помещается в специальную структуру для работы с ним.
Далее происходит следующее:
1. Синтаксическая и семантическая проверки.
2. Проверка прав доступа к объектам.
3. Выделение места в Private SQL Area (приватная область в памяти сессии) под запрос.
4. Поиск в библиотечном кэше разделяемой области памяти (shared pool) такого запроса. Если запрос найден (library cache hit), то происходит его немедленное выполнение (soft parse). Если не найден (library cache miss), то происходит его обработка и помещение в shared pool (hard parse). Поиск происходит по sql_id.
sql_id - уникальное хэш-значение текста запроса (см. представление v$sql).
Синтаксический анализ не может отловить все ошибки (дублирование значения в PK и др). Эти ошибки возникнут только на этапе выполнения.
Поскольку, hard parse трудоемкая операция необходимо стараться снижать количество жестких разборов. Например, использовать связные переменные (bind variables).
#архитектура #оптимизация #parsing