达梦数据库学习(三、体系结构)
达梦数据库学习(三、体系结构)
上期内容:
本篇说实在的有些我也没太弄明⽩,⼤概就是知其然不知其所以然吧。
DMServer=客户端+服务器(典型的C/S架构)
⽽服务器=数据库+实例
⼀、database数据库(存放到磁盘的⽂件)⽂件分类
1、数据⽂件
存放⽤户的真实的数据(物理备份时备份的就是这些⽂件)
2、重做⽇志⽂件
(注:达梦数据库没有⽇志组的概念,达梦不⽀持⼿动切换⽇志)
存放的是改变的数据信息(这个最怕出问题,重做⽇志⽂件丢失可能会丢失数据,因此需要对重做⽇志做归档)查看⽂件路径
SQL>select path from v$rlogfile;
⾏号 PATH
---------- -----------------------------
1 /dm8/data/DAMENG/DAMENG01.log
2 /dm8/data/DAMENG/DAMENG02.log
1)、如何调整⽇志⽂件⼤⼩(达梦限制只能调⼤不能调⼩)⼤⼩范围:64M-2G 查看⽇志⽂件的⼤⼩:
SQL>select path,rlog_size/1024/1024 from v$rlogfile;
⾏号 PATH RLOG_SIZE/1024/1024
---------- ----------------------------- --------------------
1 /dm8/data/DAMENG/DAMENG01.log 256
2 /dm8/data/DAMENG/DAMENG02.log 256
调整⼤⼩:
SQL> alter database resize logfile '/dm8/data/DAMENG/DAMENG01.log' to 257
SQL> alter database resize logfile '/dm8/data/DAMENG/DAMENG02.log' to 257
注意:所有的⽇志⽂件⼤⼩要⼀致(我没试过不⼀致会怎样)
特点:循环写,重复写
2)、如何增加⼀个⽇志⽂件(达梦只⽀持增加,不⽀持删除)
SQL> alter database add logfile '/dm8/data/DAMENG/DAMENG03.log' size 257;
3、控制⽂件
Oracle数据库的控制⽂件内容:SCN、归档信息、RMAN备份的元数据
数据库的物理架构v$controlfile
达梦数据库的控制⽂件内容:数据库的物理架构、版本信息、创建时间、OGUID等
查控制⽂件的路径:
SQL> select para_name,para_value from v$dm_ini where para_name='CTL_PATH';
⾏号 PARA_NAME PARA_VALUE
---------- --------- -----------------------
1 CTL_PATH /dm8/data/l
达梦对控制⽂件的保护:控制⽂件很重要,所以要避免该⽂件丢失或损坏,在Oracle中可以进⾏复制,使⽤多个位置存放控制⽂件,那么在达梦⾥⾯,达梦进⾏了⾃动备份。
⾃动备份(备份路径,备份的个数)
SQL> select para_name,para_value from v$dm_ini where para_name='CTL_BAK_PATH';
⾏号 PARA_NAME PARA_VALUE
---------- ------------ ------------------------
1 CTL_BAK_PATH /dm8/data/DAMENG/ctl_bak
SQL> select para_name,para_value from v$dm_ini where para_name='CTL_BAK_NUM';
⾏号 PARA_NAME PARA_VALUE
---------- ----------- ----------
1 CTL_BAK_NUM 10
⽐较奇怪的是这⾥写的备份数量是10,但实际查看路径下有11个⽂件
查看备份⽂件的内容:
把控制⽂件转成⽂本⽂件:
$ ./dmctlcvt type=1 src=/dm8/data/l dest=/
vi /
4、配置⽂件
配置⽂件多数以.ini结尾
⽐如dm.ini就是很典型的参数配置⽂件
参数的类型:SYS、session、read only、in file(以上参数类型不明⽩啥意思)上⽹查了⼀下:
read only:⼿动参数,表⽰服务器运⾏过程中不可修改;
infile:静态参数,只可修改ini⽂件
SYS及session:动态参数,ini⽂件和内存同时可修改,其中SYS是系统级参数
⼿动:不能被动态修改,必须⼿动修改dm.ini参数⽂件,然后重启才能⽣效。
静态:可以被动态修改,修改后重启服务器才能⽣效。
动态:可以被动态修改,修改后即时⽣效。动态参数⼜分为会话级和系统级两种。会话级参数被修改后,新参数值只会影响新创建的会话,之前创建的会话不受影响;系统级参数的修改则会影响所有的会话。
参考⽹址:
修改参数:sp_set_para_value(修改范围,参数名,参数值)
修改范围:1=内存+参数⽂件,2=参数⽂件
查看参数类型:
SQL>select para_name,para_value from v$dm_ini where para_name=’BUFFER’;
SQL>sp_set_para_value(2,’BUFFER’,’500’);--两种⽅式之⼀
SQL>alter system set ‘BUFFER’=500 spfile;--两种⽅式之⼆
配置⽂件⽰例:dmarchar.ini(配置归档)、dmmal.ini(MAL链路通讯)、dmmpp.ini(MPP配置)
5、其他⽂件
如备份⽂件、追踪⽂件等
⼆、实例
实例=共享内存+后台的进程或者线程
1、共享内存为了减少物理IO
设置共享内存⼤⼩
SQL>select para_name,para_value from v$dm_ini where para_name=’MEMEROY_TARGET’;
BUFFER 数据缓冲区
作⽤:存放最近使⽤的数据块(读,修改)
查看⼤⼩:
SQL>select para_name,para_value from v$dm_ini where para_name=’BUFFER’;
区域的⼤⼩设置:OLTP系统建议是物理内存的40%-60%.
LRU链表上,数据库是有以下状态的(脏、⼲净、空闲、正在使⽤)
要把磁盘的数据库块读到BUFFER,LRU链表,遇到⼲净的和空闲的直接使⽤,遇到脏数据块,把它放到检查点队列上,遇到在使⽤的直接跳过。
如何判断数据是否在内存中:通过HASH链表。不懂
Oracle:keep 和recycle存放的是表。达梦存放的是表空间。
keep(保留池)
RECYCLE(回收池)
REDO LOG BUFFER 重做⽇志缓冲区
作⽤:存放修改的数据块
查看⼤⼩:
SQL>select para_name,para_value from v$dm_ini where para_name=’RLOG_BUF_SIZE’;
单位:page,调整⼤⼩建议是2的幂(如2的6次⽅)。
对于redo log buffer 的数据,3秒会⾃动写磁盘,事务提交的时候也会写磁盘(因此调整这个REDO LOG BUFFER⼤⼩就没有太⼤意义,实际会很少调这个⼤⼩)
字典缓冲区
作⽤:存放最近使⽤的数据字典(system),减少物理读(减少物理IO)
查看⼤⼩:
SQL>select para_name,para_value from v$dm_ini where para_name=’DICT_BUF_SIZE’;
SQL缓冲区
作⽤:存放最近使⽤SQL语句(hash或者SQLid)、执⾏计划、最近的查询结果集
查看⼤⼩:
SQL>select para_name,para_value from v$dm_ini where para_name=’CACHE_POOL_SIZE’;
对应缓存SQL的话有两个视图:v$sql_history、v$sqltext
执⾏计划:是否重⽤
SQL>select para_name,para_value from v$dm_ini where para_name=’USE_PLN_POOL’;
0 不重⽤
1 重⽤,默认是1 减少执⾏计划的解析
排序区
作⽤:⽤作排序
查看⼤⼩:
SQL>select para_name,para_value from v$dm_ini where para_name=’SORT_BUF_SIZE’;
注意:如果排序区⽆法完成所有的排序,会把部分排序的动作放到磁盘,会放在临时表空间。
HASH区
作⽤:缓存hash值,两张表做hash join,其中⼀张表产⽣hash值,把hash值放到该区域。
查看⼤⼩:
SQL>select para_name,para_value from v$dm_ini where para_name=’HJ_BUF_SIZE’;
了解⼀条SQL语句的执⾏过程:
1、语法分析
2、语义分析(数据字典,常⽤的数据字典缓存到字典缓存区)
3、权限判断(字典缓冲区)
4、执⾏计划(SQL缓冲区),(有则调到第5步,⽆则把数据读到内存(数据缓冲区),如果修改,把修改的数据放到重做⽇志缓冲区。⽣成SQL的执⾏计划(SQL缓冲区))
5、运⾏执⾏计划
6、返回结果(SQL缓冲区)
2、后台进程或者线程
1、利⽤操作系统
到数据库的进程号:
#ps -ef | grep dmsever
A、top -p 进程号 -H
B、/proc/进程编号
这个不懂啥意思。常见mpp数据库
2、利⽤数据库的动态性能视图
SQL>select name,thread _desc from v$threads;
也不懂啥意思。
监听线程默认监听端⼝5236 检测外部连接
IO线程刷脏数据(把检查点队列的数据写到磁盘)
⼯作线程执⾏任务(调度分配的任务)
调度线程分配任务给⼯作线程,唤醒⼯作线程,垃圾回收(回收失效的段等)
⽇志刷新线程把重做⽇志缓冲区的数据写到重做⽇志中
⽇志重做线程数据库异常关闭,下次启动的时候,会把重做⽇志的⼀些未写磁盘的脏数据重构(Oracle实例恢复)
⽇志归档把重做⽇志写到归档⽂件(Orale归档---⽇志切换,达梦是同时写重做⽇志和归档)(个⼈理解达梦的同时写并不是真正的同时,还是有延时的)
SQL>alter system switch logfile;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论