目录
一、逻辑存储结构
二、物理存储结构
三、内存结构
3.1内存池
3.2缓冲区
3.3排序区
3.4哈希区
四、管理DM线程
DM8的存储层次结构是:
配置文件。配置文件是 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 数据库服务的运行一直存在。
数据缓冲区:是 DM Server 在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据页所存储的地方。是 DM Server 至关重要的内存区域之一,其设定的过大过小都会对系统有很大的影响。将其设定得太小,会导致缓冲页命中率低,磁盘 IO 频繁;将其设定得太大,又会导致操作系统内存本身不够用。
日志缓冲区:是用于存放重做日志的内存缓冲区。为了避免由于直接的磁盘 IO 而使系统性能受到影响,系统在运行过程中产生的日志并不会立即被写入磁盘,而是和数据页一样,先将其放置到日志缓冲区中。
字典缓冲区:主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。每次对数据库的操作都会涉及到数据字典信息,访问数据字典信息的效率直接影响到相应的操作效率。DM8 采用的是将部分数据字典信息加载到缓冲区中,并采用 LRU 算法进行字典信息的控制。
SQL缓冲区:提供在执行 SQL 语句过程中所需要的内存,包括计划、SQL 语句和结果集缓存。很多应用当中都存在反复执行相同 SQL 语句的情况,此时可以使用缓冲区保存这些语句和它们的执行计划,这就是计划重用。这样带来的好处是加快了 SQL 语句执行效率,但同时给内存也增加了压力。
监听线程。其主要的任务是在服务器端口上进行循环监听。一旦有来自客户的连接请求,监听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理。它在系统启动完成后才启动,并且在系统关闭时首先被关闭。为了保证在处理大量客户连接时系统具有较短的响应时间,监听线程比普通线程优先级更高。
工作线程。它是 DM 服务器的核心线程,它从任务队列中取出任务,并根据任务的类型进行相应的处理,负责所有实际的数据相关操作。为了保证用户所有请求及时响应,一个会话上的任务全部由同一个工作线程完成,这样减少了线程切换的代价,提高了系统效率。
IO线程。在数据库活动中,IO 操作历来都是最为耗时的操作之一。当事务需要的数据页不在缓冲 区中时,如果在工作线程中直接对那些数据页进行读写,那IO 线程的职责就是处理这些 IO 操作。
调度线程。调度线程用于接管系统中所有需要定时调度的任务。调度线程每秒钟轮询一次,负责的任务有以下一些:
日志FLUSH线程。任何数据库的修改,都会产生重做 REDO 日志,为了保证数据故障恢复的一致性,REDO日志的刷盘必须在数据页刷盘之前进行。事务运行时,会把生成的 REDO 日志保留在日志缓冲区中,当事务提交或者执行检查点时,会通知 FLUSH 线程进行日志刷盘。
日志归档线程。日志归档线程包含异步归档线程、负责远程异步归档任务。如果配置了非实时归档,由日志 FLUSH 线程产生的任务会分别加入日志归档线程,日志归档线程负责从任务队列中取出任务,按照归档类型做相应归档处理。
日志APPLY线程。在配置了数据守护的系统中,创建了一个日志 APPLY 线程。当服务器作为备库时,每次接收到主库的物理 REDO 日志生成一个 APPLY 任务加入到任务队列,APPLY 线程从任务队列中取出一个任务在备库上将日志重做,并生成自己的日志,保持和主库数据的同步或一致,作为主库的一个镜像。
定时器线程。在数据库的各种活动中,用户常常需要数据库完成在某个时间点开始进行某种操作,如备份;或者是在某个时间段内反复进行某种操作等。
此外,还有逻辑日志归档线程、MAL系统相关线程、回滚段清理线程PURGE线程、审计写文件线程等等,这里不一一列出。
达梦在线服务平台网址:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台 (dameng.com)