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 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;
需要注意:所有日志文件大小要一致!