Thread 1 cannot allocate new log Private strand flush not complete 警告

gaopengtttt發表於2014-05-06
官方解釋如下:

CHANGES

切換日誌時,所有 private strand 都必須重新整理到當前日誌,然後才允許繼續切換。

CAUSE

此資訊表示我們在嘗試切換時,尚未完全將所有 redo 資訊寫入到日誌中。它本質上類似於“checkpoint not complete”,不同的是,它僅涉及到正在被寫入日誌的redo。在寫入所有 redo 前,無法切換日誌。

“strand”是 10g 中的新術語,它用於處理 redo 的 latch。

Strands是一種允許程式利用多個 allocation latch 更高效地將 redo 寫入 redo 緩衝區的機制,它與 9i 中出現的 log_parallelism 引數相關。

提出 Strand 的概念是為了確保例項的 redo 生成率達到最佳,並能確保在出現某種 redo 爭用時,可以動態調整 strand 的數量進行補償。

初始分配的 strand 數量取決於 CPU 的數量,最少兩個 strand,其中一個 strand 用於活動的 redo 生成。

對於大型企業系統,redo 生成的量相當大,因此當前臺程式遇到此 redo 爭用(allocated latch 競爭)時,這些 strand 會“被啟用”,這就是動態 strand 的概念開始發揮作用的時候。

shared strand 總是與多個 private strand 共存。

Oracle 10g 的 redo(和 undo)機制有一些重大變化,目的是為了減少爭用。

此機制不再實時記錄 redo,而是先記錄在一個“私有區域”,並在提交時寫到 redo 日誌緩衝區中。

與此相似,undo 可作為“in memory undo”生成併成批應用。這會影響用於管理 redo 的記憶體和分片重新整理此記憶體的可能性。您獲取的資訊與內部 Cache Redo File 管理相關。

... 該資訊是正常的,可以被忽略。

SOLUTION

這些資訊不需要特別關注,除非“cannot allocate new log”資訊和“advanced to log sequence”資訊之間有明顯的時間差。

在某些情況下,增大 db_writer_processes 的值有助於避免生成該資訊。原因:因為 DBWR 的其中一個主要功能是透過寫出髒快取塊來保持緩衝區快取的乾淨。因此,使用多個 db_writer_processes 應當能夠產生更高的吞吐量。


關於更詳細的機制
參考文章
http://blog.csdn.net/tianlesoftware/article/details/6014898

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-1155343/,如需轉載,請註明出處,否則將追究法律責任。

相關文章