缓冲池方面的考虑
缓冲池的重要性 很多专家将数据库缓冲池看作 DB2 环境中影响性能的最关键的资源。很多 DB2 的架构和设计,其基本思想都是尽可能地避免物理 I/O。
DB2 缓冲池由数个 插槽(slot)的连续的内存组成。数据和索引页被从 DASD 中读出之后,便进入这些插槽,并留在其中,直到 DB2 缓冲区管理器确定那些插槽要用于其他数据。应用程序所请求的数据出现在内存中(而不是外面的 DASD 上)的概率越大,总体性能就越好。实际上,这里的数据被重复使用,因而减少了应用程序对 I/O 的需要。
是否释放一个缓冲池槽,这是根据最近被使用(LRU)原则来决定的。DB2 维护两个 LRU 列表,一个用于被随机访问的页,另一个用于被顺序访问的页。这样可以防止大规模的表扫描完全支配缓冲池,并恶劣地影响随机操作。通过使用不同的阈值,DB2 提供了改善缓冲池性能的灵活性。在 DB2 SQL Reference 手册的第 2.7.4 节中对这些阈值进行了较为详细的讨论。
为缓冲池设置适当的大小 缓冲池大小的指定要取决于可用存储(包括中央存储和扩展存储)的容量。我建议首先分析缓冲池的分配,然后逐渐增加缓冲池的大小,直到通过增加分配的空间已无法增加更多的吞吐量,或者直到 MVS 换页率已难于接受为止。为实现这一点,要使 DASD I/O 的数量持续下降,并不断增加 VPSIZE,直到换页的成本超出了通过减少 I/O 所带来的好处为止。
早些时候,GETPAGES 的数量被认为可能是对 DB2 正在运行的工作量的最好度量。缓冲池的目的是减少 I/O(异步读通常表明需要进行预取,从性能角度来看,这样做通常是值得的。另一方面,同步读常常需要对 DASD 进行随机 I/O,因为被请求的页不在缓冲池中)。会计报表显示对应于每个缓冲池的 GETPAGES 和同步读的数量。一个被普遍接受的 ROT 声称,如果 GETPAGES 对同步读的比率小于 10:1,那么应该估计对更大缓冲池的需要。
多缓冲池配置 如果
操作系统允许为 DB2 缓冲池分配相当大的内存,那么使用多缓冲池的配置很可能可以提高特定应用程序或数据库的性能。然而,需要清楚的是,若有了多个缓冲池,那么对这些缓冲池使用效率的监控就变得更加重要。
下面给出了关于分配多个缓冲池的一般建议:
1、将表空间与和它们相关的索引分放到不同的缓冲池中,以减少索引 I/O。
2、将有不同数据访问模式的数据统一放到不同的缓冲池中。批处理和查询应用程序通常要进行大量的顺序处理,而用于 OLTP 的数据访问往往更具有随机性。这为利用各种阈值处理缓冲池中某些类型的数据访问提供了一种方法。
3、为独立的应用程序提供一个单独的缓冲池。这就为紧密监控应用程序的性能问题或测试新的应用程序提供了一种方法。
4、如果排序的性能在您的环境中很重要,那么需要为工作文件创建一个单独的缓冲池。
5、对于相对较小但更新频繁的表,通过一个足够大的单独的缓冲池,也许可以同时减少读和写的 I/O。
6、为只读表(小的引用表)提供单独的缓冲池可以提高性能。
结束语 考虑周详的数据库设计可以提供巨大的性能收益,但是这必须在应用程序开发过程的早期便开始着手。从早期的 DB2 开始,明智的开发人员就已经使用了前面提到的很多准则,这些准则直到现在也仍然成立。但是,DB2 功能的增强、其他领域中硬件和软件技术的变化将影响当前和将来的应用程序,知道这一点至关重要。当数据库性能成为开发过程中的焦点时,您的数据库设计使得为 DB2 应用程序提供最佳性能有了更大的可能性。
查看本文来源