1.数据库分类:
2.达梦数据库逻辑存储结构:
页----簇----段-----数据文件-----表空间-----数据库
页是最小的逻辑单元,是数据库最小的分配单位。
数据库是由一个或多个表空间组成。
每一个表空间由一个或多个数据文件组成。
每一个数据库文件由一个或多个簇组成。
段是簇的上级逻辑单位,一段可以跨多个数据文件。
簇是磁盘上连接的页组成,一个簇总是一个数据文件中。
3.物理存储结构
3.1配置文件
以ini结尾的文件
3.2控制文件
控制文件是一个二进制文件,以ctl结尾。
控制文件参数
[dmdba@dca01 DAMENG]$ cat dm.ini|grep ctl
CTL_PATH = /dm7/data/DAMENG/dm.ctl #ctl file path
CTL_BAK_PATH = /dm7/data/DAMENG/ctl_bak #dm.ctl backup path
CTL_BAK_NUM = 10 #backup number of dm.
查看控制文件内容:
[dmdba@dca01 ~]$ dmctlcvt help
格式: ./dmctlcvt KEYWORD=value
[dmdba@dca01 ~]$ dmctlcvt type=1 src=/dm7/data/DAMENG/dm.ctl dest=/tmp/dmctl.txt
不要随便去修改控制文件。
3.3数据文件
以.dbf结尾的文件
数据文件的大小范围:4096*页大小 -------2147483647*页大小
表空间中数据文件的总数不超过256个。
3.4备份文件
以bak为扩展名的文件,还一个.meta元数据文件。
3.5事件日志文件
记录了数据库运行期间的关键事件,如启动,关闭,内存申请失败,io错误等一些致命的错误。DM_HOME/log目录下,命令格式为:
dm_实例名_日期。
3.6跟踪文件
跟踪文件记录了系统各会话执行的sql语句,错误信息,主要错误和性能问题,启动跟踪日志,对系统性能有较大的影响,所以默认情况下跟踪日志是关闭的。
Dm.ini svr_log参数改为1就打开跟踪日志。
4.达梦的内存结构
4.1共享内存
采用共享内存池可以一次性向操作系统申请一大片内存,即内存池在实例运行中要内存时,可在共享内存池进行申请或者释放,共享内存池可以在实例的配置文件dm.ini中进行配置。
SQL> select para_name,para_value from v$dm_ini where para_name like '%MEMORY%';
MEMORY_TARGET共享内存的总大小,0:表示不限制。
Oracle memory_target = sga+pga
公共池:memory_pool 157 (减少系统调用)
SQL> select distinct name,is_shared from v$mem_pool order by 2;
共享内存的分类:公共池,数据缓冲区,字典缓冲区,sql缓冲区,重做日志缓冲区,排序区,hash区
4.2数据缓冲区
缓存使用的数据块,增加逻辑读的次数,提高修改和查询的性能。
参数:buffer
参考值:
Oltp: buffer 大小占整个物理内存的40%-60%
Olap:buffer 大小占整个物理内存的60%-80%
数据缓冲区保存的数据页,包括用户更改的数据页,查询时从磁盘读取的数据页。
相关视图:
V$bufferpool:用记录页面缓冲区结构信息。
V$buffer_lru_first:显示所缓冲区LRU链首页信息。
V$buffer_lru_last:显示所缓冲区LRU链末页信息。
V$buffer_upd_first:显示所缓冲区update链首页信息。
V$buffer_upd_last:显示所缓冲区update链末页信息。
数据缓冲区有5种类型:
Normal keep fast recycle 和roll;
ORALCE:RECYCLE 和keep 存的是表。
DM:RECYCLE和keep存的是表空间。
修改参数值:
Oracle:alter system set para_name=para_value
DM:SP_SET_PARA_VALUE(scope,para_name,para_value);
Scope:
1:动态参数
2:静态参数
DM的参数类型:
Sys/session:动态参数,同时修改内存和配置文件
Read only:在数据库运行状态时,不能修改。
In file:静态参数,修改配置文件,重启服务生效。
通过视图v$parameter来查看类型
SQL> sp_set_para_value(2,'BUFFER',1500);
重启生效
Buffer_pools:缓冲池个数
Max_buffer:缓冲区最大值
是否读取多页:multi_page_num ,默认是单页。
如果数据库加密或是启用ssd缓冲区,则不支持多页读取。
4.3 字典缓冲区
字典缓冲区主要存的是一些数据字典信息如模式信息,表信息,列信息,触发器信息等等。实例在启动的时候,会将部分的数据字典信息加载到字典缓冲区中,并采用lru算法进行字典信息的控制。
DICT_BUF_SIZE:单位M
V$DICT_CACHE_ITEM:字典缓冲区中字典对象的信息。
V$DICT_CACHE:字典缓冲区的信息。
8.3.4sql缓冲区
DM执行一条sql的过程
SQL> select para_name,para_value from v$dm_ini where para_name='DICT_BUF_SIZE';
A 语法分析
B 语义分析(读字典表)
C 权限判断
D查找数据块是否在内存(在内存,产生逻辑读,不在内存,产生物理读)
E是否有可用的执行计划,如果有,按执行计划来,如果没有,就生成执行计划,运行sql,将结果集发回客户端)
Sql缓冲区里存放的都是最近使用的执行计划和最近查询的结果集。
Use_pln_pool:是否重用执行计划
1:启执行计划重用
2:对不包含显示参数的语句进行常量参数优化
3:即使包含显示参数语句,也进行常量参数优化
0:禁止执行计划重用。
CACHE_POOL_SIZE:缓冲区的大小
RS_CAN_CACHE:控制结果集缓存
0:禁止重用结果集
1:强制模式,默认缓存所有的结果集
2:手动模式,默认不缓存结果集
仅当参数RS_CAN_CACHE=1且USR_PLN_POOL非0 的时候,才会缓存结果。
相关的视图:
V$sql_plan:缓冲区中执行计划的信息。
V$sql_history:sql执行历史信息
V$sql_text:sql执行信息
V$cachesql:缓冲区中sql语句的信息
4.5重做日志缓冲区
用于存入重做日志的内存缓冲区,为了避免直接对磁盘的io进行文读写,对数据库的性能产生影响。
Rlog_buf_size:日志缓冲区的大小,单位:page大小设置为2的幂
Rlog_pool_size:最大日志缓冲的大小:单位M
重做日志机制:每3秒写一次,或者是当我们提交事务的时候,commit;
4.6排序区
提供数据排序所需要的内存空间,如果内存排序无法完成,把部分的排序转到磁盘上,tmp
Sort_buf_size 单位:M
4.7hash区
为了哈希链接设定的缓冲区,该缓冲区是虚拟缓冲区
HJ_BUF_SIZE
4.8ssd缓冲区
将ssd文件作为内存缓冲与普通磁盘之间的缓冲层,称为SSD缓存,默认SSD缓冲区是关闭的,启用SSD缓冲区,将SSD_BUF_SIZE设置为大于0,并指定SSD_FILE_PATH就可以了。
5.达梦线程的管理
达梦数据库是单进程、多线程结构
数据库实例:内存结构+一系列的线程+数据文件组成的
相关视图:
V$latches:在等待的线程信息
V$threads:当前系统中所有活的线程的信息。
V$wthrd_history:记录自数据库启动以来的,所有活动过的线程的相关历史信息。
V$process:查看当前数据进程信息。
监听线程:检测外部连接(5236)
IO线程:(写脏数据到磁盘)
工作线程:(执行任务)
调度线程:清理临时段和失效段,分配任务给工作线程和唤醒工作线程)
日志重做线程:数据库异常关闭,下次启动,利用重做日志,构造脏数据块)
日志归档线程:对重做日志做副本
日志写线程:把重做日志缓冲区的数据写到重做日志中
.........
利用控制台工具,查看和调整线程参数