今天测试一下INSERT INTO语句的性能,一开始准备使用基准测试db2batch来做,但不确定合不合适,所以直接改用执行前后打印时间的方式来做。执行的SQL:values current timestamp;insert into tmp_tmp_tt_repair_order select * from tmp_tt_repair_order;values current timesta...显示全部
今天测试一下INSERT INTO语句的性能,一开始准备使用基准测试db2batch来做,但不确定合不合适,所以直接改用执行前后打印时间的方式来做。执行的SQL:
values current timestamp;
insert into tmp_tmp_tt_repair_order select * from tmp_tt_repair_order;
values current timestamp;
数据量:35552
使用的数据库是测试库,比较空闲。
使用append on 来提高INSERT 的性能有两种方法:
1、在INSERT语句上使用 insert into /*+append on+*/ 的方式强制使用APPEND模式
2、在表上使用append模式 db2 "alter table tmp_tmp_tt_repair_order append on"
分三段测试,每段测试之前先清空表:
db2 "alter table tmp_tmp_tt_repair_order activate not logged initially with empty table"
每段使用db2 -tvf X002.sql -z X002.log执行,连续执行三次,再暂停一会再执行二次。
结果如下:
1)SQL中加insert into /*+append on+*/
2012-03-06-16.14.09.581000
2012-03-06-16.14.16.253000 6.672
2012-03-06-16.14.18.144000
2012-03-06-16.14.23.785000 5.641
2012-03-06-16.14.25.691000
2012-03-06-16.14.29.847000 4.156
暂停一会
2012-03-06-16.16.23.536000
2012-03-06-16.16.29.771000 6.235
2012-03-06-16.16.31.130000
2012-03-06-16.16.37.396000 6.266
2) 使用默认的INSERT,不使用APPEND模式
2012-03-06-16.21.03.212000
2012-03-06-16.21.06.821000 3.609
2012-03-06-16.21.10.352000
2012-03-06-16.21.16.149000 5.797
2012-03-06-16.21.17.790000
2012-03-06-16.21.23.728000 5.938
暂停一会
2012-03-06-16.23.34.776000
2012-03-06-16.23.40.354000 5.578
2012-03-06-16.23.42.526000
2012-03-06-16.23.48.620000 6.094
3)表上加append on
2012-03-06-16.25.43.934000
2012-03-06-16.25.50.559000 6.625
2012-03-06-16.25.52.419000
2012-03-06-16.25.57.184000 4.765
2012-03-06-16.25.59.012000
2012-03-06-16.26.06.387000 7.375
2012-03-06-16.26.08.809000
2012-03-06-16.26.14.888000 6.079
暂停一会
2012-03-06-16.30.00.515000
2012-03-06-16.30.06.656000 6.045
2012-03-06-16.30.08.141000
2012-03-06-16.30.14.437000 6.296
最后结果有点让人意外,不清楚是什么因素影响了测试的结果,结果并不能证明采用APPEND模式会加快INSERT速度。
求高人指点:
1、怎么才能让测试环境干净,测试结果比较真实
2、我们系统中表数据基本不删除,使用APPEND模式合适否。
谢谢!收起