【SQL】Oracle批量提交和频繁提交区别测试

来源:这里教程网 时间:2026-03-03 16:54:00 作者:

在日常运维过程中,尤其在编写的存储过程中,很多循环或者批量语句,也会出现一些频繁提交操作,如插入一行就进行提交,频繁提交对数据库或者对本身业务有多少影响呢,下面通过测试查看。 环境准备

--频繁提交
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个,批量提交并无此统计。频繁提交会更多的消耗数据库及系统资源,如回滚段、表,频繁提交会出现等待事件"

log file sync"等待事件占用.

数据库是支撑软件,需要充分发挥数据库自身有点, 本次模拟100W行数据,由于数据量较大,缓慢,在生产中,建议模拟100hang,在调整修改时,做好备份。.

相关推荐