SQL開發的過程中,如果不使用綁定變量,會對資料庫性能造成非常嚴重的影響請看如下示例代碼:
begin
for i in 1..1000 loop
execute immediate 'insert into test values('||i||')';
end loop;
commit;
end;
/
該過程執行1000次,會解析1000次,我們知道每次SQL解析大概會占用一條SQL語句執行時間的70%左右,而且過多的硬解析會在SHARED POOL 中産生很多碎片,導緻ORA-04031錯誤,那麼如何判斷應用程式中是否使用了綁定變量呢?我們可以通過V$SQLAREA視圖來檢視應用程式中是否使 用了綁定變量,下面簡單舉個例子:
SQL> create table test(id number );
Table created.
SQL> begin
for i in 1..1000 loop
execute immediate 'insert into test values('||i||')';
end loop;
commit;
end;
/
PL/SQL procedure successfully completed.
SQL> select substr(sql_text,1,20), count(*)
from v$sqlarea
group by substr(sql_text,1,20) having count(*) > 50;
SUBSTR(SQL_TEXT,1,20) COUNT(*)
----------------------------- ---------------
insert into test val 1000
可以看到insert into test.......這條語句竟然在shared pool裡面解析了1000次,通過如下查詢
select sql_text from v$sqlarea where sql_text like 'insert into test %';找出具體的sql代碼,然後與開發人員商量,更改SQL代碼。
上面隻是一個簡單的執行個體,具體要怎麼檢視你的應用是否使用了綁定變量,隻需要簡單修改