DM8数据库的体系结构

2022-07-31,,

本文主要带大家简单了解一下DM数据库体系结构

DM数据库服务由数据库+实例组成,其中数据库包含了
磁盘上存放在DM数据库中的数据的集合,一般包括:数据文件,日志文件,控制文件以及配置文件。

数据库

1.数据文件

存放数据的文件。以dbf为扩展名。是表空间的组成单位。数据文件是数据库最重要的文件类型。是真实数据存储的地方。
2. 日志文件

指在 DM 数据库中添加、删除、修改对象,或者改变数据, DM都会按照特定的格式,将这些操作执行的结果写入到当前的重做日志文件中。重做日志文 件以log为扩展名。每个DM数据库实例必须至少有2个重做日志文件,默认两个日志文件 为DAMENG01.log、DAMENG02.log,这两个文件循环使用。主要用于数据库的备份与恢复
3.控制文件

是数据库重要的文件。记录各种文件的位置信息。是一个二进制文件。
4.配置文件

配置文件是DM数据库用来设置功能选项的一些文本文件的集合,配置文件以ini为扩 展名,它们具有固定的格式,用户可以通过修改其中的某些参数取值来达成如下两个方面的 目标: 1. 启用/禁用特定功能项; 2. 针对当前系统运行环境设置更优的参数值以提升系统性能。

实例

实例是由后台进程和内存结构组成,DM8数据库与众不同的地方在于单进程多线程。

一、内存结构

DM数据库管理系统的内存结构主要包括内存池、缓冲区、排序区、哈希区等。根据系统 中子模块的不同功能,对内存进行了上述划分,并采用了不同的管理模式。
1.内存池(select * from v$mem_pool)
共享内存池是 DM Server 在启动时从操作系统申请的一大片内存。采用共享内存池可一次向操作系统申请一 片较大内存,即为内存池,当系统在运行过程中需要申请内存时,可在共享内存池内进行申 请,当用完该内存时,再释放掉,即归还给共享内存池。降低访问系统频率,从而提高效率
2.缓冲区
2.1数据缓冲区
数据缓冲区的作用有两个:1.缓冲从磁盘上读取到的数据,保存在内存中,从而提高数据的读取速度 2.写脏块,将更新等操作写入到内存中,效率更快。
2.2日志缓冲区
日志缓冲区是用于存放重做日志的内存缓冲区。为了避免由于直接的磁盘 IO 而使系统性能受到影响,系统在运行过程中产生的日志并不会立即被写入磁盘,而是和数据页一样, 先将其放置到日志缓冲区中.
2.3字典缓冲区
字典缓冲区主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。该缓冲区配置参数为DICT_BUF_SIZE,默认的配置大小为5M
2.4sql缓冲区
SQL缓冲区提供在执行SQL语句过程中所需要的内存,包括计划、SQL语句和结果集缓存。
很多应用当中都存在反复执行相同SQL语句的情况,此时可以使用缓冲区保存这些语句 和它们的执行计划,这就是计划重用。这样带来的好处是加快了SQL语句执行效率,但同时 给内存也增加了压力。
3.排序区
排序缓冲区提供数据排序所需要的内存空间。当用户执行SQL语句时,常常需要进行排 序,所使用的内存就是排序缓冲区提供的。在每次排序过程中,都首先申请内存,排序结束再释放内存。
4.哈希区
DM8提供了为哈希连接而设定的缓冲区,不过该缓冲区是个虚拟缓冲区。之所以说是虚 拟缓冲,是因为系统没有真正创建特定属于哈希缓冲区的内存,而是在进行哈希连接时,对 排序的数据量进行了计算。如果计算出的数据量大小超过了哈希缓冲区的大小,则使用DM8 创新的外存哈希方式;如果没有超过哈希缓冲区的大小,实际上使用的还是 VPOOL 内存池 来进行哈希操作。
二、DM线程
DM 服务器使用“对称服务器构架”的单进程、多线程结构。这种对称服务器构架在有效 地利用了系统资源的同时又提供了较高的可伸缩性能,这里所指的线程即为操作系统的线程。
1.监听线程
监听线程主要的任务是在服务器端口上进行循环监听,一旦有来自客户的连接请求,监 听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理。 它在系统启动完成后才启动,并且在系统关闭时首先被关闭。为了保证在处理大量客户连接 时系统具有较短的响应时间,监听线程比普通线程优先级更高。
2.工作线程
工作线程是 DM 服务器的核心线程,它从任务队列中取出任务,并根据任务的类型进行 相应的处理,负责所有实际的数据相关操作。 DM8的初始工作线程个数由配置文件指定,随着会话连接的增加,工作线程也会同步增 加,以保持每个会话都有专门的工作线程处理请求。工作线程与会话连接是一一对应的关系。
3.I/O线程
由I/O线程来完成对磁盘的读写。相当于由专人负责读写事件,提高效率。I/O线程不是唯一的可以根据情况设定个数。I/O线程的主要作用为读写数据缓冲区中的内容:
1.需要处理的数据页不在缓冲区中,此时需要将相关数据页读入缓冲区;
2.缓冲区满或系统关闭时,此时需要将部分脏数据页写入磁盘;
3.检查点到来时,需要将所有脏数据页写入磁盘。
4.调度线程
调度线程用于接管系统中所有需要定时调度的任务。相当于线程中的管家角色 。类似于oracle中的pmon进程。调度线程每秒钟轮询一次,负责的任务有以下一些:
1.检查系统级的时间触发器,如果满足触发条件则生成任务加到工作线程的任务队列 由工作线程执行;
2. 清理SQL缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项;
3. 检查数据重演捕获持续时间是否到期,到期则自动停止捕获;
4. 执行动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池;
5. 自动执行检查点。为了保证日志的及时刷盘,减少系统故障时恢复时间,根据INI 参数设置的自动检查点执行间隔定期执行检查点操作;
6. 会话超时检测。当客户连接设置了连接超时时,定期检测是否超时,如果超时则自 动断开连接;
7. 必要时执行数据更新页刷盘;
8. 唤醒等待的工作线程。
5.日志FLUSH线程
任何数据库的修改,都会产生重做REDO日志,为了保证数据故障恢复的一致性,REDO 日志的刷盘必须在数据页刷盘之前进行。事务运行时,会把生成的 REDO 日志保留在日志缓 冲区中,当事务提交或者执行检查点时,会通知 FLUSH 线程进行日志刷盘。由于日志具备 顺序写入的特点,比数据页分散IO写入效率更高。
6.查看线程
查看线程的动态视图

本文地址:https://blog.csdn.net/weixin_48420525/article/details/107631139

《DM8数据库的体系结构.doc》

下载本文的Word格式文档,以方便收藏与打印。