DM数据库的体系结构
逻辑结构
逻辑存储结构
DM 数据库为数据库中的所有对象分配逻辑空间,并存放在数据文件中。
表空间
表空间由一个或者多个数据文件组成。
DM 数据库中的所有对象在逻辑上都存放在表空间中,而物理上都存储在所属表空间的数据文件中。
记录
数据库表中的每一行是一条记录
页
数据页(也称数据块)是 DM 数据库中最小的数据存储单元。页的大小对应物理存储空间上特定数量的存储字节。
簇
簇是数据页的上级逻辑单元,由同一个数据文件中 16 个或 32 个或 64 个连续的数据页组成。
段
段是簇的上级逻辑分区单元,它由一组簇组成。在同一个表空间中,段可以包含来自不同文件的簇,即一个段可以跨越不同的文件。
物理储存结构
DM 数据库使用了磁盘上大量的物理存储结构来保存和管理用户数据
配置文件
配置文件是 DM 数据库用来设置功能选项的一些文本文件的集合,配置文件以 ini 为扩展名,它们具有固定的格式,用户可以通过修改其中的某些参数取值来达成如下两个方面的
目标:
- 启用/禁用特定功能项;
- 针对当前系统运行环境设置更优的参数值以提升系统性能。
控制文件
每个 DM 数据库都有一个名为 dm.ctl 的控制文件。
数据文件
数据文件以 dbf 为扩展名,它是数据库中最重要的文件类型,一个 DM 数据文件对应磁盘上的一个物理文件或者达梦分布式数据库中的一个逻辑文件,数据文件是真实数据存储的地方,每个数据库至少有一个与之相关的数据文件。
重做日志文件
重做日志(即 REDO 日志)指在 DM 数据库中添加、删除、修改对象,或者改变数据,DM 都会按照特定的格式,将这些操作执行的结果写入到当前的重做日志文件中。
归档日志文件
日志文件分为联机日志文件和归档日志文件。DM 数据库可以在归档模式和非归档模式下运行。非归档模式下,数据库会只将重做日志写入联机日志文件中进行存储;归档模式下,数据库会同时将重做日志写入联机日志文件和归档日志文件中分别进行存储。
逻辑日志文件
如果在 DM 数据库上配置了复制功能,复制源就会产生逻辑日志文件。
物理逻辑日志文件
物理逻辑日志,是按照特定的格式存储的服务器的逻辑操作,专门用于 DBMS_LOGMNR
包挖掘获取数据库系统的历史执行语句。当开启记录物理逻辑日志的功能时,这部分日志内
容会被存储在重做日志文件中。
备份文件
备份文件以 bak 为扩展名,当系统正常运行时,备份文件不会起任何作用,它也不是数据库必须有的联机文件类型之一。然而,从来没有哪个数据库系统能够保证永远正确无误地运行,当数据库不幸出现故障时,备份文件就显得尤为重要了。
跟踪日志文件
用户在 dm.ini 中配置 SVR_LOG 和 SVR_LOG_SWITCH_COUNT 参数后就会打开跟踪日志。跟踪日志文件是一个纯文本文件,以“dm_commit_日期_时间”命名,默认生成在 DM安装目录的 log 子目录下面,管理员可通过 ini 参数 SVR_LOG_FILE_PATH 设置其生成路径。
事件日志文件
事件日志文件对 DM 数据库运行时的关键事件进行记录,如系统启动、关闭、
内存申请失败、IO 错误等一些致命错误。
数据重演文件
重演文件用于数据重演,存储了从抓取开始到抓取结束时,DM 数据库与客户端的通信消息。使用数据重演文件,可以多次重复抓取这段时间内的数据库操作,为系统调试和性能调优提供了另一种分析手段。
内存结构
数据库管理系统是一种对内存申请和释放操作频率很高的软件,如果每次对内存的使用
都使用操作系统函数来申请和释放,效率会比较低,加入自己的内存管理是 DBMS 系统所必
须的。通常内存管理系统会带来以下好处:
- 申请、释放内存效率更高;
- 能够有效地了解内存的使用情况;
- 易于发现内存泄露和内存写越界的问题。
DM 数据库管理系统的内存结构主要包括内存池、缓冲区、排序区、哈希区等。根据系统中子模块的不同功能,对内存进行了上述划分,并采用了不同的管理模式。
内存池
DM Server 的内存池包括共享内存池和其他一些运行时内存池。
共享内存池
共享内存池是 DM Server 在启动时从操作系统申请的一大片内存。在 DM Server 的
运行期间,经常会申请与释放小片内存,而向操作系统申请和释放内存时需要发出系统调用,此时可能会引起线程切换,降低系统运行效率。
运行时内存池
DM Server 的一些功能模块在运行时还会使用自己的运行时内存池。
这些运行时内存池是从操作系统申请一片内存作为本功能模块的内存池来使用,如会话内存池、虚拟机内存池等
缓冲区
数据缓冲区
数据缓冲区是 DM Server 在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据页所存储的地方。
日志缓冲区
日志缓冲区是用于存放重做日志的内存缓冲区。
字典缓冲区
字典缓冲区主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。
SQL 缓冲区
SQL 缓冲区提供在执行 SQL 语句过程中所需要的内存,包括计划、SQL 语句和结果集缓存。
排序区
排序缓冲区提供数据排序所需要的内存空间。
哈希区
提供了为哈希连接而设定的缓冲区,不过该缓冲区是个虚拟缓冲区。
缓冲区
管理DM线程
监听线程
监听线程主要的任务是在服务器端口上进行循环监听,一旦有来自客户的连接请求,监听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理。
工作线程
工作线程是 DM 服务器的核心线程,它从任务队列中取出任务,并根据任务的类型进行相应的处理,负责所有实际的数据相关操作。
IO线程
在数据库活动中,IO 操作历来都是最为耗时的操作之一。当事务需要的数据页不在缓冲区中时,如果在工作线程中直接对那些数据页进行读写,将会使系统性能变得非常糟糕,而把 IO 操作从工作线程中分离出来则是明智的做法。IO 线程的职责就是处理这些 IO 操作。
调度线程
调度线程用于接管系统中所有需要定时调度的任务。
日志 FLUSH线程
任何数据库的修改,都会产生重做 REDO 日志,为了保证数据故障恢复的一致性,REDO日志的刷盘必须在数据页刷盘之前进行。事务运行时,会把生成的 REDO 日志保留在日志缓冲区中,当事务提交或者执行检查点时,会通知 FLUSH 线程进行日志刷盘。由于日志具备顺序写入的特点,比数据页分散 IO 写入效率更高。日志 FLUSH 线程和 IO 线程分开,能获得更快的响应速度,保证整体的性能。
日志归档线程
日志归档线程包含异步归档线程,负责远程异步归档任务。如果配置了非实时归档,由日志 FLUSH 线程产生的任务会分别加入日志归档线程,日志归档线程负责从任务队列中取出任务,按照归档类型做相应归档处理。
日志 APPLY线程
在配置了数据守护的系统中,创建了一个日志 APPLY 线程。当服务器作为备库时,每次接收到主库的物理 REDO 日志生成一个 APPLY 任务加入到任务队列,APPLY 线程从任务队列中取出一个任务在备库上将日志重做,并生成自己的日志,保持和主库数据的同步或一致,作为主库的一个镜像。备库数据对用户只读,可承担报表、查询等任务,均衡主库的负载。
定时器线程
在数据库的各种活动中,用户常常需要数据库完成在某个时间点开始进行某种操作,如备份;或者是在某个时间段内反复进行某种操作等。定时器线程就是为这种需求而设计的。
逻辑日志归档线程
逻辑日志归档用于 DM8 的数据复制中,目的是为了加快异地访问的响应速度,包含本地逻辑日志归档线程和远程逻辑日志归档线程。
MAL 系统相关线程
MAL 系统是 DM 内部高速通信系统,基于 TCP/IP 协议实现。服务器的很多重要功能都是通过 MAL 系统实现通信的,例如数据守护、数据复制、MPP、远程日志归档等。
其他线程
DM 数据库系统中还不止以上这些线程,在一些特定的功能中会有不同的线程,例如回滚段清理 PURGE 线程、审计写文件线程、重演捕获写文件线程等,这里不一一列出。
逻辑日志归档线程
线程信息的查看
为了增加用户对 DM 数据库内部信息的了解,以及方便数据库管理员对数据库的维护,DM 提供了很多动态性能视图,通过它们用户可以直观地了解当前系统中有哪些线程在工作,以及线程的相关信息。
更多资讯请上达梦技术社区了解: https://eco.dameng.com