在談這個話題之前,首先oracle資料庫管理員需要了解乙個常識。在不考慮其它因素的情況下,從記憶體中讀取資料要比從硬碟中讀取資料快10000倍。這主要是記憶體與硬碟的速度差異所造成的。為此在oracle資料庫中提出乙個資料快取的概念。簡單的說,就是資料庫會把使用者前幾次查詢的資料放置在資料快取中。下次如果其它使用者也需要用到類似的資料,則直接中資料快取中讀取資料,而不是從硬碟中讀取資料,以提高資料庫的效能。這個資料庫快取命中率就是來評價快取應用效率的乙個指數,它是指那些不用從硬碟上無力操作的資料塊比例。
一、 提高資料快取命中率對資料庫效能的影響。
在oracle資料庫中,有很多因素為影響到資料庫的快取命中率。不過根據筆者的經驗,筆者認為主要影響快取命中率的有三個因素,分別為連線、索引與資料快取的大小。表與表之間的連線或者索引設定的不當的話,都會降低資料快取的命中率。不過表與表之間的連線、索引等等對資料庫效能的影響,是乙個比較綜合的影響,為此筆者不在這裡做過多的闡述。以後若有計畫的話,筆者會把他們分開來詳細講述。筆者今天要談的是,如果調整資料快取的大小來提高這個資料庫快取命中率。
在oracl初始化引數檔案中,有乙個引數叫做db_cache_size。顧名思義,這個引數主要是用來設定資料庫快取大小的。也許有人會講,把這個引數設定越大越好,如此就可以提高資料快取命中率。這個說法是不科學的,至少是不全面的。如果把這個引數設定的太大,則系統在切換後就很可能會莫名其妙的罷工;而若這個引數設定的太小的花,則管理員無論如何優化資料庫系統,其效能都會十分的有限,因為資料庫沒有足夠的資料快取來處理相關的操作。所以從這個角度講,根據實際情況為資料庫設定合適的快取,是對資料庫進行其它優化操作的前提。
如果不考慮其它因素(如索引、連線)的影響,則一般情況下,如果這個引數設定的比較低的話,那麼最近使用得資料就會被最近一次查詢的資料所覆蓋掉。如此的話,如果另外乙個查詢需要重新呼叫這些被覆蓋的資料,則就必須重新從伺服器的硬碟中讀取相關的資料。此時就會極大的降低資料庫查詢的效率。
顯然,如果資料庫快取命中率降低,會影響資料庫的效能,特別是查詢作業的效能。那麼這個影響的程度到底有多大的?是否值得資料庫管理員花大力氣去調整這個引數呢?筆者個人認為是值得的,而且大部分資料庫管理專家跟筆者有相同的見解。如乙個資料庫的前輩,美國的richard,筆者所崇拜的偶像,其就明確提出,乙個好的資料庫系統,資料庫快取命中率應該要提到95%以上。而且他還明確的提出,由於系統從硬碟與記憶體中讀取資料在效能上存在巨大的差異,為此當資料庫效能不佳時,如果將資料庫快取的命中率從90%提高到95%時,資料庫效能會得到成倍的改善。甚至其改善的效果可以達到300%。這是以給很令人驚喜的資料。
不過這裡需要注意的是,快取命中率也並不是越高越好。真理多走一步,就可能成為了謬誤。有時候,異常高的命中率通常也有可能是因為差的索引與連線所造成的。所以說,此時命中率高,反而其效能會下降。為此這個命中率引數,往往還需要跟一些其它的效能指標綜合起來使用,以判斷是否需要在提高快取命中率上花功夫。
二、 如何提高資料庫快取命中率?
在oracle資料庫中,最簡單的提高資料庫快取命中率的方法就是調整資料庫快取的大小。通常情況下,資料庫系統會根據伺服器記憶體的大小,自動設定這個資料庫快取。但是在一些複雜的情況下,這個預設的資料快取大小往往不能夠滿足企業的需要。如在一台資料庫伺服器中可能部署有多個應用伺服器,此時oracle資料庫系統自己並不能夠發現這種情況。為此這個預設設定並不能夠保證資料庫伺服器的最佳效能。另外,有些企業中資料庫系統可能主要用來進行資料查詢,其查詢操作佔整個資料庫操作的90%以上。此時也需要調整資料快取的大小,以提高資料庫的效能。為此資料庫管理員通常需要根據企業的實際應用,來調整這個資料快取的大小。
在oracle資料庫中,可以通過db_cache_size這個引數來更改資料庫預設的資料快取大小。不過需要注意的是,這個引數並不是設定的越大越好。如果資料快取設定的比較大,則可能會跟其它的應用程式衝突,從而導致兩敗俱傷的結果。為此,資料庫管理員需要根據相關的引數來調整這個資料快取的大小。在下面第三部分的內容中,筆者將會給大家介紹如何利用oracle資料庫提供的工具來調整這個資料快取的大小。不過在談這個方法之前,筆者先要強調乙個問題,即影響資料快取命中率的因素有很多。除了這個資料快取大小為,還有索引、表連線等等。有時候可能索引或者表連線不合理,反而會造成很高的索引命中率。為此如果因為資料快取命中率不高或者異常的高,在調整資料快取之前最好先對索引或者表連線進行優化。對他們進行調整之後,再來判斷是否需要調整資料快取。
另外需要注意的是,資料快取大小的調整受到伺服器記憶體大小的限制。為此需要根據記憶體的多少、以及有多少應用服務在共享這個記憶體等因素來調整資料快取的大小。
三、 如何判斷是否需要調整資料快取大小?
從以上的分析中可以看出,資料快取大小並不是越大越好。需要根據資料庫的實際運**況來進行判斷。在oracle資料庫中,就提供了一張動態檢視。通過查詢這張檢視可以幫助管理員判斷當前的快取是否符合需要。如 下圖所示。其中第乙個欄位就表示從硬碟中讀取資料的情況。如高要提高資料快取的命中率,那麼就需要減少從硬碟中讀取資料的次數。一般來說,最好把這個次數控制在1以下。另外在這個檢視中,還有乙個字段叫做size_factor。有時候這個字段對於資料庫管理員判斷是否需要調整資料快取非常有幫助。
根據這個檢視管理員就可以判斷是否需要調整資料快取的大小,即將第乙個欄位的值控制在1以內所需要的資料快取。不過需要注意的是,這個檢視中的資料只是oracle系統根據當前的系統狀況而預計的乙個結果。有時候跟實際的情況會有一定的差異。為此在調整好資料快取之後,資料庫管理員仍然需要進行跟蹤。如連續7天執行這個檢視,看看調整了資料快取之後,是否起到了預計的效果,資料快取命中率是否得到了提高。
一般比較理想的情況就是要將資料庫的快取命中率保持在95%以上。如果低於95%,則最好採取相應的措施,如提高資料快取大小等手段來提高資料快取的命中率。不過也不要心太狠,想將這個命中率保持在100%。大家都知道,從50%提高到95%,可能不怎麼吃力。但是要想從97%提高到99%,可能需要花費更多的精力。雖然前者提高了45個百分點,而後者只提高了2個百分點。但是還是前者的調整簡單的多。所以,一般情況下,這個快取命中率只要能夠達到97%左右即可。達到這個百分比之後,就不用再費心去調整資料快取,或者採取其他措施來提高這個快取的命中率。因為再想提高的話,會很難。
其次需要注意的是,如果對資料庫系統進行了比較大的調整,如改變了表的連線、調整了索引或者對資料庫系統進行了公升級。那麼在調整前後最好能夠執行一下這個檢視。然後將前後兩個結果進行對比。後續管理員能夠從中得到一些比較寶貴的提示。如將記憶體從6個g公升級到8個g,則可以從前後資料中分析出,記憶體公升級對於資料快取命中率的影響。這將為以後的工作積累經驗。
Oracle學習筆記day06 Oracle函式
to char 將任意型別轉換成字串 日期轉換 select to char sysdate,yyyy mm dd hh24 mi ss from dual 數字轉換 select to char 100.789999999999,l99g999d999 from dual to date 將字串轉...
oracle認證模式
oracle認證模式是由兩個地方共同控制的,所以很容易房人迷惑。一 sqlnet.ora 這個裡面有乙個sqlnet.authentication services nts none both 這裡面有nts none both可以選擇,當選擇both時系統處於os認證和密碼認證同時允許的情況下。n...
Oracle登入認證
3.sysdba角色登入認證 oracle登入認證有兩種方式,基於作業系統的登入認證,基於oracle的密碼驗證。oracle資料庫通過sqlnet.ora檔案中的引數sqlnet.authentication services,來控制使用者是通過作業系統認證還是通過密碼認證進行登入。而對於擁有sy...