欢迎来到天天文库
浏览记录
ID:59547794
大小:28.00 KB
页数:6页
时间:2020-11-10
《DB2数据库性能优化技巧详解.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、DB2数据库性能优化技巧详解最简单而最见成效的——Bufferpool缓冲池是内存中的一块存储区域,用于临时读入和更改数据库页(包含表行或索引项)。缓冲池的用途是为了提高数据库系统的性能。从内存访问数据要比从磁盘访问数据快得多。因此,数据库管理器需要从磁盘读取或写入磁盘的次数越少,性能就越好。对一个或多个缓冲池进行配置之所以是调优的最重要方面,是因为连接至数据库的应用程序的大多数数据(不包括大对象和长字段数据)操作都在缓冲池中进行。缺省情况下,应用程序使用缓冲池IBMDEFAULTBP,它是在创建数据库时创建的。当SYSCAT.BUFFERPOOLS目录表中该缓冲池的NPAGES值
2、为-1时,DB2数据库配置参数BUFFPAGE控制着缓冲池的大小。否则会忽略BUFFPAGE参数,并且用NPAGES参数所指定的页数创建缓冲池。建议对于仅使用一个缓冲池的应用程序,将NPAGES更改成-1,这样BUFFPAGE就可以控制该缓冲池的大小。这使得更新和报告缓冲池大小以及其它DB2数据库配置参数变得更加方便。确保可以使用数据库配置中的BUFFPAGE参数来控制缓冲池大小之后,将该参数设置成合适的值。根据数据库的大小和应用程序的性质将该参数设置成一个合理的大值,这种做法很安全。通常,该参数的缺省值非常小,可能满足不了要求。db2"getsnapshotforallbuffe
3、rpools"在数据库快照或缓冲池快照的快照输出中,查找下列"logicalreads"和"physicalreads",这样就可以计算出缓冲池命中率,它可以帮助调优缓冲池:缓冲池命中率表明数据库管理器不需要从磁盘装入页(即该页已经在缓冲池中)就能处理页请求的时间百分比。缓冲池的命中率越高,使用磁盘I/O的频率就越低。按如下计算缓冲池命中率:(1-((bufferpooldataphysicalreads+bufferpoolindexphysicalreads)/(bufferpooldatalogicalreads+poolindexlogicalreads)))*100%这个
4、计算考虑了缓冲池高速缓存的所有页(索引和数据)。理想情况下,该比率应当超过95%,并尽可能接近100%。要提高缓冲池命中率,请尝试下面这些方法:1.增加缓冲池大小。2.考虑分配多个缓冲池,如果可能的话,为每个经常被访问的大表所属的表空间分配一个缓冲池,为一组小表分配一个缓冲池,然后尝试一下使用不同大小的缓冲池以查看哪种组合会提供最佳性能。3.如果已分配的内存不能帮助提高性能,那么请避免给缓冲池分配过多的内存。应当根据取自测试环境的快照信息来决定缓冲池的大小。4.太小的缓冲池会产生过多的、不必要的物理I/O。太大的缓冲池使系统处在操作系统页面调度的风险中并消耗不必要的CPU周期来管理
5、过度分配的内存。正好合适的缓冲池大小就在"太小"和"太大"之间的某个平衡点上。适当的大小存在于回报将要开始减少的点上。获得最佳性能的——SQL一条糟糕的SQL语句会彻底破坏一切。一个相对简单的SQL语句也能够搞糟一个调整得很好的数据库和机器。对于很多这些语句,天底下(或在文件中)没有DB2UDB配置参数能够纠正因错误的SQL语句导致的高成本的情况。更糟糕的是,DBA常常受到种种束缚:不能更改SQL(可能是因为它是应用程序供应商提供的)。这给DBA只留下三条路可走:1.更改或添加索引2.更改群集3.更改目录统计信息健壮的应用程序由成千上万条不同的SQL语句组成。这些语句执行的频率随应
6、用程序的功能和日常的业务需要的不同而不同。SQL语句的实际成本是它执行一次的成本乘以它执行的次数。每个DBA所面临的重大的任务是,识别具有最高"实际成本"的语句的挑战,并且减少这些语句的成本。通过本机DB2Explain实用程序、一些第三方供应商提供的工具或DB2UDBSQLEventMonitor数据,可以计算出执行一次SQL语句所用的资源成本。但是语句执行频率只能通过仔细和耗时地分析DB2UDBSQLEventMonitor的数据来了解。最佳性能不仅需要排除高成本SQL语句,而且需要确保相应的物理基础结构是适当的。当所有的调节旋钮都设置得恰到好处、内存被有效地分配到池和堆而且I
7、/O均匀地分配到各个磁盘时,才可得到最佳性能。不可遗漏的——Lock这些与锁相关的控制都是数据库配置参数:LOCKLIST表明分配给锁列表的存储容量。每个数据库都有一个锁列表,锁列表包含了并发连接到该数据库的所有应用程序所持有的锁。锁定是数据库管理器用来控制多个应用程序并发访问数据库中数据的机制。行和表都可以被锁定。根据对象是否还持有其它锁,每把锁需要32个或64个字节的锁列表:1.需要64个字节来持有某个对象上的锁,在这个对象上,没有持有其它锁。2.需要32个字节来
此文档下载收益归作者所有