此文章主要向大家描述的是DB2性能调优问题,我们主要是以一问一答的方式对DB2性能调优中存在的问题进行解答,以下就是DB2性能调优问题具体内容的描述,希望在你今后的学习中会有所帮助。
硬件环境:AIX 内存(8G) EMC(140G) 本身硬盘大小(140G)
数据结构(表结构可以分为4类):
***类:有300-400张业务表(数据量***的在100W左右)
第二类:主表有10张左右(数据量300W左右,最主要的是一张tdBase表和这张表的子表)
第三类:还有10张索引表(索引表是对tdBase表中entName进行拆分所得,只有4列,数据量***的有1000W左右)
第三类:系统表100张左右
现在数据库结构都设计好了,之前是在MS上,现在准备迁移到db2上,请大家给点建议。主要是查询性能,最主要的就是索
引表和主表的关联查询。
表空间应该如何进行分配?缓冲池的大小?容器要怎么分布?数据库配置要怎么样配置,才能达到***并发?内存是主动管
理呢,还是需要自己指定?麻烦大家给点建议,谢谢了。
***答案 mdkii
这个问题比较复杂。
性能调优分好几个层面:
存储层面,
1、***你的lun要划分得比较合理,如果做raid的话,***一个raid group里包含更多的盘。
2、一个container***只是包含一个完整的raid group,不要让多个container竞争一个raid group。
3、数据日志应该使用单独的磁盘或raid group。
操作系统方面:
1、控制你的file cache,不要让过多的file cache占据你的内存,而导致频繁的pagesp in和pagesp out,
从而严重的影响你的性能。
2、保证配置了足够的aioserver。
数据库层面:
1、如果是9版本建议使用stmm,除非你是非常有经验的DB2 工程师。
2、把表分类放到表空间和把表放到同一个表空间其实对性能的影响并不大,但如果索引比较多,建议索引可以使用一个单独的表空间和bufferpool。
3、PREFETCHSIZE ***等于 extentsize * 容器的个数。
4、启动主动页清除
5、启动表空间并行IO
6、如果是smp的机器,启用分区内并行。
7、如果可能,对大表做partition,如果是复杂维度的查询,可以将事实表建成MDC表。
SQL层面:
1、建议对影响复杂的SQL,按照db2advis的建议,建立合适的索引。
2、定期使用runstats确保你的统计信息是***的。
3、对于仍有性能问题的SQL,使用db2exfmt等工具分析执行计划,尽量避免查询计划里出现Residual Predicates的字样。
系统运行后,
使用AIX系统工具(topas,vmstat,iostat等),查看你的系统是否正常运行。
使用数据库快照等工具,查看数据库的buffer 命中率, sort overflow,lock wait 等情况以
确保数据库正在正常运行。