對“checkpoint not completed!”的理解 (zt)

tolywang發表於2007-07-26



假設資料庫存在兩個日誌組log1和log2,首先,-->log1--&gtlog2--&gtlog1,此時(log2切換到log1)觸發checkpoint,該checkpoint will flush dirty block to datafile,從而觸發DBWn書寫dirty buffer,等到log1覆蓋的dirty block全部被寫入datafile後才能使用log1(迴圈使用),如果DBWn寫入過慢,LGWR必須等待DBWn完成,則這時會出現“checkpoint not completed!”


作者:ZALBB 時間:04-09-28 16:42

我理解的比較簡單:歸檔日誌沒資料庫寫日誌快。比如:資料庫有兩組日誌,日誌1還在歸檔,
日誌2已經被寫滿了,此時要覆蓋日誌1,但日誌1還沒被歸檔完畢(COPY完畢),結果就出現
此提示。

解決方法:增加日誌組,多些緩衝時間,以便歸檔。


作者:biti_rainy 時間:04-09-28 16:58

是 lgwr等待將被覆蓋的 logfile 對應的 dirty buffer 被寫入資料檔案,也就是io 繁忙導致 dbwr寫太慢


作者:ZALBB 時間:04-09-28 17:52

quote:
最初由 biti_rainy 釋出
是 lgwr等待將被覆蓋的 logfile 對應的 dirty buffer 被寫入資料檔案,也就是io 繁忙導致 dbwr寫太慢


若是這種解釋,那就不是增加日誌組可解決了。


作者:biti_rainy 時間:04-09-28 18:03

quote:
最初由 ZALBB 釋出


若是這種解釋,那就不是增加日誌組可解決了。



如果大量的IO只是一個段時期的高峰,增加日誌組可以延緩這個週期,從而可能會解決這個問題


如果你的系統永遠都處於高峰期?那恐怕你需要使用更高速的儲存裝置和更好的主機

歸檔沒完畢的提示資訊是不一樣的,當然歸檔沒有完成通常也是IO問題


作者:nattyneat 時間:04-09-29 09:45

如果歸檔沒有完成的話,Alert中提示如下:
Thread 1 cannot allocate new log, sequence 12
All online logs needed archiving

程式碼:

SQL
> connect sys/richel@testdb as sysdba; Connected. SQL> archive log list; Database log mode Archive Mode
Automatic archival Enabled
Archive destination D
:
oracleoradataaxisoft2archive
Oldest online log sequence 383
Next log sequence to archive 385
Current log sequence 385

SQL
> alter system archive log stop
;
System altered
.
SQL> archive log
list; Database log mode Archive Mode
Automatic archival Disabled
Archive destination D
:
oracleoradataaxisoft1archive
Oldest online log sequence 3
Next log sequence to archive 7
Current log sequence 7

SQL
> SELECT COUNT(*) FROM richel.test
;

COUNT
(*)
----------
6000

SQL
> insert into richel.test select * from richel.test
;
6000 rows created
.
SQL> insert into richel.test select * from richel.test
;
12000 rows created
. SQL> insert into richel.test select * from richel.test;
(
此時系統hang,檢視alert,發現上述警告資訊。
)
開啟另一個會話:
SQL
> alter system archive log group 1
;
System altered
.
而後,插入得以繼續完成。

SQL
> commit
;
Commit complete
.


作者:Niy38 時間:04-09-29 14:08

Re: 對“checkpoint not completed!”的理解,歡迎大家討論

quote:
最初由 nattyneat 釋出
對“checkpoint not completed!”的理解,歡迎大家討論

假設資料庫存在兩個日誌組log1和log2,首先,-->log1--&gtlog2--&gtlog1,此時(log2切換到log1)觸發checkpoint,該checkpoint will flush dirty block to datafile,從而觸發DBWn書寫dirty buffer,等到log1覆蓋的dirty block全部被寫入datafile後才能使用log1(迴圈使用),如果DBWn寫入過慢,LGWR必須等待DBWn完成,則這時會出現“checkpoint not completed!”



My understanding:
log1-> log2, trigger checkpoint 1
after log2 is full,
log2-> log1, trigger checkpoint 2
but if checkpoint 1 is still not finished, then LGWR must wait. This is "logfile switch (checkpoint incompleted)" event.


作者:Niy38 時間:04-09-29 14:11

quote:
最初由 ZALBB 釋出
我理解的比較簡單:歸檔日誌沒資料庫寫日誌快。比如:資料庫有兩組日誌,日誌1還在歸檔,
日誌2已經被寫滿了,此時要覆蓋日誌1,但日誌1還沒被歸檔完畢(COPY完畢),結果就出現
此提示。

解決方法:增加日誌組,多些緩衝時間,以便歸檔。



This is event "logfile switch ( archiving needed )", different
from "logfile switch ( checkpoint incomplete)"


作者:remen 時間:04-09-29 15:05

那麼如果db是非歸檔模式,僅僅在高峰時間出現
Thread 1 cannot allocate new log, sequence 286857
Checkpoint not complete
這樣的情況的話,應該如何解決呢?


作者:remen 時間:04-09-29 15:08

增加日誌組??


作者:biti_rainy 時間:04-09-29 15:33

quote:
最初由 remen 釋出
那麼如果db是非歸檔模式,僅僅在高峰時間出現
Thread 1 cannot allocate new log, sequence 286857
Checkpoint not complete
這樣的情況的話,應該如何解決呢?



Checkpoint not complete
---------- 很明顯,檢查點沒完成,增加日誌組和日誌檔案大小,當然有限考慮io問題


作者:remen 時間:04-09-29 15:40

謝謝回覆!
但是我們的系統平時大概18分鐘切換一次日誌,唯獨在中午執行mrp計劃的時候切換比較頻繁,同時提示檢查點無法完成,所以我覺得日誌檔案的大小應該差不多了,增加日誌組才是首選,請問我的推斷正確嗎?


作者:biti_rainy 時間:04-09-29 16:05

難道有什麼不正確的嗎? 都到這個份上了幹嗎那麼懷疑自己呢


作者:remen 時間:04-09-29 16:16

呵呵,謝謝!


作者:remen 時間:04-10-07 09:36

另外,如果出現Checkpoint not complete,會造成什麼後果呢?
寫日誌的程式等待歸檔完成???那麼再歸檔沒完成之前的這段時間日誌往哪個日誌組寫呢?
比如現在group 2寫滿了,要開始寫group 1,但是1的歸檔還沒完成,這個時候就出現了Checkpoint not complete,那麼這個時候1是不能寫的,那日誌往哪裡寫呢?繼續重用2??這樣的話,2中的資料不就被覆蓋了?它可還沒有歸檔呢呀!

另外,上面討論的都是歸檔模式下的,但是非歸檔呢?如果出現Checkpoint not complete意味著什麼呢?DBWn速度太慢??


作者:biti_rainy 時間:04-10-07 11:19

Checkpoint not complete 那資料庫就暫時地hang住了唄


非歸檔,當然是 dbwr 速度太慢(本質上就是io存在問題)


作者:remen 時間:04-10-07 11:30

謝謝!
既然這樣,那麼如果這時候資料庫遭到破壞,需要利用歸檔日誌來恢復,僅僅憑藉這些日誌能夠完全恢復嗎?
因為既然資料庫hang住了,那麼這段時間內發生的資料庫的改變就沒有地方可以寫,也就造成了歸檔日誌的不完整,對嗎?


作者:biti_rainy 時間:04-10-07 11:39

ft

資料庫hang住了,這段時間資料庫能發生改變嗎?無法產生任何日誌!也就意味著資料庫跟死了一樣,普通使用者都無法登陸!


所有時間均為 . 現在時間是 09:41.

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

相關文章