一、DM数据库主要由数据库和实例构成
二、逻辑储存结构
DM 数据库的逻辑单元从大到小依次为:数据库–>表空间–>数据文件–>段–>簇–>页。 到页就没有了,由此看出页是最小的逻辑单元,是数据库最小的分配单位。数据库由一个或 多个表空间组成。每一个表空间有一个或多个数据文件组成,每一个数据文件由一个或多个 簇组成,段是簇的上级逻辑单位,一段可以跨多个数据文件,簇是磁盘上连续的页组成的。 一个簇总在一个数据文件中。
其中:
页:数据块,最小的数据 IO 单元。页的大小可以设置为 4K,8k,16k,32k,默认 8k。 数据页包含 4 个部分:页头控制信息,数据,空闲空间,行偏移数组。
簇:是由 16 或 32 个连续的数据页组成。默认 16。比如:数据文件 大小为 32m ,页大小是 8k,则共有 32M/8K/16=256 个簇。每个簇的大小,8k*16=128k。
段:由表空间中的一组簇组成,数据文件可以由不同的簇来组成。
表空间:是存储段的容器,由一个或者多个数据文件组成 。初始化实例默认创建 5 个表空间。
三、物理结构
①控制文件(dm.ctl)
是一种二进制文件,主要记录和包含了数据库的必要信息,主要包括
1、数据库名称 ;
2、数据库服务器模式;
3、OGUID 唯一标识;
4、数据库服务器版本;
5、数据文件版本;
6、数据库的启动次数;
7、数据库最近一次启动时间;
8、表空间信息,包括表空间名,表空间物理文件路径等,记录了所有数据库中使用的表 空间,数组的方式保存起来;
9、控制文件校验码,校验码由数据库服务器在每次修改控制文件后计算生成,保证控制 文件合法性,防止文件损坏及手工修改;
10、可通过 dmctlcvt 工具,将控制文件与 txt 文件进行互相转换。
②重做日志文件
DM 数据库中添加、删除、 修改对象,或者改变数据,DM 都会按照特 定的格式,将这些操作执行的结果写入到当前的重做日志文件中。每个数据库中至少有两组 重做日志文件。
特点:
1.循环使用;
2.每组一个日志文件;
3.只能增加日志组,但不能删除;
4.各日志文件大小一致;
5.文件状态为“活动”与“不活动”两种。
③配置文件
数据库中以.ini 结尾的文件。dm.ini 是 DM 数据库启动所必须的配置文件。 当 dm.ini 中的某参数值设置为非法值时,若设置值与参数类型不兼容,则参数实际取值为 默认值;若设置值小于参数取值范围的最小值,则实际取值为最小值;若设置值大于参数取 值范围的最大值,则实际取值为最大值。 参数属性分为三种:静态、动态和手动。
④数据文件
以dbf结尾的文件
数据文件的大小范围:4096页大小 -------2147483647页大小。
表空间中数据文件的总数不超过256个。
⑤归档日志文件
利用归档日志,将系统恢复至故障发生的前一刻,也可以还原指定的时间点,如果没有归档日志,则只能利用备份来进行恢复。
归档参数文件: dmarch.ini
四:内存结构
1、内存池:内存池包括共享内存池和其他运行时内存池。
查询系统中所有内存池:select * from v$mem_pool;
①共享内存池
1.启动时按照参数MEMORY_POOL 的值,向操作系统申请数据库使用的内存;
2.维护数据库系统内部内存分配与释放;
3.参数 MEMORY_EXTENT_SIZE 指定了共享内存池每次扩展的大小,单位为MB;
4.参数 MEMORY_TARGET 则指定了共享内存池扩展到超过该值后,空闲时会收缩到的大小。
优点:
1.不依赖操作系统内存管理;
2.减少对操作系统内存的调用。
②运行时内存池
1.一些功能模块在运行时还会使用自己的运行时内存池;
2.这些内存池从操作系统申请一片内存作为本功能模块的内存池来使用,如会话内 存池、虚拟机内存池等。
2、缓冲区
数据缓冲区:磁盘数据页在内存中的镜像(读出和写入);
1.实例启动时,根据ini参数配置,向操作系统内存申请内存;
2.三条数据链:
(1)“自由”链:存放尚未使用的内存数据页;
(2)“LRU”链:存放已经被使用的内存数据页,根据使用频率,优先淘汰使用频率低的数据页;
(3)“脏”链:存放已修改的内存数据页。
3.类别:
(1)NORMAL:提供给系统处理的一些数据页 ,默认缓冲区;由参数BUFFER控制;
(2)KEEP:缓冲区中的数据页很少或经常访问的数据页;由参数KEEP控制;
(3)RECYCLE:供临时表空间使用 ;由RECYCLE参数控制;
(4)FAST:FAST 缓冲区根据用户指定的 FAST_POOL_PAGES 参数大小,由系统自动进行管理。
①日志缓冲区
存放重做日志内容的缓冲区。
1.重做日志比数据页IO优先级更高;
2.由RLOG_BUF_SIZE 参数进行控制,大小必须为2的N次幂;
3.该缓冲区的内存从共享池中申请。
②字典缓冲区
存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。
1.由参数DICT_BUF_SIZE控制大小,默认的配置大小为 5M;
2.采用LRU算法;
3.系统表到内存中的映射;
4.加速对数据字典信息的查询。
③SQL缓冲区
供在执行 SQL 语句过程中所需要的内存,包括计划、 SQL 语句和结果集缓存。
1.由参数USE_PLN_POOL 确定执行计划是否复用;
2.由参数CACHE_POOL_SIZE 确定SQL缓冲区大小;
3.开启结果集缓存RS_CAN_CACHE=1 且 USE_PLN_POOL 非 0 ;
3、排序缓冲区
提供数据排序所需要的内存空间 。
1.由SORT_BUF_SIZE参数决定大小;
2.每次排序过程中,都首先申请内存,排序结束后再释放内存;
3.当排序缓冲区空间不足时,会申请使用TEMP表空间。
4、哈希缓冲区
为哈希连接而设定的缓冲区。
1.虚拟缓冲区;
2.由HJ_BUF_SIZE参数控制大小;该值可能会影响哈希连接效率
五、线程结构
实例:
实例由一个正在运行的DM后台进程(包含多个线程)以及一个大型的共享内存组成的。简单来说,实例就是操作达梦数据库的一种手段,是用来访问数据库的内存结构以及后台进程的集合。
达梦数据库存储在服务器的磁盘上,而DM实例存储于服务器的内存中。通过运行DM例,可以操作达梦数据库中的内容。在任何时候,一个实例只能与一个数据库进行关联(装载、打开或者挂起数据库)。在大多数情况下,一个数据库也只有一个实例对其进行操作。但是在即将提供的DM共享磁盘高性能集群中,多个实例可以同时装载并打开一个数据库(位于一组由多台服务器共享的物理磁盘上)。此时,可以同时从多台不同的计算机访问这个数据库。
后台进程:
达梦服务器使用“对称服务器构架”的单进程、多线程结构。这种对称服务器构架在有效地利用了系统资源的同时又提供了较高的可伸缩性能,这里所指的线程即为操作系统的线程。服务器在运行时由各种内存数据结构和一系列的线程组成,线程分为多种类型,不同类型的线程完成不同的任务。线程通过一定的同步机制对数据结构进行并发访问和处理,以完成客户提交的各种任务。达梦数据库服务器是共享的服务器,允许多个用户连接到同一个服务器上,服务器进程称为共享服务器进程。DM进程中主要包括监听线程、IO线程、工作线程、调度线程、日志线程等。