如何配置重做日誌快取記憶體的大小

2021-06-05 11:56:35 字數 3225 閱讀 1156

資料庫管理員應該要了解的是,重做日誌檔案的機制跟資料檔案的管理機制類似。當因為資料更新、新建記錄或者資料庫結構變更產生重做記錄時,其也不是馬上寫入重做日誌檔案中。而是先將重做記錄寫入到重做日誌快取記憶體中。等到符合一定的條件,再將重做記錄寫入到

硬碟上的衝作日誌檔案中。這主要是為了效能的考慮。因為往

記憶體中寫入資料要比往硬碟中寫入資料快幾千倍。

重做日誌檔案對於oracle資料庫的重要性顯而易見,如上圖所示,

當利用update等資料操作語更新資料或者調整資料庫物理機構時,資料庫會先將相關的更改資訊儲存在資料快取記憶體中。同時也會產生重做記錄,這些重做記錄也是儲存在重做日誌快取記憶體中。這在某種程度上可以提高資料庫的效能。但是,如果這個重做日誌快取設定的不恰當的話,也會出問題。如當乙個update語句需要更新大量的資料時,則寫一部份記錄到重做日誌快取記憶體中,其空間就會滿了,需要將重做記錄寫入到重做日誌檔案中。此時更新作業不得不暫時等待,因為此時無法將重做記錄寫入到重做日誌快取記憶體中。只有將現有重做日誌快取記憶體中的資訊都寫入到重做日誌檔案中後,系統才會清空重做日誌快取中的資訊,系統才能夠將更新的資訊儲存到重做日誌快取記憶體中。所以當這個等待的次數多了,那就會極大的影響資料庫的效能。 不要讓臨時表空間影響資料庫效能。

所以說,重做日誌快取記憶體是把雙刃劍。若重做日誌快取記憶體大小合適的話,確實可以提高update等語句的操作效率。但是如果設定的不合適的話,則會起到適得其反的效果。反而會因為等待次數過多而影響到這些語句的執行效果。故在一些資料更新量比較大的系統中,特別需要進行成批更改的資料庫中,調整重做日誌快取記憶體的大小也是改善資料庫效能的乙個重要舉措。

一、避免乙個誤區:重做日誌快取記憶體越大越好。

在配置重做日誌快取記憶體大小的時候,首先需要避免乙個誤區,即並不是說重做日誌快取記憶體越大越好。如果將重做日誌快取記憶體設定的很大,也會產生不利的影響。

如重做日誌快取記憶體是記憶體中的一塊區域,它是資料庫啟動的時候就已經分配好了的,是一塊獨享的記憶體區域。也就是說,如果給其分配了一定大小的區域之後,無論現在重做記錄需要多少的快取記憶體,其都會獨佔的享用這塊區域。即使只用來1%,這多餘的內容也不會給其他程式使用。而且,根據lgwr程序的規則,預設情況下一般當達到重做日誌快取記憶體大小的50%時,將會將重做日誌快取記憶體中的重作記錄寫入到重做日誌檔案中。所以如果將重做日誌快取記憶體設定的比較大的話,對於記憶體來說也是一種浪費。 提高oracle資料庫快取命中率。

其次會降低重做日誌檔案的作用。雖然在有些書上說重做記錄會隨時寫入到重做日誌檔案中。其實這是不科學的。一產生重做記錄後不會馬上寫入到重做日誌檔案中,而是寫儲存在重做日誌快取記憶體中。然後根據重做記錄的數量來決定寫入到重做日誌檔案中的時刻。也就是說,在將資料快取記憶體中的資料寫入到資料檔案中這個時間間隔內,重做記錄會分幾次寫入到重做日誌檔案中。所以,重做日誌檔案中的資訊也會有乙個時間的延遲,不一定根資料庫真實的內容保持同步。所以到資料庫發生故障時,即使有重做日誌檔案的存在,也不一定能夠恢復到故障的點(當然離故障的點很近,可能只差幾秒)。當重做日誌快取記憶體空間越大的話,那麼將重做記錄寫入到重做日誌檔案中的時間間隔會越長。此時資料庫如果發生故障,則其丟失的資料相對來說會更多。所以說,雖然增加重做日誌快取記憶體的大小可以避免因為等待而導致的效能下降問題,但是也會對資料的安全性對來一定的損害。故最後資料庫管理員在設定這個重做日誌高速資料快取空間的時候,對於這個大小,還是要有乙個分寸。切記,這個空間並不是越大越好。

二、什麼時候該修改重做日誌快取記憶體空間的大小?

是否需要修改這個重做日誌快取記憶體空間的大小,主要需要看資料庫的執行狀況。在上面的分析中,筆者提到過乙個等待的概念。即在資料更新或則資料結構調整的過程中,使用者程序等待重做日誌快取的現象。一般情況下,如果這個等待的次數越多,顯然說明使用者在這等待的時間上占用了比較多的時間。為此需要根據這個等待到次數來確定是否需要重新調整重做日誌快取記憶體空間。在資料庫中可以通過資料字典檢視v$sysstat來查詢使用者使用者程序等待重做日誌快取的次數。在這個檢視中,有乙個叫做「重做快取重分配」的紀錄,英文名字為「redo buffer allocation retries」。這條記錄的vlaue欄位的值就表示使用者程序等待重做日誌快取的次數。如果這個值為0的話,就表示使用者程序在資料更新或者資料結構調整的時候,不需要等到重做日誌快取記憶體。所以效能是最佳的。但是這只是一種比較理想的狀態。在資料庫執行了一段時間後,這條記錄的值往往不會為0,有時候會達到兩位數、三位數等等。那麼是否這個值越大,就越說明有需要調整重做日誌快取記憶體大小的必要呢?

這麼說有一定道理,但是也太過於決定。在實際工作中,我們往往還需要借鑑另外乙個值。在這張檢視中,還有一條記錄叫做「redo entries」。如果按名次排序的話,他們這兩條記錄是一前一後緊靠在一起的。通常情況下,如果把「redo buffer allocation retries」記錄的value值除以「redo entries」記錄的value值,如果大於0.01(即1%),則說明這個資料快取大小可能並不是很合適,需要通過調整重做日誌快取大小來提高資料庫的效能。如果這個比率小於1%的話,即使使用者程序等待的次數再多,一般也不需要調整其大小。因為此時使用者的等待次數對於資料庫的效能影響是微乎其微的,甚至可以忽略不計。從這裡可以看出,並不是說使用者程序的等待次數越多,就說明其大小越需要調整。一般我們都需要將使用者程序等待次數與「redo entries」記錄的value值進行比較,最後以1%這個值為關卡,來判斷是否需要調整重做日誌快取記憶體的大小。

三、如何調整重做日誌快取記憶體的大小?

在oracle資料庫中,重做日誌快取記憶體的大小是由初始化引數log_buffer來控制的。在對其進行更改之前,有必要先查詢一下這個引數的值。在資料庫命令列中,可以通過show log_butter來查詢重做日誌快取的大小。然後資料庫管理員可以在這個值的基礎上增加重做日誌快取記憶體的大小。這個引數是乙個動態的引數,可以在資料庫執行期間修改這個引數。如果某個事務需要長時間執行、並且會產生大量重做記錄的時候,通過引數增加這個引數的值,往往可以減少對重做日誌檔案的硬碟操作次數,從而提高資料庫的效能。

由於這是乙個動態的引數,為此在更改的時候需要注意一點,即在下次資料庫啟動的時候是否需要將這個修改保留。如果需要的話,則在這個引數記憶體中的值的時候,同時需要更改初始化引數檔案中的值。如果採用文字引數檔案啟動的話,需要手工更改引數檔案。如果採用伺服器引數檔案啟動的話,則可以在命令中指定其同時修改記憶體與伺服器引數檔案中的值。

最後筆者再次提醒一句,充作日誌快取記憶體並不是越大越好。通常情況下,需要將上面提高的兩個記錄進行對比,以1%作為其調整的關口。如果超過1%,則就可以通過調整重做日誌快取記憶體來達到改善資料庫效能的目的。反之,如果值小於1%,那麼即使增加了重做日誌快取記憶體的大小,也很難起到應有的效果。相反會造成一定的安全隱患,而且會浪費記憶體空間。所以,這個調整重做日誌快取記憶體時還需要謹慎行事。

快取記憶體DNS的配置

1.什麼是快取記憶體dns 處於同一網段的主機,可以配置其中一台主機為快取記憶體dns,這樣別的主機訪問網路就可以從本地獲得ip,就不需要從114.114.114.114獲取,這樣可以節省時間。2.伺服器端配置 1 yum install bind y 安裝bind服務 2 systemctl st...

無法寫入快取記憶體 記憶體與CPU的快取記憶體的關係

我們個人pc都有乙個叫做記憶體的硬體,有4g 8g 16g不等的容量。但我們的cpu執行時執行的指令並不是直接從記憶體中獲取,而是從cpu自身的快取記憶體中獲得指令並執行,指令執行完畢再寫回快取,然後待到特定的時機才把資料在寫回主記憶體。那cpu是如何將比自己容量大的多的記憶體放進自己的快取記憶體中...

LRU快取記憶體演算法統計快取記憶體請求失敗的缺頁次數

1.page 表示頁面的編號 2.max cache size表示最大快取容量 3.len表示pages頁面陣列的大小 include using namespace std int lrucountmiss int max cache size,int pages,int len for j 0 ...