您的位置: 网界网 > 网络学院-技术开发 > 正文

达梦数据库的性能优化 应对数据膨胀

2014年06月26日 17:07:22 | 作者:佚名 | 来源:IT168 | 查看本文手机版

摘要:“棱镜门”、“微软XP系统停摆”给我国信息安全敲响了警钟,也加速了国内 “去IOE”运动的进程。达梦数据库作为连续5年国产数据库市场占有率第一的高性能、高可靠性、高安全性、高兼容性大型关系型数据库管理系统,在电力、金融...

标签

【CNW.com.cn资讯】“棱镜门”、“微软XP系统停摆”的接踵而至给我国信息安全敲响了警钟,也加速了国内 “去IOE”运动的进程。达梦数据库作为连续5年国产数据库市场占有率第一的高性能、高可靠性、高安全性、高兼容性大型关系型数据库管理系统,已成功替代了Oracle,在电力、金融、电子政务、教育等行业领域得到了广泛的应用,逐渐成为国家信息化建设的重要基础平台。为了更好地支撑业务应用,有效管理和利用信息时代不断产生并急剧膨胀的数据,对达梦数据库的优化显得尤为重要。

一、 数据库参数优化

1. 优化内存

公共内存池

公共内存池提供了一组内存申请/释放接口,为系统中需要动态分配内存的模块提供服务。

SQL>select * from v$dm_ini where para_name like '%MEM%POOL%';
行号 PARA_NAME PARA_VALUE
---------- --------------- ----------
1 MEMORY_POOL 40
2 MEMORY_BAK_POOL 4
3 N_MEM_POOLS 4

MEMORY_POOL决定了以M为单位的公共内存池的大小,上例中40M; N_MEM_POOLS决定把内存池划分为几个独立的单元,以减少并发访问的冲突,提升并发效率;MEMORY_BAK_POOL表示系统保留的备用内存量,当常规的内存申请都失败时,从这个备用内存里分配,然后在上层模块中进行必要的容错处理。

可以在v$sysstat中查看当前公用内存池的使用情况:

SQL>select * from v$sysstat where name like '%MEM%';

行号     ID       CLASSID     NAME              STAT_VAL
-------- -------- ----------- ---------------   --------------------
1        26       3           MEMORY USED BYTES 25831296

这里的STAT_VAL给出的是已经使用的字节数。正常情况下,应该小于配置的池大小,否则系统不得不从池外向操作系统申请/释放内存,造成效率低下,并可能把操作系统的内存搞得很零碎。

系统缓冲区BUFFER

为了加速数据访问,系统开辟了一个缓冲区,使用LRU算法存放经常访问的数据页,逐步淘汰不用的数据页。

使用下列参数,可配置基本的系统缓冲区的大小:

SQL>select * from v$dm_ini where para_name like '%BUFFER%';
行号       PARA_NAME     PARA_VALUE
---------- ------------  ----------
1          HUGE_BUFFER   8
2          BUFFER        4000
3          MAX_BUFFER    8000
4          BUFFER_POOLS  1

其中HUGE_BUFFER 是专门用于列存表的缓存区,BUFFER是用户行存表的系统缓冲区。BUFFER表示初始的系统缓冲区大小,单位为M。通常情况下,如果物理数据量大于物理内存,则应该把BUFFER调到物理内存的三分之二比较合适。

当BUFFER_POOLS = 1时,系统支持缓冲区的自动扩展。MAX_BUFFER表示最多能扩到多大。在自动扩展后,如果系统的压力在一段时间内比较低,系统又会自动收缩缓冲区。

系统缓冲区是一个共享资源,受一个mutex保护,在一个时间点,只允许一个线程可以持有这个资源。在高并发情况下,这个限制将极大降低并发效率,因此,可以配置BUFFER_POOLS把一个大的系统缓冲区分割为多个小的部分,每一个小的部分作为临界资源,这样只要所访问的数据页不在同一个子池里,就不会发生冲突,从而提升并发性能。注意,如果配置了BUFFER_POOLS > 1, 则MAX_BUFFER参数就失效了,最大可用的缓冲区由BUFFER参数决定。

12
[责任编辑:孙可 sun_ke@cnw.com.cn]