初步了解 DM 数据库体系架构

目录

DM 逻辑结构:数据库的各种定义,如表空间、表之类都为逻辑结构。

DM 物理存储结构:数据库的逻辑结构在操作系统的表现,一般为数据文件、控制文件和日志文件

DM 内存结构:DM 数据库管理系统的内存结构主要包括内存池、缓冲区、排序区、哈希区等。

DM 线程管理:DM 进程中主要包括监听线程、IO 线程、工作线程、调度线程、日志线程等。


DM 逻辑结构:数据库的各种定义,如表空间、表之类都为逻辑结构。

  • 数据库:在达梦数据库中,从DM7开始,数据库和实例概念出现变化,不在指向同一种意思。操作系统磁盘上数据的集合;一般包括:数据文件、日志文件、控制文件以及 临时数据文件等。
  • 实例:存在内存中的一组正在运行的DM后台进程/线程以及一个大型的共享内存组成,通过运行实例可以操作数据库的内容。在DM数据库的定义中,一个实例只能对应一个数据库,一个数据库也只能有一个实例对其操作,但在DMDSC中,是可以有多个实例同时打开一个数据库的。

  • 表空间:管理数据存储,由数据文件组成,DM数据库的对象在逻辑上都存放在表空间中,物理上都存储在表空间下的数据文件中。实例化数据库时,默认创建5个表空间:SYSTEM表空间(系统用户默认表空间)、MAIN表空间(用户默认表空间)、ROLL表空间(回滚表空间)、TEMP表空间(临时表空间)、HMAIN表空间(HUGE表空间),注意SYSDBA的默认表空间为MAIN表空间。

  • 记录:表中的一行,存储在数据页中,长度不能超过数据页大小的一半。

  • 页:DM数据库最小的数据存储单元。页大小默认为8KB,可以在创建数据库时指定大小,值得注意的是,页的大小在数据库创建完成之后无法再改变。

  • 簇:由数据页组成,簇大小默认由同一个数据文件中16个连续的数据页组成,可以在创建数据库时指定大小,一个簇无法跨数据文件,只能存在同一个数据文件中。与页一样,簇大小在数据库创建完成后无法改变。

  • 段:由一组簇组成,段可以包含来自不同文件中的簇,因此段中的不同簇在磁盘中的位置不一定连续。有三种段类型:数据段、临时段(存在TEMP表空间)、回滚段(ROLL表空间)。

DM 物理存储结构:数据库的逻辑结构在操作系统的表现,一般为数据文件、控制文件和日志文件

  • 配置文件: 存放数据库的初始化参数
    1. dm.ini:存放着数据库各种初始化参数,通过配置该文件可以设置 DM 数据库服务器的各种功能和性能选项,主要的配置模块包括控制文件相关、实例名、内存相关、线程相关等。
    2. dmarch.ini:用于本地归档和远程归档。

    3. dm_svc.conf:是一个客户端配置文件,它包含了 DM 各接口和客户端工具所需要配置 的一些参数。它必须和接口/客户端工具位于同一台机器上才能生效。

    4. sqllog.ini:用于sql日志的配置。

    5. dmmal.ini:MAL系统的配置文件(MAL系统是达梦数据库基于 TCP 协议实现的一种内部通信机制)。

  • 控制文件:dm.ctl ,是一个二进制文件,记录了数据库必要的初始信息,主要包括数据库名称、数据库服务器模式、数据文件版本、表空间信息等。

  • 数据文件:数据文件以 dbf 为扩展名,它是数据库中最重要的文件类型;数据文件中还有两类特殊的数据文件:ROLL文件 和 TEMP 文件。

  • 重做日志文件(REDO 日志):主要用于数据库的备份与恢复。每个DM数据库实例必须至少有2个重做日志文件,默认两个日志文件为DAMENG01.log、DAMENG02.log,这两个文件循环使用。重做日志文件因为是数据库正在使用的日志文件,因此被称为联机日志文件。

  • 归档日志文件:日志文件分为重做日志文件和归档日志文件。归档日志文件,就是在归档模式下,重做日志被连续写入到归档日志后,所生成了归档日志文件。非归档模式下,数据库会只将重做日志写入联机日志文件中进行存储;归档模式下,数据库会同时将重做日志写入联机日志文件和归档日志文件中分别进行存储。

  • 逻辑日志文件:如果在DM数据库上配置了复制功能,复制源就会产生逻辑日志文件。逻辑日志文件是一个流式的文件,它有自己的格式,且不在页、簇和段的管理之下。

  • 物理逻辑日志文件:物理逻辑日志,是按照特定的格式存储的服务器的逻辑操作,专门用于DBMS_LOGMNR包挖掘获取数据库系统的历史执行语句。当开启记录物理逻辑日志的功能时,这部分日志内容会被存储在重做日志文件中。

  • 备份文件:以 bak 为扩展名,用来存储备份数据。

  • SQL 日志文件:SQL 日志文件是一个纯文本文件。SQL 日志内容包含系统各会话执行的 SQL 语句、参数信息、错误信息等。在dm.ini中配置SVR_LOG参数后就会打开SQL日志。

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

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

DM 内存结构:DM 数据库管理系统的内存结构主要包括内存池、缓冲区、排序区、哈希区等。

  • 内存池:DM Server 的内存池包括共享内存池和其他一些运行时内存池。
    1. 共享内存池:是 DM Server 在启动时从操作系统申请的一大片内存。可以通过 DM Server 的配置文件(dm.ini)来对共享内存池的大小进 行设置,共享池大小的参数为 MEMORY_POOL,缺省大小为 500M。
    2. 运行时内存池:运行时内存池是从操作系统申请一片内存作为本功能模块的内存池来使用,如会话内存 池、虚拟机内存池等。

  • 缓冲区: 有四种缓冲区,数据缓冲区、日志缓冲区、字典缓冲区和sql缓冲区。
    1. 数据缓冲区:有四种类型,分别是 NORMAL、KEEP、FAST 和 RECYCLE。

      1. NORMAL 缓冲区主要是提供给系统处理的一些数据页,没有特定指定缓冲区的情况下,默认缓冲区为 NORMAL;

      2. KEEP 缓冲区主要存放很少或几乎不怎么淘汰出去的数据页;

      3. RECYCLE 缓冲区供临时表空间使用;

      4. FAST 缓冲区根据用户指定的 FAST_POOL_PAGES 大小由系统自动进行管理,用户不能指定使用 RECYCLE 和 FAST 缓冲区的表或表空间。

    2. 日志缓冲区:是用于存放重做日志的内存缓冲区。系统在运行过程中产生的日志并不会立即被写入磁盘,而是先将其放置到日志缓冲区中,等待归档或到达检查点时写入磁盘。
    3. 字典缓冲区:主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。用来缓存访问过的数据字典信息,下次访问时直接从缓冲区获取。

    4. SQL 缓冲区:提供在执行 SQL 语句过程中所需要的内存,包括计划、SQL 语句和结果集缓存。缓冲区保存反复执行的 SQL 语句和它们的执行计划,这叫做计划重用,计划重用加快了 SQL 语句执行效率,但同时给内存也增加了压力。

  • 排序区:提供数据排序所需要的内存空间。当用户执行 SQL 语句时,常常需要进行排 序,所使用的内存就是排序缓冲区提供的。在每次排序过程中,都首先申请内存,排序结束 后再释放内存。

  • 哈希区:提供了为哈希连接而设定的内存空间。该缓冲区是个虚拟缓冲区,因为系统没有真正创建特定属于哈希缓冲区的内存,而是在进行哈希连接时,对排序的数据量进行了计算。如果计算出的数据量大小超过了哈希缓冲区的大小,则使用 DM8 创新的外存哈希方式;如果没有超过哈希缓冲区的大小,实际上还是使用内存池来进行哈希操作。

DM 线程管理:DM 进程中主要包括监听线程、IO 线程、工作线程、调度线程、日志线程等。

  • 监听线程:在服务器端口上进行循环监听,一旦有来自客户的连接请求,监 听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理。它在系统启动完成后才启动,并且在系统关闭时首先被关闭。为了保证在处理大量客户连接 时系统具有较短的响应时间,监听线程比普通线程优先级更高。 
  • 工作线程:DM 服务器的核心线程,它从任务队列中取出任务,并根据任务的类型进行 相应的处理,负责所有实际的数据相关操作。

  • IO 线程:处理 IO 操作。默认情况下,IO 线程的个数是8个,IO 线程在启动后,通常都处于睡眠状态,当系统需要进行 IO 时,只需要发出一个 IO请求,此时 IO 线程被唤醒以处理该请求,在完成该 IO 操作后继续进入睡眠状态。

  • 调度线程:接管系统中所有需要定时调度的任务,调度线程每秒钟轮询一次。

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

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

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

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

  • 定时器线程:提供定时在某个时间点/段进行某种操作。默认情况下,达梦服务器启动的时候,定时器线程是不启动的。用户可以设置 dm.ini 中的 TIMER_INI 参数为 1 来设置定时器线程在系统启动时启动。

  • MAL 系统相关线程:MAL 系统是 DM 内部高速通信系统,基于 TCP/IP 协议实现。服务器的很多重要功能都 是通过 MAL 系统实现通信的,例如数据守护、数据复制、MPP、远程日志归档等。MAL 系统内部包含一系列线程,有 MAL 监听线程、MAL 发送工作线程、MAL 接收工作线程等。

 更多资讯请到达梦社区地址了解:

https://eco.dameng.com

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值