




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
达梦数据库的内存结构
武汉职业技术学院
信创学院1.内存池2.缓冲区3.排序区4.哈希区5.DM8数据库系统如何调整系统参数内存结构组成一.内存池达梦的内存池包括共享内存池和运行时内存池。可以通过V$MEM_POOL视图查看所有内存池的状态和使用情况。如图所示。(1)共享内存池共享内存池是DMServer(达梦服务线程)在启动时从操作系统申请的一大片内存。在DMServer的运行期间,经常会申请与释放小片内存,而向操作系统申请和释放内存时需要发出系统调用,此时可能会引起线程切换,降低系统运行效率。采用共享内存池则可一次向操作系统申请一片较大内存,即为内存池,当系统在运行过程中需要申请内存时,可在共享内存池内进行申请,当用完该内存时,再释放掉,即归还给共享内存池。(2)运行时内存池除了共享内存池,DMServer的一些功能模块在运行时还会使用自己的运行时内存池。这些运行时内存池是从操作系统申请一片内存作为本功能模块的内存池来使用,如会话内存池、虚拟机内存池等。二.缓冲区
数据缓冲区
日志缓冲区
字典缓冲区SQL缓冲区(1)数据缓冲区数据缓冲区是DMServer在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据页所存储的地方。这是DMServer至关重要的内存区域之一,将其设定得太小,会导致缓冲页命中率低,磁盘IO频繁;将其设定得太大,又会导致操作系统内存本身不够用。DMServer中有四种类型的数据缓冲区,分别是NORMAL、KEEP、FAST和RECYCLE。系统启动时,首先根据配置的数据缓冲区大小向操作系统申请一片连续内存并将其按数据页大小进行格式化,并置入“自由”链中。数据缓冲区存在三条链来管理被缓冲的数据页,一条是“自由”链,用于存放目前尚未使用的内存数据页,一条是“LRU”(最近最少使用)链,用于存放已被使用的内存数据页(包括未修改和已修改),还有一条即为“脏”链,用于存放已被修改过的内存数据页。(2)日志缓冲区日志缓冲区是用于存放重做日志的内存缓冲区。为了避免由于直接的磁盘IO而使系统性能受到影响,系统在运行过程中产生的日志并不会立即被写入磁盘,而是和数据页一样,先将其放置到日志缓冲区中。那么为何不在数据缓冲区中缓存重做日志而要单独设立日志缓冲区呢?主要是基于以下原因:重做日志的格式同数据页完全不一样,无法进行统一管理;重做日志具备连续写的特点;在逻辑上,写重做日志比数据页IO优先级更高。
达梦数据库提供了参数RLOG_BUF_SIZE对日志缓冲区大小进行控制,日志缓冲区所占用的内存是从共享内存池中申请的,单位为页数量,且大小必须为2的N次方,否则采用系统默认大小512页。(3)字典缓冲区字典缓冲区主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。每次对数据库的操作都会涉及到数据字典信息,访问数据字典信息的效率直接影响到相应的操作效率,如进行查询语句,就需要相应的表信息、列信息等,这些字典信息如果都在缓冲区里,则直接从缓冲区中获取即可,否则需要I/O才能读取到这些信息。DM8采用的是将部分数据字典信息加载到缓冲区中,并采用LRU算法进行字典信息的控制。缓冲区大小设置问题,如果太大,会浪费宝贵的内存空间,如果太小,可能会频繁的进行淘汰,该缓冲区配置参数为DICT_BUF_SIZE,默认的配置大小为5M。(4)SQL缓冲区
SQL缓冲区提供在执行SQL语句过程中所需要的内存,包括计划、SQL语句和结果集缓存。很多应用当中都存在反复执行相同SQL语句的情况,此时可以使用缓冲区保存这些语句和它们的执行计划,这就是计划重用。这样带来的好处是加快了SQL语句执行效率,但同时给内存也增加了压力。DMServer在配置文件dm.ini提供了参数来支持是否需要计划重用,参数为USE_PLN_POOL,当指定为非0时,则启动计划重用;为0时禁止计划重用。DM同时还提供了参数CACHE_POOL_SIZE(单位为MB),来改变SQL缓冲区大小,系统管理员可以设置该值以满足应用需求,默认值为20M。结果集缓存包括SQL查询结果集缓存和DMSQL程序函数结果集缓存,在INI参数文件中同时设置参数RS_CAN_CACHE=1且USE_PLN_POOL非0时DM服务器才会缓存结果集。DM还提供了一些手动设置结果集缓存的方法。客户端结果集也可以缓存,但需要在配置文件dm_svc.conf中设置参数:ENABLE_RS_CACHE=(1)//表示启用缓存;RS_CACHE_SIZE=(100)//表示缓存区的大小为100M,可配置为1-65535RS_REFRESH_FREQ=(30)//表示每30秒检查缓存的有效性,如果失效,自动重查;0表示不检查。同时在服务器端使用INI参数文件中的CLT_CACHE_TABLES参数设置哪些表的结果集需要缓存。另外,FIRST_ROWS参数表示当查询的结果达到该行数时,就返回结果,不再继续查询,除非用户向服务器发一个FETCH命令。这个参数也用于客户端缓存的配置,仅当结果集的行数不超过FIRST_ROWS时,该结果集才可能被客户端缓存。三.排序区
排序缓冲区提供数据排序所需要的内存空间。当用户执行SQL语句时,常常需要进行排序,所使用的内存就是排序缓冲区提供的。在每次排序过程中,都首先申请内存,排序结束后再释放内存。
达梦数据库提供了参数来指定排序缓冲区的大小,参数SORT_BUF_SIZE在达梦配置文件dm.ini中,系统管理员可以设置其大小以满足需求,由于该值是由系统内部排序算法和排序数据结构决定,建议使用默认值2M。四.哈希区
DM8提供了为哈希连接而设定的缓冲区,不过该缓冲区是个虚拟缓冲区。之所以说是虚拟缓冲,是因为系统没有真正创建特定属于哈希缓冲区的内存,而是在进行哈希连接时,对排序的数据量进行了计算。如果计算出的数据量大小超过了哈希缓冲区的大小,则使用DM8创新的外存哈希方式;如果没有超过哈希缓冲区的大小,实际上使用的还是VPOOL内存池来进行哈希操作。达梦数据库在dm.ini中提供了参数HJ_BUF_SIZE来进行控制,由于该值的大小可能会限制哈希连接的效率,所以建议保持默认值,或设置为更大的值。达梦数据库除了提供HJ_BUF_SIZE参数外,还提供了创建哈希表个数的初始化参数,其中,HAGR_HASH_SIZE表示处理聚集函数时创建哈希表的个数,建议保持默认值100000。五.
DM8数据库系统如何调整系统参数在DM8数据库系统中使用过程SP_SET_PARA_VALUES来调整参数值。语法如下:SP_SET_PARA_VALUES(SCOPE,PARA_NAME,PARA_VALUE);任务实践目前“工资管理系统”在执行某些功能的时候效率有些慢,需要对数据库的系统参数进行优化,以到提高“工资管理系统”的运行速度。经过DBA的诊断,发现需要对“数据缓冲区”(BUFFER),“SQL缓冲区”(CACHE_POOL_SIZE),“排序区”(SORT_BUF_SIZE)进行扩充。以达到提高“工资管理系统”的运行性能。具体调整如下:BUFFER=2048,CACHE_POOL_SIZE=200,SORT_BUF_SIZE=50。1.调整数据缓冲区(BUFFER)的值先查看一下BUFFER参数目前的值为多少,BUFFER是动态参数还是静态参数。如图所示,目前BUFFER的值为1000,并且为“INFILE”静态参数。设置参数后,需重启实例服务后生效。1.调整数据缓冲区(BUFFER)的值现在使用SP_SET_PARA_VALUES过程,对BUFFER的值进行调整。因为BUFFER是静态参数,重启实例服务后,BUFFER值变为2048。调整后BUFFER后,重启实例SALINST,可以看到BUFFER参数值变为2048。调整完毕。2.调整SQL缓冲区(CACHE_POOL_SIZE)的值查看CACHE_POOL_SIZE参数值,并核对CACHE_POOL_SIZE是动态参数还是静态参数。目前CACHE_POOL_SIZE的值为100,并且为“INFILE”静态参数,如下图。设置参数后,重启实例服务后生效。2.调整SQL缓冲区(CACHE_POOL_SIZE)的值使用SP_SET_PARA_VALUES过程,对CACHE_POOL_SIZE的值进行调整。CACHE_POOL_SIZE是静态参数,重启实例服务后,CACHE_POOL_SIZER值变为200。3.调整排序区(SORT_BUF_SIZE)的值查看SORT_BUF_SIZE参数值,并核对SORT_BUF_SIZE是动态参数还是静态参数。目前,SORT_BUF_SIZE的值为20,并且为“SESSION”动态参数,如下图。设置参数后,重启实列服务后生效。3.调整排序区(SORT_BUF_SIZE)的值使用SP_SET_PARA_VALUES过程对SORT_BUF_SIZE的值进行调整。因为SORT_BUF
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程承包劳务合同范本
- 员工福利保险合同条款协议书
- 农村个人购房合同模板版
- 土地使用权出让合同标准文本
- 校际联赛参赛学生合同条款
- 战略合作合同模板:油品采购
- 度广告宣传合同范本
- 合作开发项目合同终止协议
- 办公室装修工程设计合同
- 合同范本:房地产企业项目贷款合同
- 福建省三明市各县区乡镇行政村村庄村名明细
- 最简单个人简历模板
- 2022年《民法学一》课程教案
- 2021年消毒供应室护理质量检查表
- 老年人的跌倒预防课件
- 2022年山西省中考物理试题(含答案)
- QC成果:预制扭王字块体表面缺陷控制知识分享
- 光伏强制性条文执行计划(共25页)
- 2021新《安全生产法》全面解读课件(PPT 84页)
- 企业、事业专职消防队训练内容及操作规程
- 胫骨平台骨折(课堂PPT)
评论
0/150
提交评论