签到成功

知道了

CNDBA社区CNDBA社区

DM数据库内存结构和进程线程分析

2021-08-22 14:42 1637 0 原创 DM数据库
作者: shinelifes

DM数据库内存结构和进程线程分析
一、DM实例结构概念
DM数据库服务在运行过程中,由实例和数据库组成。数据库包括:数据文件、控制文件、重做日志文件、配置文件、归档日志文件、临时文件和其他相关文件集合等,主要存储数据和记录相关数据库信息。实例是由一组正在运行的DM后台进程/线程以及一个大型的共享内存组成。
DM数据库存储在服务器的磁盘上,而DM实例则存储于服务器的内存中。通过运行DM实例,可以操作DM数据库中的数据。在任何时候,一个实例只能与一个数据库进行关联(装载、打开或者挂起数据库)。在大多数情况下,一个数据库也只有一个实例对其进行操作。但是在DM共享存储集群(DMDSC)中,多个实例可以同时装载并打开一个数据库(位于一组由多台服务器共享的物理磁盘上)。
(1)DM实例结构

二、DM实例结构的组成
实例是由一组正在运行的DM后台进程/线程以及一个大型的共享内存组成。
DM内存结构如下图所示:

DM数据库管理系统是一种对内存申请和释放操作频率很高的软件,如果每次对内存的使用都使用操作系统函数来申请和释放,效率会比较低,加入自己的内存管理是DBMS系统所必须的。通常内存管理系统会带来以下好处:
(1)申请、释放内存效率更高;
(2)能够有效地了解内存的使用情况;
(3)易于发现内存泄露和内存写越界的问题。
DM数据库管理系统的内存结构主要包括内存池、缓冲区、排序区、哈希区等。
1、内存池:包括共享内存池和其他一些运行时内存池。动态视V$MEM_POOL详细记录了当前系统中所有的内存池的状态。可以通过DM Server的配置文件(dm.ini)来对共享内存池的大小进行设置,共享池的参数为MEMORY_POOL,该配置默认为200M。如果在运行时所需内存大于配置值,共享内存池也可进行自动扩展,INI参数MEMORY_EXTENT_SIZE指定了共享内存池每次扩展的大小,参数MEMORY_TARGET则指定了共享内存池能扩展到的最大大小。
2、数据缓冲区:是DM Server在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据页所存储的区域。DM中有四种类型的数据缓冲区,分别是NORMAL、KEEP、FAST和RECYCLE。DM Server提供了可以更改这些缓冲区大小的参数,用户可以根据自己应用需求情况,指定dm.ini文件中BUFFER(100MB)、KEEP(8MB)、RECYCLE(64MB)、FAST_POOL_PAGES(3000)值(括号中为默认值),这些值分别对应是NORMAL缓冲区大小、KEEP缓冲区大小、RECYCLE缓冲区大小、FAST缓冲区数据页总数。
3、日志缓冲区:是用于存放重做日志的内存缓冲区。系统在运行过程中产生的日志并不会立即被写入磁盘,而是和数据页一样,先将其放置到日志缓冲区中。DM Server提供了参数RLOG_BUF_SIZE对日志缓冲区大小进行控制,日志缓冲区所占用的内存是从共享内存池中申请的,单位为页数量,且大小必须为2的N次方,否则采用系统默认大小512页。
4、字典缓冲区:存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。
该缓冲区配置参数为DICT_BUF_SIZE,默认的配置大小为5M。
5、SQL缓冲区:提供在执行SQL语句过程中所需要的内存,包括计划、SQL语句和结果集缓存。DM Server在配置文件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还提供了一些手动设置结果集缓存的方法。
6、排序缓冲区:提供数据排序所需要的内存空间。DM Server提供了参数来指定排序缓冲区的大小,参数SORT_BUF_SIZE在DM配置文件dm.ini中,由于该值是由系统内部排序算法和排序数据结构决定,建议使用默认值2M。
7、哈希区:为哈希连接而设定的缓冲区,该缓冲区是个虚拟缓冲区。DM Server在dm.ini中提供了参数HJ_BUF_SIZE来进行控制,由于该值的大小可能会限制哈希连接的效率,所以建议保持默认值,或设置为更大的值。还提供了创建哈希表个数的初始化参数,其中,HAGR_HASH_SIZE表示处理聚集函数时创建哈希表的个数,建议保持默认值100000。
三、DM进程线程
DM系统是单进程多线程服务架构。
DM进程中主要包括监听线程、工作线程、IO线程、调度线程、日志FLUSH线程、日志归档线程、日志APPLY线程、定时器线程、逻辑日志归档线程、MAL系统相关线程等。其他线程:例如回滚段清理PURGE线程、审计写文件线程、重演捕获写文件线程等。
1、监听线程:主要的任务是在服务器端口上进行循环监听,一旦有来自客户的连接请求,监听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理。它在系统启动完成后才启动,并且在系统关闭时首先被关闭。为了保证在处理大量客户连接时系统具有较短的响应时间,监听线程比普通线程优先级更高。DM服务器所有配置端口的范围为1024-65534。
2、工作线程:DM服务器的核心线程,从任务队列中取出任务,并根据任务的类型进行相应的处理,负责所有实际的数据相关操作。
3、IO线程:职责就是处理这些IO操作。DM Server需要进行IO操作的时机主要有以下三种:
(1)需要处理的数据页不在缓冲区中,此时需要将相关数据页读入缓冲区;
(2)缓冲区满或系统关闭时,此时需要将部分脏数据页写入磁盘;
(3)检查点到来时,需要将所有脏数据页写入磁盘。
IO线程在启动后,通常都处于睡眠状态,当系统需要进行IO时,只需要发出一个IO
请求,此时IO线程被唤醒以处理该请求,在完成该IO操作后继续进入睡眠状态。
(1)IO线程的个数是可配置的,可以通过设置dm.ini文件中的IO_THR_GROUPS参数来设置,默认IO线程的个数是2个。同时,IO线程处理IO的策略根据操作系统平台的不同会有很大差别,一般情况下,IO线程使用异步的IO将数据页写入磁盘,此时,系统将所有的IO请求直接递交给操作系统,操作系统在完成这些请求后才通知IO线程,这种异步IO的方式使得IO线程需要直接处理的任务很简单,即完成IO后的一些收尾处理并发出IO完成通知,如果操作系统不支持异步IO,此时IO线程就需要完成实际的IO操作。
4、调度线程:用于接管系统中所有需要定时调度的任务。调度线程每秒钟轮询一次,负责的任务有以下一些:
(1)检查系统级的时间触发器,如果满足触发条件则生成任务加到工作线程的任务队列由工作线程执行;
(2)清理SQL缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项;
(3)检查数据重演捕获持续时间是否到期,到期则自动停止捕获;
(4)执行动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池;
(5)自动执行检查点。为了保证日志的及时刷盘,减少系统故障时恢复时间,根据INI参数设置的自动检查点执行间隔定期执行检查点操作;
(6)会话超时检测。当客户连接设置了连接超时时,定期检测是否超时,如果超时则自动断开连接;
(7)必要时执行数据更新页刷盘;
(8)唤醒等待的工作线程。
5、日志FLUSH线程:事务运行时,会把生成的REDO日志保留在日志缓冲区中,当事务提交或者执行检查点时,会通知FLUSH线程进行日志刷盘。
6、日志归档线程:日志归档线程包含异步归档线程,负责远程异步归档任务。如果配置了非实时归档,由日志FLUSH线程产生的任务会分别加入日志归档线程,日志归档线程负责从任务队列中取出任务,按照归档类型做相应归档处理。将日志FLUSH线程和日志归档线程分开的目的是为了减少不必要的效率损失,除了远程实时归档外,本地归档、远程异步归档都可以脱离FLUSH线程来做,如果放在FLUSH线程中一起做会严重影响系统性能。
7、日志APPLY线程:在配置了数据守护的系统中,创建了一个日志APPLY线程。线程。当服务器作为备库时,每次接收到主库的物理REDO日志生成一个APPLY任务加入到任务队列,APPLY线程从任务队列中取出一个任务在备库上将日志重做,并生成自己的日志,保持和主库数据的同步或一致,作为主库的一个镜像。
8、定时器线程:在数据库的各种活动中,用户常常需要数据库完成在某个时间点开始进行某种操作,如备份;或者是在某个时间段内反复进行某种操作等。定时器线程就是为这种需求而设计的。DM Server需要进行定时操作的事件主要有以下几种:
(1)逻辑日志异步归档;
(2)异步归档日志发送(只有在PRIMARY模式下,且是OPEN状态下);
(3)作业调度。
9、逻辑日志归档线程:逻辑日志归档用于DM8的数据复制中,目的是为了加快异地访问的响应速度,包含本地逻辑日志归档线程和远程逻辑日志归档线程。当配置了数据复制,系统才会创建这两个线程。
10、MAL系统相关线程:MAL系统是DM内部高速通信系统,基于TCP/IP协议实现。服务器的很多重要功能都是通过MAL系统实现通信的,例如数据守护、数据复制、MPP、远程日志归档等。MAL系统内部包含一系列线程,有MAL监听线程、MAL发送工作线程、MAL接收工作线程等。
11、其他线程:DM数据库系统中还不止以上这些线程,在一些特定的功能中会产生对应的线程,例如回滚段清理PURGE线程、审计写文件线程、重演捕获写文件线程等。
12、线程信息的查看
为了DM数据库内部信息的了解,以及方便数据库管理员对数据库的维护,提供了系统进程线程和动态性能视图,用户可以直观地了解当前系统中有哪些线程在工作,以及线程的相关信息。
(1)通过操作系统查看进程线程
ps -ef|grep dmserver —查询DM进程
ps -T -p DM进程号 —查询DM线程
(2)通过动态性能视图查看进程线程
V$LATCHES:记录当前正在等待的线程信息
V$THREADS:记录当前系统中活动线程的信息
V$WTHRD_HISTORY:记录自系统启动以来,所有活动过线程的相关历史信息。
V$PROCESS:记录服务器进程信息
更多内容链接:https://edu.dameng.com,https://eco.dameng.com/

http://www.cndba.cn/shinelifes/article/4677
http://www.cndba.cn/shinelifes/article/4677
http://www.cndba.cn/shinelifes/article/4677
http://www.cndba.cn/shinelifes/article/4677
http://www.cndba.cn/shinelifes/article/4677
http://www.cndba.cn/shinelifes/article/4677
http://www.cndba.cn/shinelifes/article/4677
http://www.cndba.cn/shinelifes/article/4677http://www.cndba.cn/shinelifes/article/4677
http://www.cndba.cn/shinelifes/article/4677

版权声明:本文为博主原创文章,未经博主允许不得转载。

https://edu.dameng.com,https://eco.dameng.com/

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
shinelifes

shinelifes

关注
  • 28
    原创
  • 0
    翻译
  • 0
    转载
  • 0
    评论
  • 访问:32373次
  • 积分:99
  • 等级:注册会员
  • 排名:第29名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ