gdufo

           

          Database Configuration and IO Issues

           

          Oracle進程與files

           
          1、performance guidelines
          1)對于吞吐量較大的OLTP應用中,當使用dictionary管理表空間的方法時,由于所有的extent分配時都會要訪問dictionary,從而造成了沖突。而使用本地管理表空間的方法避免了這類沖突,從而提高了并發性。
          2)在本地管理表空間中,使用自動空間管理方法,用位圖記錄不同blocks的使用情況。也提高了相應的速度。
          3)當創建一個user后,就會分配一塊所需的磁盤排序所需臨時表空間。這些排序區應該從其他database object中分離開,如果沒有給user分配臨時表空間,則其所需的排序區域將從system表空間分配。
          4)tables和indexes應該被分開存儲在不同表空間中。因為indexes和tables經常被同時讀寫。
          5)對于含有LONG或LOB數據類型的tables,應該被分配在不同的表空間中。
          6)適當創建多個臨時表空間。

          2、distributing files across devices:
          1)應該將redo log和data file存放在不同的磁盤上,從而在一定程度上降低i/o的壓力。
          2)對于規模較大的表,如果分不同的區域并發訪問也可以提高性能partition。
          3)盡可能排除非Oracle Server進程對database file的I/O操作。對此可以使用v$filestat動態的觀察。
          4)了解應用程序主要的I/O操作,合理安排disk布局,從而提高性能。

          3、表空間的作用:其中system表空間主要是用于存放sys創建的data dictionary objects。其他users不可使用該表空間。需要明確的是,packages和database triggers對象等都是data dictionary的一部分。rollback segments應該排他使用其rollback segment。undo segments可以只能存在在undo tablespace中。

          4、監控I/O狀態的工具
          1)v$filestat視圖。
          select phyrds, phywrts, d.name from v$datafile d, v$filestat f where d.file# = f.file# order by d.name;
          2)statspack
          5、file striping
          1)對OS的striping,通過使用硬件或是軟件層次上的striping,可以將同一個文件的不同blocks放在不同的devices上,例如raid技術。提供一定的冗余的同時增大I/O性能的。
          此外,設置適當的DB_FILE_MULTIBLOCK_READ參數。
          2)手工的striping:可以在多個不同的disk創建tablespace。隨后將不同的tables、indexes分配到不同的 tablespace中。此外,可以創建對象時使用MINEXTENTS句柄其值大于1,這樣每個extents都將略小于striped data files。也可直接給extents進行分配定位(但我認為這會給管理帶來麻煩):alter table tablename allocate  extent ( datafile ‘filename’ size 10M);
          對于這塊爭用的問題,使用手動的striping還是比較有效的。
          6、對全表掃描的tuning:當對某個disk有較高的讀寫操作時,多是由于沒有適當調節sql的原因。
          查看全表掃描的次數:
          select name, value form v$sysstat where name like ‘%table scans%‘;
          獲得的結果中’table scans ( long tables)’的值如果較大,則需要考慮調節sql或是增加適當的indexes。
           long tables (長表)指多于4個塊的表, short table(短表)指等于或小于4個塊的表。
          初始化參數DB_FILE_MULTIBLOCK_READ_COUNT決定了在全表掃描時,一次I/O操作中讀入的最大的database blocks。它可以改變全表掃描時需要的I/O的次數。該參數的設置應該受到OS限制的I/O的上限的約束。此外此參數還可以在session級別進行 調節。對它的調節可以先查看完成每個表的全表掃描掃描多少blocks。從而從整體上得到較好的設置。要注意的是,對cost-based 優化將會使用該參數評估使用全表掃描的代價,從而判斷是否使用全表掃描。
          對于全表掃描,Oracle提供了視圖v$session_longops來進行監控。
          select sid, serial#, opname, to_char(start_time,’HH24:MI:SS’) as starttime, (sofar/totalwork)*100 as percent_complete from v$session_longops;
          7、checkpoints
          什么是checkpoint?
           checkpoint是一個數據庫事件,它將已修改的數據從高速緩存刷新到磁盤,并更新控制文件和數據文件。
          什么時候發生checkpoint?
            我們知道了checkpoint會刷新臟數據,但什么時候會發生checkpoint呢?以下幾種情況會觸發checkpoint。
            1.當發生日志組切換的時候
            2.當符合LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_io_target,fast_start_mttr_target參數設置的時候
            3.當運行ALTER SYSTEM SWITCH LOGFILE的時候
            4.當運行ALTER SYSTEM CHECKPOINT的時候
            5.當運行alter tablespace XXX begin backup,end backup的時候
            6.當運行alter tablespace ,datafile offline的時候;

          1)它可以引起DBWn的I/O操作,同時會更新datafile header和control file中的scn等信息。
          頻繁的進行checkpoint可以縮短instance恢復的時間,但是會降低Oracle運行的性能。
          在LGWR寫redo log文件時,當一個group 被寫滿時,需要進行log switch是,會先發起一個checkpoint,這就意味著:DBWn會先將所有的與該redo log有關的dirty data blocks寫入datafile,隨后CKPT會修改datafile header和控制文件。
          checkpoint并不會影響其他工作。如果DBWn進程尚未完成checkpoint一個file,此時LGWR需要在此需要這個file時,LGWR不得不等待。
          2)對checkpoint性能的監控與調節:
          **  checkpoint的監控主要是查看alert.log文件。可以將LOG_CHECKPOINT_TO_ALERT參數設置true,從而記錄checkpoint的開始結束時間。
          **  通過調節online redo log files的大小來降低因日志切換引起的checkpoint;
          **  增多redo log 的groups,從而延長LGWR覆蓋寫的時間,從而避免引起不必要的LGWR等待。
          **  具體可調節的參數有:
          – FAST_START_IO_TARGET
          – LOG_CHECKPOINT_INTERVAL
          – LOG_CHECKPOINT_TIMEOUT
          – DB_BLOCK_MAX_DIRTY_TARGET
          – FAST_START_MTTR_TARGET
          如果在OLTP系統中,SGA設置過大,同時checkpoint稀少,可能引起disk沖突。所以也要適當增加checkpoint的頻率。
          貌似我的理解是除了user發起的alter database checkpoint命令外,主要兩類checkpoint,時間間隔型和fast-start類型的。
          通過查看v$instance_recovery視圖,查看參數設置對DB recovery時間的影響,其中:
          RECOVERY_ESTIMATED_IOS:顯示了基于fast-start的設置,在recovery時,需要處理的data blocks。
          ACTUAL_REDO_BLKS:顯示了當前要進行recovery時所需的redo blocks。
          TARGET_REDO_BLKS:在recovery時,最大的需要處理的redo blocks。是下面四個指標的最小值。
          LOG_FILE_SIZE_REDO_BLKS:在recovery時,為了確保log switch不會等待checkpoint,要處理的redo blocks數量。
          LOG_CHKPT_TIMEOUT_REDO_BLKS:在recovery時滿足log_checkpoint_timeout,需要處理的redo blocks的數量。
          LOG_CHKPT_INTERVAL_REDO_BLKS:在recovery時為了滿足log_checkpoint_interval,需要處理的redo blocks的數量。
          FAST_START_IO_TARGET_REDO_BLKS:在recovery時為了滿足fast_start_io_target,需要處理的redo blocks的數量。
          對checkpoint的設置主要圍繞的中心就是recovery用時,和它引起的I/O是否會造成性能的問題。
          8、redo log的groups和members的設計
          一般會把同一組的不同成員放置在不同的disk上,如果在歸檔模式下,則要考慮將歸檔日志放到不同的磁盤上。為redo log選擇適當的size。同時在一定程度上增加log file的groups,從而避免不必要的等待。
          對redo log的監控視圖主要有:V$LOGFILE, V$LOG, V$LOG_HISTORY,此外還可結合v$system_event獲得的結果。
          9、歸檔日志的設置
          當開啟歸檔模式時,可以考慮將不同的groups放在不同的disks上(當然不一定是每個group一個磁盤),同時與歸檔文件的存放也分離,這樣使LGWR進程寫的disk和ARCn進程讀的disk不在一個上。
          可以從視圖V$ARCHIVED_LOG上獲得動態的歸檔log文件的信息。V$ARCHIVE_DEST當前歸檔進程的destinations的狀態信息。(由參數log_archive_dest_n設置的destination)
          監控診斷ARCn的工具主要是使用視圖:V$ARCHIVED_LOG, V$ARCHIVE_PROCESSES, V$ARCHIVE_DEST。
          對歸檔的調節,可以使用LOG_ARCHIVE_MAX_PROCESSES參數指定最大可以創建的歸檔進程。
          如果預計歸檔工作量較大,可以通過定期運行下面語句來獲得其他進程來分擔。
          alter system archive log all to ‘directory_name’;
          注意:9i中,當DBWR_IO_SLAVES參數的設置大于0,Oracle會自動將ARCn的進程數設置為4。(但是我的11g貌似DBWR_IO_SLAVES=0,而ARCn也是4個多啊,大概是設了其他的參數)

          設置適當的fast_start_io_target,

          posted on 2010-01-12 12:30 gdufo 閱讀(496) 評論(0)  編輯  收藏 所屬分類: Database (oracle, sqlser,MYSQL)

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Hibernate

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 洛川县| 盱眙县| 西华县| 德惠市| 兴文县| 天长市| 彭州市| 比如县| 文昌市| 衡山县| 信宜市| 苍南县| 宁津县| 阿鲁科尔沁旗| 舟曲县| 弥勒县| 松阳县| 甘孜| 通山县| 当涂县| 庆城县| 鲁山县| 高阳县| 衡阳市| 安图县| 慈利县| 皮山县| 九台市| 常宁市| 茂名市| 墨竹工卡县| 新建县| 张家界市| 兰州市| 平顺县| 家居| 宿迁市| 潜山县| 隆尧县| 平遥县| 柞水县|