【达梦数据库】体系结构学习-单机数据库篇

达梦数据库的组成

      达梦数据库由数据库和实例组成,数据库指的是磁盘上存放在DM数据库中的数据的集合,一般包括:数据文件、日志文件、控制文件以及临时数据文件等,实例是由一组正在运行的 DM 后台进程/线程以及一个大型的共享内存组成。

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

      数据库与实例的关系如下图所示,数据库的存储结构可以划分为逻辑结构和物理结构。物理结构是对应的操作系统上具体的文件,用来保存和管理数据。逻辑结构则是数据库对象分配的逻辑空间,存放在数据文件中。例如当test用户在数据库中创建了一个名为test的表空间,那么用户操作所产生的数据就可以存放在这一个test表空间中,而test表空间在物理结构上,就是用户指定目录下的test.dbf文件。

数据库的存储结构

物理存储结构

(1)数据库的配置文件,即以.ini结尾的文件

      数据库参数的管理

--查看参数:

select para_name,para_value,PARA_TYPE from v$dm_ini;

参数分为以下几种类型:

SESSION :会话级,针对当前会话有效

SYS :系统级动态参数,即改即生效

INFILE:静态参数,需要重启数据库实例生效

READ ONLY:只读参数,需要重启数据库实例生效

--修改参数:

sp_set_para_value(参数类型,'参数名',参数值);

参数类型为 1,代表动态参数

参数类型为 2,带表静态参数

修改动态参数:

修改动态参数,会同时修改内存和配置文件中的值,不需要重启数据库,即改即

生效。

sp_set_para_value(1,'CTL_BAK_NUM',9);

alter system set 'CTL_BAK_NUM' = 10 BOTH;

修改静态参数:

修改静态参数,只会修改配置文件中的值,需要重启数据库实例才能生效。

(2)控制文件

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

1. 数据库名称;

2. 数据库服务器模式;

3. OGUID 唯一标识;

4. 数据库服务器版本;

5. 数据文件版本;

6. 数据库的启动次数;

7. 数据库最近一次启动时间;

8. 表空间信息,包括表空间名,表空间物理文件路径等,记录了所有数据库中使用的表空间,数组的方式保存起来;

9. 控制文件校验码,校验码由数据库服务器在每次修改控制文件后计算生成,保证控制文件合法性,防止文件损坏及手工修改。在服务器运行期间,执行表空间的 DDL 等操作后,服务器内部需要同步修改控制文件内容。如果在修改过程中服务器故障,可能会导致控制文件损坏,为了避免出现这种情况,在修改控制文件时系统内部会执行备份操作。

控制文件的管理

--查看控制文件帮助手册:

./dmctlcvt help

--将控制文件转换为文本文件:

./dmctlcvt type=1 src=/dm8/data/DAMENG/dm.ctl dest=/home/dmdba/dmctl.txt

(3)重做日志文件

      重做日志文件记录的是数据库发生变化的信息。达梦数据库默认有两个重做日志文件。重做日志文件具有循环写、可覆盖的特点。需要注意的是,重做日志文件只能添加,不能删除;只能扩大,不能缩小。

重做日志的管理

--查看重做日志的信息

select * from v$rlogfile;

select * from v$rlog;

--添加重做日志文件

alter database ADD LOGFILE '/dm8/data/DAMENG/DAMENG03.log' SIZE 300;

--resize 重做日志文件大小

alter database RESIZE LOGFILE '/dm8/data/DAMENG/DAMENG01.log' to 300;

alter database RESIZE LOGFILE '/dm8/data/DAMENG/DAMENG02.log' to 300;

(4)数据文件,即以.DBF 结尾的文件

数据文件的管理

--查看数据文件的信息

select * from DBA_DATA_FILES;

select * from v$datafile;

(5)归档日志文件

      归档日志文件是重做日志文件的副本。在重做日志文件覆盖前,会拷贝重做日志文件的内容到归档路径下做副本。

 逻辑存储结构

      DM 数据库为数据库中的所有对象分配逻辑空间,并存放在数据文件中。在 DM 数据库内部,所有的数据文件组合在一起被划分到一个或者多个表空间中,所有的数据库内部对象都存放在这些表空间中。同时,表空间被进一步划分为段、簇和页(也称块)。

      表空间、数据文件、段、簇、页的关系如下图所示

       由关系图可知,数据库从逻辑结构的角度来看,它可以由一个或多个表空间组成,每个表空间可以由一个或多个数据文件组成,而每个数据文件由一个或多个簇组成,段是簇的上级逻辑单元,簇由连续的页组成,页是数据库中最小的分配单元。

 实例

      实例由一组正在运行的达梦数据库后台进程/线程以及一个大型的共享内存组成,是用来访问数据库的内存结构以及后台进程的集合。实例的结构组成如下图所示,

内存结构

内存池

      达梦数据库的内存池包括共享内存池和其他一些运行时内存池。

      共享内存池是数据库在启动时从操作系统申请的内存,当系统运行时如果其他的缓冲区不够用,就可以在共享内存池中申请,使用完再释放,归还给共享内存池。

参数:MEMORY_POOL,单位:M

select para_name,para_value,para_type from v$dm_ini where para_name='MEMORY_POOL';

       运行时内存池在需要时被创建,使用完自动销毁,比如会话内存池、虚拟机内存池、排序区、hash 区。

缓冲区

达梦数据库的缓冲区有以下四种类型,

1. 数据缓冲区:在数据库将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据页会缓存在此处。数据缓冲区和共享内存没有关系,当数据库缓冲区满会淘汰 LRU 链表上很少被使用到的数据页。

修改数据缓冲区大小:

sp_set_para_value(2,'BUFFER',800);

2. 重做日志缓冲区重做日志缓冲区缓存的是重做日志信息。重做日志缓冲区和共享内存没有关系,当重做日志缓冲区不够用时,会向服务器申请内存。

参数:RLOG_BUF_SIZE

select para_name,para_value,para_type from v$dm_ini where para_name='RLOG_BUF_SIZE';

3. 字典缓冲区:字典缓冲区缓存的是数据字典的信息。当字典缓冲区不够用时,会向共享内存池申请内存

参数:DICT_BUF_SIZE

单位:M

select para_name,para_value,para_type from v$dm_ini where para_name='DICT_BUF_SIZE';

 4. SQL 缓冲区:SQL 缓冲区缓存的是结果集、执行计划等信息。当 SQL 类别比较多,SQL没有绑定变量,可以将 SQL 缓冲区调大。当 SQL 缓冲区不够用时,会向共享内存池申请内存。

 参数:CACHE_POOL_SIZE

select para_name,para_value,para_type from v$dm_ini where para_name='CACHE_POOL_SIZE';

 排序区

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

哈希区

      哈希缓冲区是达梦数据库为哈希连接而设定的虚拟缓冲区,在进行哈希连接时,对排序的数据量进行计算。如果计算出的数据量大小超过了哈希缓冲区的大小,则使用 DM8 创新的外存哈希方式;如果没有超过哈希缓冲区的大小,实际上还是使用内存池来进行哈希操作。

线程结构

相关的视图

查看线程:

select * from v$threads;

查看进程:

select * from v$process;

监听线程

      主要任务是在服务器端口上进行循环监听来自客户端的请求。工作过程为数据库启动时监听线程就会启动,当监听到客户端发来的请求之后,监听线程会被唤醒并生成会话申请,之后进入到工作线程队列中,等待工作线程的处理,监听线程会随着数据库的关闭而关闭。

IO 线程

      主要的工作有:将磁盘上的数据页加载到数据缓冲区中;将数据缓冲区中的脏页在一定机制下(数据库正常关闭、缓冲区满和触发检查点)更新到磁盘上的数据文件中。

日志刷新线程

      将重做日志缓冲区中的记录在一定机制下(事务提交,执行检查点)刷盘到重做日志文件中。

日志归档线程

      重做日志文件在覆盖前,日志归档线程将重做日志文件内容拷贝到归档路径下做副本。

日志重做线程

      主要用于数据库实例恢复,会根据REDO日志进行并行故障恢复

调度线程

      检查系统级的时间触发器;

      清理 SQL 缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项;

      动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池;

      自动执行检查点;

      会话超时检测;

      必要时执行数据更新页刷盘;

      唤醒等待的工作线程;

 工作线程

      内核的工作线程机制包括普通内核线程和用户态线程两种,普通内核线程的切换完全由操作系统决定,但操作系统无法了解进程内部的运行机制,只能采取通用的调度策略来管理各个内核线程;用户态线程在内核线程内部自主调度,有效减少上下文切换

数据库的管理

 数据库的创建

      在建数据库之前,需要规划数据库,如数据库名、实例名、端口、文件路径、簇大小、页大小、日志文件大小、SYSDBA 和 SYSAUDITOR 等系统用户的密码,需要注意的是,有4个参数是只能在数据库初始化时设置的,后续不能更改。

  1. 簇大小,簇是每次申请的页数,表存满了以后会一次性连续申请(参数设置)个页的空间。
  2. 页大小,影响每一行能存储的最大值,和查询效率。
  3. 字符集,影响所用的字符集后期是否支持对应的生僻字等。
  4. 大小写敏感,影响 SQL 编写,对小写对象是否需要添加双引号。

      执行创建数据库的命令时,安装程序会先确认数据库的版本,检查数据库的授权文件有没有指定,没有的话就默认是一年的有效期,根据执行的参数来设置要初始化的数据库并记录到dm.ini文件中,之后会自动创建 4 个表空间(SYSTEM、ROLL、MAIN和TEMP)以及2个redo日志(dmdb01.log和dmdb02.log),最后将完整的过程记录在dminit.log中,一次数据库的初始化就完成了。

 启动过程

      数据库在启动时,会对license进行检查,确认是否还在有效期内,之后会去读取配置文件 (.ini),根据参数的值来分配数据库内存的大小,然后读取控制文件 (dm.ctl),获取数据库的初始信息,比如数据库的名称和模式、数据文件的名称和存放路径、数据库的版本等,最后再读取重做日志文件 ().log) 和 数据文件 (*.DBF),创建监听线程。

 关闭过程

      数据库关闭时,会先将全部的会话进行关闭,检查点开始工作,把系统缓冲区中的部分或者全部脏数据页写入磁盘,之后停止归档和redo的写入,最后释放内存空间,关闭监听线程。

更多详细的内容可在达梦数据库官网中查阅

达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值