Динамические запросы

Если динамический запрос выполняется очень часто, то его следует перевести в статический или использовать его с параметрами. Каждый такой запрос занимает память в SGA, и может вытеснять из неё другие запросы.

Например:

DELETE
FROM EQUIPMENT
WHERE ID_EQUIP = 402

стоит заменить на :

DELETE
FROM EQUIPMENT
WHERE ID_EQUIP = :ID_EQ

Для поиска подобных SQL можно воспользоваться таким запросом:

SELECT MAX(sql_text), COUNT(*)
FROM sys.V_$SQL vs
WHERE executions=1 AND sql_text NOT LIKE '%:%'
GROUP BY SUBSTR( sql_text,1,15)
ORDER BY 2 DESC

или более развёрнутым запросом:

-- возвращает динамические SQL, находящиеся в кэше
SELECT sql_text,executions,first_load_time, disk_reads, buffer_gets,
rows_processed, optimizer_cost, address, hash_value, du.USERNAME
FROM sys.V_$SQL vs, DBA_USERS du
WHERE du.USER_ID=vs.PARSING_USER_ID AND executions=1 AND sql_text NOT LIKE '%:%'
ORDER BY SUBSTR( sql_text,1,15)

Хостинг от uCoz