查詢出系統中沒有使用繫結變數的SQL
查詢出系統中沒有使用繫結變數的SQL
ASKTOM網站提供了一個函式remove_constants,來檢查共享池中的SQL執行情況
1、首先建立一個表,用於存放整理過的資料:
create table t1 as select sql_text from v$sqlarea;
2、給表增加一個欄位:
alter table t1 add sql_text_wo_constants varchar2(1000);
3、建立函式remove_constants:
create or replace function
remove_constants( p_query in varchar2 ) return varchar2
as
l_query long;
l_char varchar2(1);
l_in_quotes boolean default FALSE;
begin
for i in 1 .. length( p_query )
loop
l_char := substr(p_query,i,1);
if ( l_char = '''' and l_in_quotes )
then
l_in_quotes := FALSE;
elsif ( l_char = '''' and NOT l_in_quotes )
then
l_in_quotes := TRUE;
l_query := l_query || '''#';
end if;
if ( NOT l_in_quotes ) then
l_query := l_query || l_char;
end if;
end loop;
l_query := translate( l_query, '0123456789', '@@@@@@@@@@' );
for i in 0 .. 8 loop
l_query := replace( l_query, lpad('@',10-i,'@'), '@' );
l_query := replace( l_query, lpad(' ',10-i,' '), ' ' );
end loop;
return upper(l_query);
end;
/
4、將v$sql檢視中的欄位:sql_text的資料用remove_constants處理後,來更新t1表
update t1 set sql_text_wo_constants = remove_constants(sql_text);
5、查出除了謂詞條件不同的SQL語句和它們的執行次數,這裡是查詢SQL沒有重用超過100次的SQL語句:
select sql_text_wo_constants, count(*)
from t1
group by sql_text_wo_constants
having count(*) > 100
order by 2
/
create table t1 as select sql_text from v$sqlarea;
2、給表增加一個欄位:
alter table t1 add sql_text_wo_constants varchar2(1000);
3、建立函式remove_constants:
create or replace function
remove_constants( p_query in varchar2 ) return varchar2
as
l_query long;
l_char varchar2(1);
l_in_quotes boolean default FALSE;
begin
for i in 1 .. length( p_query )
loop
l_char := substr(p_query,i,1);
if ( l_char = '''' and l_in_quotes )
then
l_in_quotes := FALSE;
elsif ( l_char = '''' and NOT l_in_quotes )
then
l_in_quotes := TRUE;
l_query := l_query || '''#';
end if;
if ( NOT l_in_quotes ) then
l_query := l_query || l_char;
end if;
end loop;
l_query := translate( l_query, '0123456789', '@@@@@@@@@@' );
for i in 0 .. 8 loop
l_query := replace( l_query, lpad('@',10-i,'@'), '@' );
l_query := replace( l_query, lpad(' ',10-i,' '), ' ' );
end loop;
return upper(l_query);
end;
/
4、將v$sql檢視中的欄位:sql_text的資料用remove_constants處理後,來更新t1表
update t1 set sql_text_wo_constants = remove_constants(sql_text);
5、查出除了謂詞條件不同的SQL語句和它們的執行次數,這裡是查詢SQL沒有重用超過100次的SQL語句:
select sql_text_wo_constants, count(*)
from t1
group by sql_text_wo_constants
having count(*) > 100
order by 2
/
測試:
使用一個迴圈執行1000次某條SQL,每次執行只有謂詞不同:
begin
for i in 1..1000 loop
execute immediate 'select * from t where OBJECT_ID = '||i;
end loop;
end;
/
使用一個迴圈執行1000次某條SQL,每次執行只有謂詞不同:
begin
for i in 1..1000 loop
execute immediate 'select * from t where OBJECT_ID = '||i;
end loop;
end;
/
select sql_text_wo_constants, count(*)
from t1
group by sql_text_wo_constants
having count(*) > 100
order by 2;
SQL_TEXT_WO_CONSTANTS COUNT(*)
--------------------- ------------
SELECT * FROM T WHERE OBJECT_ID = @
1000
--------------------- ------------
SELECT * FROM T WHERE OBJECT_ID = @
1000
可以看到輸出結果中,這條語句被執行了1000次,其中謂詞條件被“@”代替,這樣通過這個函式,可以很容易找到共享池中哪些SQL沒有使用繫結變數。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24996904/viewspace-773938/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 查詢沒有使用繫結變數的sql zt變數SQL
- 統計沒有繫結變數SQL變數SQL
- oracle 查詢未使用繫結變數的sqlOracle變數SQL
- Oracle中如何查詢未使用繫結變數的SQL語句?Oracle變數SQL
- V$sql查詢未使用繫結變數的語句SQL變數
- 查詢繫結變數的值變數
- 【效能優化】查詢繫結變數的sql語句優化變數SQL
- 找出沒有繫結變數的引發硬解析的SQL變數SQL
- OLTP系統中儘量使用繫結變數變數
- oracle找出沒有使用繫結變數的sql語句Oracle變數SQL
- 尋找沒有使用繫結變數的sql語句變數SQL
- 【實驗】sql語句在shared_pool中的查詢(程式 繫結變數)SQL變數
- 如何快速找到沒有使用繫結變數的SQL - asktome變數SQL
- SQL Developer中使用繫結變數SQLDeveloper變數
- PL/SQL中繫結變數使用的簡單測試SQL變數
- 關於pl/sql中的繫結變數SQL變數
- 【sql調優】使用繫結變數(二)SQL變數
- 【sql調優】使用繫結變數(一)SQL變數
- 關於sql_profile中的繫結變數SQL變數
- 統計未用繫結變數的sql語句變數SQL
- SQL Server解惑——查詢條件IN中能否使用變數SQLServer變數
- SQL使用繫結變數,測試例項。SQL變數
- SQL*Plus中使用DATE型別的繫結變數SQL型別變數
- 關於繫結變數的SQL繫結什麼值變數SQL
- SQL Server動態SQL,繫結變數SQLServer變數
- 繫結變數在靜態sql和動態sql中變數SQL
- 檢視未繫結變數的sql變數SQL
- 獲取sql繫結變數的值SQL變數
- PLSQL使用繫結變數SQL變數
- 【優化】使用繫結變數 OR 不使用繫結變數,這不是問題!優化變數
- HyperGraphDB查詢中的變數變數
- 繫結變數的使用範圍變數
- 關於繫結變數的使用變數
- 在oracle的plsql中為cursor使用繫結變數OracleSQL變數
- 單個分割槽索引失效導致繫結變數查詢無法使用索引索引變數
- 【最佳化】使用繫結變數 OR 不使用繫結變數,這不是問題!變數
- 【SQL】在SQLPLUS中使用繫結變數的寫法SQL變數
- 使用繫結變數的一點總結!變數