oracle學習筆記 計算機緩存技術工作機制

oracle學習筆記

計算機緩存技術工作機制


計算機緩存技術,對oracle來講非常重要,我們單獨拿出了一個小的章節來講。

理解緩存技術對以後的oracle學習非常有幫助,對計算機的學習也很有幫助。

緩存技術它遍佈於整個IT所有設備裏面的方方面面,這節課講裏面的一些概念。

緩存是計算機運行時,爲了提高運行速度而形成的一個技術,已被各種硬件普遍採用。

一)
從總體來看,計算機裏面最大的一個緩存就是內存。

硬盤是慢速設備是機械設備,它的速度比較慢。
內存是電子設備,它的速度比較快。
cpu處理數據的速度很快,但是數據從硬盤中取出來的速度是比較慢的。
也就是說cpu要處理硬盤上的數據,它的瓶頸在數據從硬盤上取出來。
所以我們在它們之間加了一個內存。
cpu要處理數據時侯,首先數據從硬盤調到內存,然後從內存在調到cpu。
進cpu很快,出硬盤慢一些。

內存有什麼意義呢?

計算機在IT,在我們的技術裏面,有一個相對比較穩定的技術特點:
cpu在一段時間裏面,多次處理同一塊數據的機率是很大的,
達到95%以上甚至到99%。

有兩個技術要點:
1、計算機在一段時間裏面連續多次處理同一塊數據的機率很大。
2、處理完前面一個數據,在接下來的時間裏面處理緊跟着的後面的數據機率也很大。

鑑於這兩個機率,我們的計算機就發明產生了緩存技術。

cpu要處理硬盤中的數據,
先把數據從硬盤調到內存,這時候發生了一次物理的i/o,
再從內存調到cpu,這是一次邏輯i/o。
接下來cpu又處理了同一塊數據,
這時候就不需要再發生物理io了,只有邏輯io就可以了。

這樣cpu處理了兩次數據,一次有物理io也有邏輯io,第二次處理相同數據時只是邏輯io,
這樣緩存的命中率就是50%,命中率是邏輯io除以總的io數。

在計算機裏面緩存的命中率通常達到99%,一般也在95%以上。
就是cpu讀100次數據,其中有99次發生在緩存裏面,只有一次發生物理io。

由此我們發現緩存技術非常重要,可以大大的減少物理io的次數,
從而大幅的提高cpu處理數據的速度。

這就是緩存技術,內存是計算系統裏面最大的一塊緩存。主要緩存硬盤的數據。
說明內存非常重要。

以後講oracle時,緩存的命中率會頻繁的提到。

緩存的特點速度要比它要緩存的設備介質的速度要快,
內存的速度要遠遠的高於硬盤的速度,
若慢了命中率越高速度就會越慢,就失去緩存的意義了。

計算機最大的緩存是內存。

緩存的命中率很高,一定意味着計算機沒有問題嗎?

命中率=L/L+P,L爲邏輯io次數,P爲物理io次數。
正常的是大部分發生在L身上,P比較少。
還有種情況,
P比較大,但是L更大,非常大,這樣一比P被忽略,命中率仍然接近100%。

我們認爲命中率高好,低不好。
命中率低,肯定有問題,
命中率高,不一定沒問題。

邏輯讀是直接從內存讀也消耗資源,消耗cpu資源,
這就是以後將oracle時要講的一個概念,
oracle在版本8以前,我們對oracle進行優化時,一定非常重視命中率的問題。

二)
把計算機裏面所有的緩存演示一下:

cpu中心是中央處理芯片,
外圍有很多寄存器,
還有一級緩存,二級緩存
都封裝在cpu內部。

服務器往往會接存儲系統,存儲包括多個硬盤,
每塊硬盤有緩存,整個存儲系統有塊大的緩存。

硬盤緩存,存儲的緩存,內存是緩存,cpu中有二級緩存,一級緩存和寄存器;
這麼多緩存,它的特點是,從硬盤到cpu的緩存速度越來越高,最快的是寄存器的速度。

cpu中的一級緩存因爲速度快價格昂貴,所以數量很小,一般幾百K,
二級緩存有幾M,幾十M,
到內存就比較大了,現在有幾百G
存儲的緩存也比較快,也比較大。

三)
緩存有個比較大的特點,如內存中的數據,
一旦系統掉電,數據就沒了。

緩存的特點數據容易丟失。
而數據在硬盤上是永久存儲的。

硬盤的一塊數據要讀它,通過一級級緩存到內存,
因爲是讀,內存中的數據和硬盤上的數據是一致的。

如果系統突然掉電,沒有關係,因爲硬盤中有。

1、一種緩存叫緩存讀,read。不用加別的技術。

2、有一種緩存,可以緩存寫,write。

如內存中有塊緩存,cpu可能修改它的數據,它和硬盤中的數據就不一致了。
cpu直接修改的是內存,修改後害怕掉電,要抓緊時間寫回硬盤。
這時會發現一個問題,緩存在讀的時候起作用了,在寫的時候沒有起作用,
因爲在寫的時候馬上發生了物理io,一次邏輯寫馬上伴隨了一次物理寫,
這種情況下我們認爲緩存,並沒有對我們在寫上對性能有提高,只在讀上有提高。

緩存寫是指,cpu修改內存數據,修改後並不馬上發生物理寫,而是事後再去寫。
這樣的話我們的緩存不僅僅能夠緩存讀,還能緩存寫。

緩存在正常情況下是沒有緩存寫功能的,大多數的緩存只能緩存讀。
如cpu中的緩存只能緩存讀,不能緩存寫。

在整個的計算機裏面,有兩個地方可以緩存寫。

1、oracle數據庫的內存,即oracle的內存結構。

oracle數據庫軟件一旦啓動起來,它會在內存裏面劃出一塊空間來,讓oracle使用,
這塊內存我們叫oracle內存。在這塊內存oracle可以緩存寫。

cpu要處理oracle數據,要修改直接在內存裏面修改就可以了,不需要馬上寫到磁盤。

oracle數據庫就存在一個問題,若oracle服務器突然掉電,
cpu修改的oracle內存中的數據就有可能丟失,
oacle有一套機制來避免這種情況,以使得oracle內存的緩存可以緩存讀和緩存寫。

2、存儲系統的內存(cache)可以緩存寫。

它在存儲內加了一塊電池,長時間給緩存供電,即使掉電以後,這個電池還繼續給它供電,
數據在緩存中丟不了。

存儲中緩存很重要,緩存速度非常快,不僅能緩存讀還能緩存寫,
這也是存儲速度快的一個重要原因。
下一節課會重點講存儲和raid技術。

電池是給緩存供電的,如果整個的機房全停電了,在存儲的緩存中的數據,不會丟失,
電池的作用是持續的給存儲的緩存供電。

有人說系統掉電以後,電池會將緩存數據從緩存寫到硬盤上!
這不可能,因爲電池的電壓很低,電量有限;
第二我們的數據有大量的數據,如果往硬盤寫,還沒寫完電池就沒電了。

存儲的電池就一個作用,持續的給緩存供電,
機房突然掉電,存儲中的數據在緩存中有,假設過了七八天十來天二十來天,
存儲一直沒有加電,電池可能耗電耗乾淨了,耗乾淨後緩存的數據也丟了。
所以存儲一旦掉電,我們還是需要在幾天之內抓緊時間給它供電。

如果不能長時間供電,現在的存儲還有另外一種技術來解決這個問題。

在存儲中,加一塊芯片叫閃存Flash,和U盤的結構比較相似。U盤的數據可以永久保存。
Flash和存儲的緩存大小一樣。
系統掉電以後,這時電池,可以驅動着將數據從緩存寫入flash,數據永久保存到flash裏面了。
不管多長時間掉電,緩存中的數據一直沒有丟失,最新的存儲都採用這種技術。

不管哪種存儲技術,緩存只可能緩存寫都是因爲電池。
所以說存儲有個問題,如果電池壞了,存儲會自己監測到電池壞了,
進而會把緩存的緩存寫功能給關了。
這時會發現存儲的寫功能會大幅下降,存儲的I/O中的O會急劇下降。
整個存儲的功能會大幅下降,進而影響整個計算機系統。

存儲的電池非常重要。

四)
老師以前曾經做過一個項目,
服務器性能突然變慢了,排錯時發現是io的問題。

最後用一個orion軟件檢測,此軟件用oracle的特性測磁盤陣列存儲的io,
發現存儲的io中的寫功能很差,
登陸存儲以後,報警電池的壽命已經耗盡,進而存儲自動把緩存寫功能給關了。
接着影響了系統的運行。

把電池換了後oralce整體性能恢復正常。

接下來老師非常認真的講了我們學技術時,爲什麼學原理。

這次排錯過程中,我們真正動手做的,只做了一件事情,更換電池。

但是我們重點的工作不是更換電池,
而是根據系統的表象一步一步分析,找到原因。

整個的分析過程,需要你很系統的理論和動手知識,然後才能找到問題。

最後解決問題可能很簡單。

用戶當時花了幾萬塊錢,最後說很可惜啊,早知道這個問題不找你了。
但是我們不要這麼去認爲,我們要知道我們排錯的過程是最重要的。

這節課講了計算機整體的緩存技術,也講了緩存讀緩存寫。

最後還講了理論和實踐的關係,

不懂理論,只學一些具體案例的解決方法,
以後需要解決問題時只有碰到一模一樣的情況才能解決問題。
這樣做的結果實際上和什麼也不會沒什麼區別。
不認真學習基礎知識,馬上就要解決實際問題,世界是上沒有這種捷徑的。

我們要尊重知識,更要尊重老師。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章