在日常运维过程中,尤其在编写的存储过程中,很多循环或者批量语句,也会出现一些频繁提交操作,如插入一行就进行提交,频繁提交对数据库或者对本身业务有多少影响呢,下面通过测试查看。 环境准备
--频繁提交
SQL> create table t1 (rowidd varchar2(50),object_id varchar2(50),data_object_id varchar2(50),object_name varchar2(50));
Table created.
Elapsed: 00:01:024.14
SQL> begin
for i in 1 .. 1000000 loop
insert into t1 select dbms_random.string ('X',20) "rowid",substr(cast(dbms_random.value(1,1000000) as varchar2(50)),1,4) "object_id",substr(cast(dbms_random.value(1,10000000) as varchar2(50)),1,5) "data_object_id",dbms_ran 2 dom.string ('X',20) "object_name" from dual;
commit;
end loop;
end; 3 4 5 6
7 /
PL/SQL procedure successfully completed.
--批量提交
SQL> create table t2 (rowidd varchar2(50),object_id varchar2(50),data_object_id varchar2(50),object_name varchar2(50));
Table created.
Elapsed: 00:00:00.14
SQL> begin
for i in 1 .. 1000000 loop
insert into t2 select dbms_random.string ('X',20) "rowid",substr(cast(dbms_random.value(1,1000000) as varchar2(50)),1,4) "object_id",substr(cast(dbms_random.value(1,10000000) as varchar2(50)),1,5) "data_object_id",dbms_ran 2 3 dom.string ('X',20) "object_name" from dual;
end loop;
commit;
end; 4 5 6
7 /
PL/SQL procedure successfully completed.
Elapsed: 00:08:24.47
--每条语句执行前后都生成快照
exec dbms_workload_repository.create_snapshot();
对比awr批量数据库负载情况:
批量数据库无法负载情况:
批量提交等待事件:
频繁提交等待事件:
查看sql执行时长批量提交sql:
非批量提交SQL:
段资源统计:频繁提交:
批量提交:
通过上边我们可以看到,测试虽然无法完全公平,但两条语句都在相对公平环境下进行,因频繁提交,awr事务数每秒703个,批量提交并无此统计。频繁提交会更多的消耗数据库及系统资源,如回滚段、表,频繁提交会出现等待事件"
