達夢資料庫基礎知識(四)管理DM執行緒

winderen111發表於2021-10-26

達夢資料庫使用“對稱伺服器構架”的單程式、多執行緒結構。這種對稱伺服器構架在有效地利用了系統資源的同時又提供了較高的可伸縮效能,這裡所指的執行緒即為作業系統的執行緒。伺服器在執行時由各種記憶體資料結構和一系列的執行緒組成,執行緒分為多種型別,不同型別的執行緒完成不同的任務。執行緒透過一定的同步機制對資料結構進行併發訪問和處理,以完成客戶提交的各種任務。DM資料庫伺服器是共享的伺服器,允許多個使用者連線到同一個伺服器上,伺服器程式稱為共享伺服器程式。

達夢資料庫中主要包括監聽執行緒、IO執行緒、工作執行緒、排程執行緒、日誌執行緒等,以下分別對它們進行介紹。

1、監聽執行緒

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

達夢資料庫所有配置埠的範圍為1024-65534。當客戶端工具發起連線時,由作業系統為客戶端工具自動分配一個埠用於與達夢資料庫進行通訊。對於資料守護、DMDSC、MPP和DMTDD等分散式資料庫中各例項節點之間的通訊,發起連線的節點也由作業系統自動分配埠,所以配置主備/DSC/MPP/TDD時,除了各例項指定的埠外,發起連線的例項也會有作業系統自動分配的用於和其他例項進行通訊的埠。

2、工作執行緒

工作執行緒是DM 伺服器的核心執行緒,它從任務佇列中取出任務,並根據任務的型別進行相應的處理,負責所有實際的資料相關操作。

DM8的初始工作執行緒個數由配置檔案指定,隨著會話連線的增加,工作執行緒也會同步增加,以保持每個會話都有專門的工作執行緒處理請求。為了保證使用者所有請求及時響應,一個會話上的任務全部由同一個工作執行緒完成,這樣減少了執行緒切換的代價,提高了系統效率。當會話連線超過預設的閥值時,工作執行緒數目不再增加,轉而由會話輪詢執行緒接收所有使用者請求,加入任務佇列,等待工作執行緒一旦空閒,從任務佇列依次摘取請求任務處理。

3、IO執行緒

在資料庫活動中,IO操作歷來都是最為耗時的操作之一。當事務需要的資料頁不在緩衝區中時,如果在工作執行緒中直接對那些資料頁進行讀寫,將會使系統效能變得非常糟糕,而把IO操作從工作執行緒中分離出來則是明智的做法。IO執行緒的職責就是處理這些IO操作。

通常情況下,DM Server需要進行IO操作的時機主要有以下三種:

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

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

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

IO執行緒在啟動後,通常都處於睡眠狀態,當系統需要進行IO時,只需要發出一個IO請求,此時IO執行緒被喚醒以處理該請求,在完成該IO操作後繼續進入睡眠狀態。

IO執行緒的個數是可配置的,可以透過設定dm.ini檔案中的IO_THR_GROUPS引數來設定,預設情況下,IO執行緒的個數是8個。同時,IO執行緒處理IO的策略根據作業系統平臺的不同會有很大差別,一般情況下,IO執行緒使用非同步的IO將資料頁寫入磁碟,此時,系統將所有的IO請求直接遞交給作業系統,作業系統在完成這些請求後才通知IO執行緒,這種非同步IO的方式使得IO執行緒需要直接處理的任務很簡單,即完成IO後的一些收尾處理併發出IO完成通知,如果作業系統不支援非同步IO,此時IO執行緒就需要完成實際的IO操作。

 

4、排程執行緒

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

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

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

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

(4)執行動態緩衝區檢查。根據需要動態擴充套件或動態收縮系統緩衝池;

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

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

(7)必要時執行資料更新頁刷盤;

(8)喚醒等待的工作執行緒。

 

5、日誌 FLUSH執行緒

任何資料庫的修改,都會產生重做REDO日誌,為了保證資料故障恢復的一致性,REDO日誌的刷盤必須在資料頁刷盤之前進行。事務執行時,會把生成的REDO日誌保留在日誌緩衝區中,當事務提交或者執行檢查點時,會通知FLUSH執行緒進行日誌刷盤。由於日誌具備順序寫入的特點,比資料頁分散IO寫入效率更高。日誌FLUSH執行緒和IO執行緒分開,能獲得更快的響應速度,保證整體的效能。DM8的日誌FLUSH執行緒進行了最佳化,在刷盤之前,對不同緩衝區內的日誌進行合併,減少了IO次數,進一步提高了效能。

如果系統配置了實時歸檔,在FLUSH執行緒日誌刷盤前,會直接將日誌透過網路傳送到實時備庫。如果配置了本地歸檔,則生成歸檔任務,透過日誌歸檔執行緒完成。

 

6、日誌歸檔執行緒

日誌歸檔執行緒包含非同步歸檔執行緒,負責遠端非同步歸檔任務。如果配置了非實時歸檔,由日誌FLUSH執行緒產生的任務會分別加入日誌歸檔執行緒,日誌歸檔執行緒負責從任務佇列中取出任務,按照歸檔型別做相應歸檔處理。

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

 

7、日誌 APPLY執行緒

在配置了資料守護的系統中,建立了一個日誌APPLY執行緒。當伺服器作為備庫時,每次接收到主庫的物理REDO日誌生成一個APPLY任務加入到任務佇列,APPLY執行緒從任務佇列中取出一個任務在備庫上將日誌重做,並生成自己的日誌,保持和主庫資料的同步或一致,作為主庫的一個映象。備庫資料對使用者只讀,可承擔報表、查詢等任務,均衡主庫的負載。

8、定時器執行緒

在資料庫的各種活動中,使用者常常需要資料庫完成在某個時間點開始進行某種操作,如備份;或者是在某個時間段內反覆進行某種操作等。定時器執行緒就是為這種需求而設計的。

通常情況下,DM Server需要進行定時操作的事件主要有以下幾種:

(1)邏輯日誌非同步歸檔;

(2)非同步歸檔日誌傳送(只有在PRIMARY模式下,且是OPEN狀態下);

(3)作業排程。

定時器執行緒啟動之後,每秒檢測一次定時器連結串列,檢視當前的定時器是否滿足觸發條件,如果滿足,則把執行權交給設定好的任務,如邏輯日誌非同步歸檔等。

預設情況下,達夢伺服器啟動的時候,定時器執行緒是不啟動的。使用者可以設定dm.ini中的TIMER_INI引數為1來設定定時器執行緒在系統啟動時啟動。

 

 

9、邏輯日誌歸檔執行緒

邏輯日誌歸檔用於DM8的資料複製中,目的是為了加快異地訪問的響應速度,包含本地邏輯日誌歸檔執行緒和遠端邏輯日誌歸檔執行緒。當配置了資料複製,系統才會建立這兩個執行緒。

(1)本地邏輯日誌歸檔執行緒

本地歸檔執行緒從本地歸檔任務列表中取出一個歸檔任務,生成到邏輯日誌,並將邏輯日誌寫入到邏輯日誌檔案中。如果當前邏輯日誌的遠端歸檔型別是同步異地歸檔並且當前的刷盤機制是強制刷盤,那麼就生成一個異地歸檔任務加入到臨時列表中。

(2)遠端邏輯日誌歸檔執行緒

遠端歸檔執行緒從遠端歸檔任務列表中取出一個歸檔任務,並根據任務的型別進行相應的處理。任務的型別包括同步傳送和非同步傳送。

 

10、MAL系統相關執行緒

MAL系統是DM內部高速通訊系統,基於TCP/IP協議實現。伺服器的很多重要功能都是透過MAL系統實現通訊的,例如資料守護、資料複製、MPP、遠端日誌歸檔等。MAL系統內部包含一系列執行緒,有MAL監聽執行緒、MAL傳送工作執行緒、MAL接收工作執行緒等。

 

11、其他執行緒

事實上,DM資料庫系統中還不止以上這些執行緒,在一些特定的功能中會有不同的執行緒,例如回滾段清理PURGE執行緒、審計寫檔案執行緒、重演捕獲寫檔案執行緒等,這裡不一一列出。

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29210902/viewspace-2839244/,如需轉載,請註明出處,否則將追究法律責任。

相關文章