КЭШ SQL в оракуле - PullRequest
       16

КЭШ SQL в оракуле

1 голос
/ 29 ноября 2009

Как Oracle CACHE Query (SQL), выполнение Query содержит следующие шаги. 1. PARSE 2. Выполнить 3. Получить

в первом шаге оракул проверяет, существует ли запрос в CACHE (Shared Pool) или нет (он будет существовать, если запрос идентичен и основан на LRU), если существует, PARSING будет пропущен и начнется выполнение. Поэтому, чтобы повысить производительность запросов, мы должны использовать переменные связывания и использовать идентичные SQL-запросы.

Но в парсинге oracle также проверяет аутентификацию (доступ пользователей), если несколько пользователей используют один и тот же запрос, как оракул пропускает / использует парсинг?

Ответы [ 3 ]

2 голосов
/ 29 ноября 2009

Разбор запроса не привязан к пользователю, он зависит от запроса. Обратите внимание, что требуется точный символ для совпадения символов. Пробелы и комментарии в запросе приведут к тому, что он пропустит совпадение общего пула.

Затем дерево синтаксического анализа используется при создании плана выполнения. Если в новом запросе используется та же схема, что и для сопоставленного запроса, то используется существующий план выполнения.

Вы можете проверить это, создав несколько схем, одну с небольшим объемом данных и одну с большим количество. Затем проанализируйте все таблицы. Посмотрите на планы выполнения для одного и того же запроса с очень разными объемами данных. Это покажет разные планы выполнения для одного и того же запроса.

Теперь выполните запрос большое количество раз и проверьте количество времени, которое требуется для первого а затем последующие казни. Используйте Oracle Trace и посмотрите на боль в левой руке для «Re-Parse» частота. Это также можно почерпнуть из некоторых таблиц словаря.

Взгляните на Документация Oracle по использованию Oracle Trace

1 голос
/ 29 ноября 2009

Оракул первого шага проверяет, существует ли запрос в CACHE (Shared Pool) или нет (он будет существовать, если запрос идентичен и основан на LRU), если существует, PARSING будет пропущен и начнется выполнение. Поэтому для повышения производительности запросов мы должны использовать переменные связывания и использовать идентичные SQL-запросы.

Это реальный процесс при выполнении запроса в Oracle:

  1. Шаги синтаксического анализа
    1. Проверка синтаксиса
    2. Семантический анализ
    3. Был ли запрос выполнен в другом сеансе?
  2. Hard Parse
    1. Анализировать
    2. Оптимизировать
    3. Создать план для запроса.

Если ответ на вопрос 1.3 - да, Oracle пропускает сложный анализ и использует существующий план запроса.

Для получения дополнительной информации:
* AskTom: разница между мягким разбором и сложным разбором
* Связывание переменных - ключ к производительности приложения

0 голосов
/ 29 ноября 2009

Обычная практика в Oracle - создавать хранимые процедуры с определителем прав , что означает, что запросы выполняются с привилегиями их определителя, независимо от того, кто их вызывает. Вот почему кеш работает хорошо.

Если вы создаете процедуру или пакет с правами для вызывающего (authid current_user), то запросы будут анализироваться для каждого вызывающего в отдельности.

Подробнее см. Права Invoker и Права Определителя .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...