這一篇簡單介紹一下達夢數(shù)據(jù)庫的系統(tǒng)架構(gòu)。
Oracle的數(shù)據(jù)庫分為兩個部分,實例和數(shù)據(jù)庫。實例由內(nèi)存和進程組成,而數(shù)據(jù)庫部分由文件組成。
而達夢數(shù)據(jù)庫在安裝過程中似乎并沒有配置什么和內(nèi)存相關(guān)的參數(shù),莫非達夢數(shù)據(jù)庫并沒有獨立的內(nèi)存管理機制。
Oracle、SQLSERVER、DB2等大型數(shù)據(jù)庫與ACCESS、EXCEL等小數(shù)據(jù)量數(shù)據(jù)庫之前的一個重大區(qū)別就是前者擁有獨立的內(nèi)存管理功能,而后者只是一個操作系統(tǒng)上運行的應用程序,內(nèi)存的分配和使用完全通過操作系統(tǒng)實現(xiàn)。
查詢了一下達夢的管理員文檔,發(fā)現(xiàn)達夢還是存在內(nèi)存管理功能的,不過達夢的內(nèi)存管理顯得十分的簡單。
達夢數(shù)據(jù)庫總共包括3部分內(nèi)存結(jié)構(gòu):數(shù)據(jù)緩沖區(qū)、日志緩沖區(qū)和共享內(nèi)存池。
其中數(shù)據(jù)緩沖區(qū)用來緩存數(shù)據(jù)庫中讀取和修改的數(shù)據(jù)塊,這部分由3個鏈表結(jié)構(gòu)組成,分別是zi you鏈表、干凈鏈和臟鏈。這部分的內(nèi)存結(jié)構(gòu)和Oracle中的DB_CACHE部分類似;
日志緩沖區(qū)用于寫入系統(tǒng)日志文件的緩沖,類型于Oracle中的LOG_BUFFER部分;
而共享緩沖區(qū)和Oracle中SHARED_POOL并不相同,主要用于達夢數(shù)據(jù)庫小片內(nèi)存的申請和釋放。似乎達夢中并沒有明確的共享池以及數(shù)據(jù)字典緩沖區(qū)的概念。如果是這樣,那么顯然不存在SQL語句重用的情況,也就是說對于所有的語句都是硬解析,這勢必會對系統(tǒng)的并發(fā)性造成影響。
在達夢數(shù)據(jù)庫中處理一些大數(shù)據(jù)量的表,然后在Windows的任務管理區(qū)中觀察達夢數(shù)據(jù)庫使用內(nèi)存的情況。開始的時候達夢占用了50M的內(nèi)存,當通過isql登陸數(shù)據(jù)庫后,數(shù)據(jù)庫使用內(nèi)存增加,但是幅度很小。隨著處理表數(shù)據(jù)量的增大(僅包含一個NUMBER類型的表),插入數(shù)據(jù)量達到100000的時候,達夢使用內(nèi)存增加到了90M,隨后數(shù)據(jù)量達到了1600000,而達夢使用的內(nèi)存也達到了325M左右。當一段時間不再使用后,發(fā)現(xiàn)達夢數(shù)據(jù)庫使用內(nèi)存的空間又下降到100M左右。看來達夢的內(nèi)存管理并不是預分配定額的內(nèi)存,而是隨著處理數(shù)據(jù)的增加而不斷分配的,而且當一段時間不使用后,達夢數(shù)據(jù)庫還會將部分內(nèi)存釋放給操作系統(tǒng)。從這一點看,達夢雖然擁有自己的內(nèi)存管理系統(tǒng),比ACCESS、EXCEL之類的數(shù)據(jù)庫要專業(yè)一些,但是與當前的主流數(shù)據(jù)庫還是有較大的差距,一方面內(nèi)存管理體系過于簡單,只能實現(xiàn)最簡單的數(shù)據(jù)緩沖功能;另一方面,內(nèi)存管理機制與操作系統(tǒng)綁定過于緊密,頻繁的從操作系統(tǒng)分配內(nèi)存,或釋放空閑內(nèi)存給操作系統(tǒng),勢必降低內(nèi)存分配和管理的效率。
下面看看達夢數(shù)據(jù)庫的文件部分。但是在開始之前,還是先要了解一下達夢數(shù)據(jù)庫的邏輯結(jié)構(gòu)。
達夢數(shù)據(jù)庫的邏輯結(jié)構(gòu)顯然和Oracle有很大區(qū)別,而于SQLSERVER、SYBASE等數(shù)據(jù)庫比較相似。在達夢數(shù)據(jù)庫中存在多個DATABASE的概念,每個DATABASE由一個或多個數(shù)據(jù)文件組成。用戶和DATABASE之間沒有一一對應的關(guān)系。也就是說只要擁有權(quán)限,用戶可以讀寫任何數(shù)據(jù)庫中任何數(shù)據(jù)文件中的對象,因此DATABASE的概念和Oracle的TABLESPACE有十分類似。
達夢數(shù)據(jù)庫也是由數(shù)據(jù)文件、日志文件、控制文件和參數(shù)文件組成的。
新聞熱點
疑難解答