DM8系统管理员手册第一部分


一、DM逻辑结构概述

1.1 数据库和实例

DM7及以前数据库和实例两个术语可以互相替换

  • **数据库:**磁盘上存放在DM数据库中的数据的集合,包括数据文件、日志文件、控制文件以及临时数据文件
  • **实例:**一般是由一组正在运行的DM后台进程/线程以及一个大型的共享内存组成,也就是操作DM数据库的一种手段,是用来访问数据库的内存结构以及后台进程的集合
  • 区别与联系:
    1. DM数据库存储在服务器的磁盘上,而DM实例存储在服务器内存中;
    2. 通过运行 DM 实例,可以操作 DM 数据库中的内容;
    3. 任何时候一个实例只能与一个数据库进行关联(装载、打开或者挂起数据库),大多数情况下一个数据库也只有一个实例对其进行操作(在DM共享存储集群DMDSC中,可以多个实例对应一个数据库);

1.2 DM逻辑存储结构

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

1.2.1 表空间

  • DM 数据库中的所有对象在逻辑上都存放在表空间中,而物理上都存储在所属表空间的数据文件中。

  • DM 数据库中的表空间可以分为普通表空间(不能存储HUGE表)和混合表空间,可以通过为普通表空间增加指定HUGE数据文件路径将普通表空间升级为混合表空间。

  • 创建DM数据库时会自动创建四个表空间:
    在这里插入图片描述
    1.SYSTEM表空间存放了有关DM数据库的字典信息,用户不能在SYSTEM表空间创建表和索引。
    2.ROLL表空间存放事务运行过程中执行DML操作之前的值,从而为访问该表的其他用户提供表数据的读一致性视图。(完全由 DM 数据库自动维护,用户无需干预。)
    3.MAIN表空间在初始化库的时候,就会自动创建一个大小为 128M 的数据文件 MAIN.DBF,以及一个HMAIN目录作为HUGE数据文件路径,因此 MAIN 表空间为混合表空间。在创建用户时,如果没有指定默认表空间,则系统自动指定 MAIN 表空间为用户默认的表空间。
    4.TEMP 表空间完全由 DM 数据库自动维护。当用户的 SQL 语句需要磁盘空间来完成某个操作时,DM 数据库会从 TEMP 表空间分配临时段。如创建索引、无法在内存中完成的排序操作、SQL 语句中间结果集以及用户创建的临时表等都会使用到 TEMP 表空间。

  • 每一个用户都有一个默认的表空间。SYS、SYSSSO、SYSAUDITOR 系统用户默认SYSTEM,SYSDBA 默认MAIN,新用户如果没有指定默认表空间,则系统自动指定 MAIN 表空间为默认。

  • 如下语句可以查看 SYSTEM、ROLL、MAIN 以及 TEMP 的表空间相关信息:

  SELECT * FROM V$TABLESPACE;
v$tablespace (v$视图) :是动态视图
dba_tablespace (dba_数据字典) :是静态视图

结果集中各字段的含义请参考附录部分动态性能视图章节中对 V$TABLESPACE 的介绍,关于表空间该如何使用,请参考第 14 章 数据库布局和存储管理。

1.2.2 记录

  • 数据库表中的每一行是一条记录。
  • 在DM中,除了HUGE表,其他的表都是在数据页中按记录存储数据的。
  • 记录不是 DM 数据库的存储单位,页才是。
  • 记录不能跨页存储,记录的长度就受到数据页大小的限制:DM 规定每条记录的总长度不能超过页面大小的一半(因为数据页中还包含了页头控制信息等空间)

1.2.3 页

  • 数据页(块)是 DM 数据库中最小的数据存储单元

  • 页大小对应物理存储空间上特定数量的存储字节,DM 数据库的页大小可以为 4KB、8KB、16KB 或者 32KB,默认为 8KB,一旦创建好了数据库,则在该库的整个生命周期内,页大小都不能够改变。

  • DM 数据库页的典型格式:
    在这里插入图片描述
    1.页头控制信息包含了关于页类型、页地址等信息;
    2.页的中部存放数据;
    3.为了更好地利用数据页,在数据页的尾部专门留出一部分空间用于存放行偏移数组;
    4.行偏移数组用于标识页上的空间占用情况以便管理数据页自身的空间

  • 绝大多数情况用户无需干预 DM 数据库对数据页的管理,但是 DM 数据库还是提供了选项供用户选择。

FILLFACTOR参数
  • FILLFACTOR 是 DM 数据库提供的一个与性能有关数据页级存储参数
  • FILLFACTOR指定一个数据页初始化后插入数据时最大可以使用空间的百分比(100),该值在创建表/索引时可以指定。
  • 设置 FILLFACTOR 参数的值,是为了指定数据页中的可用空间百分比(FILLFACTOR)和可扩展空间百分比(100-FILLFACTOR)。
  • 可用空间用来执行更多的INSERT操作
  • 可扩展空间用来为数据页保留一定的空间,以防止在今后的更新操作中增加列或者修改变长列的长度时,引起数据页的频繁分裂。
  • 插入的数据占据的数据页空间百分比低于 FILLFACTOR 时,允许数据插入该页,否则将当前数据页中的数据分为两部分,一部分保留在当前数据页中,另一部分存入一个新页中。
  • 对DBA来说,使用FILLFACTOR时应该在空间性能之间进行权衡。

1.2.4 簇

  • 簇是数据页的上级逻辑单元,由同一个数据文件中 16 个或 32 个或 64 个连续的数据页组成。
  • 在 DM 数据库中,簇的大小由用户在创建数据库时指定,默认大小为 16。
  • 和数据页的大小一样,一旦创建好数据库,此后该数据库的簇的大小就不能够改变。
分配数据簇
  • 如果初始分配的簇中所有数据页都已经用完,或者新插入/更新数据需要更多的空间,DM 数据库将自动分配新的簇。
  • 在缺省情况下,DM 数据库在创建表/索引时,初始分配 1 个簇,当初始分配的空间用完时,DM 数据库会自动扩展。
  • DM 数据库的表空间为新的簇分配空闲空间:
    1. 在表空间按文件从小到大的顺序在各个数据文件中查找可用的空闲簇;
    2. 如果各数据文件都没有空闲簇,则在各数据文件中查找空闲空间足够的,将需要的空间先进行格式化,然后进行分配;
    3. 如果各文件的空闲空间也不够,则选一个数据文件进行扩充。
释放数据簇
  • 对用户数据表空间,用户将一个数据段对应的表/索引对象 DROP 之前,该表对应的数据段会保留至少 1 个簇不被回收到表空间中;
  • 在删除表/索引对象中的记录的时候,DM 数据库通过修改数据文件中的位图释放簇
  • 释放后的簇被视为空闲簇,可以供其他对象使用;
  • 当用户删除了表中所有记录时,DM 数据库仍然会为该表保留 1-2 个簇供后续使用;
  • 若用户使用 DROP 语句来删除表/索引对象,则此表/索引对应的段以及段中包含的簇全部收回,并供存储于此表空间的其他模式对象使用;
  • 对于临时表空间,DM 数据库会自动释放在执行 SQL 过程中产生的临时段,并将属于此临时段的簇空间还给临时表空间。
  • 对于回滚表空间,DM 数据库将定期检查回滚段,并确定是否需要从回滚段中释放一个或多个簇。

1.2.5 段

  • 段是簇的上级逻辑分区单元,它由一组簇组成;
  • 在同一个表空间中,段可以包含来自不同文件的簇,即一个段可以跨越不同的文件;
  • 由于簇的数量是按需分配的,数据段中的不同簇在磁盘上不一定连续。
数据段
  • 段可以被定义成特定对象的数据结构,如表数据段索引数据段
  • 表中的数据以表数据段结构存储,索引中的数据以索引数据段结构存储;
  • DM 以簇为单位给每个数据段分配空间,当数据段的簇空间用完时,DM 数据库就给该段重新分配簇;
  • 段的分配和释放完全由 DM 数据库自动完成,可以在创建表/索引时设置存储参数来决定数据段的簇如何分配(会影响段存储和访问效率);
  • 当用户使用 CREATE 语句创建表/索引时,DM 创建相应的数据段;
  • 分区表的每个分区使用单独的数据段来容纳所有数据,分区表上的非分区索引使用一个索引数据段来容纳所有数据,分区索引的每个分区使用一个单独索引数据段来容纳其数据。
  • 表的数据段和与其相关的索引段不一定要存储在同一表空间中。
临时段
  • 在 DM 数据库中,所有的临时段都创建在临时表空间中:
    1. 可以分流磁盘设备的 I/O;
    2. 也可以减少由于在 SYSTEM 或其他表空间内频繁创建临时数据段而造成的碎片
  • 当处理一个查询时,经常需要为 SQL 语句的解析与执行的中间结果准备临时空间。DM 数据库会自动地分配临时段的磁盘空间;
  • 对于临时表及其索引,DM 数据库也会为它们分配临时段;
  • 临时段的分配和释放完全由系统自动控制,用户不能手工进行干预。
回滚段
  • DM数据库在回滚表空间的回滚段中保存了用于恢复数据库操作的信息
  • 对于未提交事务,当执行回滚语句时,回滚记录被用来做回滚变更。
  • 在数据库恢复阶段,回滚记录被用来做任何未提交变更的回滚;
  • 在多个并发事务运行期间,回滚段还为用户提供读一致性,所有正在读取受影响行的用户将不会看到行中的任何变动,直到他们事务提交后发出新的查询;
  • DM数据库提供了全自动回滚管理机制来管理回滚信息和回滚空间,自动回滚管理消除了管理回滚段的复杂性;
  • 系统将尽可能保存回滚信息,来满足用户查询回滚信息的需要;(从数据读一致性的角度,长时间运行查询可能需要这些早期的回滚信息来生成早期的数据页镜像)
  • DM 数据库会收集回滚信息使用情况,并根据统计结果对回滚信息保存周期进行调整,将回滚信息保存周期设为比系统中活动的最长的查询时间 稍长

二、DM物理存储结构

在这里插入图片描述
配置文件:功能设置;
控制文件:记录文件分布;
数据文件、重做日志文件、归档日志文件、备份文件;
跟踪日志文件:问题跟踪

2.1 配置文件(.ini)

具体相关参数表格参见2.1 https://eco.dameng.com/document/dm/zh-cn/pm/physical-storage.html


dm.ini
  • 每创建一个DM数据库,就会自动生成dm.ini,它是必须配置文件;
  • 主要的配置模块包括:控制文件相关、实例名、内存相关、线程相关等;
  • 参数属性分为三种:手动(重启生效)、静态(重启生效)和动态(立即生效);
  • 动态参数又分为会话级(只影响当前和新创建的会话)和系统级(影响所有会话);
  • 与动态修改相关的系统过程:SP_SET_PARA_VALUE()、SP_SET_PARA_DOUBLE_VALUE()、SP_SET_PARA_STRING_VALUE()
dmmal.ini
  • dmmal.ini 是 MAL 系统的配置文件;
  • 需要用到 MAL 环境的实例,所有站点 dmmal.ini 需要保证严格一致
dmarch.ini
  • dmarch.ini 用于本地归档和远程归档
dm_scv.conf(客户端配置文件)
  • 包含了 DM 各接口和客户端工具所需要配置的一些参数。它必须和接口/客户端工具位于同一台机器上才能生效;
  • 初始 dm_svc.conf 文件在 DM 安装时自动生成。不同平台的生成目录有所不同;可以通过设置操作系统环境变量 DM_SVC_PATH 来修改 dm_svc.conf 文件路径;
  • 内容分为全局配置区(前)和服务配置区(后);
  • 重启生效;
  • 如果包含中文,要保证与客户端编码一致
sqllog.ini
  • SQL日志配置,当且仅当 INI 参数 SVR_LOG=1 时使用;
  • 如果在服务器启动过程中,修改了 sqllog.ini 文件。修改之后的文件,只要调用过程 SP_REFRESH_SVR_LOG_CONFIG() 就会生效;
复制配置
  • dmrep.ini用于配置复制实例
  • dmllog.ini用于配置逻辑日志
  • dmtimer.ini用于配置定时器,数据守护中记录异步备库的定时器信息或数据复制中记录异步复制的定时器信息。

2.2 控制文件(dm.ctl)

-控制文件是一个二进制文件,它记录了数据库必要的初始信息:

  1. 数据库名称;
  2. 数据库服务器模式;
  3. OGUID 唯一标识;
  4. 数据库服务器版本;
  5. 数据文件版本;
  6. 数据库的启动次数;
  7. 数据库最近一次启动时间;
  8. 表空间信息,包括表空间名,表空间物理文件路径等,数组方式保存;
  9. 控制文件校验码(校验码由数据库服务器在每次修改控制文件后计算生成,保证控制文件合法性,防止文件损坏及手工修改)
  • 执行表空间DDL等操作后,服务器内部需要同步修改控制文件内容;
  • 如果在修改过程中服务器故障,可能会导致控制文件损坏,为了避免出现这种情况,在修改控制文件时系统内部会执行备份操作。备份策略如下:

策略一:修改前先备份,确定修改成功后再将备份删除,如果修改失败或中途出现故障,则保留备份文件;

策略二:在修改 成功之后,根据dm.ini中指定的CTL_BAK_PATH/CTL_BAK_NUM对最新的dm.ctl执行备份,如果用户指定的CTL_BAK_PATH是非法路径,则不再生成备份文件,在路径有效的情况下,生成备份文件时根据指定的CTL_BAK_NUM判断是否删除老的备份文件。

如果 dm.ctl 文件存放在裸设备上,则【策略一】不会生效。
如果指定的 CTL_BAK_PATH 是无效路径,则【策略二】也不会生效
如果【策略一】和【策略二】的条件都满足,则都会生效执行,否则只执行满足条件的备份策略,如果都不满足,则不会再生成备份文件
如果是初始化新库,在初始化完成后,会在“SYSTEM_PATH/CTL_BAK”路径下对原始的 dm.ctl 执行一次备份

2.3 数据文件(.dbf)

  • 一个 DM 数据文件对应磁盘上的一个物理文件或者达梦分布式数据库中的一个逻辑文件;
  • 当 DM 的数据文件空间用完时,它可以自动扩展(创建数据文件时可以用MAXSIZE参数限制其扩展量);
  • 实际使用一般不建议使用单个巨大的数据文件,为一个表空间创建多个较小的数据文件是更好的选择;

数据文件按数据组织形式,可以分为如下几种:

B树数据
  • 行存储数据,也是应用最广泛的存储形式,其数据是按 B 树索引组织的;
  • 普通表、分区表、B 树索引的物理存储格式都是 B 树;
  • 一个 B 树包含两个段,一个内节点段,存放内节点数据;一个叶子段,存放叶子节点数据。其 B 树的逻辑关系由段内页面上的记录,通过文件指针来完成;
  • 当表上没有指定聚集索引时,系统会自动产生一个唯一标识 rowid 作为 B 树的 key 来唯一标识一行
堆表数据
  • 堆表的数据是以挂链形式存储的
  • 一个链表在物理上就是一个段
  • 堆表采用的是物理 rowid,在插入过程中rowid 在事先已确定并保证其唯一性,所以可以并发插入,插入效率很高,无需保存在物理磁盘上节省了空间(由于 rowid 即时生成)。
列存储数据

某些特殊应用场景下,其效率要远远高于行存储

  • 数据按列方式组织存储,包含每个列对应的存放列数据的一系列数据文件,以及存放列数据控制信息辅助表;
  • 读取列数据时,只需要顺序扫描列数据文件和辅助表数据;
  • 行存储和列存储对比,参考文章:https://blog.csdn.net/Shockang/article/details/115739955
    在这里插入图片描述
位图索引
  • 位图索引与 B 树索引不同,每个索引条目不是指向一行数据,而是指向多行数据;
  • 每个索引项保存的是一定范围内所有行与当前索引键值映射关系的位图
两类特殊数据文件

roll 文件:用于保存系统回滚记录,可以被分为若干回滚段,每个事务的回滚页在回滚段中各自挂链,页内则顺序存放回滚记录
TEMP文件:缓存不够用,查询的临时结果和临时表可以保存在临时数据文件中

2.4 重做(REDO)日志文件

  • DM 数据库中添加、删除、修改对象或者改变数据,DM 都会按特定格式将这些操作执行结果写入当前重做日志文件中(任何修改数据库的操作都会产生重做日志);
  • 每个 DM 数据库实例必须至少有2个重做日志文件,默认为 DAMENG01.log、DAMENG02.log,两文件循环使用
  • 重做日志文件因为是数据库正在使用的日志文件,因此被称为联机日志文件
  • 重做日志文件主要用于数据库的备份与恢复;

2.5 归档日志文件

  • DM 数据库可以在归档模式非归档模式下运行;非归档模式下重做日志写入联机日志文件;归档模式下重做日志同时写入联机日志文件和归档日志文件;
  • 联机日志文件指的是系统当前正在使用的日志文件;
  • 当产生检查点时,系统将系统缓冲区中的日志和脏数据页都写入磁盘,以保证当前日志所“保护”的数据页都已安全写入磁盘,这样日志文件即可被安全重用;
  • 归档日志文件以归档时间命名,扩展名默认与初始化数据库时指定的参数RLOG_POSTFIX_NAME一致,也可通过INI参数LOG_FILE_POSTFIX_NAME指定归档日志文件的扩展名。
  • 归档模式会对系统的性能产生影响,然而系统在归档模式下运行会更安全,当出现故障时其丢失数据的可能性更小

2.6 逻辑日志文件

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

2.7 物理逻辑日志文件

  • 按照特定的格式存储的服务器的逻辑操作,专用于DBMS_LOGMNR包挖掘获取数据库系统的历史执行语句
  • 当开启记录物理逻辑日志的功能时,这部分日志内容会被存储在重做日志文件中;
  • 开启物理逻辑日志的功能需满足:
  • 设置 RLOG_APPEND_LOGIC 为 1~4;
  • 设置参数RLOG_IGNORE_TABLE_SET=1或者建(修改)表时指定ADD LOGIC LOG开启

2.8 备份文件(.bak)

客户利用管理工具或直接发出备份的 SQL 命令时,DM Server 会自动进行备份,并产生一个或多个备份文件,备份文件自身包含了备份的名称、对应的数据库、备份类型和备份时间等信息

2.9 SQL日志文件

  • 用户在dm.ini中配置SVR_LOG参数后就会打开SQL日志;
  • SQL日志文件是一个纯文本文件,命名格式为“dmsql_实例名[_模式名][_用户名][_日期_时间].log”;
  • SQL 日志内容包含系统各会话执行的SQL语句、参数信息、错误信息等,主要用于分析错误和分析性能问题;
  • 系统中SQL日志的缓存是分块循环使用;
  • 打开SQL日志会影响系统性能,因此一般需要查错和调优的时候才打开;
  • 用户可以调用系统过程SP_SET_SQLLOG_INI()或 SP_DELETE_SQLLOG_INI_MODE()来动态修改 sqllog.ini 文件的内容,修改后可以调用系统过程 SP_REFRESH_SVR_LOG_CONFIG()更新内存中对应的参数值,以使所做的修改生效。
动态视图V$DM_SQLLOG_INI——查询sqllog.ini文件中的SQL日志配置参数
动态视图V$DM_SQLLOG_CONFIG——查询内存中的SQL日志配置参数

2.10 事件日志(ELOG)文件

  • 事件日志文件记录了DM数据库运行时的关键事件,主要用于系统出现严重错误时进行查看并定位问题;
  • 事件日志文件随着 DM 数据库服务的运行一直存在;
  • 事件日志文件打印的是中间步骤信息,所以出现部分缺失属于正常现象;
通过查询动态视图V$ELOG_FILE可以获得当前实例的日志文件的信息
可以使用系统过程SP_ELOG_FILE_DELETE删除指定文件名的ELOG日志文件

三、DM内存结构

内存管理系统的好处:
1.申请、释放内存效率更高;(相对于都使用操作系统函数来申请和释放)
2.能够有效地了解内存的使用情况;
3.易于发现内存泄露和内存写越界的问题。

3.1 内存池

动态视图V$MEM_POOL详细记录了当前系统中所有的内存池的状态

3.1.1 共享内存池

  • 共享内存池的方式:一次向操作系统申请一片较大内存,作为共享内存池。当系统在运行过程中需要申请小片内存时,可在共享内存池内进行申请,当用完该内存时,再释放掉,即归还给共享内存池。
  • 配置文件(dm.ini)中共享池大小的参数为 MEMORY_POOL,缺省大小为 500M;
  • 如果在运行时所需内存大于配置值,共享内存池也可进行自动扩展,INI 参数MEMORY_EXTENT_SIZE指定每次扩展的大小;
  • 参数MEMORY_TARGET指定了共享内存池扩展到超过该值后,空闲时会收缩到的大小。

3.1.2 运行时内存池

DM Server 的一些功能模块在运行时还会使用自己的运行时内存池。如会话内存池、虚拟机内存池等。

3.2 缓冲区

3.2.1 数据缓冲区

  • 数据页写入磁盘之前以及从磁盘上读取之后,存储在数据缓冲区。设定得太小,会导致缓冲页命中率低磁盘 IO 频繁;设定得太大,又会导致操作系统内存本身不够用
  • 数据缓冲区存在三条链来管理被缓冲的数据页:
  • “自由”链,存放目前尚未使用的内存数据页
  • “LRU”链,用于存放已被使用的内存数据页(包括未修改和已修改)
  • “脏”链,用于存放已被修改过的内存数据页
  • 系统启动时,首先根据配置的数据缓冲区大小向操作系统申请一片连续内存并将其按数据页大小进行格式化,并置入“自由”链中;
  • LRU 链对系统当前使用的页按其最近是否被使用的顺序进行了排序。自由链被用完时,从 LRU 链中淘汰部分最近未使用的数据页,能够较大程度地保证被淘汰的数据页在最近不会被用到,减少 IO
  • 存在一部分“非常热”(反复被访问)的数据页,数据缓冲区开辟了一个特定的区域用于存放它们,以保证这些页不参与一般的淘汰机制,可以一直留在数据缓冲区中。
    -DM Server 中有四种类型的数据缓冲区:
    NORMAL:提供给系统处理的一些数据页,没有特定指定下,默认缓冲区为 NORMAL;
    KEEP:对缓冲区中的数据页很少或几乎不怎么淘汰出去,如果用户的应用需要经常处在内存当中,可以指定缓冲区为 KEEP;
    FAST:由系统自动进行管理
    RECYCLE:供临时表空间使用
  • dm.ini 中可指定参数MULTI_PAGE_GET_NUM大小(默认1 ),来控制每次读取的页数;

3.2.2 日志缓冲区

  • 存放重做日志的内存缓冲区;
  • 日志不会立即被写入磁盘,而是和数据页一样,先将其放置到日志缓冲区中,单独设立日志缓冲区的原因:
  • 重做日志的格式同数据页完全不一样,无法进行统一管理;
  • 重做日志具备连续写的特点;
  • 在逻辑上,写重做日志比数据页 IO 优先级更高
  • 参数RLOG_BUF_SIZE对日志缓冲区大小进行控制,日志缓冲区所占用的内存是从共享内存池中申请的,单位为页数量,且大小必须为 2 的 N 次方,否则采用默认512 页。

3.2.3 字典缓冲区

  • 存储数据字典信息,如模式信息、表信息、列信息、触发器信息等、
  • DM8 采用:将部分数据字典信息加载到缓冲区中,并采用LRU算法进行字典信息的控制;
  • 该缓冲区配置参数为 DICT_BUF_SIZE,默认的配置大小为 5M;

3.2.4 SQL缓冲区

  • 提供在执行SQL语句过程中所需的内存,包括计划、SQL 语句和结果集缓存;
  • 计划重用:使用缓冲区保存反复执行的SQL语句和它们的执行计划,好处是加快SQL语句执行效率,但同时也给内存增加了压力;
  • 配置文件dm.ini的参数USE_PLN_POOL,指定为非 0 时,则启动计划重用;为 0 时禁止计划重用;
  • 参数CACHE_POOL_SIZE(MB)可改变SQL缓冲区大小,默认值为 20M;
  • 结果集缓存包括SQL查询结果集缓存和DMSQL程序函数结果集缓存;
  • 参数RS_CAN_CACHE=1且USE_PLN_POOL非0时DM服务器才会缓存结果集;
  • 客户端结果集也可以缓存,但需要在配置文件 dm_svc.conf 中设置参数:
    ENABLE_RS_CACHE = (1) 	//表示启用缓存;
    RS_CACHE_SIZE = (100)  	//表示缓存区的大小为100M, 可配置为1-65535
    RS_REFRESH_FREQ = (30) 	//表示每30秒检查缓存的有效性,如果失效,自动重查; 0表示不检查。

3.3 排序区

  • 排序缓冲区提供数据排序所需要的内存空间;
  • 在每次排序过程中,都首先申请内存,排序结束后再释放内存;
  • 配置文件dm.ini中的参数SORT_BUF_SIZE指定排序缓冲区的大小,由于该值是由系统内部排序算法和排序数据结构决定,建议使用默认值 2M。

3.4 哈希区(虚拟缓冲区)

  • DM8提供了为哈希连接而设定的缓冲区;
  • 系统没有真正创建特定属于哈希缓冲区的内存,而是在进行哈希连接时,对排序的数据量进行了计算。如果计算出的数据量大小超过了哈希缓冲区的大小,则使用 DM8创新的外存哈希方式;如果没有超过哈希缓冲区的大小,实际上还是使用内存池来进行哈希操作;
  • dm.ini中参数HJ_BUF_SIZE控制哈希区大小,由于该值的大小可能会限制哈希连接的效率,所以建议保持默认值,或设置为更大的值;
  • HAGR_HASH_SIZE表示处理聚集函数时创建哈希表的个数,建议保持默认值 100000。

四、管理DM线程

DM服务器使用“对称服务器构架”的单进程、多线程结构,有效地利用了系统资源的同时又提供了较高的可伸缩性能。
  • DM 数据库服务器是共享的服务器,允许多个用户连接到同一个服务器上,服务器进程称为共享服务器进程

4.1 监听线程

  • 主要任务:在服务器端口上进行循环监听,一旦有来自客户的连接请求,监听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理;
  • 它在系统启动完成后才启动,并且在系统关闭时首先被关闭;
  • 为了保证在处理大量客户连接时系统具有较短的响应时间,监听线程比普通线程优先级更高
  • DM 服务器所有配置端口的范围为 1024-65534,当客户端工具发起连接时,由操作系统为客户端工具自动分配一个端口用于与 DM 服务器进行通信;

4.2 工作线程

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

4.3 IO线程

  • 把 IO 操作从工作线程中分离出来,专门处理IO操作;
  • IO操作的时机主要有以下三种:
    1. 需要处理的数据页不在缓冲区中,此时需要将相关数据页读入缓冲区;
    2. 缓冲区满或系统关闭时,此时需要将部分脏数据页写入磁盘;
    3. 检查点到来时,需要将所有脏数据页写入磁盘。
  • IO线程在启动后,通常都处于睡眠状态,当系统需要进行IO时,发出IO请求,此时IO线程被唤醒以处理该请求,完成后继续进入睡眠状态;
  • 设置dm.ini文件中的IO_THR_GROUPS参数来设置IO线程的个数,默认情况IO线程是 2 个;
  • IO线程处理IO的策略根据操作系统平台的不同会有很大差别;
  • 一般情况IO线程使用异步的IO将数据页写入磁盘,此时,系统将所有的IO请求直接递交给操作系统,操作系统在完成这些请求后才通知IO线程,这种异步IO的方式使得IO线程需要直接处理的任务很简单,即完成IO后的一些收尾处理并发出IO完成通知,如果操作系统不支持异步IO,此时IO线程就需要完成实际的 IO 操作。

4.4调度线程

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

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

4.5 FLUSH线程

  • 为了保证数据故障恢复的一致性,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数据库还有一些特定功能线程,例如回滚段清理 PURGE 线程、审计写文件线程等

V$LATCHES:记录当前正在等待的线程信息
V$THREADS:记录当前系统中活动线程的信息
V$PROCESS:记录服务器进程信息
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值