2009-11-29 3 views
1

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

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

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

ответ

2

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

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

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

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

Посмотрите на The Oracle documentation on using Oracle Trace

+0

+1: Крысы, избили меня! –

+0

Если вам нужна дополнительная информация или вы хотите уточнить, пожалуйста, задайте в комментариях. Я сделаю все возможное, чтобы помочь вам. –

+1

Запрос привязан к имени схемы синтаксического анализа и пользователю сеанса. Таким образом, user_a может выполнить ALTER SESSION SET CURRENT_SCHEMA = USER_B и запустить SELECT * FROM EXAMPLE. Запрос ищет таблицы/представления/синонимы для EXAMPLE в USER_B, но также проверяет, имеет ли USER_A привилегии для этих объектов. Может быть несколько SQL с идентичным текстом, которые относятся к объектам с одинаковым именем в разных схемах. –

0

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

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

Для получения более подробной информации см. Invoker Rights Versus Definer Rights.

+0

Это не о запросе внутри процедуры/функции/пакет, его простой оператор выбора –

+0

Простой оператор выбора равно INVOKER случае прав. Когда два разных пользователя выдают одинаковые запросы, этот запрос будет обрабатываться два раза. Вы можете найти две строки в V $ SQL для этого запроса, имеющие идентичные sql_text и sql_id, но различные parsing_schema_name. –

+0

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

1

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

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

  1. Разбор шаги
    1. Проверка синтаксиса
    2. семантический анализ
    3. ли запрос был выполнен в другом сеансе ?
  2. Hard Анализировать
    1. Анализировать
    2. Оптимизировать
    3. Сформировать план запроса.

Если ответ на # 1,3 - да Oracle пропускает жесткую часть разбора, и использует существующий план запроса.

Для получения дополнительной информации:
* AskTom: Difference between soft parse and hard parse
* Bind variables - The key to application performance

Смежные вопросы