DM数据库体系结构

DM 数据库体系结构

一. 逻辑结构

   基本概念: 

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

   实例一般是由一组正在运行的 DM 后台进程/线程以及一个大型的共享内存组成.

    一个实例对应一个库 , 但一个库可能对应多个实例(对照oracle数据库的RAC集群) .

  

  注意: 在 DM 共享存储集群(DMDSC)中,多个实例可以同时装载并打开一个数据库(位于一组由多台服务器共享的物理磁盘上).

    

    DM 数据库存储在服务器的磁盘上,而 DM 实例则存储于服务器的内存中。

1.DM逻辑存储结构

    DM的逻辑存储结构有: 表空间 ,记录, 页,簇,段

    基本概念: 

          表空间:  在 DM 数据库中,表空间由一个或者多个数据文件组成。DM 数据库中的所有对象在逻辑上都存放在表空间中,而物理上都存储在所属表空间的数据文件中。

    记录: 数据库表中的每一行是一条记录.

    页: 数据页(也称数据块)是 DM 数据库中最小的数据存储单元.  -- 对比oracle数据库的块概念

    簇: 簇是数据页的上级逻辑单元,由同一个数据文件中 16 个或 32 个或 64 个连续的数据页组成. -- 对比oracle数据库的区概念  

    段: 段是簇的上级逻辑分区单元,它由一组簇组成 .

如图:   

    

    数据库中有多个表空间,每个表空间由多个或一个数据文件组成,每个数据文件由一个或多个簇组成.段是簇的上级逻辑单元,一个段可以跨多个数据文件,簇由磁盘上连续的页组成,一个簇总是子啊一个数据文件中.

页是数据库最小的分配单位,也是数据库中使用的最小的IO单元.

1.1 表空间

    在创建 DM 数据库时,会自动创建 4 个表空间:SYSTEM 表空间、ROLL 表空间、MAIN表空间和 TEMP 表空间: 

1. SYSTEM 表空间存放了有关 DM 数据库的字典信息,用户不能在 SYSTEM 表空间创建表和索引。

2. ROLL 表空间完全由 DM 数据库自动维护,用户无需干预。该表空间用来存放事务运行过程中执行 DML 操作之前的值,从而为访问该表的其他用户提供表数据的读一致性视图。

 (对比oracle 中的 undo 表空间.)

3. MAIN 表空间在初始化库的时候,就会自动创建一个大小为 128M 的数据文件MAIN.DBF,以及一个 HMAIN 目录作为 HUGE 数据文件路径,因此 MAIN 表空间为混合表空间。在创建用户时,如果没有指定默认表空间,则系统自动指定 MAIN 表空间为用户默认的表空间。

(对比oracle 的 user 表空间 )

4. TEMP 表空间完全由 DM 数据库自动维护。当用户的 SQL 语句需要磁盘空间来完成某个操作时,DM 数据库会从 TEMP 表空间分配临时段。如创建索引、无法在内存中完成的排序操作、SQL 语句中间结果集以及用户创建的临时表等都会使用到 TEMP表空间

注意: 1.每一个用户都有一个默认的表空间。对于 SYS、SYSSSO、SYSAUDITOR 系统用户,默认的用户表空间是 SYSTEM .

      2.SYSDBA 的默认表空间为 MAIN,新创建的用户如果没有指定默认表空间,则系统自动指定 MAIN 表空间为用户默认的表空间.  

      3.表创建时如果用户指定了表空间,则表存储在用户指定的表空间中,在默认情况下,这张表上建立的索引也将存储在用户指定的表空间中. (建议用户创建时,指定自己的默认表空间)

查看表空间使用情况: 

select

     id                                                                ,

        name                                                              ,

        cache                                                             ,

        type$                                                             ,

        FILE_NUM                                                          ,

        status$                                                           ,

        to_char(total_size * PAGE/ POWER(2, 20),'99999') || ' MB' AS total_size_MB,

        to_char(used_size *PAGE/POWER(2, 20),'99999') ||' MB'  AS used_size_MB ,

        to_char(used_size * 100 /total_size ,'99.99')|| ' %'  AS used_pct   

from

        v$tablespace;

-- TYPE$: 表空间类型:1 DB 类型,2 临时表空间

-- STATUS$: 状态。0 ONLINE,1 OFFLINE,2 RES_OFFLINE 3 CORRUPT

-- TOTAL_SIZE : 总大小(以页为单位)

-- USED_SIZE: 表示已使用的簇所占的大小(以页为单位)

1.2 记录

    数据库表中的每一行是一条记录。在 DM 中,除了 HUGE 表,其他的表都是在数据页中按记录存储数据的。也就是说,记录是存储在数据页中的,记录并不是 DM 数据库的存储单

位,页才是。由于记录不能跨页存储,这样记录的长度就受到数据页大小的限制。数据页中还包含了页头控制信息等空间,因此 DM 规定每条记录的总长度不能超过页面大小的一半

1.3 页

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

    页的大小对应物理存储空

间上特定数量的存储字节,在 DM 数据库中,页大小可以为 4KB、8KB、16KB 或者 32KB,用户在创建数据库时可以指定,默认大小为 8KB,一旦创建好了数据库,则在该库的整个生

命周期内,页大小都不能够改变 .

    FILLFACTOR 是 DM 数据库提供的一个与性能有关的数据页级存储参数,它指定一个数据页初始化后插入数据时最大可以使用空间的百分比(100),该值在创建表/索引时可以指

定。设置 FILLFACTOR 参数的值,是为了指定数据页中的可用空间百分比(FILLFACTOR)和可扩展空间百分比(100-FILLFACTOR)。

    注意: io优化可以考虑: 数据库更新频繁时可以考虑减少其值 ,数据库批量读取时,可以考虑加大其值 .

查看页大小:   select page ;  -- 单位: 字节

1.3 簇

    簇是数据页的上级逻辑单元,由同一个数据文件中 16 个或 32 个或 64 个连续的数据页组成。

   簇的大小由用户在创建数据库时指定,默认大小为 16.

    一旦创建好数据库,此后该数据库的簇的大小就不能够改变

    分配数据簇: 当创建一个表/索引的时候,DM 为表/索引的数据段分配至少一个簇,同时数据库会自动生成对应数量的空闲数据页,供后续操作使用。

    释放数据簇: 对于用户数据表空间,在用户将一个数据段对应的表/索引对象 DROP 之前,该表对应的数据段会保留至少 1 个簇不被回收到表空间中。

1.4 段 (oracle中的段的概念相似, 用户可用创建的段: 表,索引 等)

    段是簇的上级逻辑分区单元,它由一组簇组成。

   在同一个表空间中,段可以包含来自不同文件的簇,即一个段可以跨越不同的文件. 

二. 物理存储结构

    DM 数据库使用了磁盘上大量的物理存储结构来保存和管理用户数据。典型的物理存储结构包括:用于进行功能设置的配置文件;用于记录文件分布的控制文件;用于保存用户实际

数据的数据文件、重做日志文件、归档日志文件、备份文件;用来进行问题跟踪的跟踪日志文件等.

2.1 配置文件 (对比oracle数据库的pfile文件.一般oracle使用的的spfile ,二级制文件)

    配置文件是 DM 数据库用来设置功能选项的一些文本文件的集合,配置文件以 ini 为扩展名,它们具有固定的格式,用户可以通过修改其中的某些参数取值来达成如下两个方面的

目标:

    1. 启用/禁用特定功能项;

    2. 针对当前系统运行环境设置更优的参数值以提升系统性能。

2.1.1 dm.ini : 

    每创建一个 DM 数据库,就会自动生成 dm.ini 文件.dm.ini 是 DM 数据库启动所必须的配置文件,通过配置该文件可以设置 DM 数据库服务器的各种功能和性能选项,主要的配

置模块包括:控制文件相关、实例名、内存相关、线程相关等.

    参数属性分为三种:手动、静态和动态。

--查看参数信息

select * from v$dm_ini where "V$DM_INI".PARA_NAME like UPPER('参数关键字')||'%' ; 

动态修改是指 DBA 用户可以在数据库服务器运行期间,通过调用系统过程SP_SET_PARA_VALUE()、SP_SET_PARA_DOUBLE_VALUE()和SP_SET_PARA_STRING_VALUE()对参数值进行修改。

手工修改dm.ini参数文件,然后重启才能生效.

or 使用DM 控制台

注意: 修改参数文件前, 确认需要修改的参数功能和影响, 参数的属性等信息.备份参数文件. --谨慎

2.1.1.1 控制文件相关

注意:本类参数不建议用户修改

2.1.1.2 实例名

    INSTANCE_NAME , 长度不超过16个字节

注意: select OCTET_LENGTH(char) , 返回输入字符串的字节数

2.1.1.2 内存相关 

  列出部分参数: 

    MAX_OS_MEMORY:  DM 服务器能使用的最大内存占操作系统物理内存与虚拟内存总和的百分比,有效值范围(40~100)。当取值 100 时,服务器不进行内存的检查 .

    MEMORY_POOL: 共享内存池大小,以M为单位。共享内存池是由DM管理的内存。有效值范围:32位平台为(64~2000),64位平台为(64~67108864) .

    MEMORY_TARGET: 共享内存池在扩充到此大小以上后,空闲时收缩回此指定大小,以M为单位.

    MEMORY_EXTENT_SIZE: 共享内存池每次扩充的大小,以 M 为单位 .

      BUFFER: 系统缓冲区大小,以 M 为单位。推荐值:系统缓冲区大小为可用物理内存的 60%~80%

其他参数 查看系统管理员手册.

注意: 查看参数时,要查看对应版本的系统管理员手册.

2.1.2 dmmal.ini

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

2.1.3 dmarch.ini

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

2.1.4 dm_svc_conf

    dm_svc.conf 是一个客户端配置文件,它包含了 DM 各接口和客户端工具所需要配置的一些参数.

它必须和接口/客户端工具位于同一台机器上才能生效。

    注意: dm_svc.conf 的工作目录是固定的,不能改变。

初始 dm_svc.conf 文件在 DM 安装时自动生成。不同平台的生成目录有所不同。

1. 32 位的 DM 安装在 Win32 操作平台下,此文件位于%SystemRoot%\system32目录;

2. 64 位的 DM 安装在 Win64 操作平台下,此文件位于%SystemRoot%\system32目录;

3. 32 位的 DM 安装在 Win64 操作平台下,此文件位于%SystemRoot%\SysWOW64目录;

4. 在 Linux 平台下,此文件位于/etc 目录。

2.1.5 sqllog.ini

   sqllog.ini用于sql日志的配置,当且仅当INI参数SVR_LOG=1时使用。

注意: 如果在服务器启动过程中,修改了sqllog.ini文件。修改之后的文件,只要调用过程SP_REFRESH_SVR_LOG_CONFIG() 就会生效.

2.1.6 dmrep.ini

   dmrep.ini 用于配置复制实例

2.1.7 dmllog.ini 

    dmllog.ini 用于配置逻辑日志

2.1.8 dmtimer.ini 

    dmtimer.ini 用于配置定时器,用于数据守护中记录异步备库的定时器信息或数据复制中记录异步复制的定时器信息.

2.2 控制文件

    每个 DM 数据库都有一个名为 dm.ctl 的控制文件.

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

备份策略如下: 

    策略一 在修改 dm.ctl 之前,先执行一次备份,确定 dm.ctl 修改成功后,再将备份删除,如果 dm.ctl 修改失败或中途出现故障,则保留备份文件。

    策略二 在修改 dm.ctl 成功之后,根据 dm.ini 中指定的CTL_BAK_PATH/CTL_BAK_NUM 对最新的 dm.ctl 执行备份,如果用户指定的

CTL_BAK_PATH 是非法路径,则不再生成备份文件,在路径有效的情况下,生成备份文件时根据指定的 CTL_BAK_NUM 判断是否删除老的备份文件.

2.3 数据文件

    数据文件以 dbf 为扩展名.一个 DM 数据文件对应磁盘上的一个物理文件或者达梦分布式数据库中的一个逻辑文件,数据文件是真实数据存储的

地方,每个数据库至少有一个与之相关的数据文件.

    当 DM 的数据文件空间用完时,它可以自动扩展。可以在创建数据文件时通过 MAXSIZE参数限制其扩展量.

注意: 不建议使用单个巨大的数据文件.为一个表空间创建多个较小的数据文件是更好的选择。

数据文件按数据组织形式,可以分为如下几种: B 树数据 ,堆表数据 ,列存储数据 ,位图索引 

    数据文件中还有两类特殊的数据文件:ROLL 和 TEMP 文件。

2.4 重做日志文件

    重做日志(即 REDO 日志)指在 DM 数据库中添加、删除、修改对象,或者改变数据,DM 都会按照特定的格式,将这些操作执行的结果写入到当前的重做日志文件中。重做日志文

件以 log 为扩展名。每个 DM 数据库实例必须至少有 2 个重做日志文件,默认两个日志文件为 DAMENG01.log、DAMENG02.log,这两个文件循环使用。

查看重做日志文件信息: 

select * from SYS."V$RLOGFILE" ;

2.5 归档日志文件

    归档日志文件,就是在归档模式下,重做日志被连续写入到归档日志后,所生成了归档日志文件。

2.6 其他文件:

    逻辑日志文件 ,物理逻辑日志文件,备份文件,sql日志文件,事件日志文件,数据重演文件.

三. 内存结构

    数据库管理系统是一种对内存申请和释放操作频率很高的软件,如果每次对内存的使用都使用操作系统函数来申请和释放,效率会比较低,加入自己的内存管理是 DBMS 系统所必

须的。通常内存管理系统会带来以下好处:

1. 申请、释放内存效率更高;

2. 能够有效地了解内存的使用情况;

3. 易于发现内存泄露和内存写越界的问题。

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

中子模块的不同功能,对内存进行了上述划分,并采用了不同的管理模式。

3.1 内存池.

    DM Server 的内存池包括共享内存池和其他一些运行时内存池。

--查看内存池中种类

select DISTINCT "V$MEM_POOL".NAME  from SYS."V$MEM_POOL" order by 1;

-- 查看内存池中的详细信息

select * from SYS."V$MEM_POOL" ;

共享内存池是 DM Server 在启动时从操作系统申请的一大片内存。

DM 系统管理员可以通过 DM Server 的配置文件(dm.ini)来对共享内存池的大小进行设置,共享池大小的参数为 MEMORY_POOL,缺省大小为 500M。如果在运行时所需内存

大于配置值,共享内存池也可进行自动扩展,INI 参数 MEMORY_EXTENT_SIZE 指定了共享内存池每次扩展的大小,参数 MEMORY_TARGET 则指定了共享内存池扩展到超过该值后,空

闲时会收缩到的大小。

注意: MEMORY_POOL,MEMORY_EXTENT_SIZE 为 静态参数, MEMORY_TARGET 为动态 ,系统级参数.

3.2 缓冲区

    数据缓冲区是 DM Server 在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据页所存储的地方。

注意: 数据缓冲区设定得太小,会导致缓冲页命中率低,磁盘 IO 频繁;将其设定得太大,又会导致操作系统内存本身不够用

    DM Server 中有四种类型的数据缓冲区,分别是 NORMAL、KEEP、FAST 和 RECYCLE。

在 DM 配置文件 dm.ini 中,可以指定参数 MULTI_PAGE_GET_NUM 大小(默认值为 1 页),来控制每次读取的页数。

注意: MULTI_PAGE_GET_NUM 为静态参数.注:当数据库加密时不支持多页读取,此时dm.ini 中此参数值无效.

    日志缓冲区是用于存放重做日志的内存缓冲区。DM Server 提供了参数 RLOG_BUF_SIZE 对日志缓冲区大小进行控制,日志缓冲区所占用的内存是从共享内存池中申请的,单位为页数量,

且大小必须为 2 的 N 次方,否则采用系统默认大小 1024 页。

注意: RLOG_BUF_SIZE 为静态参数. 单个日志缓冲区大小(以日志页个数为单位),取值只能为 2 的次幂值,最小值为 1,最大值为 20480 .

      字典缓冲区主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。每次对数据库的操作都会涉及到数据字典信息,访问数据字典信息的效率直接影响到相应的

操作效率,如进行查询语句,就需要相应的表信息、列信息等,这些字典信息如果都在缓冲区里,则直接从缓冲区中获取即可,否则需要 I/O 才能读取到这些信息。

        缓冲区大小设置问题,如果太大,会浪费宝贵的内存空间,如果太小,可能会频繁的进行淘汰,该缓冲区配置参数为 DICT_BUF_SIZE,默认的配置大小为 50M。

注意: DICT_BUF_SIZE 为静态参数, 字典缓冲区大小,以 M 为单位,有效值范围(1~2048)。单位:MB

    SQL 缓冲区提供在执行 SQL 语句过程中所需要的内存,包括计划、SQL 语句和结果集缓存。DM Server 在配置文件 dm.ini 提供了参数来支持是否需要计划重用,参数为

USE_PLN_POOL,当指定为非 0 时,则启动计划重用;为 0 时禁止计划重用。DM 同时还提供了参数 CACHE_POOL_SIZE(单位为 MB),来改变 SQL 缓冲区大小,系统管理员可以设

置该值以满足应用需求,默认值为 100M。

注意: USE_PLN_POOL ,静态参数. CACHE_POOL_SIZE ,静态参数.

    结果集缓存包括 SQL 查询结果集缓存和 DMSQL 程序函数结果集缓存,在 INI 参数文件中同时设置参数 RS_CAN_CACHE=1 且 USE_PLN_POOL 非 0 时 DM 服务器才会缓存结果集。

注意: RS_CAN_CACHE ,静态参数.

    客户端结果集也可以缓存,但需要在配置文件 dm_svc.conf 中设置参数:

ENABLE_RS_CACHE = (1) //表示启用缓存;

RS_CACHE_SIZE = (100) //表示缓存区的大小为 100M, 可配置为 1-65535

RS_REFRESH_FREQ = (30) //表示每 30 秒检查缓存的有效性,如果失效,自动重查; 0 表示不检查。

    排序缓冲区提供数据排序所需要的内存空间。参数 SORT_BUF_SIZE 在 DM 配置文件 dm.ini 中,系统管理员可以设置其大小以满足需求,由于该值是由系统内部排序算法

和排序数据结构决定,建议使用默认值 20M。

    DM8 提供了为哈希连接而设定的缓冲区,不过该缓冲区是个虚拟缓冲区。DM Server 在 dm.ini 中提供了参数 HJ_BUF_SIZE 来进行控制,由于该值的大小可

能会限制哈希连接的效率,所以建议保持默认值,或设置为更大的值。

四. DM线程管理

    DM 服务器使用“对称服务器构架”的单进程、多线程结构。DM 进程中主要包括监听线程、IO 线程、工作线程、调度线程、日志线程等.

监听线程主要的任务是在服务器端口上进行循环监听,一旦有来自客户的连接请求,监听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理。

它在系统启动完成后才启动,并且在系统关闭时首先被关闭。监听线程比普通线程优先级更高。

   工作线程是 DM 服务器的核心线程,它从任务队列中取出任务,并根据任务的类型进行相应的处理,负责所有实际的数据相关操作.

   IO线程在数据库活动中,IO 操作历来都是最为耗时的操作之一。 DM Server 需要进行 IO 操作的时机主要有以下三种:

    1. 需要处理的数据页不在缓冲区中,此时需要将相关数据页读入缓冲区;

      2. 缓冲区满或系统关闭时,此时需要将部分脏数据页写入磁盘;

      3. 检查点到来时,需要将所有脏数据页写入磁盘。

IO 线程的个数是可配置的,可以通过设置 dm.ini 文件中的 IO_THR_GROUPS 参数来设置,默认情况下,IO 线程的个数是 8 个。

注意: IO_THR_GROUPS, 静态参数,非 WINDOWS 下有效,表示 IO 线程组个数。有效值范围(1~512)

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

    日志FLUSH线程.任何数据库的修改,都会产生重做 REDO 日志,为了保证数据故障恢复的一致性,REDO日志的刷盘必须在数据页刷盘之前进行。

    日志归档线程,日志归档线程包含异步归档线程,负责远程异步归档任务。

    日志APPLY线程,在配置了数据守护的系统中,创建了一个日志 APPLY 线程。

    定时器线程,通常情况下,DM Server 需要进行定时操作的事件主要有以下几种:

    1. 逻辑日志异步归档;

    2. 异步归档日志发送(只有在 PRIMARY 模式下,且是 OPEN 状态下);

    3. 作业调度.

    逻辑日志归档线程,用于DM8的数据复制.

    还有MAL系统相关线程,回滚段清理 PURGE 线程、审计写文件线程、重演捕获写文件线程等

线程查看:

--记录当前正在等待的线程信息

select * from SYS."V$LATCHES" ;

-- 记录当前系统中活动线程的信息

select count(*) from SYS."V$THREADS" ;

select DISTINCT "V$THREADS".NAME from SYS."V$THREADS" order BY 1 ;

select * from SYS."V$THREADS" where "V$THREADS".NAME like LOWER '%'||('线程关键字')||'%';

--记录服务器进程信息

select * from SYS."V$PROCESS"  ;

社区地址:https://eco.dameng.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值