DM达梦数据库体系结构详解

1、DM逻辑结构

dm中和oracle一样,也分为实例和数据库两个概念,而且这两者的概念也基本一致。
唯一的区别是:达梦是单进程,而oracle是多进程的。

  • 实例:共享内存+后台的进程或线程。
  • 数据库:存放到磁盘的文件。

一般是一个db对应一个实例,但是DSC(DM共享集群)多个实例对一个数据库。

dm的服务器组成:
客户端+服务器(实例+数据库)
客户端不能直接去访问数据库,客户端把请求交给实例,实例去访问数据库,把访问信息,返回实例,实例交给交给客户端。
在这里插入图片描述
dm的逻辑存储结构:

  • 数据库由一个或多个表空间组成。
  • 每个表空间由一个或多个数据文件组成。
  • 每个数据文件由一个或多个簇组成。
  • 页是数据库中最小的分配单位,也是数据库中使用的最小的IO单元。

2、DM物理结构

DM 数据库使用了磁盘上大量的物理存储结构来保存和管理用户数据。主要包括:

2.1、配置文件
配置文件是 DM 数据库用来设置功能选项的一些文本文件的集合,配置文件以 ini 为扩展名,如dm.ini, dmarch.ini

2.2、控制文件
每个 DM 数据库都有一个名为 dm.ctl 的控制文件。控制文件是一个二进制文件,它记录了数据库必要的初始信息。

2.3、数据文件
数据文件以 dbf 为扩展名,它是数据库中最重要的文件类型,一个 DM 数据文件对应磁 盘上的一个物理文件,数据文件是真实数据存储的地方,每个数据库至少有一个与之相关的 数据文件。在实际应用中,通常有多个数据文件。

2.4、重做日志文件
重做日志文件又叫redo日志。主要用于数据库的备份和恢复。

2.5、归档文件
利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点,如果没有归档日志文件,则只能利用备份进行恢复。

2.6、逻辑日志文件
如果在DM数据库上配置了复制功能,复制源就会产生逻辑日志文件。

2.7、备份文件
备份文件以 bak 为扩展名

2.8、日志文件(跟踪日志,事件日志)
用户在 dm.ini 中配置 SVR_LOG 和 SVR_LOG_SWITCH_COUNT 参数后就会打开跟踪日志。
DM 数据库系统在运行过程中,会在 log 子目录下产生一个“dm_实例名_日期”命名的 事件日志文件。事件日志文件对 DM 数据库运行时的关键事件进行记录,如系统启动、关闭、内存申请失败、IO错误等一些致命错误。

3、DM内存结构

DM 数据库管理系统的内存结构主要包括内存池、缓冲区、排序区、哈希区等。根据系统中子模块的不同功能,对内存进行了上述划分,并采用了不同的管理模式。
3.1、共享内存
查看共享内存大小:

SQL> select para_name,para_value from v$dm_ini where para_name='MEMORY_TARGET';

在这里插入图片描述
其中0 表示的是不限制,在oracle中:memoroy_target=sga+pga
Memory_pool 表示系统内存池大小,查看方法:

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

在这里插入图片描述
3.2、数据缓冲区buffer
在这里插入图片描述
1、存放的内容:LRU(最小使用算法)链表。

2、状态:free,dirty,clean,pending.

3、如何去设置buffer的大小?

SQL> select para_name,para_value from v$dm_ini where para_name='BUFFER';--大小

在这里插入图片描述

SQL> select para_name,para_value from v$dm_ini where para_name='MAX_BUFFER';--最大值

在这里插入图片描述
建议:
OLTP: BUFFER大小设置为整个物理内存的40-60%
OLAP:BUFFER大小设置为整个物理内存的60-80%

如何修改:
ORALCE: alter system set xxx=…;
DM:SP_set_PARA_VALUE(SCOPE,PARA_NAME,PARA_VALUE);

我们可以通过V P A R A M E T E R V PARAMETER 和V DM_INI视图去查看相关参数的值,例如:

SQL> select name ,type from v$parameter where name='BUFFER';

在这里插入图片描述
当然并不是所有的参数都可以通过这种方式修改,dm的参数分为以下几类:

  • Sys/session 动态参数,同时修改内存和配置文件
  • Read only 数据库运行状态下,不能修改。
  • In file 静态参数,修改配置文件。
SQL> sp_set_para_value(2,'BUFFER',1500);

其中参数2表示只修改配置文件,1表示修改配置文件和内存。

另外需要注意的是,在oracle中Recycle(快速回收池)和Keep(保留池)存放的是表,而在DM中存放的是表空间。

3.3、字典缓冲区

SQL> select para_name,para_value from v$dm_ini where para_name like '%DICT%';

在这里插入图片描述
DICT_BUF_SIZE -----大小
PLN_DICT_HASH_THRESHOLD ----关联登记
当cache_pool_size的值大于等于该值的时候,记录执行计划中关联的数据字典。

3.4、Sql缓冲区
介绍sql缓冲区之前,我们首先需要明白一条sql在dm数据库中的执行过程,大致为:
1、语法义分析。
2、语义分析(存放数据的数据字典表,产生物理读)
3、权限判断
4、查找数据块是否内存(在内存,逻辑读,不在内存,把数据块从磁盘读到buffer)
5、找是否有可用的执行计划。有的直接按照执行计划把结果展示出来。如果没有,生成执行计划,再把数据展示出来。
而Sql缓冲区中存放的就是:最近使用的sql,DMSQL代码,执行计划和最近查询的结果集),用来减少硬解析。
查看方式:

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

在这里插入图片描述
USE_PLN_POOL表示执行计划是否重用:
0 关闭, 1,2,3重用。

3.5、日志缓冲区
日志缓冲区是用于存放重做日志的内存缓冲区,dm中数据每3s写一次或是commit。

SQL> select para_name,para_value from v$dm_ini where para_name like '%RLOG%';

在这里插入图片描述
RLOG_BUF_SIZE ----- 日志缓冲区的大小 单位:page 设置成2的幂。
RLOG_POOL_SIZE ----最大日志缓冲区的大小 单位:M

3.6、排序区
对数据进行排序,如果内存排序无法完成,把部分排序转到磁盘(temp)
SORT_BUF_SIZE —大小,值要结合你的业务。

3.7、HASH区
HJ_BUF_SIZE

SQL> select para_name,para_value from v$dm_ini where para_name like '%HJ%';

3.8、重做日志文件的管理
–查看日志文件:

SQL> select path from v$rlogfile;

在这里插入图片描述
–增加一个日志文件:

SQL> alter database add logfile '/dm7/data/DAMNEG/DAMENG04.log' size 512;

在这里插入图片描述
–修改日志文件的大小:

SQL> alter database resize logfile '/dm7/data/DAMNEG/DAMENG04.log' to 1024;

在这里插入图片描述
需要注意:所有日志文件大小要一致!

发布了155 篇原创文章 · 获赞 88 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_39540651/article/details/105051163