調整緩衝區快取記憶體(Buffer Cache)的效能(2)

jss001發表於2009-02-15

  
  調整磁碟I/O的效能
  
  哪些操作會導致磁碟I/O:
  
  將Buffer cache中的內容寫到資料檔案。
  
  寫回退段。
  
  將資料檔案的內容讀到Buffer cache中。
  
  將Redo log Buffer中的內容寫到online redo log中。
  
  將online Redo log中的內容歸檔到 archive log中。
  
  1. 調整表空間和資料檔案
  
  測量資料檔案I/O:使用V$filestat。
  
  使用STATSPACK來測量資料檔案I/O。
  
  使用REPORT.TXT來測量資料檔案I/O。
  
  使用Performance Manager(I/O)來測量資料檔案I/O。
  
  建議:
  
  不要在SYSTEM表空間存放使用者資料。
  
  將 I/O操作均分到幾個資料檔案上。(監視資料檔案的I/O運算元。)
  
  使用本地管理的表空間。
  
  將資料庫檔案與其它程式的檔案分開。
  
  使用分割槽表和分割槽索引。
  
  將大表放在單獨的表空間。
  
  建立單獨的回退表空間。
  
  建立一個或多個臨時表空間。
  
  不要將聯機重做日誌檔案和歸檔聯機重做日誌檔案放在同一個裝置上。
  
  至少將一個控制檔案放在一個單獨的裝置上。
  
  檢查V$sysstat中的’table scans(long tables)’。
  
  使用init.ora引數DB_FILE_MULTIBLOCK_READ_COUNT(預設為16)來最佳化表掃描。
  
  2. 調整DBW0效能
  
  監視DBWR0效能。
  
  使用V$system_event監視下列事件:buffer busy waits、free buffer waits、
  
  db file parallel write、write complete waits、
  
  使用init.ora引數DBWR_IO_SLAVES(最佳化磁碟I/O)、
  
  DB_WRITER_PROCESSES(預設為1,最佳化Buffer Cache的內部管理)。
  
  如果DBWR_IO_SLAVES設為非0值,DB_WRITER_PROCESSES的值無效。
  
  3.調整段I/O
  
  避免動態空間分配。
  
  表的有關儲存特性
  
  空閒百分比(PCTFREE):每個物件資料塊中為今後更新該物件而保留的空間的百分比。可以輸入0到99之間的值。預設值為10%。
  
  已用百分比(PCTUSED):Oracle資料庫為該物件的每個資料塊保留的已用空間的最小百分比。當一個塊的已用空間低於“已用百分比”的值時,則該塊將成為插入行的目標。可以輸入1到99之間的值。預設值為40%。
  
  最小數量:建立段時已分配的總區數。預設值為1。可以輸入1或大於1的值。
  
  SQL> alter table emp allocate extent ;
  
  事務處理數量
  
  初始值:在分配給該物件的每個資料塊內分配給事務處理條目的初始數量。可以輸入1或2(對於簇和索引)到255之間的值。
  
  最大值:可同時更新分配給物件的資料塊的並行事務處理的最大數量。可以輸入1到255之間的值。
  
  自由表
  
  列表:表、簇或索引的每個自由表組的自由表數量。可以輸入1或大於1的值。預設值為1。
  
  組:表、簇或索引的自由表組的數量。可以輸入1或大於1的值。預設值為1。
  
  緩衝池。
  
  行轉移(更新行時超過塊的可用空間)和行連結(行的大小超過塊的大小)的概念。
  
  使用V$sysstat來監視行轉移和行連結:table fetch continued row。
  
  SQL>analyze table emp compute statistics;
  
  使用DBA_TABLES來查詢統計資訊。
  
  SQL> alter table emp deallocate unused;
  SQL> alter table scott.emp move tablespace users;
  
  表的高水位標誌High Water Mark(HWM)。
  
  4.調整排序IO
  
  哪些SQL語句需要排序操作:order by、group by、selec distinct、union、
  
  intersect、minus、analyze、create index、聯接。
  
  V$sysstat。記憶體排序和磁碟排序(臨時表空間中)。
  
  監視排序效能(記憶體排序比例>95%)。
  
  使用init.ora引數SORT_AREA_SIZE(512K)、SORT_AREA_RETAINED_SIZE、
  pga_aggregate_target、WORKAREA_SIZE_POLOCY。
  
  使用Performance Manager(資料庫例程)來監視排序。
  
  如何避免排序:SQL語法、正確索引、建立索引、ANALYZE。
  v$sort_segment、v$sort_usage。
  
  使用Tablespace Map。
  
  使用 Reorg Wizard。
  
  5. 最佳化回退段
  
  一個回退段的區間可以分配給多個事務,回退段的一個資料塊只能分配給一個事務。
  
  測量回退段事務表的爭用
  select * from V$system_event where event like ‘%undo%’;
  
  回退段事務表的等待時間應接近於0。
  
  select * from V$waitstat;
  V$rollstat
  
  回退段事務表訪問的成功率應>95%。
  
  回退段區間爭用
  V$waitstat、V$sysstat。
  
  回退段事務環繞(Wrap):一個事務佔用的回退段從一個區間擴充套件到另一個區間。
  
  回退段的動態區間分配
  V$system_event。
  
  使用V$rollstat來監視回退段的使用情況。
  
  使用Performance Manager(後臺程式)來測量回退段。
  
  提高回退段的效能
  
  Oracle9i中的撤消表空間。
  
  建議:每四個事務使用一個回退段,最多不超過20個回退段。
  
  會退段的區間大小512k,最小區間數20。
  
  明確分配回退段給事務。
  SQL> set transaction use rollback segment rbs01;
  
  最小化回退段活動:EXPORT、IMPORT、SQL* Loader時加commit=y引數。
  
  Oracle9i中的撤消表空間。[@more@]

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

相關文章