Поиск непараметризованных запросов. Запросы без BIND переменных Oracle DB

Для поиска запросов с большим Version Count (запросы без использования bind переменных) можно использовать запрос ниже:

SELECT PLAN_HASH_VALUE,MODULE, COUNT(SQL_ID) AS CNT
  FROM V$SQLAREA  
 WHERE SQL_TEXT NOT LIKE '%dynamic_sampling%'     
 GROUP 
    BY PLAN_HASH_VALUE, MODULE 
HAVING COUNT(SQL_ID) > 10 
 ORDER 
    BY 3 DESC 

Более расширенный запрос на базе первого

WITH SRC AS ( SELECT PLAN_HASH_VALUE,MODULE, COUNT(SQL_ID) AS CNT
                FROM V$SQLAREA  
               WHERE SQL_TEXT NOT LIKE '%dynamic_sampling%'     
               GROUP 
                  BY PLAN_HASH_VALUE, MODULE 
              HAVING COUNT(SQL_ID) > 10 
               ORDER 
                  BY 3 DESC                 
)
SELECT SRC2.PLAN_HASH_VALUE 
     , SRC2.MODULE
     , SRC2.SQL_TEXT
     , SRC2.SQL_FULLTEXT          
     , SRC2.CNT
     , SRC2.FIRST_LOAD_TIME
     , SRC2.LAST_LOAD_TIME                  
  FROM (SELECT V$SQLAREA.PLAN_HASH_VALUE
             , V$SQLAREA.MODULE
             , V$SQLAREA.SQL_TEXT
             , V$SQLAREA.SQL_FULLTEXT
             , V$SQLAREA.FIRST_LOAD_TIME
             , V$SQLAREA.LAST_LOAD_TIME             
             , SRC.CNT  
             , ROW_NUMBER() OVER (PARTITION BY V$SQLAREA.PLAN_HASH_VALUE ORDER BY SRC.CNT DESC) AS RN
          FROM SRC
          JOIN V$SQLAREA
            ON SRC.PLAN_HASH_VALUE = V$SQLAREA.PLAN_HASH_VALUE
       ) SRC2
 WHERE SRC2.RN = 1
 ORDER 
    BY SRC2.CNT DESC; 
12:39
37
Нет комментариев. Ваш будет первым!
Загрузка...