9i筆記-後臺程式

wmlm發表於2008-07-16

ARCn CKPT DBWn

[@more@]

-- 其它調整問題

-- ===========ARCn 歸檔程式============--
--如何確定ARCn程式是否有效地執行?

-- 與歸檔程式相關的等待事件
select name from v$event_name where name like 'log file switch%' ;

NAME
----------------------------------------
log file switch (checkpoint incomplete)
log file switch (archiving needed)
log file switch (clearing log file)
log file switch completion

-- 列出與日誌相關的等待事件
select * from v$system_event where event like 'log%';
select * from v$system_event where name like 'log file switch (archiving%';
-- 即日誌的切換要等archive的完成,如果出現log file switch (archiving needed)的等待事件,就說明歸檔不夠快,導致日誌切換不過來.

-- 透過v$archived_log 來檢視多長時間生成一個歸檔日誌,以及生成一個歸檔日誌要花費多長時間?
-- 每20分鐘生成一個歸檔日誌,還不算作是頻繁.
select name,blocks,status,
to_char(first_time,'dd-mon-yyyy hh24:mi:ss') started,
to_char(completion_time,'dd-mon-yyyy hh24:mi:ss') complete
from v$archived_log
--where trunc(first_time) = ''
-- 非歸檔模式是沒有內容的

-- 透過 v$archived_processes 檢視歸檔程式是否空閒?
select * from v$archived_processes;

-- 如何增加歸檔程式?
alter system set log_archive_max_processes = 5 ;
-- 這個引數值DEFAULT=2 MAX=10

-- =================== CKPT 檢查點程式 ==================== --
-- 何時需要調整檢查點?
-- 出現log file switch (checkpoint incomplete)
-- 當發生日誌切換時,首先觸發檢查點,檢查點通知DBWn 去寫資料檔案. 在這完成之前,LGWR必須等待,直到檢查點完成.
-- 如果出現這個事件,就需要考慮加快DBWn

-- 另外一個需要檢視的統計資訊是後臺檢查點啟動與完成的數量
select name,value from v$sysstat
where name like 'background checkpoint%'

NAME VALUE
---------------------------------------------------------------- ----------
background checkpoints started 0
background checkpoints completed 0

-- 如果started > completed 說明沒有在日誌檔案切換之間完成檢查點,
-- 反過來,說明日誌檔案不夠大 , 需要增加重做日誌檔案的大小 (注: 這一句話沒有理解,難道completed會大於started? )

-- 另外一點,透過查詢v$SYSSTAT,還可以確定每一個檢查點發生,平均寫入的資料塊數。
select name , value from v$sysstat where name like 'DBWR checkpoint%' ;

SQL> select name , value from v$sysstat where name like 'DBWR checkpoint%' ;

NAME VALUE
---------------------------------------------------------------- ----------
DBWR checkpoint buffers written 111
DBWR checkpoints 0

SQL> alter system checkpoint;

System altered.

SQL> select name , value from v$sysstat where name like 'DBWR checkpoint%' ;

NAME VALUE
---------------------------------------------------------------- ----------
DBWR checkpoint buffers written 114
DBWR checkpoints 1

-- 看上面的結果,一個檢查點寫了一塊資料到資料檔案中。
-- 有助於調整檢查點的另外兩個引數是: FAST_START_IO_TARGET FAST_START_MTTR_TARGET
-- FAST_START_MTTR_TARGET 是個綜合性的引數,這個引數設定後,需要經常檢視 V$INSTANCE_RECOVERY 檢視, 其中的ESTIMATED_MTTR是否符合MTTR的設定目標?
select estimated_mttr from v$instance_recovery;

ESTIMATED_MTTR
--------------
8
8遠遠小於設定的300秒,可以


-- =================== DBWn 資料寫入程式 ==================== --

-- DBWn慢 可能導致的情景:
-- 一個CKPT發生,DBWn 去寫,還沒有寫完,又一個CKPT發生......
-- 因此, DBWn 必須要跟上 CKPT 程式

-- ==== 是否有DBWn的爭用? ==== --
-- 1 透過v$SYSTEM_EVENT free buffer waits 這個等待說明資料庫為了取得空閒的BUFFER, 必須等待DBWn去完成寫操作.
select event,total_waits,time_waited
from v$system_event
where event like 'free%';
-- (思考: 這個時候增大DB BUFFER行嗎? 不行, 更多的DB_BUFFER,只會增加DBWn的負擔,所以只能快點寫,)

-- 2 透過v$SYSSTAT 檢視是否每次請求都能得到FREE BUFFER?
-- 如果得不到,則說明BUF不夠用.

SQL> select * from v$sysstat where name like 'DBW%';

STATISTIC# NAME CLASS VALUE
---------- ---------------------------------------------------------------- ---------- ----------
49 DBWR checkpoint buffers written 8 119
50 DBWR transaction table writes 8 38
51 DBWR undo block writes 8 40
52 DBWR revisited being-written buffer 8 0
53 DBWR make free requests 8 0
54 DBWR free buffers found 8 0
55 DBWR lru scans 8 0
56 DBWR summed scan depth 8 0
57 DBWR buffers scanned 8 0
58 DBWR checkpoints 8 1
59 DBWR cross instance writes 40 0
60 DBWR fusion writes 40 0


select round(a.value/b.value) avg_free_per_request
from v$sysstat a,v$sysstat b
where a.name = 'DBWR free buffers found'
and b.name = 'DBWR make free requests'
and b.value <> 0
/

-- 如何加快DBWn ?
-- 如果單CPU,OS 又不支援 非同步I/O (ASYN IO),啥也別做了。
-- 如果單CPU,OS 支援非同步I/O , 設定DBWR_IO_SLAVES disk_asynch_io 引數
-- 如果多CPU,set init parameter DB_WRITER_PROCESSES

--=========================--

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

相關文章