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