db2批量脚本优化笔记
最近公司举行了一次db2批量脚本优化经验分享,主要有以下收获:
1.insert, update 的时候,对需要处理的集合进行排序(按索引建排序),可以降低查询索引页而消耗的磁盘IO。
另外,对数据表进行reorge,使物流数据页有序,也可以降低磁盘IO,从而提升批次性能。因为db2在访问有序的数据
时,会进行prefetch,将数据放进buffer pool,实现异步io,从而提高性能。
2.同步IO:指buffer pool 中没有对应数据页,需要从硬盘读取
异步IO:从硬盘中预先将多个页放到buffer pool,从buffer pool 中读取数据。 DB2 通过prefetch 实现异步IO
3.prefetch分类: sequentail prefetch : 执行计划是全表扫描,就会触发sequentail prefetch。
dynamic prefetch :DB2会动态监测IO情况,一旦读取的页是顺序的,就会触发后续的页产生prefetch
list prefetch: 当索引的clusterratio比较低时,先对索引的rid进行排序,再通过sequentail或者skip-sequentail的方式进行prefetch
4.当物流数据太乱时,即命中率不高,可以考虑reorge表
5.索引表空间和数据表空间应该分开。以降低单个数据文件的io
6.反范式数据冗余,派生列,用空间换时间。
7.数据量大的表可以考虑按某个维度分表。
8.组合索引创建时,将=,in后的字段放在前面,范围谓语(如between)的字段放在后面
9.大数据量导入、更新时,考虑分批commit。
10.索引更新时,注意更新统计信息,以得到预期的执行计划。runstats 是用来更新统计信息的。