达梦的产品架构:

数据库:磁盘上存放在 DM 数据库中的数据的集合,一般包括:数据文件、日志文件、控制文件以及临时数据文件等。DM7之后的版本。
实例:一般是由一组正在运行的 DM 后台进程/线程以及一个大型的共享内存组成。简单来说,实例就是操作 DM 数据库的一种手段,是用来访问数据库的内存结构以及后台进程的集合。
关联:DM 数据库存储在服务器的磁盘上,而 DM 实例则存储于服务器的内存中。
表空间->段(段可以跨数据文件)->簇(默认16个页组成一个簇,一个或多个簇组成数据文件)->页(默认8k)->行(DM规定每行不能超过页大小的一半)
SYSTEM 表空间:相当于系统表空间。存放了有关 DM 数据库的字典信息
ROLL 表空间:相当于回滚表空间。存放事务运行过程中执行 DML 操作之前的值。
MAIN 表空间:相当于通用表空间。在创建用户时,如果没有指定默认表空间,则系统自动指定 MAIN 表空间为用户默认的表空间。
分配簇:DM 数据库在创建表/索引时,初始分配 1 个簇,当初始分配的空间用完时,DM 数据库会自动扩展。
释放簇:drop删除表,回收全部簇;只删除表中数据,DM仍会保留1-2个簇供后续使用,默认1个簇。
回滚表空间,DM定期检查回滚段,并确定是否需要从回滚段中释放一个或多个簇。
空闲空间:设置 FILLFACTOR 参数的值,是为了指定数据页中的可用空间百分比(空间和性能之间进行权衡。过高容易频繁引起页分裂,过低牺牲空间来提升性能)
行偏移数组:用于标识页上的空间占用情况以便管理数据页自身的空间。

数据文件:system.DBF main.DBF roll.DBF temp.DBF
控制文件:是一个名为 dm.ctl 的二进制文件,记录了数据库必要的初始信息,其中主要包含以下内容:
数据库名称、版本、启动次数、最近一次启动时间、表空间信息、OGUID唯一标识。
执行表空间的 DDL 等操作后,服务器内部需要同步修改控制文件内容。为了避免控制文件损坏,在修改控制文件时系统内部会执行备份操作。备份策略如下:
1.在修改 dm.ctl 之前,先执行一次备份,确定 dm.ctl 修改成功后,再将备份删除,如果 dm.ctl 修改失败或中途出现故障,则保留备份文件。
2.备份文件路径根据参数CTL_BAK_PATH来指定。保存份数由参数CTL_BAK_NUM指定,超过则删除最早的备份记录。
重做日志文件:就是redo log文件为 DAMENG01.log、DAMENG02.log,被称为联机日志文件。
归档日志文件:归档模式下,数据库会同时将重做日志写入联机日志文件和归档日志文件中分别进行存储。出现介质故障,如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点,而如果没有归档日志文件,则只能利用备份进行恢复。
动态视图 V$MEM_POOL 详细记录了当前系统中所有的内存池的状态
共享内存池:共享池大小的参数为 MEMORY_POOL,缺省大小为 500M。如果在运行时所需内存大于配置值,共享内存池也可进行自动扩展,INI 参数 MEMORY_EXTENT_SIZE 指定了共享内存池每次扩展的大小,参数 MEMORY_TARGET 则指定了共享内存池扩展到超过该值后,空闲时会收缩到的大小。
运行时内存:是从操作系统申请一片内存,如会话内存池、虚拟机内存池等。
缓冲区:存在三条链,自由链、LRU链、脏链。对于反复被访问的页会单独开辟一个区域来存储她们,保证其不参与淘汰机制。
有四种类型的数据缓冲区,分别是 NORMAL、KEEP、FAST 和 RECYCLE。 dm.ini 文件中 BUFFER(8000MB)、KEEP(8MB)、RECYCLE(300MB)、FAST_POOL_PAGES(3000)值(括号中为默认值)
KEEP 的特性是对缓冲区中的数据页很少或几乎不怎么淘汰出去,主要针对用户的应用是否需要经常处在内存当中
读多页:预读,指定参数 MULTI_PAGE_GET_NUM 大小(默认值为 1 页),来控制每次读取的页数。
日志缓冲区:用于存放重做日志的内存缓冲区。参数 RLOG_BUF_SIZE 对日志缓冲区大小进行控制,单位为页数量。
字典缓冲区:存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。缓冲区配置参数为 DICT_BUF_SIZE,默认的配置大小为 5M。
SQL缓冲区:提供在执行 SQL 语句过程中所需要的内存,包括计划、SQL 语句和结果集缓存
排序缓冲区:参数 SORT_BUF_SIZE控制来源于共享池,使用时才会申请内存,使用完毕立即销毁。建议使用默认值 2M。
哈希缓冲区:参数HJ_BUF_SIZE控制。使用时才会申请内存,使用完毕立即销毁。空间来源受参数vm_mem_heap控制。0:创建内存池,空间来自操作系统1:创建堆,空间来自共享池2:同时创建内存池和堆。DM8 提供了为哈希连接而设定的缓冲区,不过该缓冲区是个虚拟缓冲区。之所以说是虚拟缓冲,是因为系统没有真正创建特定属于哈希缓冲区的内存,而是在进行哈希连接时,对排序的数据量进行了计算。如果计算出的数据量大小超过了哈希缓冲区的大小,则使用 DM8 创新的外存哈希方式;如果没有超过哈希缓冲区的大小,实际上还是使用内存池来进行哈希操作。
DM 进程中主要包括监听线程、IO 线程、工作线程、调度线程、日志线程等,以下分别对它们进行介绍。
监听线程:在服务器端口上进行循环监听,一旦有来自客户的连接请求,监听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理。
工作线程:是 DM 服务器的核心线程,负责服务器各种类型任务的处理及所有实际的数据相关操作。工作线程包括任务工作线程和会话工作线程等。




