天天看點

淺談DM達夢資料庫體系結構概念

淺談DM達夢資料庫體系結構概念

  1. DM邏輯結構

    DM和Oracle一樣也分資料庫和執行個體,兩者的概念也基本一緻。

    但是不同點在于:達夢是單程序、多線程,而oracle是多程序的。

    DM這種對稱伺服器構架在有效地利用了系統資源的同時又提供了較高的可伸縮性能,這裡所指的線程即為作業系統的線程。

    一般是一個資料庫對應一個執行個體,但是DSC(DM共享叢集)多個執行個體對一個資料庫。

    DM8 邏輯存儲結構如下:

    1>資料庫由一個或多個表空間組成;

    2>每個表空間由一個或多個資料檔案組成;

    3>每個資料檔案由一個或多個簇組成;

    4>段是簇的上級邏輯單元,一個段可以跨多個資料檔案;

    5>簇由磁盤上連續的頁組成,一個簇總是在一個資料檔案中;

    6>頁是資料庫中最小的配置設定單元,也是資料庫中使用的最小的 IO 單元。

  2. DM實體存儲結構

    DM 資料庫使用了磁盤上大量的實體存儲結構來儲存和管理使用者資料。

    典型的實體存儲結構包括:用于進行功能設定的配置檔案;用于記錄檔案分布的控制檔案;用于儲存使用者實際資料的資料檔案、重做日志檔案、歸檔日志檔案、備份檔案;用來進行問題跟蹤的跟蹤日志檔案等。

    2.1配置檔案

    配置檔案是 DM 資料庫用來設定功能選項的一些文本檔案的集合,配置檔案以 ini 為擴充名,如dm.ini, dmarch.ini。

    2.2控制檔案

    每個 DM 資料庫都有一個名為 dm.ctl 的控制檔案。控制檔案是一個二進制檔案,它記錄了資料庫必要的初始資訊。

    2.3資料檔案

    資料檔案以 dbf 為擴充名,它是資料庫中最重要的檔案類型,一個 DM 資料檔案對應磁 盤上的一個實體檔案,資料檔案是真實資料存儲的地方,每個資料庫至少有一個與之相關的資料檔案。在實際應用中,通常有多個資料檔案。

    2.4重做日志檔案

    重做日志檔案又叫redo日志。主要用于資料庫的備份和恢複。

    2.5歸檔日志檔案

    利用歸檔日志,系統可被恢複至故障發生的前一刻,也可以還原到指定的時間點,如果沒有歸檔日志檔案,則隻能利用備份進行恢複。

    2.6邏輯日志檔案

    如果在DM資料庫上配置了複制功能,複制源就會産生邏輯日志檔案。

    2.7實體邏輯日志檔案

    實體邏輯日志,是按照特定的格式存儲的伺服器的邏輯操作,專門用于 DBMS_LOGMNR

    包挖掘擷取資料庫系統的曆史執行語句。當開啟記錄實體邏輯日志的功能時,這部分日志内

    容會被存儲在重做日志檔案中。

    2.8備份檔案

    備份檔案以 bak 為擴充名。

    2.9日志檔案(跟蹤日志,事件日志)

    使用者在 dm.ini 中配置 SVR_LOG 和 SVR_LOG_SWITCH_COUNT 參數後就會打開跟蹤日志。

    DM 資料庫系統在運作過程中,會在 log 子目錄下産生一個“dm_執行個體名_日期”命名的 事件日志檔案。事件日志檔案對 DM 資料庫運作時的關鍵事件進行記錄,如系統啟動、關閉、記憶體申請失敗、IO錯誤等一些緻命錯誤。

    2.10資料重演檔案

    重演檔案用于資料重演,存儲了從抓取開始到抓取結束時,DM 資料庫與用戶端的通信消息。

  3. DM記憶體結構

    DM 資料庫管理系統的記憶體結構主要包括記憶體池、緩沖區、排序區、哈希區等。根據系統中子子產品的不同功能,對記憶體進行了上述劃分,并采用了不同的管理模式。

    3.1記憶體池

    DM Server 的記憶體池包括共享記憶體池和其他一些運作時記憶體池。

    3.1.1共享記憶體池是 DM Server 在啟動時從作業系統申請的一大片記憶體。在 DM Server 的

    運作期間,經常會申請與釋放小片記憶體,而向作業系統申請和釋放記憶體時需要發出系統調用,

    此時可能會引起線程切換,降低系統運作效率。采用共享記憶體池則可一次向作業系統申請一

    片較大記憶體,即為記憶體池,當系統在運作過程中需要申請記憶體時,可在共享記憶體池内進行申

    請,當用完該記憶體時,再釋放掉,即歸還給共享記憶體池。

    3.1.2 運作時記憶體池

    除了共享記憶體池,DM Server 的一些功能子產品在運作時還會使用自己的運作時記憶體池。

    這些運作時記憶體池是從作業系統申請一片記憶體作為本功能子產品的記憶體池來使用,如會話記憶體

    池、虛拟機記憶體池等。

    3.2緩沖區

    3.2.1資料緩沖區

    資料緩沖區是 DM Server 在将資料頁寫入磁盤之前以及從磁盤上讀取資料頁之後,資料頁所存儲的地方。這是 DM Server 至關重要的記憶體區域之一,将其設定得太小,會導緻緩沖頁命中率低,磁盤 IO 頻繁;将其設定得太大,又會導緻作業系統記憶體本身不夠用。

    3.2.2日志緩沖區

    日志緩沖區是用于存放重做日志的記憶體緩沖區。為了避免由于直接的磁盤 IO 而使系統

    性能受到影響,系統在運作過程中産生的日志并不會立即被寫入磁盤,而是和資料頁一樣,

    先将其放置到日志緩沖區中。

    3.2.3字典緩沖區

    字典緩沖區主要存儲一些資料字典資訊,如模式資訊、表資訊、列資訊、觸發器資訊等。

    3.2.4SQL緩沖區

    SQL 緩沖區提供在執行 SQL 語句過程中所需要的記憶體,包括計劃、SQL 語句和結果集緩存。

    很多應用當中都存在反複執行相同 SQL 語句的情況,此時可以使用緩沖區儲存這些語句和它們的執行計劃,這就是計劃重用。這樣帶來的好處是加快了 SQL 語句執行效率,但同時給記憶體也增加了壓力。

    3.3排序區

    排序緩沖區提供資料排序所需要的記憶體空間。當使用者執行 SQL 語句時,常常需要進行排序,所使用的記憶體就是排序緩沖區提供的。在每次排序過程中,都首先申請記憶體,排序結束後再釋放記憶體。

    3.4哈希區

    DM8 提供了為哈希連接配接而設定的緩沖區,不過該緩沖區是個虛拟緩沖區。之是以說是虛拟緩沖,是因為系統沒有真正建立特定屬于哈希緩沖區的記憶體,而是在進行哈希連接配接時,對排序的資料量進行了計算。如果計算出的資料量大小超過了哈希緩沖區的大小,則使用 DM8創新的外存哈希方式;如果沒有超過哈希緩沖區的大小,實際上還是使用記憶體池來進行哈希操作。

  4. DM管理線程

    DM 伺服器使用“對稱伺服器構架”的單程序、多線程結構。對稱伺服器構架在有效地利用了系統資源的同時又提供了較高的可伸縮性能,伺服器在運作時由各種記憶體資料結構和一系列的線程組成,線程分為多種類型,不同類型的線程完成不同的任務。線程通過一定的同步機制對資料結構進行并發通路和處理,以完成客戶送出的各種任務。DM 資料庫伺服器是共享的伺服器,允許多個使用者連接配接到同一個伺服器上,伺服器程序稱為共享伺服器程序。

    DM程序中主要包括監聽線程、IO線程、工作線程、排程線程、日志線程。

    4.1監聽線程

    監聽線程主要的任務是在伺服器端口上進行循環監聽,一旦有來自客戶的連接配接請求,監聽線程被喚醒并生成一個會話申請任務,加入工作線程的任務隊列,等待工作線程進行處理。它在系統啟動完成後才啟動,并且在系統關閉時首先被關閉。為了保證在處理大量客戶連接配接時系統具有較短的響應時間,監聽線程比普通線程優先級更高。

    4.2工作線程

    工作線程是 DM 伺服器的核心線程,它從任務隊列中取出任務,并根據任務的類型進行相應的處理,負責所有實際的資料相關操作。

    4.3IO線程

    在資料庫活動中,IO 操作曆來都是最為耗時的操作之一。當事務需要的資料頁不在緩沖區中時,如果在工作線程中直接對那些資料頁進行讀寫,将會使系統性能變得非常糟糕,而把 IO 操作從工作線程中分離出來則是明智的做法。

    需要進行IO操作的時機主要有三種:

    (1)需要處理的資料頁不在緩沖區中,此時需要将相關資料頁讀入緩沖區;

    (2)緩沖區滿或系統關閉時,此時需要将部分髒資料頁寫入磁盤;

    (3)檢查點到來時,需要将所有髒資料頁寫入磁盤。

    4.4排程線程

    排程線程用于接管系統中所有需要定時排程的任務。排程線程每秒鐘輪詢一次,負責的任務有以下一些:

    (1)檢查系統級的時間觸發器,如果滿足觸發條件則生成任務加到工作線程的任務隊列由工作線程執行;

    (2)清理 SQL 緩存、計劃緩存中失效的項,或者超出緩存限制後淘汰不常用的緩存項;

    (3)檢查資料重演捕獲持續時間是否到期,到期則自動停止捕獲;

    (4)執行動态緩沖區檢查。根據需要動态擴充或動态收縮系統緩沖池

    (5)自動執行檢查點。為了保證日志的及時刷盤,減少系統故障時恢複時間,根據 INI參數設定的自動檢查點執行間隔定期執行檢查點操作;

    (6)會話逾時檢測。當客戶連接配接設定了連接配接逾時時,定期檢測是否逾時,如果逾時則自動斷開連接配接;

    4.5日志FLUSH線程

    任何資料庫的修改,都會産生重做 REDO 日志,為了保證資料故障恢複的一緻性,REDO日志的刷盤必須在資料頁刷盤之前進行。事務運作時,會把生成的 REDO 日志保留在日志緩沖區中,當事務送出或者執行檢查點時,會通知 FLUSH 線程進行日志刷盤。由于日志具備順序寫入的特點,比資料頁分散 IO 寫入效率更高。日志 FLUSH 線程和 IO 線程分開,能獲得更快的響應速度,保證整體的性能。

    如果系統配置了實時歸檔,在 FLUSH 線程日志刷盤前,會直接将日志通過網絡發送到實時備庫。

    如果配置了本地歸檔,則生成歸檔任務,通過日志歸檔線程完成。

    4.6日志歸檔線程

    日志歸檔線程包含異步歸檔線程,負責遠端異步歸檔任務。如果配置了非實時歸檔,由日志 FLUSH 線程産生的任務會分别加入日志歸檔線程,日志歸檔線程負責從任務隊列中取出任務,按照歸檔類型做相應歸檔處理。

    将日志 FLUSH 線程和日志歸檔線程分開的目的是為了減少不必要的效率損失,除了遠端實時歸檔外,本地歸檔、遠端異步歸檔都可以脫離 FLUSH 線程來做,如果放在 FLUSH 線程中一起做會嚴重影響系統性能。

    4.7日志APPLY線程

    在配置了資料守護的系統中,建立了一個日志 APPLY 線程。當伺服器作為備庫時,每次接收到主庫的實體 REDO 日志生成一個 APPLY 任務加入到任務隊列,APPLY 線程從任務隊列中取出一個任務在備庫上将日志重做,并生成自己的日志,保持和主庫資料的同步或一緻,作為主庫的一個鏡像。備庫資料對使用者隻讀,可承擔報表、查詢等任務,均衡主庫的負載。

    4.8定時器線程

    在資料庫的各種活動中,使用者常常需要資料庫完成在某個時間點開始進行某種操作,如備份;或者是在某個時間段内反複進行某種操作等。定時器線程就是為這種需求而設計的。通常情況下,DM Server 需要進行定時操作的事件主要有以下幾種:

    邏輯日志異步歸檔;

    異步歸檔日志發送(隻有在 PRIMARY 模式下,且是 OPEN 狀态下);

    作業排程。

    4.9邏輯日志歸檔線程

    邏輯日志歸檔用于 DM7 的資料複制中,目的是為了加快異地通路的響應速度,包含本地邏輯日志歸檔線程和遠端邏輯日志歸檔線程。當配置了資料複制,系統才會建立這兩個線程。

    本地邏輯日志歸檔線程:

    本地歸檔線程從本地歸檔任務清單中取出一個歸檔任務,生成到邏輯日志,并将邏輯日志寫入到邏輯日志檔案中。如果目前邏輯日志的遠端歸檔類型是同步異地歸檔并且目前的刷盤機制是強制刷盤,那麼就生成一個異地歸檔任務加入到臨時清單中。

    遠端邏輯日志歸檔線程:

    遠端歸檔線程從遠端歸檔任務清單中取出一個歸檔任務,并根據任務的類型進行相應的處理。任務的類型包括同步發送和異步發送。

    4.10MAL系統相關線程

    MAL 系統是 DM 内部高速通信系統,基于 TCP/IP 協定實作。伺服器的很多重要功能都是通過 MAL 系統實作通信的,例如資料守護、資料複制、MPP、遠端日志歸檔等。MAL 系統内部包含一系列線程,有 MAL 監聽線程、MAL 發送工作線程、MAL 接收工作線程等。

    DM線程相關的動态視圖

淺談DM達夢資料庫體系結構概念