DM数据库体系架构

目录

一、逻辑存储结构

二、物理存储结构

三、内存结构

3.1内存池

3.2缓冲区

3.3排序区

3.4哈希区

四、管理DM线程


一、逻辑存储结构

DM 数据库为数据库中的所有对象分配逻辑空间,并存放在数据文件中。
在 DM 数据库内部,所有的数据文件组合在一起被划分到一个或者多个表空间中,所有的数据库内部对象 都存放在这些表空间中。
同时,表空间被进一步划分为段、簇和页(也称块)。
通过这种细 分,可以使得 DM 数据库能够更加高效地控制磁盘空间的利用率。

DM8的存储层次结构是:

  1. 数据库由一个或多个表空间组成
  2. 每个表空间由一个或多个数据文件组成
  3. 每个数据文件由一个或多个簇组成
  4. 段是簇的上级逻辑单元,一个段可以跨多个数据文件
  5. 簇由磁盘上连续的页组成,一个簇总是在一个数据文件中
  6. 页是数据库中最小的分配单元,也是数据库中使用的最小的 IO 单元

二、物理存储结构

DM 数据库使用了磁盘上大量的物理存储结构来保存和管理用户数据。
典型的物理存储结构包括:用于进行功能设置的配置文件;用于记录文件分布的控制文件;用于保存用户实 际数据的数据文件、重做日志文件、归档日志文件、备份文件;用来进行问题跟踪的跟踪日 志文件等。
  • 配置文件。配置文件是 DM 数据库用来设置功能选项的一些文本文件的集合,用来启动/禁用特定功能项,以及针对当前系统运行环境设置更优的参数值以提升系统性能。

  • 控制文件。每个 DM 数据库都有一个名为 dm.ctl 的控制文件。是一个二进制文件,它记录了数据库必要的初始信息,包括数据库名称、数据库服务器模式、OGUID 唯一标识、数据库服务器版本等等。

  • 数据文件。数据文件以 dbf 为扩展名,它是数据库中最重要的文件类型,一个 DM 数据文件对应磁盘上的一个物理文件,是真实数据存储的地方,每个数据库至少有一个与之相关的数据文件,但实际应用中,通常有多个数据文件。

  • 重做日志文件。重做日志(即 REDO 日志)指在 DM 数据库中添加、删除、修改对象,或者改变数据,DM 都会按照特定的格式,将这些操作执行的结果写入到当前的重做日志文件中。

  • 归档日志文件。日志文件分为联机日志文件和归档日志文件。非归档模式下,数据库会只将重做日志写入联机日志文件中进行存储;归档模式下,数据库会同时将重做日志写入联机日志文件和归档日志文件中分别进行存储。

  • 逻辑日志文件。如果在 DM 数据库上配置了复制功能,复制源就会产生逻辑日志文件。逻辑日志文件内部存储按照复制记录的格式,一条记录紧接着一条记录,存储着复制源端的各种逻辑操作。

  • 备份文件。备份文件以 bak 为扩展名。备份文件自身包含了备份的名称、对应的数据库、备份类型和备份时间等信息。当用户利用管理工具或直接发出备份的 SQL 命令时,DM Server 会自动进行备份,并产生一个或多个备份文件。

  • SQL日志文件。SQL 日志文件是一个纯文本文件。命名格式为“dmsql_实例名[_模式名][_用户名][_日期_时间].log”。用户在 dm.ini 中配置 SVR_LOG 参数后就会打开 SQL 日志。

  • 事件日志文件。事件日志文件记录了 DM 数据库运行时的关键事件。例如:系统启动、关闭、内存申请失败、IO 错误等一些致命错误;数据库运行过程中的日志信息;备份还原过程中备份还原操作的阶段性信息等。主要用于系统出现严重错误时进行查看并定位问题。事件日志文件随着 DM 数据库服务的运行一直存在。

三、内存结构

数据库管理系统是一种对内存申请和释放操作频率很高的软件。
内存管理系统会带来以下好处:
  • 申请、释放内存效率更高;
  • 能够有效地了解内存的使用情况;
  • 易于发现内存泄露和内存写越界的问题。
3.1内存池
DM Server 的内存池包括共享内存池和其他一些运行时内存池。
共享内存池共享内存池是 DM Server 在启动时从操作系统申请的一大片内存。当系统在运行过程中需要申请小片内存时,可在共享内存池内进行申请,当用完该内存时,再释放掉,即归还给共享内存池。
运行时内存池:DM Server 的一些功能模块在运行时还会使用自己的运行时内存池。这些运行时内存池是从操作系统申请一片内存作为本功能模块的内存池来使用,如会话内存池、虚拟机内存池等。
3.2缓冲区

数据缓冲区是 DM Server 在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据页所存储的地方。是 DM Server 至关重要的内存区域之一,其设定的过大过小都会对系统有很大的影响。将其设定得太小,会导致缓冲页命中率低,磁盘 IO 频繁;将其设定得太大,又会导致操作系统内存本身不够用。

日志缓冲区是用于存放重做日志的内存缓冲区。为了避免由于直接的磁盘 IO 而使系统性能受到影响,系统在运行过程中产生的日志并不会立即被写入磁盘,而是和数据页一样,先将其放置到日志缓冲区中。

字典缓冲区主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。每次对数据库的操作都会涉及到数据字典信息,访问数据字典信息的效率直接影响到相应的操作效率。DM8 采用的是将部分数据字典信息加载到缓冲区中,并采用 LRU 算法进行字典信息的控制。

SQL缓冲区提供在执行 SQL 语句过程中所需要的内存,包括计划、SQL 语句和结果集缓存。很多应用当中都存在反复执行相同 SQL 语句的情况,此时可以使用缓冲区保存这些语句和它们的执行计划,这就是计划重用。这样带来的好处是加快了 SQL 语句执行效率,但同时给内存也增加了压力。

3.3排序区
提供数据排序所需要的内存空间。当用户执行 SQL 语句时,常常需要进行排序,所使用的内存就是排序缓冲区提供的。在每次排序过程中,都首先申请内存,排序结束后再释放内存。

3.4哈希区
DM8 提供了为哈希连接而设定的缓冲区,不过该缓冲区是个虚拟缓冲区。之所以说是虚拟缓冲,是因为系统没有真正创建特定属于哈希缓冲区的内存,而是在进行哈希连接时,对排序的数据量进行了计算。如果计算出的数据量大小超过了哈希缓冲区的大小,则使用 DM8创新的外存哈希方式;如果没有超过哈希缓冲区的大小,实际上还是使用内存池来进行哈希操作。

四、管理DM线程

DM 服务器使用 对称服务器构架 的单进程、多线程结构。DM 进程中主要包括监听线程、 IO 线程、工作线程、调度线程、日志线程等。

监听线程。其主要的任务是在服务器端口上进行循环监听一旦有来自客户的连接请求,监听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理。它在系统启动完成后才启动,并且在系统关闭时首先被关闭。为了保证在处理大量客户连接时系统具有较短的响应时间,监听线程比普通线程优先级更高。

工作线程。它是 DM 服务器的核心线程,它从任务队列中取出任务,并根据任务的类型进行相应的处理,负责所有实际的数据相关操作。为了保证用户所有请求及时响应,一个会话上的任务全部由同一个工作线程完成,这样减少了线程切换的代价,提高了系统效率。

IO线程。在数据库活动中,IO 操作历来都是最为耗时的操作之一。当事务需要的数据页不在缓冲 区中时,如果在工作线程中直接对那些数据页进行读写,那IO 线程的职责就是处理这些 IO 操作。

        通常情况下,DM Server 需要进行 IO 操作的时机主要有以下三种:
        1. 需要处理的数据页不在缓冲区中,此时需要将相关数据页读入缓冲区;
        2. 缓冲区满或系统关闭时,此时需要将部分脏数据页写入磁盘;
        3. 检查点到来时,需要将所有脏数据页写入磁盘。
        
        IO 线程在启动后,通常都处于睡眠状态,当系统需要进行 IO 时,只需要发出一个 IO 请求,此时 IO 线程被唤醒以处理该请求,在完成该 IO 操作后继续进入睡眠状态。

调度线程调度线程用于接管系统中所有需要定时调度的任务。调度线程每秒钟轮询一次,负责的任务有以下一些:

  • 检查系统级的时间触发器,如果满足触发条件则生成任务加到工作线程的任务队列由工作线程执行;
  • 清理 SQL 缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项;
  • 执行动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池;
  • 自动执行检查点。为了保证日志的及时刷盘,减少系统故障时恢复时间,根据 INI 参数设置的自动检查点执行间隔定期执行检查点操作;
  • 会话超时检测。当客户连接设置了连接超时时,定期检测是否超时,如果超时则自动断开连接;
  • 必要时执行数据更新页刷盘;
  • 唤醒等待的工作线程。

日志FLUSH线程。任何数据库的修改,都会产生重做 REDO 日志,为了保证数据故障恢复的一致性,REDO日志的刷盘必须在数据页刷盘之前进行。事务运行时,会把生成的 REDO 日志保留在日志缓冲区中,当事务提交或者执行检查点时,会通知 FLUSH 线程进行日志刷盘。

日志归档线程日志归档线程包含异步归档线程、负责远程异步归档任务。如果配置了非实时归档,由日志 FLUSH 线程产生的任务会分别加入日志归档线程,日志归档线程负责从任务队列中取出任务,按照归档类型做相应归档处理。

日志APPLY线程在配置了数据守护的系统中,创建了一个日志 APPLY 线程。当服务器作为备库时,每次接收到主库的物理 REDO 日志生成一个 APPLY 任务加入到任务队列,APPLY 线程从任务队列中取出一个任务在备库上将日志重做,并生成自己的日志,保持和主库数据的同步或一致,作为主库的一个镜像。

定时器线程在数据库的各种活动中,用户常常需要数据库完成在某个时间点开始进行某种操作,如备份;或者是在某个时间段内反复进行某种操作等。

        通常情况下,DM Server 需要进行定时操作的事件主要有以下几种:
        1. 逻辑日志异步归档;
        2. 异步归档日志发送(只有在 PRIMARY 模式下,且是 OPEN 状态下);
        3. 作业调度。

此外,还有逻辑日志归档线程、MAL系统相关线程、回滚段清理线程PURGE线程、审计写文件线程等等,这里不一一列出。


达梦在线服务平台网址:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台 (dameng.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值