[DB2]数据库设计:取得最佳性能的准则 (3)
发表于:2007-05-26来源:作者:点击数:
标签:
三、理解DB2 性能 1. Rules-of-thumb Rules of thumb(经验法则,也称ROT)在规划、监控和优化DB2性能的时候很有用。ROT通常是基于以前的经验(比如在一段时间内观察到的平均值)或者更复杂公式的简化。 记住这样一个事实很重要,即ROT只对于粗略的估计有用
三、理解DB2
性能
1. Rules-of-thumb
Rules of thumb(经验法则,也称ROT)在规划、监控和优化DB2性能的时候很有用。ROT通常是基于以前的经验(比如在一段时间内观察到的平均值)或者更复杂公式的简化。
记住这样一个事实很重要,即ROT只对于粗略的估计有用,而对于详细的分析用处不大。如果只是在某一类的文档中看到了一些ROT,便欣然接受并作为精确的事实来引用,那么就会有危险。在最好的情况下,这些ROT是一种估计,而在最坏的情况下,这些ROT对于特定的DB2环境可能不成立。
您应该为自己的环境特别
开发这些ROT(或者对它们进行调节,以适应自己的环境的特性)。应确保ROT与实际经验相关,而不是盲目地接受,这样才能对它们更有信心。一开始的时候,使用那些在您特定环境以外被使用过或者被开发出来的ROT,这种做法可能有用。但是,当对您自己DB2系统中的适当数据进行收集、分析和编制文档之后,应该对这些ROT加以验证和修改。IBM Redbooks是关于ROT的一种很好的参考资料,这些ROT常常作为建议被包括在性能监控工具中。
另一方面的考虑是,ROT可能随着时间的推移而演变。硬件技术的发展,软件编程技术的提高,系统架构的变化,诸如此类的变化都可能使得ROT的
可靠性降低,甚至变得无效。而使ROT随着时间变化的最大因素也许正是DB2本身新版本的发行。
2. DB2工作负载
磁盘I/O常常是影响响应时间的最大因素,但是通过查看GETPAGE(GP)请求,更容易理解底层的性能问题。当监控DB2活动和分析报告时,GETPAGE的数量也许是DB2总体工作负载的最好的指示器。
某个安装环境下的很多DB2工作都可以无异议地归为以下几类:
1) 事务:事务是在事务管理器(例如CICS和IMS/TM)控制下运行的程序。其中的
SQL通常比较简单,但是事务量比较重。事务必须为用户提供极好的响应时间,这样应用程序才不致于要长时间地等待它们所需的资源。通常,第一个调用事务的用户将承受读取索引和数据页的成本。随后的用户则常常可以发现有些资源已经在缓冲池中。
2) 查询:查询也是程序,常常在需要决策支持时执行它。其中的SQL可能非常复杂,但是工作量常常远不及事务。查询的用户常常要等上数分钟甚至数小时,这取决于为了产生用户所请求的结果集,需要对多少数据进行搜索。查询常常要引起对整个表的扫描,而对结果排序是这种类型的工作负载的另一种常见特征。
3) 批处理和实用程序: 批处理和实用程序通常处理大量的数据,并且常常以一种连续的方式处理数据。这些程序在给定的窗口中完成它们的处理,这一点很重要。批处理和实用程序往往是各种系统资源的消费大户,一旦它们挤在一起,常常会使工作负载逐步上升。
3. 规范化
规范化是分析应用程序所需的数据实体,然后将这些数据实体转化成一组设计良好的结构的一个格式化的过程。逻辑数据模型的一般设计目标是正确性、一致性、非冗余和简单性。而且,关系理论的信条也要求
数据库要经过规范化。
有一些按照连续编号排列的规则(也叫 范式(form))可以用来很详细地定义规范化数据。大多数专家都会建议设计者尽量遵从前三条规则,由此得到的数据就可以说是符合第三范式。
而将一个表反规范化(de-normalize)的意思是,违反该表之前遵从的一种或多种范式,从而修改规范化的设计。这种反标准化的过程常常是由于性能的原因而进行的。在大多数以关系数据库为主题的书籍当中,都可以找到关于规范化的更详细的信息。
4. DB2表空间类型
在一个定义好的DB2数据库中,实际的表必须在称作表空间(table space)的DB2对象中创建。用户可以在DB2中定义4种不同的表空间:
1) 简单表空间:简单表空间可以包含一个以上的DB2表。这种表空间由页构成,每个页可以包含该表空间中定义的任何表中的行。
2) 分段表空间:分段表空间可以包含一个以上的DB2表。这种表空间由页组构成,页组被称作段(segment)。每个段只能包含该表空间中定义的一个表中的行。
3) 分区表空间:分区表空间只能包含一个表。根据分区(partitioning)索引的键范围,这种表空间被分成数个分区。每个分区都被看作一个独立的实体,允许SQL和DB2实用程序对其进行并发处理。
4) LOB表空间:LOB 表空间只用于LOB(大型对象)数据。LOB包括三种数据类型:BLOB(二进制大型对象)、CLOB(字符大型对象)和DBCLOB(双字节字符大型对象)。
原文转自:http://www.ltesting.net