DM8数据库体系结构
1、简介:新一代的关系型数据库、全面支持ANSI SQL标准和主流编程语言接口/开发框架。在兼顾OLAP和OLTP的同时,满足HTAP混合应用场景。
DM8是达梦公司在总结DM系列产品研发与应用经验的基础上,坚持开放创新、简洁实用的理念,推出的新一代自研数据库。DM8吸收借鉴当前先进新技术思想与主流数据库产品的优点,融合了分布式、弹性计算与云计算的优势,对灵活性、易用性、可靠性、高安全性等方面进行了大规模改进,多样化架构充分满足不同场景需求,支持超大规模并发事务处理和事务-分析混合型业务处理,动态分配计算资源,实现更精细化的资源利用、更低成本的投入。一个数据库,满足用户多种需求,让用户能更加专注于业务发展。
OLAP (On-Line Analytical Processing):联机实时分析OLAP
OLTP (On-Line Transaction Processing):联机事务处理OLTP
HTAP (Hybrid Transaction and Analytical Process):混合事务和分析处理
2、特性
DMSERVER:C/S 架构,由客户端+服务器构成
DMSERVER=数据库(数据库文件)+实例
数据库文件:配置文件、控制文件、重做日志文件、数据文件、归档日志文件、备份文件、
日志文件
实例:一组 dm 后台进程或者线程+共享内存
单实例:一个实例管理一个数据库
DMDSC:多个实例管理一个数据库,最多支持 8 个节点 DSC,类似于 Oracle rac
3、逻辑结构/物理结构
3.1 物理结构
配置文件
以.ini 结尾的文件
dm.ini 文件满足 oracle pfile+spfile 文件
查询视图:
select para_name,PARA_VALUE,PARA_TYPE from v$dm_in
参数类型:
sys:系统级,影响全局
session:会话级,针对当前会话有效
Infile:静态参数,实例重启才能生效
Readonly:只读参数,只能手动编辑修改
例 1:修改数据库的兼容模式为兼容 Oracle 数据库。
方法一:Sp_set_para_value(参数类型,参数名,参数值)
参数类型为 1,动态参数,即改即生效
参数类型为 2,静态参数,实例重启生效
方法二:alter system set ‘COMPATIBLE_MODE’=2 SPFILE;
方法三:手动编辑参数文件
例 2:打开日志功能
方法一:sp_set_para_value(1,‘SVR_LOG’,1);方法二:alter system set ‘SVR_LOG’=0 both;
方法三:手动编辑参数文件
注意:无论是静态参数,还是动态参数,通过手动编辑参数文件之后,都需要重启数据库实
例,才能生效。
(2)数据文件
以.DBF 结尾的文件
select * from dba_data_files;
select * from v$datafile;
(3)控制文件
以.ctl 结尾的文件
select para_name,para_value from v
d
m
i
n
i
w
h
e
r
e
p
a
r
a
n
a
m
e
l
i
k
e
′
查
看
控
制
文
件
的
内
容
/
d
m
8
/
b
i
n
查
看
帮
助
[
d
m
d
b
a
@
l
o
c
a
l
h
o
s
t
b
i
n
]
dm_ini where para_name like '%PATH%'; 查看控制文件的内容 /dm8/bin 查看帮助 [dmdba@localhost bin]
dminiwhereparanamelike′查看控制文件的内容/dm8/bin查看帮助[dmdba@localhostbin] ./dmctlcvt help
[dmdba@localhost bin]$ ./dmctlcvt type=1 src=/dm8/data/data/TEST/dm.ctl dest=/tmp/ctl.txt
控制文件记录了数据库的模式,数据库名,上一次启动时间,数据库启动次数,数据库文件
版本,表空间信息等。
(4)重做日志文件
重做日志文件记录的是数据库发生变更的信息。达梦数据库没有日志组,至少需要两个日志
文件。重做日志文件的特点:循环写,可覆盖。
查询重做日志文件
select * from v
r
l
o
g
f
i
l
e
;
s
e
l
e
c
t
∗
f
r
o
m
v
rlogfile; select * from v
rlogfile;select∗fromvrlog;
Resize 重做日志文件
alter database RESIZE logfile ‘/dm8/data/data/TEST/TEST01.log’ to 260;
alter database RESIZE logfile ‘/dm8/data/data/TEST/TEST02.log’ to 260;
新增重做日志文件
alter database add LOGFILE ‘/dm8/data/data/TEST/TEST03.log’ size 260;迁移重做日志文件
alter database mount;
alter database rename logfile ‘/dm8/data/data/TEST/TEST03.log’ to ‘/dm8/TEST03.log’;
alter database open;
注意:重做日志文件不能被删除,也不能缩小。
(5)备份文件
以.bak 为扩展名的文件,备份文件就是数据库在某一个时间点的副本。
.meta 记录的是备份信息
(6)跟踪日志文件
跟踪日志文件记录的是系统各会话执行的 sql 语句信息,主要是错误的信息和性能的问题。
默认关闭,参数是 SVR_LOGI
select para_name,para_value from v
d
m
i
n
i
w
h
e
r
e
p
a
r
a
n
a
m
e
=
′
S
V
R
L
O
G
′
;
3.2
逻
辑
结
构
页
:
默
认
为
8
k
,
支
持
4
k
、
8
k
、
16
k
、
32
k
,
是
数
据
库
最
小
的
分
配
单
元
。
包
含
页
头
信
息
,
数
据
,
空
闲
空
间
,
行
便
宜
数
组
。
簇
:
是
由
一
组
连
续
的
页
组
成
,
默
认
为
16
个
页
,
支
持
16
、
32
个
页
。
一
个
簇
总
是
在
一
个
数
据
文
件
中
的
。
段
:
是
簇
的
上
级
逻
辑
单
元
,
段
是
可
以
跨
多
个
数
据
文
件
。
段
又
分
为
数
据
段
(
表
段
、
索
引
段
)
、
临
时
段
、
回
滚
段
。
S
E
L
E
C
T
∗
F
R
O
M
D
B
A
S
E
G
M
E
N
T
S
;
表
空
间
:
一
个
数
据
库
拥
有
多
个
表
空
间
,
一
个
表
空
间
可
以
拥
有
一
个
或
多
个
数
据
文
件
,
一
个
数
据
文
件
只
能
属
于
一
个
表
空
间
。
s
e
l
e
c
t
∗
f
r
o
m
d
b
a
t
a
b
l
e
s
p
a
c
e
s
;
s
e
l
e
c
t
∗
f
r
o
m
v
dm_ini where para_name='SVR_LOG'; 3.2 逻辑结构 页:默认为 8k,支持 4k、8k、16k、32k,是数据库最小的分配单元。包含页头信息,数据, 空闲空间,行便宜数组。 簇:是由一组连续的页组成,默认为 16 个页,支持 16、32 个页。一个簇总是在一个数据文 件中的。 段:是簇的上级逻辑单元,段是可以跨多个数据文件。段又分为数据段(表段、索引段)、 临时段、回滚段。 SELECT * FROM DBA_SEGMENTS; 表空间:一个数据库拥有多个表空间,一个表空间可以拥有一个或多个数据文件,一个数据 文件只能属于一个表空间。 select * from dba_tablespaces; select * from v
dminiwhereparaname=′SVRLOG′;3.2逻辑结构页:默认为8k,支持4k、8k、16k、32k,是数据库最小的分配单元。包含页头信息,数据,空闲空间,行便宜数组。簇:是由一组连续的页组成,默认为16个页,支持16、32个页。一个簇总是在一个数据文件中的。段:是簇的上级逻辑单元,段是可以跨多个数据文件。段又分为数据段(表段、索引段)、临时段、回滚段。SELECT∗FROMDBASEGMENTS;表空间:一个数据库拥有多个表空间,一个表空间可以拥有一个或多个数据文件,一个数据文件只能属于一个表空间。select∗fromdbatablespaces;select∗fromvtablespace;
3.3DM8 内存结构
(1)共享内存池
共享内存池是为其他内存池或者缓冲区在不够用的情况下,提供扩展。共享内存池可以减少
系统调用,提升数据库的运行效率。
MEMORY_POOL:共享内存池大小
MEMORY_TARGET:可以扩展到的目标大小,0 代表不限制
MEMORY_EXTENT_SIZE:增量大小
(2)其他运行时内存池
在需要时被创建,使用完立即销毁。例如:会话内存池、虚拟机内存池,排序缓冲区。
(3)数据缓冲区
缓存的是数据页,使用数据缓冲区可以提升数据库的性能。数据缓冲区设置的太小,会造成
性能方面的问题。参数:buffer
参考值:oltp:物理内存的 40%-60%,olap:物理内存的 60%-80%
数据缓冲区有 4 种类型:
Normal、keep、fast、recycle
Normal/keep 可以手动调整,默认为 normal。达梦 keep 的是表空间。
Fast/recycle 系统自动管理,缓存的是临时页和回滚页。
读多页:当数据库中有大量全表扫描时,可以调整该参数 MULTI_PAGE_GET_NUM
select para_name,para_value from v$dm_ini where para_name =‘MULTI_PAGE_GET_NUM’;
数据缓冲区和共享内存池没有关系,数据缓冲区满,淘汰最近很少使用的数据页。
(4)重做日志缓冲区
缓存的是重做日志记录的信息。单位是页。
参数:RLOG_BUF_SIZE
重做日志缓冲区与共享内存池没有关系,重做日志缓冲区满就向操作系统申请内存。
(5)SQL 缓冲区
缓存的是 sql、sql 结果集,包,如果 sql 类别比较多,应该适当调整 SQL 缓冲区。
参数:CACHE_POOL_SIZE
select para_name,para_value from v$dm_ini where para_name =‘CACHE_POOL_SIZE’;
SQL 缓冲区不够用时,会向共享内存池申请内存。
(6)字典缓冲区
字典缓冲区缓存的是数据字典的信息。包含表、列、权限相关的信息。当数据库中存在大表
的表、分区表时,应该适当调整字典缓冲区。
参数:DICT_BUF_SIZE当字典缓冲区不够用时,会向共享内存池申请内存。
(7)排序区
缓存的是临时数据,排序的数据。
参数:SORT_BUF_SIZE
当排序区不足时,会向共享内存池申请内存。
3.4DM8 线程结构
监听线程
在数据库服务器端,监听来自客户端的连接请求,并转给工作线程。
IO 线程
将磁盘上的数据页加载到数据缓冲区中,将数据缓冲区中的脏页在一定机制(数据缓冲区满,
执行检查点、数据库关闭)下更新到磁盘中。
日志刷新线程
将重做日志缓冲区中的记录在一定机制(事务提交、执行检查点)下更新到重做日志文件中。
日志归档线程
将重做日志记录在覆盖之前,拷贝到归档路径下做副本。
日志重做线程
主要用于数据库的实例恢复
调度线程
检查系统级的时间触发器;
清理 SQL 缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项;
动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池;
自动执行检查点;
会话超时检测;
必要时执行数据更新页刷盘;唤醒等待的工作线程;
达梦社区 https://eco.dameng.com