達夢資料庫 記憶體體系結構

2021-10-23 21:34:48 字數 3392 閱讀 3421

達夢資料庫-執行緒體系介紹

達夢資料庫體內存繫結構下圖示:

資料庫管理系統是一種對記憶體申請和釋放操作頻率很高的軟體,如果每次對記憶體的使用都使用作業系統函式來申請和釋放,效率會比較低,加入自己的記憶體管理是dbms所必需的。通常記憶體管理系統會帶來以下好處。

(1)申請、釋放記憶體效率更高。

(2)能夠有效地了解記憶體的使用情況。

(3)易於發現記憶體洩露和記憶體寫越界的問題。

達夢資料庫管理系統的記憶體結構主要包括記憶體池、緩衝區、排序區、雜湊區等。根據系統中子模組的不同功能,對記憶體進行了上述劃分,並採用了不同的管理模式。

記憶體池

dm server的記憶體池指的是共享記憶體池,根據記憶體使用情況的不同,對共享記憶體池的使用採用了兩種工作方式:heap和vpool。共享記憶體池用於解決dm server對於小片記憶體的申請與釋放問題。系統在執行過程中,經常會申請與釋放小片記憶體,而向作業系統申請和釋放記憶體時需要發出系統呼叫,此時可能會引起執行緒切換,降低系統執行效率。採用共享記憶體池可一次向作業系統申請一片較大記憶體,即為記憶體池,當系統在執行過程中需要申請記憶體時,在共享記憶體池內進行申請,當用完該記憶體後再釋放,即歸還給共享記憶體池。當系統採用較好的策略管理共享記憶體池時,小片記憶體的申請與釋放不會對系統影響太大。這種方式還有乙個優點,可以比較容易地檢測系統是否存在記憶體洩漏。dm系統管理員可以通過dm server的配置檔案(dm.ini)來對共享記憶體池的大小進行設定,共享池的引數為memory_pool,該配置預設為40mb。而heap與vpool使用的是共享記憶體池中的記憶體,所以一般情況下,heap與vpool兩種方式對記憶體申請的大小不會超過memory_pool值。

(1)heap:heap工作方式採用了堆的思想。每次申請記憶體時,都是從堆頂上申請的,如果不夠,則繼續向共享記憶體池中申請記憶體頁,然後加入到heap中,繼續供系統的申請使用,這樣heap的長度可以無限增長下去;釋放heap時,可以釋放堆頂上的記憶體頁,也可以釋放整個heap。使用記憶體堆來管理小片記憶體的申請有乙個特點,每次申請小片記憶體以後,不能單獨對這片記憶體進行釋放,也就是不用關心這片記憶體何時釋放,它在堆釋放時統一釋放,能有效防止記憶體洩露的發生。

(2)vpool:vpool的工作方式主要採用了「夥伴系統」的思想進行管理。申請的vpool記憶體分為私有和公有兩種。私有vpool只提供給某個單獨功能模組使用,公有vpool則提供給那些需要共享同一資源而申請的模組,所以對公有vpool需要進行保護,而私有vpool則不需要。vpool和heap的區別在於,vpool申請出去的每片記憶體都可以單獨地進行釋放。

緩衝區

日誌緩衝區是用於存放重做日誌的記憶體緩衝區。為了避免由於直接的磁碟io而使系統效能受到影響,系統在執行過程中產生的日誌並不會立即被寫入磁碟,而是和資料頁一樣,先將其放置到日誌緩衝區中。那麼為何不在資料緩衝區中快取重做日誌而要單獨設立日誌緩衝區呢?其主要基於以下原因。

重做日誌的格式同資料頁完全不一樣,無法進行統一管理;

重做日誌具備連續寫的特點;

在邏輯上,寫重做日誌比資料頁io優先順序更高。

dm server提供了引數log_buf_size對日誌緩衝區大小進行控制,日誌緩衝區所占用的記憶體是從共享記憶體池中申請的,單位為頁數量,且大小必須為2的n次方,否則採用系統預設大小256頁。

(3)字典緩衝區:

字典緩衝區主要儲存一些資料字典資訊,如模式資訊、表資訊、列資訊、觸發器資訊等。每次對資料庫的操作都會涉及資料字典資訊,訪問資料字典資訊的效率直接影響到相應的操作效率,如進行查詢語句,就需要相應的表資訊、列資訊等,這些字典資訊如果都在緩衝區裡,則直接從緩衝區中獲取即可,否則需要i/o才能讀取到這些資訊。dm 7採用的是將部分資料字典資訊載入到緩衝區中,並採用lru演算法進行字典資訊的控制。緩衝區大小,如果設定的太大,會浪費寶貴的記憶體空間;如果太小,可能會頻繁地進行淘汰,該緩衝區配置引數為dict_buf_size,預設的配置大小為5mb。dm 7採用緩衝部分字典物件,這會影響效率嗎?資料字典資訊訪問存在熱點現象,並不是所有的字典資訊都會被頻繁的訪問,所以按需載入字典資訊並不會影響到實際的執行效率。但是如果在實際應用中涉及對分割槽數較多的水平分割槽表訪問,如上千個分割槽,那麼就需要適當調大dict_buf_size引數值。

(4)sql緩衝區:

sql緩衝區提供在執行sql語句過程中所需要的記憶體,包括計畫、sql語句和結果集快取。很多應用當中都存在反覆執行相同sql語句的情況,此時可以使用緩衝區儲存這些語句和它們的執行計畫,這就是計畫重用。這樣帶來的好處是加快了sql語句執行效率,但同時給記憶體增加了壓力。dm server在配置檔案dm.ini中提供了引數來支援是否需要計畫重用,引數為use_pln_pool,當指定為1時,啟動計畫重用;否則禁止計畫重用。dm還提供了引數cache_pool_size(單位為 mb)來改變sql緩衝區大小,系統管理員可以設定該值以滿足應用需求,預設值為10mb。

(5)排序區

排序區提供資料排序所需要的記憶體緩衝空間。當使用者執行sql語句時,常常需要進行排序,所使用的記憶體就是排序緩衝區提供的。在每次排序過程中,都先申請記憶體,排序結束後再釋放記憶體。dm server提供了引數來指定排序緩衝區的大小,引數sort_buf_size在dm配置檔案dm.ini中,系統管理員可以設定其大小以滿足需求,由於該值是由系統內部排序演算法和排序資料結構決定的,建議使用預設值2mb。

(6)雜湊區

dm 7提供了為雜湊連線而設定的緩衝區,不過該緩衝區是虛擬緩衝區。之所以說是虛擬緩衝,是因為系統沒有真正建立特定屬於雜湊緩衝區的記憶體,而在進行雜湊連線時,對排序的資料量進行了計算。如果計算出的資料量大小超過了雜湊緩衝區的大小,則使用dm 7創新外存雜湊方式;如果沒有超過雜湊緩衝區的大小,實際上使用的還是vpool記憶體池進行的雜湊操作。dm server在dm.ini中提供了引數hj_buf_size來進行控制,由於該值的大小可能會限制雜湊連線的效率,所以建議保持預設值,或設定為更大的值。

除了提供hj_buf_size引數外,dm server還提供了建立雜湊表個數的初始化引數,其中,hagr_hash_size表示處理聚集函式時建立雜湊表的個數,建議保持預設值100000。

(7)ssd緩衝區

固態硬碟採用快閃儲存器作為儲存介質,因沒有機械磁頭的尋道時間,在讀寫效率上比機械磁碟具有優勢。在記憶體、ssd磁碟、機械磁碟之間,符合儲存分級的條件。為提高系統執行效率,dm server將ssd檔案作為記憶體快取與普通磁碟之間的緩衝層,稱為「ssd快取」。dm server在dm.ini中提供引數ssd_buf_size和ssd_file_path來配置ssd緩衝,ssd_buf_size指定緩衝區的大小,單位是mb,dm server根據該引數建立相應大小的檔案作為緩衝區使用;ssd_file_path指定該檔案所在的資料夾路徑,管理員需要保證設定的路徑是位於固態磁碟上的。

達夢資料庫體系結構

dm7資料庫是由資料庫和例項構成。dm 資料庫指的是磁碟上存放在dm 資料庫中的資料的集合 資料庫檔案 存放使用者的資料sql select path from v datafile 重做日誌檔案 存放使用者改變的資料,方便做還原sql select path from v rlogfile sql...

資料庫 Oracle體系結構

oracle就資料庫本身而言,大致上可以分為兩個主要部分 1.oracle例項 oracle instance是指資料庫伺服器的記憶體及相關處理程式。2.oracle資料庫檔案 資料庫檔案則由作業系統內的各種檔案組成。oracle instance主要由系統全域性區和後台處理程式組成。全域性區包括1...

Oracle資料庫 體系結構

一 涉及內容 1.了解資料庫的物理儲存結構和邏輯儲存結構 二 具體操作 1.分別使用sql 命令和oem 圖形化工具檢視本地資料庫的物理檔案,並使用oem 工具在現有的users 表空間中新增user02.dbf 資料檔案。要求檢視的物理檔案包括 資料檔案 日誌組 控制檔案。1 使用sql 命令檢視...