达梦数据库体系结构

DM 逻辑结构

1.1.1 DM 数据库:

指的是磁盘上存放在 DM 数据库中的数据的集合,一般包括:数据文件、日志文件、控制文件以及
临时数据文件等。

1.1.2 实例:

简单来
说,实例就是操作 DM 数据库的一种手段,是用来访问数据库的内存结构以及后台进程的集
合。

1.2 DM 逻辑存储结构

在这里插入图片描述
可以看出,在 DM8 中存储的层次结构如下:

  1. 数据库由一个或多个表空间组成;
  2. 每个表空间由一个或多个数据文件组成;
  3. 每个数据文件由一个或多个簇组成;
  4. 段是簇的上级逻辑单元,一个段可以跨多个数据文件;
  5. 簇由磁盘上连续的页组成,一个簇总是在一个数据文件中;
  6. 页是数据库中最小的分配单元,也是数据库中使用的最小的 IO 单元。

1.2.1 表空间

在 DM 数据库中,表空间由一个或者多个数据文件组成。DM 数据库中的所有对象在逻辑
上都存放在表空间中,而物理上都存储在所属表空间的数据文件中。
在创建 DM 数据库时,会自动创建 5 个表空间:SYSTEM 表空间、ROLL 表空间、MAIN
表空间、TEMP 表空间和 HMAIN 表空间。

  1. SYSTEM 表空间存放了有关 DM 数据库的字典信息,用户不能在 SYSTEM 表空间创
    建表和索引。
  2. ROLL 表空间完全由 DM 数据库自动维护,用户无需干预。该表空间用来存放事务运
    行过程中执行 DML 操作之前的值,从而为访问该表的其他用户提供表数据的读一致
    性视图。
  3. MAIN 表空间在初始化库的时候,就会自动创建一个大小为 128M 的数据文件
    MAIN.DBF。在创建用户时,如果没有指定默认表空间,则系统自动指定 MAIN 表
    空间为用户默认的表空间。
  4. TEMP 表空间完全由 DM 数据库自动维护。当用户的 SQL 语句需要磁盘空间来完成
    某个操作时,DM 数据库会从 TEMP 表空间分配临时段。如创建索引、无法在内存中
    完成的排序操作、SQL 语句中间结果集以及用户创建的临时表等都会使用到 TEMP
    表空间。
  5. HMAIN 表空间属于 HTS 表空间,完全由 DM 数据库自动维护,用户无需干涉。当用
    户在创建 HUGE 表时,未指定 HTS 表空间的情况下,充当默认 HTS 表空间。
    每一个用户都有一个默认的表空间。对于 SYS、SYSSSO、SYSAUDITOR 系统用户,默
    认的用户表空间是 SYSTEM,SYSDBA 的默认表空间为 MAIN,新创建的用户如果没有指定默
    认表空间,则系统自动指定 MAIN 表空间为用户默认的表空间。
    一般情况下,建议用户自己创建一个表空间来存放业务数据,或者将数据存放在默认的
    用户表空间 MAIN 中。
    用户可以通过执行如下语句来查看表空间相关信息。
    SYSTEM、ROLL、MAIN 和 TEMP 表空间查看语句:
    SELECT * FROM V T A B L E S P A C E ; H M A I N 表 空 间 查 看 语 句 : S E L E C T ∗ F R O M V TABLESPACE; HMAIN 表空间查看语句: SELECT * FROM V TABLESPACE;HMAINSELECTFROMVHUGE_TABLESPACE;

1.2.2 记录

数据库表中的每一行是一条记录。在 DM 中,除了 Huge 表,其他的表都是在数据页中
按记录存储数据的。也就是说,记录是存储在数据页中的,记录并不是 DM 数据库的存储单
位,页才是。由于记录不能跨页存储,这样记录的长度就受到数据页大小的限制。数据页中
还包含了页头控制信息等空间,因此 DM 规定每条记录的总长度不能超过页面大小的一半。

1.2.3 页

数据页(也称数据块)是 DM 数据库中最小的数据存储单元。页的大小对应物理存储空
间上特定数量的存储字节,在 DM 数据库中,页大小可以为 4KB、8KB、16KB 或者 32KB,
用户在创建数据库时可以指定,默认大小为 8KB,一旦创建好了数据库,则在该库的整个生
命周期内,页大小都不能够改变。

1.2.4 簇

簇是数据页的上级逻辑单元,由同一个数据文件中 16 个或 32 个或 64 个连续的数据页
组成。在 DM 数据库中,簇的大小由用户在创建数据库时指定,默认大小为 16。假定某个数
据文件大小为 32MB,页大小为 8KB,则共有 32MB/8KB/16=256 个簇,每个簇的大小为
8K*16=128K。和数据页的大小一样,一旦创建好数据库,此后该数据库的簇的大小就不能
够改变。

2.DM 物理存储结构

DM 数据库使用了磁盘上大量的物理存储结构来保存和管理用户数据。典型的物理存储结
构包括:用于进行功能设置的配置文件;用于记录文件分布的控制文件;用于保存用户实际
数据的数据文件、重做日志文件、归档日志文件、备份文件;用来进行问题跟踪的跟踪日志
文件等,如图 2.1 所示。
在这里插入图片描述
2.1 配置文件
配置文件是 DM 数据库用来设置功能选项的一些文本文件的集合,配置文件以 ini 为扩
展名,它们具有固定的格式,用户可以通过修改其中的某些参数取值来达成如下两个方面的
目标:

  1. 启用/禁用特定功能项;
  2. 针对当前系统运行环境设置更优的参数值以提升系统性能。
    2.1.1.1 dm.ini
    每创建一个 DM 数据库,就会自动生成 dm.ini 文件。dm.ini 是 DM 数据库启动所必须
    的配置文件,通过配置该文件可以设置 DM 数据库服务器的各种功能和性能选项,主要的配
    置模块包括:控制文件相关、实例名、内存相关、线程相关等。
    当 dm.ini 中的某参数值设置为非法值时,若设置值与参数类型不兼容,则参数实际取
    值为默认值;若设置值小于参数取值范围的最小值,则实际取值为最小值;若设置值大于参
    数取值范围的最大值,则实际取值为最大值。
    参数属性分为三种:手动、静态和动态。
    手动,不能被动态修改,必须手动修改 dm.ini 参数文件,然后重启才能生效。
    静态,可以被动态修改,修改后重启服务器才能生效。
    动态,可以被动态修改,修改后即时生效。动态参数又分为会话级和系统级两种。会话
    级参数被修改后,新参数值只会影响当前会话和新创建的会话,之前创建的会话不受影响;
    系统级参数的修改则会影响所有的会话。
    其中,动态修改是指 DBA 用户可以在数据库服务器运行期间,通过调用系统过程
    SP_SET_PARA_VALUE()、SP_SET_PARA_DOUBLE_VALUE()和
    SP_SET_PARA_STRING_VALUE()对参数值进行修改。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.1.1.2 dmmal.ini

dmmal.ini 是 MAL 系统的配置文件。dmmal.ini 的配置项见表 2.26。需要用到 MAL
环境的实例,所有站点 dmmal.ini 需要保证严格一致。

2.1.1.3 dmarch.ini

dmarch.ini 用于本地归档和远程归档。

2.1.1.4 dm_svc.conf

dm_svc.conf 是一个客户端配置文件,它包含了 DM 各接口和客户端工具所需要配置
的一些参数。它必须和接口/客户端工具位于同一台机器上才能生效。
dm_svc.conf 的工作目录是固定的,不能改变。用户如果需要将其修改并拷贝到其他
客户端机器上,也必须位于相同的目录中。dm_svc.conf 工作的目录就是初始
dm_svc.conf 文件生成的目录

2.1.1.5 sqllog.ini

sqllog.ini用于sql日志的配置,当且仅当INI参数SVR_LOG=1时使用。
如果在服务器启动过程中,修改了sqllog.ini文件。修改之后的文件,只要调用过程
SP_REFRESH_SVR_LOG_CONFIG() 就会生效。

2.2 控制文件

每个 DM 数据库都有一个名为 dm.ctl 的控制文件。控制文件是一个二进制文件,它记
录了数据库必要的初始信息,其中主要包含以下内容:

  1. 数据库名称;
  2. 数据库服务器模式;
  3. OGUID 唯一标识;
  4. 数据库服务器版本;
  5. 数据文件版本;
  6. 数据库的启动次数;
  7. 数据库最近一次启动时间;
  8. 表空间信息,包括表空间名,表空间物理文件路径等,记录了所有数据库中使用的
    表空间,数组的方式保存起来;
  9. 控制文件校验码,校验码由数据库服务器在每次修改控制文件后计算生成,保证控
    制文件合法性,防止文件损坏及手工修改。

2.3 数据文件

数据文件以 dbf 为扩展名,它是数据库中最重要的文件类型,一个 DM 数据文件对应磁
盘上的一个物理文件或者达梦分布式数据库中的一个逻辑文件,数据文件是真实数据存储的
地方,每个数据库至少有一个与之相关的数据文件。在实际应用中,通常有多个数据文件。
当 DM 的数据文件空间用完时,它可以自动扩展。可以在创建数据文件时通过 MAXSIZE
参数限制其扩展量,当然,也可以不限制。但是,数据文件的大小最终会受物理磁盘大小的
限制。在实际使用中,一般不建议使用单个巨大的数据文件,为一个表空间创建多个较小的
数据文件是更好的选择。

2.4 重做日志文件

重做日志(即 REDO 日志)指在 DM 数据库中添加、删除、修改对象,或者改变数据,
DM 都会按照特定的格式,将这些操作执行的结果写入到当前的重做日志文件中。重做日志文
件以 log 为扩展名。每个 DM 数据库实例必须至少有 2 个重做日志文件,默认两个日志文件
为 DAMENG01.log、DAMENG02.log,这两个文件循环使用。
重做日志文件因为是数据库正在使用的日志文件,因此被称为联机日志文件。
重做日志文件主要用于数据库的备份与恢复。理想情况下,数据库系统不会用到重做日
志文件中的信息。然而现实世界总是充满了各种意外,比如电源故障、系统故障、介质故障,
或者数据库实例进程被强制终止等,数据库缓冲区中的数据页会来不及写入数据文件。这样,
在重启 DM 实例时,通过重做日志文件中的信息,就可以将数据库的状态恢复到发生意外时
的状态。
重做日志文件对于数据库是至关重要的。它们用于存储数据库的事务日志,以便系统在
出现系统故障和介质故障时能够进行故障恢复。在 DM 数据库运行过程中,任何修改数据库
的操作都会产生重做日志,例如,当一条元组插入到一个表中的时候,插入的结果写入了重
做日志,当删除一条元组时,删除该元组的事实也被写了进去,这样,当系统出现故障时,
通过分析日志可以知道在故障发生前系统做了哪些动作,并可以重做这些动作使系统恢复到
故障之前的状态。

2.5 归档日志文件

日志文件分为联机日志文件和归档日志文件。DM 数据库可以在归档模式和非归档模式下
运行。非归档模式下,数据库会只将重做日志写入联机日志文件中进行存储;归档模式下,
数据库会同时将重做日志写入联机日志文件和归档日志文件中分别进行存储。
联机日志文件指的是系统当前正在使用的日志文件。创建数据库时,联机日志文件通常
被扩展至一定长度,其内容则被初始化为空,当系统运行时,该文件逐渐被产生的日志所填
充。对日志文件的写入是顺序连续的。然而系统磁盘空间总是有限,系统必须能够循环利用
日志文件的空间,为了做到这一点,当所有日志文件空间被占满时,系统需要清空一部分日
志以便重用日志文件的空间,为了保证被清空的日志所“保护”的数据在磁盘上是安全的,
这里需要引入一个关键的数据库概念——检查点。当产生检查点时,系统将系统缓冲区中的日
志和脏数据页都写入磁盘,以保证当前日志所“保护”的数据页都已安全写入磁盘,这样日
志文件即可被安全重用。
归档日志文件,就是在归档模式下,重做日志被连续写入到归档日志后,所生成了归档
日志文件。归档日志文件以归档时间命名,扩展名也是 log。但只有在归档模式下运行时,
DM 数据库才会将重做日志写入到归档日志文件中。采用归档模式会对系统的性能产生影响,
然而系统在归档模式下运行会更安全,当出现故障时其丢失数据的可能性更小,这是因为一
旦出现介质故障,如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可
以还原到指定的时间点,而如果没有归档日志文件,则只能利用备份进行恢复。

2.6 逻辑日志文件

如果在 DM 数据库上配置了复制功能,复制源就会产生逻辑日志文件。逻辑日志文件是
一个流式的文件,它有自己的格式,且不在第一章所述的页,簇和段的管理之下。
逻辑日志文件内部存储按照复制记录的格式,一条记录紧接着一条记录,存储着复制源
端的各种逻辑操作。用于发送给复制目的端。详细内容请看“数据复制”章节。

2.7 物理逻辑日志文件

物理逻辑日志,是按照特定的格式存储的服务器的逻辑操作,专门用于 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。

2.8 备份文件

备份文件以 bak 为扩展名,当系统正常运行时,备份文件不会起任何作用,它也不是数
据库必须有的联机文件类型之一。然而,从来没有哪个数据库系统能够保证永远正确无误地
运行,当数据库不幸出现故障时,备份文件就显得尤为重要了。
当客户利用管理工具或直接发出备份的 SQL 命令时,DM Server 会自动进行备份,并
产生一个或多个备份文件,备份文件自身包含了备份的名称、对应的数据库、备份类型和备
份时间等信息。同时,系统还会自动记录备份信息及该备份文件所处的位置,但这种记录是
松散的,用户可根据需要将其拷贝至任何地方,并不会影响系统的运行。

2.9 SQL 日志文件

用户在 dm.ini 中配置 SVR_LOG 参数后就会打开 SQL 日志。
SQL 日志文件是一个纯文本文件。当 PART_STOR=0 时,以“dmsql_实例名_日期_时
间”命名,当 PART_STOR=1 时,以“dmsql_实例名_用户名_日期_时间”命名。缺省生
成在 DM 安装目录的 log 子目录下面,管理员可通过 sqllog.ini 参数 FILE_PATH 设置其
生成路径。
SQL 日志内容包含系统各会话执行的 SQL 语句、参数信息、错误信息等。跟踪日志主要
用于分析错误和分析性能问题,基于跟踪日志可以对系统运行状态有一个分析,比如,可以
挑出系统现在执行速度较慢的 SQL 语句,进而对其进行优化

2.10 事件日志文件

DM 数据库系统在运行过程中,会在 log 子目录下产生一个“dm_实例名_日期”命名的
事件日志文件。事件日志文件对 DM 数据库运行时的关键事件进行记录,如系统启动、关闭、
内存申请失败、IO 错误等一些致命错误。事件日志文件主要用于系统出现严重错误时进行查
看并定位问题。事件日志文件随着 DM 数据库服务的运行一直存在。
事件日志文件打印的是中间步骤的信息,所以出现部分缺失属于正常现象。

2.11 数据重演文件

调用系统存储过程 SP_START_CAPTURE 和 SP_STOP_CAPTURE,可以获得数据重演文
件。重演文件用于数据重演,存储了从抓取开始到抓取结束时,DM 数据库与客户端的通信消
息。使用数据重演文件,可以多次重复抓取这段时间内的数据库操作,为系统调试和性能调
优提供了另一种分析手段。

3.DM 内存结构

3.1 内存池

DM Server 的内存池包括共享内存池和其他一些运行时内存池。
动态视图 V$MEM_POOL 详细记录了当前系统中所有的内存池的状态,可通过查询这个
动态视图掌握 DM Server 的内存使用情况。

3.1.1 共享内存池

共享内存池是 DM Server 在启动时从操作系统申请的一大片内存。
在 DM Server 的运行期间,经常会申请与释放小片内存,而直接向操作系统申请和释
放内存时需要发出系统调用,此时可能会引起线程切换,降低系统运行效率。于是 DM 采用
采用共享内存池的方式:一次向操作系统申请一片较大内存,作为共享内存池。当系统在运
行过程中需要申请小片内存时,可在共享内存池内进行申请,当用完该内存时,再释放掉,
即归还给共享内存池。
DM 系统管理员可以通过 DM Server 的配置文件(dm.ini)来对共享内存池的大小进
行设置,共享池大小的参数为 MEMORY_POOL,缺省大小为 500M。如果在运行时所需内存
大于配置值,共享内存池也可进行自动扩展,INI 参数 MEMORY_EXTENT_SIZE 指定了共享
内存池每次扩展的大小,参数 MEMORY_TARGET 则指定了共享内存池扩展到超过该值后,空
闲时会收缩到的大小。

3.1.2 运行时内存池

除了共享内存池,DM Server 的一些功能模块在运行时还会使用自己的运行时内存池。
这些运行时内存池是从操作系统申请一片内存作为本功能模块的内存池来使用,如会话内存
池、虚拟机内存池等。

3.2 缓冲区

3.2.1 数据缓冲区

数据缓冲区是 DM Server 在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数
据页所存储的地方。这是 DM Server 至关重要的内存区域之一,将其设定得太小,会导致
缓冲页命中率低,磁盘 IO 频繁;将其设定得太大,又会导致操作系统内存本身不够用。
系统启动时,首先根据配置的数据缓冲区大小向操作系统申请一片连续内存并将其按数
据页大小进行格式化,并置入―自由‖链中。数据缓冲区存在三条链来管理被缓冲的数据页,
一条是―自由‖链,用于存放目前尚未使用的内存数据页,一条是―LRU‖链,用于存放已被使
用的内存数据页(包括未修改和已修改),还有一条即为―脏‖链,用于存放已被修改过的内存
数据页。

3.2.2 日志缓冲区

日志缓冲区是用于存放重做日志的内存缓冲区。为了避免由于直接的磁盘 IO 而使系统
性能受到影响,系统在运行过程中产生的日志并不会立即被写入磁盘,而是和数据页一样,
先将其放置到日志缓冲区中。那么为何不在数据缓冲区中缓存重做日志而要单独设立日志缓
冲区呢?主要是基于以下原因:

  1. 重做日志的格式同数据页完全不一样,无法进行统一管理;
  2. 重做日志具备连续写的特点;
  3. 在逻辑上,写重做日志比数据页 IO 优先级更高。
    DM Server 提供了参数 RLOG_BUF_SIZE 对日志缓冲区大小进行控制,日志缓冲区所
    占用的内存是从共享内存池中申请的,单位为页数量,且大小必须为 2 的 N 次方,否则采用
    系统默认大小 1024 页。

3.2.3 字典缓冲区

字典缓冲区主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。
每次对数据库的操作都会涉及到数据字典信息,访问数据字典信息的效率直接影响到相应的
操作效率,如进行查询语句,就需要相应的表信息、列信息等,这些字典信息如果都在缓冲
区里,则直接从缓冲区中获取即可,否则需要 I/O 才能读取到这些信息。
DM8 采用的是将部分数据字典信息加载到缓冲区中,并采用 LRU 算法进行字典信息的控
制。缓冲区大小设置问题,如果太大,会浪费宝贵的内存空间,如果太小,可能会频繁的进
行淘汰,该缓冲区配置参数为 DICT_BUF_SIZE,默认的配置大小为 50M。
DM8 采用缓冲部分字典对象,那会影响效率吗?数据字典信息访问存在热点现像,并不
是所有的字典信息都会被频繁的访问,所以按需加载字典信息并不会影响到实际的运行效率。
但是如果在实际应用中涉及对分区数较多的水平分区表访问,例如上千个分区,那么就
需要适当调大 DICT_BUF_SIZE 参数值。

3.2.4 SQL 缓冲区

SQL 缓冲区提供在执行 SQL 语句过程中所需要的内存,包括计划、SQL 语句和结果集缓
存。
很多应用当中都存在反复执行相同 SQL 语句的情况,此时可以使用缓冲区保存这些语句
和它们的执行计划,这就是计划重用。这样带来的好处是加快了 SQL 语句执行效率,但同时
给内存也增加了压力。
DM Server 在配置文件 dm.ini 提供了参数来支持是否需要计划重用,参数为
USE_PLN_POOL,当指定为非 0 时,则启动计划重用;为 0 时禁止计划重用。DM 同时还提
供了参数 CACHE_POOL_SIZE(单位为 MB),来改变 SQL 缓冲区大小,系统管理员可以设
置该值以满足应用需求,默认值为 100M。

4.管理 DM 线程

4.1 监听线程

监听线程主要的任务是在服务器端口上进行循环监听,一旦有来自客户的连接请求,监
听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理。
它在系统启动完成后才启动,并且在系统关闭时首先被关闭。为了保证在处理大量客户连接
时系统具有较短的响应时间,监听线程比普通线程优先级更高。
DM 服务器所有配置端口的范围为 1024-65534。当客户端工具发起连接时,由操作系
统为客户端工具自动分配一个端口用于与 DM 服务器进行通信。对于数据守护、DMDSC、DM
MPP 和 DMTDD 等分布式数据库中各实例节点之间的通信,发起连接的节点也由操作系统自
动分配端口,所以配置主备/DMDSC/DM MPP/DMTDD 时,除了各实例指定的端口外,发起
连接的实例也会有操作系统自动分配的用于和其他实例进行通信的端口。

4.2 工作线程

工作线程是 DM 服务器的核心线程,它从任务队列中取出任务,并根据任务的类型进行
相应的处理,负责所有实际的数据相关操作。
DM8 的初始工作线程个数由配置文件指定,随着会话连接的增加,工作线程也会同步增
加,以保持每个会话都有专门的工作线程处理请求。为了保证用户所有请求及时响应,一个
会话上的任务全部由同一个工作线程完成,这样减少了线程切换的代价,提高了系统效率。
当会话连接超过预设的阀值时,工作线程数目不再增加,转而由会话轮询线程接收所有用户
请求,加入任务队列,等待工作线程一旦空闲,从任务队列依次摘取请求任务处理。

4.3 IO 线程

在数据库活动中,IO 操作历来都是最为耗时的操作之一。当事务需要的数据页不在缓冲
区中时,如果在工作线程中直接对那些数据页进行读写,将会使系统性能变得非常糟糕,而
把 IO 操作从工作线程中分离出来则是明智的做法。IO 线程的职责就是处理这些 IO 操作。
通常情况下,DM Server 需要进行 IO 操作的时机主要有以下三种:

  1. 需要处理的数据页不在缓冲区中,此时需要将相关数据页读入缓冲区;
  2. 缓冲区满或系统关闭时,此时需要将部分脏数据页写入磁盘;
  3. 检查点到来时,需要将所有脏数据页写入磁盘。

4.4 调度线程

调度线程用于接管系统中所有需要定时调度的任务。调度线程每秒钟轮询一次,负责的
任务有以下一些:

  1. 检查系统级的时间触发器,如果满足触发条件则生成任务加到工作线程的任务队列
    由工作线程执行;
  2. 清理 SQL 缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项;
  3. 检查数据重演捕获持续时间是否到期,到期则自动停止捕获;
  4. 执行动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池;
  5. 自动执行检查点。为了保证日志的及时刷盘,减少系统故障时恢复时间,根据 INI
    参数设置的自动检查点执行间隔定期执行检查点操作;
  6. 会话超时检测。当客户连接设置了连接超时时,定期检测是否超时,如果超时则自
    动断开连接;
  7. 必要时执行数据更新页刷盘;
  8. 唤醒等待的工作线程。

4.5 日志 FLUSH 线程

任何数据库的修改,都会产生重做 REDO 日志,为了保证数据故障恢复的一致性,REDO
日志的刷盘必须在数据页刷盘之前进行。事务运行时,会把生成的 REDO 日志保留在日志缓
冲区中,当事务提交或者执行检查点时,会通知 FLUSH 线程进行日志刷盘。由于日志具备
顺序写入的特点,比数据页分散 IO 写入效率更高。日志 FLUSH 线程和 IO 线程分开,能获
得更快的响应速度,保证整体的性能。DM8 的日志 FLUSH 线程进行了优化,在刷盘之前,
对不同缓冲区内的日志进行合并,减少了 IO 次数,进一步提高了性能。
如果系统配置了实时归档,在 FLUSH 线程日志刷盘前,会直接将日志通过网络发送到
实时备库。如果配置了本地归档,则生成归档任务,通过日志归档线程完成。

4.6 日志归档线程

日志归档线程包含异步归档线程,负责远程异步归档任务。如果配置了非实时归档,由
日志 FLUSH 线程产生的任务会分别加入日志归档线程,日志归档线程负责从任务队列中取
出任务,按照归档类型做相应归档处理。
将日志 FLUSH 线程和日志归档线程分开的目的是为了减少不必要的效率损失,除了远
程实时归档外,本地归档、远程异步归档都可以脱离 FLUSH 线程来做,如果放在 FLUSH 线
程中一起做会严重影响系统性能。

4.7 日志 APPLY 线程

在配置了数据守护的系统中,创建了一个日志 APPLY 线程。当服务器作为备库时,每
次接收到主库的物理 REDO 日志生成一个 APPLY 任务加入到任务队列,APPLY 线程从任务
队列中取出一个任务在备库上将日志重做,并生成自己的日志,保持和主库数据的同步或一
致,作为主库的一个镜像。备库数据对用户只读,可承担报表、查询等任务,均衡主库的负
载。

4.8 定时器线程

在数据库的各种活动中,用户常常需要数据库完成在某个时间点开始进行某种操作,如
备份;或者是在某个时间段内反复进行某种操作等。定时器线程就是为这种需求而设计的。
通常情况下,DM Server 需要进行定时操作的事件主要有以下几种:

  1. 逻辑日志异步归档;
  2. 异步归档日志发送(只有在 PRIMARY 模式下,且是 OPEN 状态下);
  3. 作业调度。
    定时器线程启动之后,每秒检测一次定时器链表,查看当前的定时器是否满足触发条件,
    如果满足,则把执行权交给设置好的任务,如逻辑日志异步归档等。
    默认情况下,达梦服务器启动的时候,定时器线程是不启动的。用户可以设置 dm.ini
    中的 TIMER_INI 参数为 1 来设置定时器线程在系统启动时启动。

4.9 逻辑日志归档线程

逻辑日志归档用于 DM8 的数据复制中,目的是为了加快异地访问的响应速度,包含本地
逻辑日志归档线程和远程逻辑日志归档线程。当配置了数据复制,系统才会创建这两个线程。

  1. 本地逻辑日志归档线程
    本地归档线程从本地归档任务列表中取出一个归档任务,生成到逻辑日志,并将逻辑日
    志写入到逻辑日志文件中。如果当前逻辑日志的远程归档类型是同步异地归档并且当前的刷
    盘机制是强制刷盘,那么就生成一个异地归档任务加入到临时列表中。
  2. 远程逻辑日志归档线程
    远程归档线程从远程归档任务列表中取出一个归档任务,并根据任务的类型进行相应的
    处理。任务的类型包括同步发送和异步发送。

4.10 MAL 系统相关线程

MAL 系统是 DM 内部高速通信系统,基于 TCP/IP 协议实现。服务器的很多重要功能都
是通过 MAL 系统实现通信的,例如数据守护、数据复制、MPP、远程日志归档等。MAL 系统
内部包含一系列线程,有 MAL 监听线程、MAL 发送工作线程、MAL 接收工作线程等。
4.11 线程信息的查看
为了增加用户对 DM 数据库内部信息的了解,以及方便数据库管理员对数据库的维护,
DM 提供了很多动态性能视图,通过它们用户可以直观地了解当前系统中有哪些线程在工作,
以及线程的相关信息。
在这里插入图片描述
社区地址:https://eco.dameng.com

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值