【发布时间】:2011-02-08 12:57:56
【问题描述】:
我认识到,当实例变大时,在 Oracle 对象类型上调用方法需要更长的时间。
下面的代码只是将行添加到存储在 Object Type 中的集合中,并在循环中调用 empty dummy-procedure。
当集合中有更多行时,调用会花费更长的时间。当我删除对dummy 的调用时,性能好多了(集合仍然包含相同数量的记录):
Calling dummy: Not calling dummy:
11 0
81 0
158 0
要重现的代码:
Create Type t_tab Is Table Of VARCHAR2(10000);
Create Type test_type As Object(
tab t_tab,
Member Procedure dummy
);
Create Type Body test_type As
Member Procedure dummy As Begin
Null; --# Do nothing
End dummy;
End;
Declare
v_test_type test_type := New test_type( New t_tab() );
Procedure run_test As
start_time NUMBER := dbms_utility.get_time;
Begin
For i In 1 .. 200 Loop
v_test_Type.tab.Extend;
v_test_Type.tab(v_test_Type.tab.Last) := Lpad(' ', 10000);
v_test_Type.dummy(); --# Removed this line in second test
End Loop;
dbms_output.put_line( dbms_utility.get_time - start_time );
End run_test;
Begin
run_test;
run_test;
run_test;
End;
我尝试了 10g 和 11g。
谁能解释/重现这种行为?
【问题讨论】:
标签: sql performance oracle plsql object-type