Linux平臺達夢數據庫V7之物理架構

一 前言

DM 數據庫使用了磁盤上大量的物理存儲結構來保存和管理用戶數據。典型的物理存儲結構包括:用於進行功能設置的配置文件;用於記錄文件分佈的控制文件;用於保存用戶實際數據的數據文件、重做日誌文件、歸檔日誌文件、備份文件;用來進行問題跟蹤的跟蹤日誌文件等。

二 物理架構圖

Linux平臺達夢數據庫V7之物理架構

三 物理文件介紹

Linux平臺達夢數據庫V7之物理架構

3.1 配置文件

配置文件是 DM 數據庫用來設置功能選項的一些文本文件的集合,配置文件以 ini 爲擴展名,它們具有固定的格式,用戶可以通過修改其中的某些參數取值來達成如下兩個方面的目標:

  1. 啓用/禁用特定功能項;
  2. 針對當前系統運行環境設置更優的參數值以提升系統性能。
    主要的配置文件如下:

    3.1.1 DM數據庫服務配置文件

    1)dm.ini
    每創建一個 DM 數據庫,就會自動生成 dm.ini 文件。dm.ini 是 DM 數據庫啓動所必須的配置文件,通過配置該文件可以設置 DM 數據庫服務器的各種功能和性能選項,其詳細配置項請參考官方手冊,關於該文件後面會單獨用一個文檔進行詳細介紹。
    參數屬性分爲三種:靜態、動態和手動。
    靜態,可以被動態修改,修改後重啓服務器才能生效。
    動態,可以被動態修改,修改後即時生效。動態參數又分爲會話級和系統級兩種。會話級參數被修改後,新參數值只會影響新創建的會話,之前創建的會話不受影響;系統級參數的修改則會影響所有的會話。
    手動,不能被動態修改,必須手動修改 dm.ini 參數文件,然後重啓才能生效。
    動態修改是指 DBA 用戶可以在數據庫服務器運行期間,通過調用系統過程SP_SET_PARA_VALUE()、SP_SET_PARA_DOUBLE_VALUE()和SP_SET_PARA_STRING_VALUE()對參數值進行修改。
    2)dmmal.ini
    dmmal.ini 是 MAL 系統的配置文件。需要用到 MAL環境的實例,所有站點 dmmal.ini 需要保證嚴格一致,其詳細配置項請參考官方手冊。
    3)dmarch.ini
    dmarch.ini 用於本地歸檔和遠程歸檔,其詳細配置項請參考官方手冊。
    相關說明

    1. 歸檔類型 ARCH_TYPE 有以下幾種:
      本地歸檔 LOCAL(一臺主庫最多配 8 個)
      遠程實時歸檔 REALTIME(一臺主庫最多配 8 個)
      遠程異步 歸檔 ASYNC(一臺主庫最多配 8 個)
      即時歸檔 TIMELY(一個主庫最多配 8 個)
      遠程歸檔 REMOTE(一個主庫最多配 8 個)
    2. 配置名[ARCHIVE_*]表示歸檔名,在配置文件中必須唯一。
    3. 不能存在相同實例名的不同歸檔;
    4. 不能存在 DEST 相同的不同歸檔實例;
    5. ARCH_TIMER_NAME 爲定製的定時器名稱,定時器配置見 dmtimer.ini;
    6. ARCH_SPACE_LIMIT 表示歸檔文件的磁盤空間限制,如果歸檔文件總大小超過這個值,則在生成新歸檔文件前會刪除最老的一個歸檔文件。
      4)dm_svc.conf
      DM 安裝時生成一個配置文件 dm_svc.conf,在 Windows 操作平臺下此文件位於%SystemRoot%\system32 目錄,在 Linux 平臺下此文件位於/etc 目錄。
      dm_svc.conf 文件中包含 DM 各接口及客戶端需要配置的一些參數,具體的配置項請參考官方文檔。
      dm_svc.conf 配置文件的內容分爲全局配置區和服務配置區。全局配置區在前,服務配置區在後,以“[服務名]”開頭,可配置除了服務名外的所有配置項。服務配置區中的配置優先級高於全局配置區。
      下面是一個 dm_svc.conf 的例子:

      以#開頭的行表示是註釋

      全局配置區

      O2000=(192.168.0.1:5000,192.168.0.2:5236)
      O3000=(192.168.0.1:5236,192.168.0.3:4350)
      TIME_ZONE=(+8:00)
      LOGIN_ENCRYPT=(0)
      DIRECT=(Y)

      服務配置區

      [O2000]
      TIME_ZONE=(+9:00)
      LOGIN_MODE=(2)
      SWITCH_TIME=(3)
      SWITCH_INTERVAL=(10)
      需要說明的是,如果對 dm_svc.conf 的配置項進行了修改,需要重啓客戶端程序,修
      改的配置才能生效。
      5)sqllog.ini
      sqllog.ini用於sql日誌的配置。當把INI參數SVR_LOG置爲1,纔會打開SQL日誌。如果在服務器啓動過程中,修改了sqllog.ini文件。修改之後的文件,只要調用過程SP_REFRESH_SVR_LOG_CONFIG() 就會生效。
      其詳細配置項請參考官方文檔。
      注意:只有把 INI 參數 SVR_LOG 置爲 1,且 SVR_LOG_NAME 爲 SLOG_ALL 時,
      sqllog.ini 中名稱爲 SLOG_ALL 的配置塊纔會生效。
      例如:下面是一個 SVR_LOG_NAME 爲 SLOG_ALL 的 sqllog.ini 的例子:
      BUF_TOTAL_SIZE = 10240 #SQLs Log Buffer Total
      Size(K)(1024~1024000)
      BUF_SIZE = 1024 #SQLs Log Buffer Size(K)(50~409600)
      BUF_KEEP_CNT = 6 #SQLs Log buffer keeped count(1~100)
      [SLOG_ALL]
      FILE_PATH = ..\log
      PART_STOR = 0
      SWITCH_MODE = 0
      SWITCH_LIMIT = 0
      ASYNC_FLUSH = 0
      FILE_NUM = 0
      ITEMS = 0
      SQL_TRACE_MASK = 0
      MIN_EXEC_TIME = 0
      USER_MODE = 0
      USERS =

      3.1.2 複製配置文件

      1)dmrep.ini
      dmrep.ini 用於配置複製實例,具體內容請見“數據複製”章節,具體配置項請參考官方文檔。
      2)dmllog.ini
      dmllog.ini 用於配置邏輯日誌,具體內容請見“數據複製”章節,具體配置項請參考官方文檔。
      3)dmtimer.ini
      dmtimer.ini 用於配置定時器,用於數據守護中記錄異步備庫的定時器信息或數據複製中記錄異步複製的定時器信息, 具體配置項請參考官方文檔。

      3.2 控制文件

      每個 DM 數據庫都有一個名爲 dm.ctl 的控制文件。控制文件是一個二進制文件,它記錄了數據庫必要的初始信息,其中主要包含以下內容:

  3. 數據庫名稱;
  4. 數據庫服務器模式;
  5. OGUID 唯一標識;
  6. 數據庫服務器版本;
  7. 數據文件版本;
  8. 數據庫的啓動次數;
  9. 數據庫最近一次啓動時間;
  10. 表空間信息,包括表空間名,表空間物理文件路徑等,記錄了所有數據庫中使用的表空間,數組的方式保存起來;
  11. 控制文件校驗碼,校驗碼由數據庫服務器在每次修改控制文件後計算生成,保證控制文件合法性,防止文件損壞及手工修改。
    在服務器運行期間,執行表空間的 DDL 等操作後,服務器內部需要同步修改控制文件內容。如果在修改過程中服務器故障,可能會導致控制文件損壞,爲了避免出現這種情況,在修改控制文件時系統內部會執行備份操作。備份策略如下:
     策略一 在修改 dm.ctl 之前,先執行一次備份,確定 dm.ctl 修改成功後,再將備份刪除,如果 dm.ctl 修改失敗或中途出現故障,則保留備份文件。
     策略二 在修改 dm.ctl 成功之後,根據 dm.ini 中指定的CTL_BAK_PATH/CTL_BAK_NUM 對最新的 dm.ctl 執行備份,如果用戶指定的CTL_BAK_PATH 是非法路徑,則不再生成備份文件,在路徑有效的情況下,生成備份文件時根據指定的 CTL_BAK_NUM 判斷是否刪除老的備份文件。
    注意:
     如果 dm.ctl 文件存放在裸設備上,則【策略一】不會生效。
     如果指定的 CTL_BAK_PATH 是無效路徑,則【策略二】也不會生效。
     如果【策略一】和【策略二】的條件都滿足,則都會生效執行,否則只執行滿足條件的備份策略,如果都不滿足,則不會再生成備份文件。
     如果是初始化新庫,在初始化完成後,會在“SYSTEM_PATH/CTL_BAK”路徑下對原始的 dm.ctl 執行一次備份。
    [root@dm3 TEST]# cat dm.ini |grep CTL_BAK_PATH
    CTL_BAK_PATH = /usr/appsoft/dmdbms/data/TEST/ctl_bak #dm.ctl backup path
    [root@dm3 TEST]# cat dm.ini |grep CTL_BAK_NUM
    CTL_BAK_NUM = 10 #backup number of dm.ctl, allowed to keep one more backup file besides specified number.
    [root@dm3 TEST]#

    3.3 數據文件

    數據文件以 dbf 爲擴展名,它是數據庫中最重要的文件類型,一個 DM 數據文件對應磁盤上的一個物理文件,數據文件是真實數據存儲的地方,每個數據庫至少有一個與之相關的數據文件。在實際應用中,通常有多個數據文件。
    當 DM 的數據文件空間用完時,它可以自動擴展。可以在創建數據文件時通過 MAXSIZE參數限制其擴展量,當然,也可以不限制。但是,數據文件的大小最終會受物理磁盤大小的限制。在實際使用中,一般不建議使用單個巨大的數據文件,爲一個表空間創建多個較小的數據文件是更好的選擇。
    數據文件在物理上按照頁、簇和段的方式進行管理,詳細結構請參考第一章的內容。
    數據文件按數據組織形式,可以分爲如下幾種:
    1. B樹數據
    行存儲數據,也是應用最廣泛的存儲形式,其數據是按 B 樹索引組織的。普通表、分區表、B 樹索引的物理存儲格式都是 B 樹。
    一個 B 樹包含兩個段,一個內節點段,存放內節點數據;一個葉子段,存放葉子節點數據。其 B 樹的邏輯關係由段內頁面上的記錄,通過文件指針來完成。
    當表上沒有指定聚簇索引時,系統會自動產生一個唯一標識 rowid 作爲 B 樹的 key 來唯一標識一行。
    2. 堆表數據
    堆表的數據是以掛鍊形式存儲的,一般情況下,支持最多 128 個鏈表,一個鏈表在物理上就是一個段,堆表採用的是物理 rowid,在插入過程中,rowid 在事先已確定,並保證其唯一性,所以可以併發插入,插入效率很高,且由於 rowid 是即時生成,無需保存在物理磁盤上,也節省了空間。
    3. 列存儲數據
    數據按列方式組織存儲,每個列包含 2 個段,一個段存放列數據,一個段存放列的控制信息,讀取列數據時,只需要順序掃描這兩個段。在某些特殊應用場景下,其效率要遠遠高於行存儲。
    4. 位圖索引
    位圖索引與 B 樹索引不同,每個索引條目不是指向一行數據,而是指向多行數據。每個索引項保存的是一定範圍內所有行與當前索引鍵值映射關係的位圖。
    數據文件中還有兩類特殊的數據文件:ROLL 和 TEMP 文件。
    1). ROLL文件
    ROLL 表空間的 dbf 文件,稱爲 ROLL 文件。ROLL 文件用於保存系統的回滾記錄,提供事務回滾時的信息。回滾文件整個是一個段。每個事務的回滾頁在回滾段中各自掛鏈,頁內則順序存放回滾記錄。
    2). TEMP 文件
    TEMP.DBF 臨時數據文件,臨時文件可以在 dm.ini 中通過 TEMP_SIZE 配置大小。
    當數據庫查詢的臨時結果集過大,緩存已經不夠用時,臨時結果集就可以保存在TEMP.DBF 文件中,供後續運算使用。系統中用戶創建的臨時表也存儲在臨時文件中。

    3.4 重做日誌文件

    重做日誌,又叫 REDO 日誌,指在 DM 數據庫中添加、刪除、修改對象,或者改變數據,DM 都會按照特定的格式,將這些操作執行的結果寫入到當前的重做日誌文件中。重做日誌文件以 log 爲擴展名。每個 DM 數據庫實例必須至少有 2 個重做日誌文件,默認兩個日誌文件爲 DAMENG01.log、DAMENG02.log,這兩個文件循環使用。
    重做日誌文件主要用於數據庫的備份與恢復。理想情況下,數據庫系統不會用到重做日誌文件中的信息。然而現實世界總是充滿了各種意外,比如電源故障、系統故障、介質故障,或者數據庫實例進程被強制終止等,數據庫緩衝區中的數據頁會來不及寫入數據文件。這樣,在重啓 DM 實例時,通過重做日誌文件中的信息,就可以將數據庫的狀態恢復到發生意外時的狀態。
    重做日誌文件對於數據庫是至關重要的。它們用於存儲數據庫的事務日誌,以便系統在出現系統故障和介質故障時能夠進行故障恢復。在 DM 數據庫運行過程中,任何修改數據庫的操作都會產生重做日誌,例如,當一條元組插入到一個表中的時候,插入的結果寫入了重做日誌,當刪除一條元組時,刪除該元組的事實也被寫了進去,這樣,當系統出現故障時,通過分析日誌可以知道在故障發生前系統做了哪些動作,並可以重做這些動作使系統恢復到故障之前的狀態。

    3.5 歸檔日誌文件

    日誌文件分爲聯機日誌文件和歸檔日誌文件。DM 數據庫可以在歸檔模式和非歸檔模式下運行。只有當數據庫處於歸檔模式下,纔將聯機日誌文件中的內容保存到硬盤中,形成歸檔日誌文件。
    重做日誌文件就是聯機日誌文件。聯機日誌文件指的是系統當前正在使用的日誌文件,創建數據庫時,聯機日誌文件通常被擴展至一定長度,其內容則被初始化爲空,當系統運行時,該文件逐漸被產生的日誌所填充。對日誌文件的寫入是順序連續的。然而系統磁盤空間總是有限,系統必須能夠循環利用日誌文件的空間,爲了做到這一點,當所有日誌文件空間被佔滿時,系統需要清空一部分日誌以便重用日誌文件的空間,爲了保證被清空的日誌所保護”的數據在磁盤上是安全的,這裏需要引入一個關鍵的數據庫概念——檢查點。當產生檢查點時,系統將系統緩衝區中的日誌和髒數據頁都寫入磁盤,以保證當前日誌所“保護”的數據頁都已安全寫入磁盤,這樣日誌文件即可被安全重用。
    歸檔日誌文件,就是在歸檔模式下,重做聯機日誌被連續拷貝到歸檔日誌後,所生成了歸檔日誌文件。歸檔日誌文件以歸檔時間命名,擴展名也是 log。但只有在歸檔模式下運行時,DM 數據庫在重做聯機日誌文件時才能生成歸檔日誌文件。
    採用歸檔模式會對系統的性能產生影響,然而系統在歸檔模式下運行會更安全,當出現故障時其丟失數據的可能性更小,這是因爲一旦出現介質故障,如磁盤損壞時,利用歸檔日誌,系統可被恢復至故障發生的前一刻,也可以還原到指定的時間點,而如果沒有歸檔日誌文件,則只能利用備份進行恢復。
    歸檔日誌還是數據守護功能的核心,數據守護中的備庫就是通過重做日誌來完成與主庫的數據同步的。

    3.6 邏輯日誌文件

    如果在 DM 數據庫上配置了複製功能,複製源就會產生邏輯日誌文件。邏輯日誌文件是一個流式的文件,它有自己的格式,且不在第一章所述的頁,簇和段的管理之下。
    邏輯日誌文件內部存儲按照複製記錄的格式,一條記錄緊接着一條記錄,存儲着複製源端的各種邏輯操作。用於發送給複製目的端。詳細內容請看“數據複製”章節。

    3.7 備份文件

    備份文件以 bak 爲擴展名,當系統正常運行時,備份文件不會起任何作用,它也不是數據庫必須有的聯機文件類型之一。然而,從來沒有哪個數據庫系統能夠保證永遠正確無誤地運行,當數據庫不幸出現故障時,備份文件就顯得尤爲重要了。
    當客戶利用管理工具或直接發出備份的 SQL 命令時,DM Server 會自動進行備份,併產生一個或多個備份文件,備份文件自身包含了備份的名稱、對應的數據庫、備份類型和備份時間等信息。同時,系統還會自動記錄備份信息及該備份文件所處的位置,但這種記錄是鬆散的,用戶可根據需要將其拷貝至任何地方,並不會影響系統的運行。

    3.8 跟蹤日誌文件

    用戶在dm.ini中配置SVR_LOG和SVR_LOG_SWITCH_COUNT參數後就會打開跟蹤日誌。跟蹤日誌文件是一個純文本文件,以“dm_commit_日期_時間”命名,默認生成在 DM安裝目錄的 log 子目錄下面,管理員可通過 ini 參數 SVR_LOG_FILE_PATH 設置其生成路徑。
    跟蹤日誌內容包含系統各會話執行的 SQL 語句、參數信息、錯誤信息等。跟蹤日誌主要用於分析錯誤和分析性能問題,基於跟蹤日誌可以對系統運行狀態有一個分析,比如,可以挑出系統現在執行速度較慢的 SQL 語句,進而對其進行優化。
    系統中 SQL 日誌的緩存是分塊循環使用,管理員可根據系統執行的語句情況及壓力情況設置恰當的日誌緩存塊大小及預留的緩衝塊個數。當預留塊不足以記錄系統產生的任務時,系 統 會 分 配 新 的 用 後 即 棄 的 緩 存 塊 , 但 是 總 的 空 間 大 小 由 ini 參 數SVR_LOG_BUF_TOTAL_SIZE 控制,管理員可根據實際情況進行設置。
    打開跟蹤日誌會對系統的性能會有較大影響,一般用於查錯和調優的時候纔會打開,默認情況下系統是關閉跟蹤日誌的。若需要跟蹤日誌但對日誌的實時性沒有嚴格的要求,又希望系統有較高的效率,可以設置參數SQL_TRACE_MASK和SVR_LOG_MIN_EXEC_TIME 只記錄關注的相關記錄,減少日誌總量;設置參數 SVR_LOG_ASYNC_FLUSH 打開 SQL 日誌異步刷盤提高系統性能。

    3.9 事件日誌文件

    DM 數據庫系統在運行過程中,會在 log 子目錄下產生一個“dm_實例名_日期”命名的事件日誌文件。事件日誌文件對 DM 數據庫運行時的關鍵事件進行記錄,如系統啓動、關閉、內存申請失敗、IO 錯誤等一些致命錯誤。事件日誌文件主要用於系統出現嚴重錯誤時進行查看並定位問題。事件日誌文件隨着 DM 數據庫服務的運行一直存在。
    事件日誌文件打印的是中間步驟的信息,所以出現部分缺失屬於正常現象。

    3.10 數據重演文件

    調用系統存儲過程 SP_START_CAPTURE 和 SP_STOP_CAPTURE,可以獲得數據重演文件。重演文件用於數據重演,存儲了從抓取開始到抓取結束時,DM 數據庫與客戶端的通信消息。使用數據重演文件,可以多次重複抓取這段時間內的數據庫操作,爲系統調試和性能調優提供了另一種分析手段。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章