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