表和索引是否做了runstats
表和索引是否有fragmentation
表的overflow会占用多余的CPU和存储,造成SQL执行效率低下。
db2pd -db xxxx -tcbstats
在TCB Table Stats:部分,有关于每个表overflow访问的信息,对于这样的表,需要reorg
对于索引,随着表的记录的更新,索引也被更新,会造成index page fragmentation,这个可以通过db2pd -db xxxxxx -tcbstats index的TCB Index Stats:部分来查看
对于这样的索引也需要reorg
查看SQL的执行计划,card estimate是否靠谱
对于rowid fetch的情况,也要考虑到index cluster ratio (CLUSTERRATIO,CLUSTERFACTOR in syscat.indexes)
必要的情况下
做
1. runstats 调整NUM_FREQVALUES, NUM_QUANTILES
2. column group statistics
3. statistics views
4. 调整、建立索引
5. 静态SQL的,package rebind
6. 动态SQL的,flush package cache dynamic
7. 极少数的情况下,采用Optimizer Profiles
8. 和开发人员合作,积极的重写SQL,但是需要做测试,保证重写前后的结果集一致
9. 在业务层面优化,比如限制显示结果集的数量
10. 考虑分区表
11. 考虑MDC表
13. 在特定的情形下,考虑MQT