vpd性能很差,请教如何改进?
VPD函数
Function AuditDMLPolicy(p_cSchema varchar2,p_cObject Varchar2) Return Varchar2
is
begin
return '1=1'
end;
在有VPD环境下:
set timing on
begin
for i in 1..10000 loop
execute immediate 'update ccc.test set name='||to_char(i)||' where obj#='||to_char(i);
commit;
end loop;
end;
/
PL/SQL 过程已成功完成。
已用时间:00: 00: 22.07
在没有vpd的环境下
begin
for i in 1..10000 loop
execute immediate 'update ccc.test set name='||to_char(i)||' where obj#='||to_char(i);
commit;
end loop;
end;
/
PL/SQL 过程已成功完成。
已用时间:00: 00: 08.07
速度相差3倍左右
单独的VPD函数运行是非常快的,排除了函数调用的开销和soft parse问题
set timing on
declare
a varchar2(30);
begin
for i in 1..10000 loop
select fgacpkg.auditdmlpolicy('SYS','CCC') into a from dual;
end loop;
end;
/
PL/SQL 过程已成功完成。
已用时间:00: 00: 00.06
不能采用static指定来略过vpd函数,vpd函数必须运行
谢谢指点,提供思路 |