达梦体系结构
1 DM8 存储结构
1.1 物理存储结构
配置文件
以.ini 结尾的文件,查询视图 v
d
m
i
n
i
s
e
l
e
c
t
p
a
r
a
n
a
m
e
,
p
a
r
a
v
a
l
u
e
,
p
a
r
a
t
y
p
e
f
r
o
m
v
dm_ini select para_name,para_value,para_type from v
dminiselectparaname,paravalue,paratypefromvdm_ini;
Sys:系统级,影响全局
Session:会话级,只针对当前会话有效
Read only:只读,只能手动编辑参数文件
Infile:静态参数,实例重启才能生效
修改参数有以下两种方法:
(1)直接 vi dm.ini ,无论是动态还是静态参数,都需要重启
(2)调用函数 sp_set_para_value(参数类型,’参数名’,参数值) 参数是动态参数不需要重启,静态参数需要重启 参数类型是指:静态参数或者动态参数。1 是动态参数,相当于 both,会改内存和参数文件 中的值,2 是静态参数,相当于 infile ,只会更改参数文件中的值。
(3)console 工具修改参数,无论是动态还是静态,也都要重启数据库才能生效。
例 1:修改数据库口令策略为:长度不小于 9,至少包含一个大写字母
pwd_policy 动态参数
设置系统默认口令策略。
0: 无策略;
1: 禁 止与用户名相同;
2: 口令长度不小于 9;
4: 至少包含一个大写字母(A-Z);
8 :至少包含 一个数字(0-9);
16:至少包含一个标点符 号(英文输入法状态下,除―和空格外的所有符 号;若为其他数字,则表示配置值的和,如 3=1+2,表示同时启用第 1 项和第 2 项策略。当COMPATIBLE_MODE=1 时,PWD_POLICY 的实际值均为 0
sp_set_para_value(1,‘pwd_policy’,6);
例 2 修改 dm 数据库为兼容 oracle COMPATIBLE_MODE 静态参数是否兼容其他数据库模式。
0:不兼容,
1:兼 容 SQL92 标准
2:部分兼容 ORACLE,
3:部 分兼容 MS SQL SERVER,
4:部分兼容 MYSQL,
5:兼容 DM6,
6:部分兼容 TERADATA
sp_set_para_value(2,‘COMPATIBLE_MODE’,2)
控制文件
以.ctl 结尾的文件
select para_name,para_value,para_type from v$dm_ini where para_name like ‘%PATH%’;
查看控制文件内容: bin下
查看帮助 [dmdba@localhost bin]$ ./dmctlcvt help
./dmctlcvt TYPE=1 SRC=/dm8/data/DM/dm.ctl DEST=/dm8/dmctl.txt
./dmctlcvt type=2 src=/dm8/dmctl.txt dest=/dm8/data/DM/dm.ctl
注意:不要随便修改控制文件
重做日志文件
查询重做日志文件:
select file_id,path,rlog_size from v$rlogfile;
重做日志文件记录的是数据库发生变更信息。重做日志文件的特点是
可覆盖,循环写。重做日志文件频繁切换会对数据库产生较大的性能
影响。
resize 重做日志文件
Alter database resize logfile ‘/dm8/data/DM/DM01.log’ to 300;
Alter database resize logfile ‘/dm8/data/DM/DM02.log’ to 300;
新增重做日志文件
Alter database add logfile ‘/dm8/data/DM/DM03.log’ size 300;
注意:重做日志文件不能被删除,所有日志文件大小需要一致。
迁移重做日志文件
alter database mount;
alter database RENAME LOGFILE ‘/dm8/data/DM/DM01.log’ TO ‘/dm8/DM01.LOG’;
alter database open;
数据文件
以.DBF 结尾的文件 存放的是真实数据
select file_name,status from dba_data_files;
归档日志文件
就是重做日志文件的副本,用来做数据库备份恢复、数据库守护集群、dmhs 的同步。
select name,arch_mode from v$database;
备份文件
以.bak 为扩展名的文件,备份文件就是数据库在某一个时间点的副
本。.meta 元数据文件(备份集的信息),.bak 数据备份文件(真实
的数据)
跟踪日志文件
跟踪日志文件记录的是系统各会话执行的 sql 语句的信息,主要是错
误的信息、性能问题。跟踪日志文件默认是关闭的。SVR_LOG
事件日志文件
记录的是数据库运行期间产生的关键性事件:数据库的启动、关闭、
IO 错误、内存申请失败
1.2 逻辑结构
页
默认为 8k,支持 4k、8k、16k、32k。页是数据库最小的分配和使用单元。页对应的是
操作系统块。
页包含了页头信息、数据、空闲空间、行偏移数组。
页头信息记录的页类型、页地址。行偏移数组,记录的是空间空间和数据比例(filefactor)
簇
默认为 16 个页,支持 16、32 个页。簇是一组连续的页组成,一个簇总是在一个数据文件中。
段
是簇的上级逻辑单元,段可以跨多个数据文件。段又分为数据段(表、索引)、回滚段、 临时段。 dba_segments
表空间
一个数据库拥有多个表空间,一个表空间可以拥有一个或多个数据文件,一个数据文件只能属于一个表空间。 dba_tablespaces
1.3逻辑结构和物理结构图
2 DM8 内存结构
共享内存池
主要是减少系统调用。共享内存池是 dmserver 启动时,从操作系统申请的一大片内存,实例在运行中可以向内存池申请或释放内存。
SQL> select para_name,para_value from v$dm_ini where para_name like ‘%MEMORY%’;
Memory_target 为 0 表示不限制内存使用
运行时内存池
给特定模块单独使用,例如会话内存池,虚拟机内存池。
数据缓冲区
参数:buffer
SQL> select para_name,para_value from v$dm_ini where para_name=‘BUFFER’;
参考值:
Oltp:物理内存的 40%-60%
OLAP:物理内存的 60%-80%
提高数据库的性能
缓存的是数据页(空闲、干净、脏、正在使用)
数据缓冲区有 4 种类型:
Normal /keep:可以手动调整
Fast/recycle:系统自动管理。Fast 主要是 undo 数据,recycle 主要是临时数据。
重做日志缓冲区
存放是重做日志信息,单位是页,提升数据库的性能。
select para_name,para_value from v$dm_ini where para_name like ‘RLOG_BUF_SIZE’;
字典缓冲区
主要缓存的是数据字典的信息,包含表、列的信息。数据库存在大量分区表时,应该要调整
字典缓冲区。
sql 缓冲区
用来存放执行计划,sql 结果集,包。系统中 sql 类别比较多,应该调整 sql 缓冲区。
select para_name,para_value from v$dm_ini where para_name like ‘CACHE_POOL_SIZE’;
排序区
排序区就是 sql 排序需要的内存空间,sql 在排序区空间不够时,转移到磁盘上(临时表空间)
Hash 区
是虚拟的内存区,只有在生成 hash 连接时,才会生成。
3 DM8 线程结构
监听线程
检测来自客户端的连接请求,生成任务,把任务交给工作线程。
IO 线程
将数据页从磁盘读入到数据缓冲区中,将数据缓冲区的脏页在一定机制下(缓冲区满,执行检查点,数据库关闭)刷到磁盘中。
日志刷新线程
将重做日志缓冲区中的重做记录在一定机制(事务提交,每 3 秒,执行检查点)下,刷到重做日志文件中。
日志归档线程
将重做日志文件在切换时拷贝到归档路径。
日志重做线程
主要是用于数据库恢复。
调度线程
检查系统级的时间触发器;
清理 SQL 缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项;
动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池;
自动执行检查点;
会话超时检测;
必要时执行数据更新页刷盘;
唤醒等待的工作线程