#DM逻辑存储结构
1.关于DM的逻辑存储结构,我们先来看一张图,我们从这张图展开介绍。如下所示:
从这张逻辑结构图可以看出,在
DM
数据库内 部,所有的数据文件组合在一起被划分到一个或者多个表空间中,所有的数据库内部对象都 存放在这些表空间中。同时,表空间被进一步划分段、簇和页。通过这种逻辑结构的设计, 可以使得 DM
数据库能够更加高效地控制磁盘空间的利用率。
在 DM8 中存储的层次结构可以从如下6条来理解和总结:
1.
数据库由一个或多个表空间组成;
2.
每个表空间由一个或多个数据文件组成;
3.
每个数据文件由一个或多个簇组成;
4.
段是簇的上级逻辑单元,一个段可以跨多个数据文件;
5.
簇由磁盘上连续的页组成,一个簇总是在一个数据文件中;
6.
页是数据库中最小的分配单元,也是数据库中使用的最小的
IO
单元。
2.逻辑结构弄清楚了,那么每一层逻辑结构单元
分别
又是什么,起着什么样的作用,下面分别介绍一下表空间,记录,页,簇,段。
#表空间:
表空间由一个或者多个数据文件组成。
DM
数据库中的所有对象在逻辑 上都存放在表空间中,而物理上都存储在所属表空间的数据文件中。
在创建
DM
数据库时,会自动创建
4
个表空间:
SYSTEM
表空间
ROLL
表空间
MAIN 表空间和
TEMP
表空间
我们可以通过执行如下语句来查看
SYSTEM
、
ROLL
、
MAIN
以及
TEMP
的表空间相关信 息。
SELECT * FROM V$TABLESPACE;
#记录:
数据库表中的每一行是一条记录。在 DM
中,除了
HUGE
表,其他的表都是在数据页中 按记录存储数据的。也就是说,记录是存储在数据页中的,记录并不是 DM
数据库的存储单 位,页才是。由于记录不能跨页存储,这样记录的长度就受到数据页大小的限制。数据页中 还包含了页头控制信息等空间,因此 DM
规定每条记录的总长度不能超过页面大小的一半。
#页:

上图是页的结构分布
页是
DM
数据库中最小的数据存储单元。页的大小对应物理存储空 间上特定数量的存储字节,在 DM
数据库中,页大小可以为
4KB
、
8KB
、
16KB
或者
32KB
, 用户在创建数据库时可以指定,默认大小为 8KB
,一旦创建好了数据库,则在该库的整个生 命周期内,页大小都不能够改变。
#簇
簇是数据页的上级逻辑单元,由同一个数据文件中 16 个或 32 个或 64 个连续的数据页 组成。在 DM 数据库中,簇的大小由用户在创建数据库时指定,默认大小为 16。假定某个数 据文件大小为 32MB,页大小为 8KB,则共有 32MB/8KB/16=256 个簇,每个簇的大小为 8K*16=128K。和数据页的大小一样,一旦创建好数据库,此后该数据库的簇的大小就不能够改变。
#段:
段是簇的上级逻辑分区单元,它由一组簇组成。在同一个表空间中,段可以包含来自不 同文件的簇,即一个段可以跨越不同的文件。而一个簇以及该簇所包含的数据页则只能来自 一个文件,是连续的 16 或者 32 个数据页。由于簇的数量是按需分配的,数据段中的不同簇在磁盘上不一定连续。段又分为数据段,临时段和回滚段。
#DM物理存储结构
关于DM物理存储结构,我们同样以一张结构图开始分析。如下图所示:
从上图我们可以清楚地看到各个文件之间的关系。
DM物理存储结构包括:用于进行功能设置的配置文件;用于记录文件分布的控制文件;用于保存用户实际数据的数据文件、重做日志文件、归档日志文件、备份文件;用来进行问题跟踪的跟踪日志文件等。
下面一一介绍一下各个文件的概念及其作用。
#配置文件:
配置文件是
DM
数据库用来设置功能选项的一些文本文件的集合,配置文件以
为扩展名,它们具有固定的格式,用户可以通过修改其中的某些参数取值来达成如下两个方面的目标:
1.
启用
/
禁用特定功能项;
2.
针对当前系统运行环境设置更优的参数值以提升系统性能
#控制文件:
每个 DM
数据库都有一个名为
dm.ctl
的控制文件。控制文件是一个二进制文件,它记
录了数据库必要的初始信息,其中主要包含以下内容:
1.
数据库名称;
2.
数据库服务器模式;
3. OGUID
唯一标识;
4.
数据库服务器版本;
5.
数据文件版本;
6.
数据库的启动次数;
7.
数据库最近一次启动时间;
8.
表空间信息,包括表空间名,表空间物理文件路径等,记录了所有数据库中使用的
表空间,数组的方式保存起来;
9.
控制文件校验码,校验码由数据库服务器在每次修改控制文件后计算生成,保证控
制文件合法性,防止文件损坏及手工修改。
#数据文件:
数据文件以
dbf
为扩展名,它是数据库中最重要的文件类型,一个
DM
数据文件对应磁盘上的一个物理文件或者达梦分布式数据库中的一个逻辑文件,数据文件是真实数据存储的地方,每个数据库至少有一个与之相关的数据文件。在实际应用中,通常有多个数据文件。当 DM
的数据文件空间用完时,它可以自动扩展。可以在创建数据文件时通过
MAXSIZE 参数限制其扩展量,当然,也可以不限制。但是,数据文件的大小最终会受物理磁盘大小的限制。在实际使用中,一般不建议使用单个巨大的数据文件,为一个表空间创建多个较小的数据文件是更好的选择。
数据文件中还有两类特殊的数据文件:
ROLL
和
TEMP
文件。
ROLL
文件:
ROLL
表空间的
dbf
文件,称为
ROLL
文件。
ROLL
文件用于保存系统的回滚记录,提供事务回滚时的信息。回滚文件可被分为若干回滚段,每个事务的回滚页在回滚段中各自挂链,页内则顺序存放回滚记录。
TEMP
文件:
TEMP.DBF
临时数据文件,临时文件可以在
dm.ini
中通过
TEMP_SIZE
配置大小。当数据库查询的临时结果集过大,缓存已经不够用时,临时结果集就可以保存在TEMP.DBF 文件中,供后续运算使用。系统中用户创建的临时表也存储在临时文件中。
#重做日志文件
重做日志
指在
DM
数据库中添加、删除、修改对象,或者改变数据,DM 都会按照特定的格式,将这些操作执行的结果写入到当前的重做日志文件中。重做日志文件以
log
为扩展名。每个
DM
数据库实例必须至少有
2
个重做日志文件,默认两个日志文件 为 DAMENG01.log
、
DAMENG02.log
,这两个文件循环使用。
重做日志文件因为是数据库正在使用的日志文件,因此被称为联机日志文件。
重做日志文件主要用于数据库的备份与恢复。理想情况下,数据库系统不会用到重做日志文件中的信息。然而现实世界总是充满了各种意外,比如电源故障、系统故障、介质故障, 或者数据库实例进程被强制终止等,数据库缓冲区中的数据页会来不及写入数据文件。这样, 在重启 DM
实例时,通过重做日志文件中的信息,就可以将数据库的状态恢复到发生意外时的状态。
重做日志文件对于数据库是至关重要的。它们用于存储数据库的事务日志,以便系统在出现系统故障和介质故障时能够进行故障恢复。在 DM
数据库运行过程中,任何修改数据库的操作都会产生重做日志,例如,当一条元组插入到一个表中的时候,插入的结果写入了重做日志,当删除一条元组时,删除该元组的事实也被写了进去,这样,当系统出现故障时,通过分析日志可以知道在故障发生前系统做了哪些动作,并可以重做这些动作使系统恢复到故障之前的状态
#归档日志文件
日志文件分为联机日志文件和归档日志文件。
DM
数据库可以在归档模式和非归档模式下运行。非归档模式下,数据库会只将重做日志写入联机日志文件中进行存储;归档模式下, 数据库会同时将重做日志写入联机日志文件和归档日志文件中分别进行存储。
归档日志文件,就是在归档模式下,重做日志被连续写入到归档日志后,所生成了归档
日志文件。归档日志文件以归档时间命名,扩展名也是
log
。但只有在归档模式下运行时,
DM
数据库才会将重做日志写入到归档日志文件中。采用归档模式会对系统的性能产生影响,
然而系统在归档模式下运行会更安全,当出现故障时其丢失数据的可能性更小,这是因为一
旦出现介质故障,如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可
以还原到指定的时间点,而如果没有归档日志文件,则只能利用备份进行恢复。
#逻辑日志文件
如果在
DM
数据库上配置了复制功能,复制源就会产生逻辑日志文件。逻辑日志文件是 一个流式的文件,它有自己的格式,且不在第一章所述的页,簇和段的管理之下。 逻辑日志文件内部存储按照复制记录的格式,一条记录紧接着一条记录,存储着复制源 端的各种逻辑操作。用于发送给复制目的端。详细内容请看“数据复制”章节。
#物理逻辑日志文件
物理逻辑日志,是按照特定的格式存储的服务器的逻辑操作,专门用于
DBMS_LOGMNR 包挖掘获取数据库系统的历史执行语句。当开启记录物理逻辑日志的功能时,这部分日志内 容会被存储在重做日志文件中。
要开启物理逻辑日志的功能,需要满足下面两个条件:
首先
,要设置
RLOG_APPEND_LOGIC
为
1
、
2
或者
3
;
其次
,通过设置参数
RLOG_IGNORE_TABLE_SET=1
或者建表(或修改表)时指定
ADD
LOGIC LOG
开 启 。 如 果 需 要 记 录 所 有 表 的 物 理 逻 辑 日 志 , 设 置
INI
参 数
RLOG_IGNORE_TABLE_SET
为
1
即可;如果只需要记录某些表的物理逻辑日志,设置
INI
参数
RLOG_IGNORE_TABLE_SET
为
0
,并在建表或者修改表的语法中使用
ADD LOGIC LOG
。
#备份文件
备份文件以
bak
为扩展名,当系统正常运行时,备份文件不会起任何作用,它也不是数据库必须有的联机文件类型之一。然而,从来没有哪个数据库系统能够保证永远正确无误地运行,当数据库不幸出现故障时,备份文件就显得尤为重要了。
当客户利用管理工具或直接发出备份的
SQL
命令时,
DM Server
会自动进行备份,并产生一个或多个备份文件,备份文件自身包含了备份的名称、对应的数据库、备份类型和备份时间等信息。同时,系统还会自动记录备份信息及该备份文件所处的位置,但这种记录是松散的,用户可根据需要将其拷贝至任何地方,并不会影响系统的运行。
#SQL日志文件
用户在
dm.ini
中配置
SVR_LOG
参数后就会打开
SQL
日志。
SQL
日志文件是一个纯文本文件。当
PART_STOR=0
时,以“
dmsql_
实例名
_
日期
_
时间”命名,当 PART_STOR=1
时,以“
dmsql_
实例名
_
用户名
_
日期
_
时间”命名。缺省生成在 DM
安装目录的
log
子目录下面,管理员可通过
sqllog.ini
参数
FILE_PATH
设置其生成路径。
SQL
日志内容包含系统各会话执行的
SQL
语句、参数信息、错误信息等。跟踪日志主要用于分析错误和分析性能问题,基于跟踪日志可以对系统运行状态有一个分析,比如,可以挑出系统现在执行速度较慢的 SQL
语句,进而对其进行优化。
#事件日志文件
DM
数据库系统在运行过程中,会在
log
子目录下产生一个
“dm_实例名_日期”
命名的事件日志文件。事件日志简称
ELOG
。事件日志文件对
DM
数据库运行时的关键事件进行记录,如系统启动、关闭、内存申请失败、IO
错误等一些致命错误。事件日志文件主要用于系统出现严重错误时进行查看并定位问题。事件日志文件随着 DM
数据库服务的运行一直存在。事件日志文件打印的是中间步骤的信息,所以出现部分缺失属于正常现象。
#数据重演文件
调用系统存储过程
SP_START_CAPTURE
和
SP_STOP_CAPTURE
,可以获得数据重演文件。重演文件用于数据重演,存储了从抓取开始到抓取结束时,DM
数据库与客户端的通信消息。使用数据重演文件,可以多次重复抓取这段时间内的数据库操作,为系统调试和性能调优提供了另一种分析手段。
更多技术交流,请登录达梦在线服务平台:eco.dameng.com