達夢數據庫學習(三、體系結構)


達夢數據庫學習(三、體系結構)

 

上期內容:

達夢數據庫學習(一、linux操作系統安裝及數據庫安裝)

達夢數據庫學習(二、管理數據庫實例)

 

 

本篇說實在的有些我也沒太弄明白,大概就是知其然不知其所以然吧。

 

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;

該操作並不是執行日志切換

個人理解該操作的實際意義是立即進行了歸檔寫

 

檢查點線程     觸發增量檢查點和完全檢查點(觸發完全檢查點會寫臟數據到磁盤,增量檢查點不一定會寫臟數據到磁盤)。

 

總結:

 

 

 注:該圖直接拷貝授課老師教材,感謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM