国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Oracle數(shù)據(jù)庫高性能秘密之數(shù)據(jù)高速緩存

瀏覽:3日期:2023-11-22 19:07:06

使用過Oracle數(shù)據(jù)庫的人都知道,Oracle數(shù)據(jù)庫的運行速度與效率,在同類數(shù)據(jù)庫中是名列前茅的,特別是對大量數(shù)據(jù)進行訪問時,更加有出色的表現(xiàn)。那么,Oracle數(shù)據(jù)庫是靠什么實現(xiàn)的呢?筆者下面將通過一系列的文章,向大家展示Oracle數(shù)據(jù)庫提供高性能運算的秘密。

Oracle數(shù)據(jù)庫作為復雜運算的首選數(shù)據(jù)庫,其首先是通過所謂的數(shù)據(jù)高速緩存來實現(xiàn)對數(shù)據(jù)的高速運算與操作的。

數(shù)據(jù)高速緩存跟操作系統(tǒng)的緩存類似,其存儲最近從數(shù)據(jù)文件中讀取的數(shù)據(jù)塊,其中的數(shù)據(jù)可以被所有的用戶所訪問。如當我們利用Select語句從數(shù)據(jù)庫中查詢員工信息的時候,其首先不是從數(shù)據(jù)文件中去查詢這個數(shù)據(jù),而是從數(shù)據(jù)高速緩存中去查找,而沒有這個必要再去查詢磁盤中的數(shù)據(jù)文件了。只有在數(shù)據(jù)緩存中沒有這個數(shù)據(jù)的時候,數(shù)據(jù)庫才會從數(shù)據(jù)文件中去查詢。Oracle數(shù)據(jù)庫為什么要如此設計呢?這是由于數(shù)據(jù)庫在讀取數(shù)據(jù)的時候,讀取內(nèi)存的速度比讀取磁盤的速度要快很多倍,所以這種機制可以提高數(shù)據(jù)的整體訪問效率。

雖然其他數(shù)據(jù)庫也有這方面的設計,但是,相對來說,Oracle數(shù)據(jù)庫比其他數(shù)據(jù)庫,在這方面有更加出色的表現(xiàn)。難怪Oracle數(shù)據(jù)庫在內(nèi)存的要求上,比其他數(shù)據(jù)庫要高。若以稍微的代價犧牲一些內(nèi)存,而換取更高的數(shù)據(jù)訪問性能。筆者認為還是值得的。下面我們就來看看,Oracle數(shù)據(jù)庫在數(shù)據(jù)高速緩存上有哪些特殊的表現(xiàn)。

一、 空閑緩存塊

當我們重新啟動數(shù)據(jù)庫后,系統(tǒng)就會為數(shù)據(jù)庫分配一些空閑的緩存塊。空閑緩存塊中是沒有任何數(shù)據(jù)的,他在那邊默默的等著別寫入記錄。當Oracle 數(shù)據(jù)庫從數(shù)據(jù)文件中讀取數(shù)據(jù)后,數(shù)據(jù)庫就會尋找是否有空閑的緩存塊,以便將數(shù)據(jù)寫入其中。

一般來說,數(shù)據(jù)庫在啟動的時候,就會在內(nèi)存中預先分配這些緩存塊。所以,Oracle數(shù)據(jù)庫在啟動的時候,會占用比較多的內(nèi)存。但是,這可以免去在實際需要時向內(nèi)存申請的時間。所以,有時候Oracle數(shù)據(jù)庫雖然已啟動,內(nèi)存的占用率就很高,但是,其后續(xù)仍然可以正常運行的原因。而其他數(shù)據(jù)庫雖然剛啟動的時候內(nèi)存占用率不是很高,但是,但系統(tǒng)內(nèi)存到達80%以上時,在進行數(shù)據(jù)處理就會受到明顯的影響。

所以,當我們利用SELECT語句從數(shù)據(jù)庫文件中讀取文件的時候,數(shù)據(jù)庫首先會尋找是否有空閑的緩存。

二、命中緩存塊

當SELECT語句先從數(shù)據(jù)庫文件中讀取數(shù)據(jù)后,會把取得的數(shù)據(jù)放入到這個命中緩存塊中。也就是說,當我們利用查詢語句從數(shù)據(jù)庫查詢處員工信息后,這個信息就會被保存在高速緩存中。直道高速緩存消耗完畢等原因,這個空間才會被釋放。如此的話,下次用戶在查詢員工信息的時候,就不需要從數(shù)據(jù)庫文件中再次查詢相關信息,而直接從數(shù)據(jù)高速緩存中提取數(shù)據(jù),從而提高數(shù)據(jù)庫的訪問效率。

另外要注意的一個問題是,命中緩存塊中的數(shù)據(jù)不會被寫入數(shù)據(jù)文件。確實,這個命中緩存塊中的數(shù)據(jù)沒有被更改,其當然也不會被寫入數(shù)據(jù)庫文件中。

三、臟緩存塊

當我們利用SELECT查詢語句把員工信息的數(shù)據(jù)查詢出來后,數(shù)據(jù)庫會把這個數(shù)據(jù)所存儲的空緩存塊做標記,表示該緩存塊已經(jīng)存有數(shù)據(jù),使命中緩存塊。此時,我們?nèi)粼诶脭?shù)據(jù)更新語句UPDATE對其中某條記錄進行更新時,如要把張三的名字改為張四。運行UPDATE語句后,數(shù)據(jù)庫也首先從高速緩存中查找是否有這條記錄,若存在這條記錄的話,就直接更改這條記錄,并且把該緩存塊標記為贓緩存塊。如此的話,就可以保持數(shù)據(jù)的一致性。

也就是說,臟緩存塊存儲的是已經(jīng)被修改過的,但是還沒有寫入到數(shù)據(jù)庫文件的信息。當SQL的UPDATE等數(shù)據(jù)更新語句對某個緩存塊中的數(shù)據(jù)進行更改之后,這個命中緩存塊就會被數(shù)據(jù)庫標記為臟緩存塊。當滿足一定的條件時,這些臟緩存塊中的數(shù)據(jù)內(nèi)容會被寫入到數(shù)據(jù)庫文件中去,以便永久性的保留數(shù)據(jù)庫修改記錄。

當系統(tǒng)中沒有空閑緩存塊,而用戶又需要查詢數(shù)據(jù)時,數(shù)據(jù)庫就查詢當前所有的臟緩存塊,把最先更改的臟緩存塊中的內(nèi)容先寫入數(shù)據(jù)庫文件中,以便釋放這個臟緩存塊。數(shù)據(jù)庫就又會把這個臟緩存塊標記為空閑緩存塊,以方便用戶下次存入數(shù)據(jù)。

那Oracle數(shù)據(jù)庫到底是通過什么手段,來控制空閑緩存塊、命中緩存塊、臟緩存塊之間的相互轉換的呢?說出來也許你不相信,Oracle數(shù)據(jù)庫就是通過兩張表,來管理這么復雜的功能。這兩張表分別是DIRTY列表與LRU列表。

其中LRU列表保存著所有空閑緩存塊、命中緩存塊已經(jīng)還沒有被移入到DIRTY列表中的臟緩存塊。當Oracle數(shù)據(jù)庫用戶在查詢數(shù)據(jù)的時候,可能會遇到如下情況:

1、當用戶查找員工信息時,數(shù)據(jù)庫首先在LRU列表中查詢是否有空閑緩存塊。其查詢的數(shù)據(jù)是從尾部開始查找。當查找有空閑的緩存塊時,數(shù)據(jù)庫就會把查到的數(shù)據(jù)寫入到這個空閑緩存中。

2、若數(shù)據(jù)庫在查詢的時候,首先查到的是臟緩存的話,則會把這個臟緩存移動到DIRTY列表中,然后再繼續(xù)查詢,直到查詢到合適的空閑緩存塊為止。

3、若數(shù)據(jù)庫在LRU列表中,從尾到頭查了一遍,沒有找到空閑緩存塊,或者雖然有空閑緩存塊,但是其容量不符合要求時,數(shù)據(jù)庫就會暫時結束這一次查找。然后,系統(tǒng)就會觸發(fā)數(shù)據(jù)庫寫進程,把DIRTY列表中的臟緩存塊寫入到數(shù)據(jù)庫中去。已經(jīng)被寫入到數(shù)據(jù)庫文件中去的臟緩存塊將又被數(shù)據(jù)庫標記為空閑緩存塊,并插入到LRU列表中。當數(shù)據(jù)庫執(zhí)行完畢這個動作之后,數(shù)據(jù)庫又會對LRU列表進行搜索,找到合適的數(shù)據(jù)高速空閑緩存之后,就會把讀取的數(shù)據(jù)寫入到這個空閑緩存中。所以,我們在利用數(shù)據(jù)庫的時候,會發(fā)現(xiàn)有時候讀取大量數(shù)據(jù)的時候,速度會比較慢。除了其他原因外,也有一部份原因是因為數(shù)據(jù)庫沒有查到足夠大的空閑緩存在存放這些數(shù)據(jù),故只好寫進行讀寫操作,以釋放更多的臟緩存,然后再進行查詢操作。

知道了這些數(shù)據(jù)庫高速緩存工作原理之后,我們數(shù)據(jù)庫管理員又該做些什么呢,來對Oracle數(shù)據(jù)庫進行優(yōu)化。為此,筆者有以下建議:

1、為Oracle數(shù)據(jù)庫配置盡量大的內(nèi)存。Oracle數(shù)據(jù)庫最新版本,根據(jù)官方的建議,其內(nèi)存需要1G。雖然在低于這個內(nèi)存數(shù)量的時候,數(shù)據(jù)庫仍然可以運行,但是,其運行適度會大打折扣。當查詢大量數(shù)據(jù)的時候,更是比較吃力。筆者現(xiàn)在使用的數(shù)據(jù)庫服務器,是使用了4個G的內(nèi)存。以前我用的是2個G的。內(nèi)存升級后,發(fā)現(xiàn)數(shù)據(jù)庫的性能得到了比較大的改善。

2、在對數(shù)據(jù)進行查詢操作時,盡量使用限制條件。如現(xiàn)在需要查詢銷售部門的員工信息時,我們不需要查詢?nèi)康膯T工信息,而是在SELECT語句中,利用WHERE條件語句設置查詢條件。如此的話,就可以充分利用DIRTY列表中的空閑緩存塊,而不會因為空閑緩存塊容量不夠而頻繁的去執(zhí)行數(shù)據(jù)庫寫操作。這會明顯降低數(shù)據(jù)庫的運行操作。同時,在查詢時,最好也能夠明確查詢的信息,如你只需要員工的姓名與入職日期,那就不需要把員工的出生年月、身份證號碼都查詢出來。所以,有時候合理設計視圖,也可以提高數(shù)據(jù)庫的運行效率。

3、最好不要在數(shù)據(jù)庫服務器上運行其他的服務。在數(shù)據(jù)庫服務器中,若還運行其它服務器的話,除了硬件資源爭奪影響服務器的運行效率之外,還會產(chǎn)生一個問題。就是會使得數(shù)據(jù)庫的數(shù)據(jù)高速緩存塊不連續(xù)。這會直接影響數(shù)據(jù)庫查詢空閑緩存塊的效率。對臟緩存塊進行數(shù)據(jù)庫寫入操作以及數(shù)據(jù)庫進行標記之間的轉換也會產(chǎn)生影響。所以,根據(jù)筆者的經(jīng)驗,數(shù)據(jù)庫服務器最好能夠獨立。最多只能跟其對應的應用服務器部署在同一臺服務器上。如現(xiàn)在Oracle數(shù)據(jù)庫是一臺ERP系統(tǒng)的后臺數(shù)據(jù)庫,最好數(shù)據(jù)庫能夠跟ERP服務器分開部署。但是,若由于服務器資金的限制,那么可以把ERP應用服務器跟數(shù)據(jù)庫服務器部署在一臺服務器上。但是,不能再跟郵件服務器等應用服務器放在一起。這會影響數(shù)據(jù)高速緩存的管理效率,從而最終影響數(shù)據(jù)庫的運行效能。現(xiàn)在服務器價格逐漸下滑,服務器的成本已經(jīng)不是影響企業(yè)數(shù)據(jù)庫應用的關鍵。所以,出于數(shù)據(jù)庫性能考慮,筆者認為,企業(yè)在這上面還是應該大方的進行投資。沒必要為了這么一點點錢,影響到數(shù)據(jù)庫的性能。

主站蜘蛛池模板: theav视频在线观看 | 在线视频99| 日本中文字幕不卡免费视频 | 精品国产三级 | 成人久久网 | 久久精品国产欧美成人 | 午夜爱爱毛片xxxx视频免费看 | 日韩一级a毛片欧美一级 | 亚洲伊人成人 | 国产在线观看高清精品 | 亚洲综合色就色手机在线观看 | 久久免费观看国产精品 | 午夜视频网站 | 狠狠做久久深爱婷婷97动漫 | 国产99久久亚洲综合精品 | 久久亚洲一级α片 | 久久视频精品53在线观看 | 精品在线99| 综合爱爱网 | 三级中文字幕永久在线视频 | 久久亚洲国产成人影院 | 日韩国产三级 | 久久精品操 | 亚洲一区二区影院 | 亚洲国产精品第一区二区 | 亚洲成年人网址 | 自拍视频在线 | 欧美日韩大片 | 97国产成人精品免费视频 | 国产成人免费午夜性视频 | 欧美日韩在线国产 | 国产一区三区二区中文在线 | 精品国产日韩亚洲一区在线 | 国产在线观看午夜不卡 | 成人精品一区二区www | 日本一区二区三区四区五区 | 伊大人香蕉久久网欧美 | 那里有黄色网址 | 亚洲精品91香蕉综合区 | 免费在线观看一区二区 | 黑色丝袜美美女被躁视频 |