达梦数据库:体系结构

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/DAMENG/dm.ctl

         达梦对控制文件的保护:控制文件很重要,所以要避免该文件丢失或损坏,在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/DAMENG/dm.ctl dest=/tmp/dm.txt

         vi /tmp/dm.txt



4、配置文件

         配置文件多数以.ini结尾

         比如dm.ini就是很典型的参数配置文件

         参数的类型:SYS、session、read only、in file(以上参数类型不明白啥意思)上网查了一下:

         read only:手动参数,表示服务器运行过程中不可修改;

         infile:静态参数,只可修改ini文件

         SYS及session:动态参数,ini文件和内存同时可修改,其中SYS是系统级参数


         手动:不能被动态修改,必须手动修改dm.ini参数文件,然后重启才能生效。

         静态:可以被动态修改,修改后重启服务器才能生效。

         动态:可以被动态修改,修改后即时生效。动态参数又分为会话级和系统级两种。会话级参数被修改后,新参数值只会影响新创建的会话,之前创建的会话不受影响;系统级参数的修改则会影响所有的会话。


参考网址:

https://blog.csdn.net/weixin_50334974/article/details/108776379

         修改参数: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/进程编号

这个不懂啥意思。

2、利用数据库的动态性能视图

SQL>select name,thread _desc from v$threads;

也不懂啥意思。



监听线程 默认监听端口5236 检测外部连接


IO线程 刷脏数据(把检查点队列的数据写到磁盘)


工作线程 执行任务(调度分配的任务)


调度线程 分配任务给工作线程,唤醒工作线程,垃圾回收(回收失效的段等)


日志刷新线程         把重做日志缓冲区的数据写到重做日志中


日志重做线程         数据库异常关闭,下次启动的时候,会把重做日志的一些未写磁盘的脏数据重构(Oracle实例恢复)


日志归档         把重做日志写到归档文件(Orale归档---日志切换,达梦是同时写重做日志和归档)(个人理解达梦的同时写并不是真正的同时,还是有延时的)

SQL>alter system switch logfile;

该操作并不是执行日志切换

个人理解该操作的实际意义是立即进行了归档写


检查点线程     触发增量检查点和完全检查点(触发完全检查点会写脏数据到磁盘,增量检查点不一定会写脏数据到磁盘)。


总结:


 注:该图直接拷贝授课老师教材,感谢。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容