“棱镜门”、“微软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参数决议。