技术开发 频道

浅析达梦动态缓冲区机制

  【IT168 文档】数据库管理系统常常会把最近访问过的数据页复制到内存块中,下次再需要访问该数据页时,就去访问对应的内存块,而不需要真正读写实际文件。这种方式在大多数情况下可以大大减少文件IO次数,从而有效提高系统的数据访问效率。映射物理数据页的内存块称为缓冲页,而系统存放所有缓冲页的地方就是缓冲区。

  达梦数据库(以下简称DM)使用的缓冲区机制经历了两个阶段:静态缓冲区机制和动态缓冲区机制,两者各有特点。

  静态缓冲区机制会在按照相关参数创建固定的缓冲区供系统使用,当缓冲区用完时,系统根据淘汰策略对旧页进行淘汰。该机制的缺点是当系统内存有大量剩余空间时也无法有效利用,频繁的淘汰缓冲区操作对系统性能存在一定影响。

  动态缓冲区机制会根据当前缓冲区的一些参数,例如淘汰率、页的空闲度等参数来计算缓冲区压力,达到系统设定的阀值,立即进行缓冲区扩展,将缓冲区压力控制在可接受范围内,满足应用需求。但是盲目的扩展会造成系统中其他应用可使用的内存减少,造成资源紧张。

  从以上分析看出,静态缓冲区机制存在资源无法有效利用和缓冲区压力过大的弊端,如果预先估计出系统大致使用的缓存大小,设置合理的参数,可以缓解该机制的不足,但是系统应用是动态的,存在不可预知性,因此该方法无法从根本上解决存在的缺陷。相比较而言,动态缓冲区机制的设计原理基本可以解决静态缓冲区存在的问题,关键是要合理控制缓冲区扩展的度。

  DM6实现的动态缓冲区机制,根据多因素的考虑和精确的计算,大部分情况下给系统带来了性能上的提升。DM6的动态缓冲区机制主要包含以下四个方面:

  (1)确定合适的扩展机制

  何时进行缓冲区的扩展很关键,并不是当缓冲区完全用完或者缓冲区有较大可用空间时进行扩展。DM对于缓冲区的压力设定一个警戒线,达到警戒线则进行扩展。缓冲区的压力值主要根据缓冲区的淘汰率、页的空闲度和更新页的比例三个参数进行计算。经过综合的判断和精确的计算,DM会在合适的时间进行缓冲区扩展。默认情况下每次扩展2000页。

  (2)确定合适的收缩机制

  缓冲区盲目的扩展是不可取的,如何在有限的资源上做无限的事?DM设计了缓冲区的收缩机制来达到对内存的良性循环使用,根据缓冲区的空闲度判断当前是否可以进行收缩。默认情况下每次收缩2000页。

  (3)人为干预机制

  DM根据普通的应用情况,设定了缓冲区参数的默认值供系统使用。考虑到实际应用的易变性和特殊性,DM允许人为设置相关参数,满足用户特殊需求。在配置文件和系统运行时手动控制缓冲区的行为。例如:配置文件中设置BUFFER来指定初始缓冲区大小、EBUF_SIZE来设置每次扩展缓冲区大小、DBUF_MODE来设置是否启动动态缓冲区机制(0:静态模式;1:动态模式;2:手动模式);系统运行时,通过SP_SET_BUF_MODE来设置缓冲区机制类型、SP_EXPAND_BUFFER扩展指定大小的缓冲区、SP_TRUNC_BUFFER释放缓冲区。

  (4)约束机制

  为了更好的使用动态缓冲区机制,DM通过约束机制对部分操作进行保护,防止发生问题。例如,当DBUF_MODE为0时,禁止人为调整缓冲区参数,只有为1或者2时,才允许手动调整;缓冲区的扩展总数设置上限,避免特殊情况下无休止地扩展缓冲区。

  以上对DM动态缓冲区机制进行了简要介绍,下面举例说明使用两种机制的性能差别。

0
相关文章