ITPub博客

首页 > 数据库 > Oracle > 【SQL】Oracle批量提交和频繁提交区别测试

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

原创 Oracle 作者:xysoul_云龙 时间:2021-08-31 15:51:35 0 删除 编辑

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


环境准备

--频繁提交
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,在调整修改时,做好备份。

.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29487349/viewspace-2789683/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
主要从事Oracle数据库 DBA相关工作,其他操作系统、中间件等也有涉及,热衷分享。岁月老将至,如有幸在江湖中留点踪迹,也是欣慰。 【文盲筱烨】好读书爱运动的IT技术爱好者 微博:文盲筱烨 微信公众号:筱烨视点

注册时间:2014-02-15

  • 博文量
    412
  • 访问量
    1104587