| 導購 | 订阅 | 在线投稿
分享
 
 
當前位置: 王朝網路 >> oracle >> Oracle數據庫高性能秘密之數據高速緩存
 

Oracle數據庫高性能秘密之數據高速緩存

2008-07-10 05:54:10  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
 
  使用過Oracle數據庫的人都知道,Oracle數據庫的運行速度與效率,在同類數據庫中是名列前茅的,特別是對大量數據進行訪問時,更加有出色的表現。那麽,Oracle數據庫是靠什麽實現的呢?筆者下面將通過一系列的文章,向大家展示Oracle數據庫提供高性能運算的秘密。

  Oracle數據庫作爲複雜運算的首選數據庫,其首先是通過所謂的數據高速緩存來實現對數據的高速運算與操作的。

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

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

  一、 空閑緩存塊

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

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

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

  二、命中緩存塊

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

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

  三、髒緩存塊

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

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

  當系統中沒有空閑緩存塊,而用戶又需要查詢數據時,數據庫就查詢當前所有的髒緩存塊,把最先更改的髒緩存塊中的內容先寫入數據庫文件中,以便釋放這個髒緩存塊。數據庫就又會把這個髒緩存塊標記爲空閑緩存塊,以方便用戶下次存入數據。

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

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

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

  2、若數據庫在查詢的時候,首先查到的是髒緩存的話,則會把這個髒緩存移動到DIRTY列表中,然後再繼續查詢,直到查詢到合適的空閑緩存塊爲止。

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

  知道了這些數據庫高速緩存工作原理之後,我們數據庫管理員又該做些什麽呢,來對Oracle數據庫進行優化。爲此,筆者有以下建議:

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

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

  3、最好不要在數據庫服務器上運行其他的服務。在數據庫服務器中,若還運行其它服務器的話,除了硬件資源爭奪影響服務器的運行效率之外,還會産生一個問題。就是會使得數據庫的數據高速緩存塊不連續。這會直接影響數據庫查詢空閑緩存塊的效率。對髒緩存塊進行數據庫寫入操作以及數據庫進行標記之間的轉換也會産生影響。所以,根據筆者的經驗,數據庫服務器最好能夠獨立。最多只能跟其對應的應用服務器部署在同一台服務器上。如現在Oracle數據庫是一台ERP系統的後台數據庫,最好數據庫能夠跟ERP服務器分開部署。但是,若由于服務器資金的限制,那麽可以把ERP應用服務器跟數據庫服務器部署在一台服務器上。但是,不能再跟郵件服務器等應用服務器放在一起。這會影響數據高速緩存的管理效率,從而最終影響數據庫的運行效能。現在服務器價格逐漸下滑,服務器的成本已經不是影響企業數據庫應用的關鍵。所以,出于數據庫性能考慮,筆者認爲,企業在這上面還是應該大方的進行投資。沒必要爲了這麽一點點錢,影響到數據庫的性能。
 
 
 
上一篇《初學者必讀:Oracle數據庫安裝錯誤集錦》
下一篇《解決Windows環境下Oracle無法連接的現象》
 
 
 
日版寵物情人插曲《Winding Road》歌詞

日版寵物情人2017的插曲,很帶節奏感,日語的,女生唱的。 最後聽見是在第8集的時候女主手割傷了,然後男主用嘴幫她吸了一下,插曲就出來了。 歌手:Def...

兄弟共妻,我成了他們夜裏的美食

老鍾家的兩個兒子很特別,就是跟其他的人不太一樣,魔一般的執著。兄弟倆都到了要結婚的年齡了,不管自家老爹怎麽磨破嘴皮子,兄弟倆說不娶就不娶,老父母爲兄弟兩操碎了心...

如何磨出破洞牛仔褲?牛仔褲怎麽剪破洞?

把牛仔褲磨出有線的破洞 1、具體工具就是磨腳石,下面墊一個硬物,然後用磨腳石一直磨一直磨,到把那塊磨薄了,用手撕開就好了。出來的洞啊很自然的。需要貓須的話調幾...

我就是掃描下圖得到了敬業福和愛國福

先來看下敬業福和愛國福 今年春節,支付寶再次推出了“五福紅包”活動,表示要“把欠大家的敬業福都還給大家”。 今天該活動正式啓動,和去年一樣,需要收集“五福”...

冰箱異味産生的原因和臭味去除的方法

有時候我們打開冰箱就會聞到一股異味,冰箱裏的這種異味是因爲一些物質發出的氣味的混合體,聞起來讓人惡心。 産生這些異味的主要原因有以下幾點。 1、很多人有這種習...

《極品家丁》1-31集大結局分集劇情介紹

簡介 《極品家丁》講述了現代白領林晚榮無意回到古代金陵,並追隨蕭二小姐化名“林三”進入蕭府,不料卻陰差陽錯上演了一出低級家丁拼搏上位的“林三升職記”。...

李溪芮《極品家丁》片尾曲《你就是我最愛的寶寶》歌詞

你就是我最愛的寶寶 - 李溪芮 (電視劇《極品家丁》片尾曲) 作詞:常馨內 作曲:常馨內 你的眉 又鬼馬的挑 你的嘴 又壞壞的笑 上一秒吵鬧 下...

烏梅的功效與作用以及烏梅的食用禁忌有哪些?

烏梅,又稱春梅,中醫認爲,烏梅味酸,性溫,無毒,具有安心、除熱、下氣、祛痰、止渴調中、殺蟲的功效,治肢體痛、肺痨病。烏梅泡水喝能治傷寒煩熱、止吐瀉,與幹姜一起制...

什麽是脂肪粒?如何消除臉部脂肪粒?

什麽是脂肪粒 在我們的臉上總會長一個個像脂肪的小顆粒,弄也弄不掉,而且顔色還是白白的。它既不是粉刺也不是其他的任何痘痘,它就是脂肪粒。 脂肪粒雖然也是由油脂...

網絡安全治理:國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰受害者

來源:中國青年報 新的攻擊方法不斷湧現,黑客幾乎永遠占據網絡攻擊的上風,我們不可能通過技術手段杜絕網絡攻擊。國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰...

 
 
 
使用過Oracle數據庫的人都知道,Oracle數據庫的運行速度與效率,在同類數據庫中是名列前茅的,特別是對大量數據進行訪問時,更加有出色的表現。那麽,Oracle數據庫是靠什麽實現的呢?筆者下面將通過一系列的文章,向大家展示Oracle數據庫提供高性能運算的秘密。 Oracle數據庫作爲複雜運算的首選數據庫,其首先是通過所謂的數據高速緩存來實現對數據的高速運算與操作的。 數據高速緩存跟操作系統的緩存類似,其存儲最近從數據文件中讀取的數據塊,其中的數據可以被所有的用戶所訪問。如當我們利用Select語句從數據庫中查詢員工信息的時候,其首先不是從數據文件中去查詢這個數據,而是從數據高速緩存中去查找,而沒有這個必要再去查詢磁盤中的數據文件了。只有在數據緩存中沒有這個數據的時候,數據庫才會從數據文件中去查詢。Oracle數據庫爲什麽要如此設計呢?這是由于數據庫在讀取數據的時候,讀取內存的速度比讀取磁盤的速度要快很多倍,所以這種機制可以提高數據的整體訪問效率。 雖然其他數據庫也有這方面的設計,但是,相對來說,Oracle數據庫比其他數據庫,在這方面有更加出色的表現。難怪Oracle數據庫在內存的要求上,比其他數據庫要高。若以稍微的代價犧牲一些內存,而換取更高的數據訪問性能。筆者認爲還是值得的。下面我們就來看看,Oracle數據庫在數據高速緩存上有哪些特殊的表現。 一、 空閑緩存塊 當我們重新啓動數據庫後,系統就會爲數據庫分配一些空閑的緩存塊。空閑緩存塊中是沒有任何數據的,他在那邊默默的等著別寫入記錄。當Oracle 數據庫從數據文件中讀取數據後,數據庫就會尋找是否有空閑的緩存塊,以便將數據寫入其中。 一般來說,數據庫在啓動的時候,就會在內存中預先分配這些緩存塊。所以,Oracle數據庫在啓動的時候,會占用比較多的內存。但是,這可以免去在實際需要時向內存申請的時間。所以,有時候Oracle數據庫雖然已啓動,內存的占用率就很高,但是,其後續仍然可以正常運行的原因。而其他數據庫雖然剛啓動的時候內存占用率不是很高,但是,但系統內存到達80%以上時,在進行數據處理就會受到明顯的影響。 所以,當我們利用SELECT語句從數據庫文件中讀取文件的時候,數據庫首先會尋找是否有空閑的緩存。 二、命中緩存塊 當SELECT語句先從數據庫文件中讀取數據後,會把取得的數據放入到這個命中緩存塊中。也就是說,當我們利用查詢語句從數據庫查詢處員工信息後,這個信息就會被保存在高速緩存中。直道高速緩存消耗完畢等原因,這個空間才會被釋放。如此的話,下次用戶在查詢員工信息的時候,就不需要從數據庫文件中再次查詢相關信息,而直接從數據高速緩存中提取數據,從而提高數據庫的訪問效率。 另外要注意的一個問題是,命中緩存塊中的數據不會被寫入數據文件。確實,這個命中緩存塊中的數據沒有被更改,其當然也不會被寫入數據庫文件中。 三、髒緩存塊 當我們利用SELECT查詢語句把員工信息的數據查詢出來後,數據庫會把這個數據所存儲的空緩存塊做標記,表示該緩存塊已經存有數據,使命中緩存塊。此時,我們若在利用數據更新語句UPDATE對其中某條記錄進行更新時,如要把張三的名字改爲張四。運行UPDATE語句後,數據庫也首先從高速緩存中查找是否有這條記錄,若存在這條記錄的話,就直接更改這條記錄,並且把該緩存塊標記爲贓緩存塊。如此的話,就可以保持數據的一致性。 也就是說,髒緩存塊存儲的是已經被修改過的,但是還沒有寫入到數據庫文件的信息。當SQL的UPDATE等數據更新語句對某個緩存塊中的數據進行更改之後,這個命中緩存塊就會被數據庫標記爲髒緩存塊。當滿足一定的條件時,這些髒緩存塊中的數據內容會被寫入到數據庫文件中去,以便永久性的保留數據庫修改記錄。 當系統中沒有空閑緩存塊,而用戶又需要查詢數據時,數據庫就查詢當前所有的髒緩存塊,把最先更改的髒緩存塊中的內容先寫入數據庫文件中,以便釋放這個髒緩存塊。數據庫就又會把這個髒緩存塊標記爲空閑緩存塊,以方便用戶下次存入數據。 那Oracle數據庫到底是通過什麽手段,來控制空閑緩存塊、命中緩存塊、髒緩存塊之間的相互轉換的呢?說出來也許你不相信,Oracle數據庫就是通過兩張表,來管理這麽複雜的功能。這兩張表分別是DIRTY列表與LRU列表。 其中LRU列表保存著所有空閑緩存塊、命中緩存塊已經還沒有被移入到DIRTY列表中的髒緩存塊。當Oracle數據庫用戶在查詢數據的時候,可能會遇到如下情況: 1、當用戶查找員工信息時,數據庫首先在LRU列表中查詢是否有空閑緩存塊。其查詢的數據是從尾部開始查找。當查找有空閑的緩存塊時,數據庫就會把查到的數據寫入到這個空閑緩存中。 2、若數據庫在查詢的時候,首先查到的是髒緩存的話,則會把這個髒緩存移動到DIRTY列表中,然後再繼續查詢,直到查詢到合適的空閑緩存塊爲止。 3、若數據庫在LRU列表中,從尾到頭查了一遍,沒有找到空閑緩存塊,或者雖然有空閑緩存塊,但是其容量不符合要求時,數據庫就會暫時結束這一次查找。然後,系統就會觸發數據庫寫進程,把DIRTY列表中的髒緩存塊寫入到數據庫中去。已經被寫入到數據庫文件中去的髒緩存塊將又被數據庫標記爲空閑緩存塊,並插入到LRU列表中。當數據庫執行完畢這個動作之後,數據庫又會對LRU列表進行搜索,找到合適的數據高速空閑緩存之後,就會把讀取的數據寫入到這個空閑緩存中。所以,我們在利用數據庫的時候,會發現有時候讀取大量數據的時候,速度會比較慢。除了其他原因外,也有一部份原因是因爲數據庫沒有查到足夠大的空閑緩存在存放這些數據,故只好寫進行讀寫操作,以釋放更多的髒緩存,然後再進行查詢操作。 知道了這些數據庫高速緩存工作原理之後,我們數據庫管理員又該做些什麽呢,來對Oracle數據庫進行優化。爲此,筆者有以下建議: 1、爲Oracle數據庫配置盡量大的內存。Oracle數據庫最新版本,根據官方的建議,其內存需要1G。雖然在低于這個內存數量的時候,數據庫仍然可以運行,但是,其運行適度會大打折扣。當查詢大量數據的時候,更是比較吃力。筆者現在使用的數據庫服務器,是使用了4個G的內存。以前我用的是2個G的。內存升級後,發現數據庫的性能得到了比較大的改善。 2、在對數據進行查詢操作時,盡量使用限制條件。如現在需要查詢銷售部門的員工信息時,我們不需要查詢全部的員工信息,而是在SELECT語句中,利用WHERE條件語句設置查詢條件。如此的話,就可以充分利用DIRTY列表中的空閑緩存塊,而不會因爲空閑緩存塊容量不夠而頻繁的去執行數據庫寫操作。這會明顯降低數據庫的運行操作。同時,在查詢時,最好也能夠明確查詢的信息,如你只需要員工的姓名與入職日期,那就不需要把員工的出生年月、身份證號碼都查詢出來。所以,有時候合理設計視圖,也可以提高數據庫的運行效率。 3、最好不要在數據庫服務器上運行其他的服務。在數據庫服務器中,若還運行其它服務器的話,除了硬件資源爭奪影響服務器的運行效率之外,還會産生一個問題。就是會使得數據庫的數據高速緩存塊不連續。這會直接影響數據庫查詢空閑緩存塊的效率。對髒緩存塊進行數據庫寫入操作以及數據庫進行標記之間的轉換也會産生影響。所以,根據筆者的經驗,數據庫服務器最好能夠獨立。最多只能跟其對應的應用服務器部署在同一台服務器上。如現在Oracle數據庫是一台ERP系統的後台數據庫,最好數據庫能夠跟ERP服務器分開部署。但是,若由于服務器資金的限制,那麽可以把ERP應用服務器跟數據庫服務器部署在一台服務器上。但是,不能再跟郵件服務器等應用服務器放在一起。這會影響數據高速緩存的管理效率,從而最終影響數據庫的運行效能。現在服務器價格逐漸下滑,服務器的成本已經不是影響企業數據庫應用的關鍵。所以,出于數據庫性能考慮,筆者認爲,企業在這上面還是應該大方的進行投資。沒必要爲了這麽一點點錢,影響到數據庫的性能。
󰈣󰈤
 
 
 
  免責聲明:本文僅代表作者個人觀點,與王朝網路無關。王朝網路登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
 
Afternoon Girl
精致的外景拍攝
零點一公分的距離
俏麗迷人 視覺享受
北海老城隨拍(二)
夢中的郭河
Gassin(法國最美麗小鎮之一) part
瑤池夕照
 
>>返回首頁<<
 
 熱帖排行
 
 
 
 
© 2005- 王朝網路 版權所有