oracle常見等待事件及處理方法_第1頁
oracle常見等待事件及處理方法_第2頁
oracle常見等待事件及處理方法_第3頁
oracle常見等待事件及處理方法_第4頁
oracle常見等待事件及處理方法_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、實用標準文案我們可以通過視圖 v$session_wait 來查看系統(tǒng)當前的等待事件,以及與等待事件相對應的 資源的相關(guān)信息看書筆記 db file scattered read DB ,db file sequential read DB,free buffer waits,logbuffer space,log file switch,log file sync 我們可以通過視圖 v$session_wait 來查看系統(tǒng)當前的等待事件,以及與等待事件相對應的 資源的相關(guān)信息,從而可確定出產(chǎn)生瓶頸的類型及其對象。 v$session_wait 的 p1 、 p2 、 p3 告訴我們等待事件的

2、具體含義,根據(jù)事件不同其內(nèi)容也不相同,下面就一些常見的等待 事件如何處理以及如何定位熱點對象和阻塞會話作一些介紹。<1> db file scattered read DB 文件分散讀取 (太多索引讀 ,全表掃描 調(diào)整代碼 ,將小 表放入內(nèi)存 ) 這種情況通常顯示與全表掃描相關(guān)的等待。 當全表掃描被限制在內(nèi)存時, 它們很少會進入連 續(xù)的緩沖區(qū)內(nèi), 而是分散于整個緩沖存儲器中。 如果這個數(shù)目很大, 就表明該表找不到索引, 或者只能找到有限的索引。 盡管在特定條件下執(zhí)行全表掃描可能比索引掃描更有效, 但如果 出現(xiàn)這種等待時,最好檢查一下這些全表掃描是否必要。因為全表掃描被置于 LRU(

3、Least Recently Used ,最近最少適用 )列表的冷端( cold end ),所以應盡量存儲較小的表,以避 免一次又一次地重復讀取它們。該類事件的 p1text=file#,p1是 file_id , p2 是 block_id, 通過 dba_extents 即可確定出熱點對象 (表或索引 )select owner,segment_name,segment_typefrom dba_extentswhere file_id = &file_idand &block_id between block_id and block_id + &blocks

4、- 1;<2> db file sequential read DB 文件順序讀取 ( 表連接順序不佳 調(diào)整代碼 ,特別是表連接) 這一事件通常顯示單個塊的讀取 (如索引讀取 ) 。這種等待的數(shù)目很多時,可能顯示表的連接 順序不佳, 或者不加選擇地進行索引。對于大量事務處理、調(diào)整良好的系統(tǒng),這一數(shù)值大多 是很正常的, 但在某些情況下, 它可能暗示著系統(tǒng)中存在問題。 你應當將這一等待統(tǒng)計量與 Statspack 報告中的已知問題(如效率較低的 SQL )聯(lián)系起來。檢查索引掃描,以保證每 個掃描都是必要的,并檢查多表連接的連接順序。 DB_CACHE_SIZE 也是這些等待出現(xiàn)頻 率的

5、決定因素。有問題的散列區(qū)域( Hash-area )連接應當出現(xiàn)在 PGA 內(nèi)存中,但它們也 會消耗大量內(nèi)存, 從而在順序讀取時導致大量等待。 它們也可能以直接路徑讀寫等待的形 式出現(xiàn)。該類事件的 p1text=file#,p1是 file_id , p2 是 block_id, 通過 dba_extents 即可確定出熱點對象 (表或索引 )select owner,segment_name,segment_typefrom dba_extentswhere file_id = &file_idand &block_id between block_id and block_

6、id + &blocks - 1;<3> free buffer waits釋放緩沖區(qū)等待 (增大 DB_CACHE_SIZE, 加速檢查點 ,調(diào)整代碼 ) 這種等待表明系統(tǒng)正在等待內(nèi)存中的緩沖, 因為內(nèi)存中已經(jīng)沒有可用的緩沖空間了。 如果所 有 SQL 都得到了調(diào)優(yōu),這種等待可能表示你需要增大 DB_BUFFER_CACHE 。釋放緩沖區(qū) 等待也可能表示不加選擇的 SQL 導致數(shù)據(jù)溢出了帶有索引塊的緩沖存儲器,沒有為等待系 統(tǒng)處理的特定語句留有緩沖區(qū)。這種情況通常表示正在執(zhí)行相當多數(shù)量的 DML (插入更 新刪除),并且數(shù)據(jù)庫書寫器 (DBWR) 寫的速度不夠快,緩沖存儲

7、器可能充滿了相同緩沖 器的多個版本, 從而導致效率非常低。為了解決這個問題,可能需要考慮增加檢查點、 利用 更多的 DBWR 進程,或者增加物理磁盤的數(shù)量。<4> buffer busy waits 緩沖區(qū)忙等待 (BUFFER 熱塊 ) 這是為了等待一個以非共享方式使用的緩沖區(qū), 或者正在被讀入緩沖存儲器的緩沖區(qū)。 緩沖 區(qū)忙等待不應大于 1% 。檢查緩沖等待統(tǒng)計部分(或 V$WAITSTAT ):A 、如果等待處于字段頭部, 應增加自由列表 ( freelist )的組數(shù),或者增加 pctused 到 pctfree 之間的距離。B、 如果等待處于回退段(undo )頭部塊,可

8、以通過增加回滾段(rollback segment) 來解決 緩沖區(qū)的問題;C、如果等待處于回退段(undo )非頭部塊上,就需要降低驅(qū)動一致讀取的表中的數(shù)據(jù)密 度,或者增大 DB_CACHE_SIZE ;D、 如果等待處于數(shù)據(jù)塊,可以將數(shù)據(jù)移到另一數(shù)據(jù)塊以避開這個”熱"數(shù)據(jù)塊、增加表中的 自由列表或使用 LMT 表空間;E、如果等待處于索引塊,應該重建索引、分割索引或使用反向鍵索引。為了防止與數(shù)據(jù)塊相關(guān)的緩沖忙等待, 也可以使用較小的塊: 在這種情況下, 單個塊中的記 錄就較少,所以這個塊就不是那么”繁忙"。在執(zhí)行DML(插入/更新/刪除)時Oracle DBWR就向塊中

9、寫入信息, 包括所有對塊狀態(tài)”感興趣"的用戶(感興趣的事務表,ITL)。為減少這一 區(qū)域的等待,可以增加 initrans ,這樣會在塊中創(chuàng)建空間,從而使你能夠使用多個 ITL 槽。 你也可以增加該塊所在表中的 pctfree( 當根據(jù)指定的 initrans 建立的槽數(shù)量不足時,這樣 可以使 ITL 信息數(shù)量達到 maxtrans 指定的數(shù)量) 。<6> enqueueenqueue 是一種保護共享資源的鎖定機制。該鎖定機制保護共享資源,如記錄中的數(shù)據(jù), 以避免兩個人在同一時間更新同一數(shù)據(jù)。 enqueue 包括一個排隊機制, 即 FIFO( 先進先出 ) 排隊機制。注

10、意:Oracle 的latch機制不是FIFO°Enqueue 等待通常指的是 ST enqueue、 HW enqueue 、TX4 enqueue 和 TM enqueue 。A、ST enqueue 用于空間管理和字典管理的表空間的分配。利用 LMT ,或者試圖對區(qū)域 進行預分配,或者至少使下一個區(qū)域大于有問題的字典管理的表空間。B、HW enqueue 與段的高水位標記一起使用;手動分配區(qū)域可以避免這一等待。C、TX4 enqueue 是最常見的 enqueue 等待,通常是以下三個問題之一產(chǎn)生的結(jié)果 : 第一個問題是唯一索引中的重復索引,需要執(zhí)行提交( commit )/

11、回滾( rollback )操作來 釋放 enqueue 。第二個問題是對同一位圖索引段的多次更新。因為單個位圖段可能包含多個行地址(rowid),所以當多個用戶試圖更新同一段時,你需要執(zhí)行提交或回滾操作 ,以釋放 enqueue 。第三個問題,也是最可能發(fā)生的問題是多個用戶同時更新同一個塊。 如果沒有自由的 ITL 槽, 就會發(fā)生塊級鎖定。通過增大 initrans 和/ 或 maxtrans 以允許使用多個 ITL 槽,或者增大 表上的 pctfree 值,就可以很輕松地避免這種情況。D、TM enqueue 在 DML 期間產(chǎn)生,以避免對受影響的對象使用 DDL 。如果有外來關(guān)鍵 字,一

12、定要對它們進行索引,以避免這種常見的鎖定問題。<7> log buffer space 日志緩沖空間 (寫 REDO 慢 增大 log_buffer,redo log file 放到快速磁盤上 )當日志緩沖 (log buffer) 寫入重做日志 (redo log) 的速度比 LGWR 的寫入速度慢,或者是當 日志轉(zhuǎn)換 (log switch) 太慢時,就會發(fā)生這種等待。為解決這個問題,可以增大日志文件的 大小, 或者增加日志緩沖器的大小, 或者使用寫入速度更快的磁盤。 甚至可以考慮使用固態(tài) 磁盤,因為它們的速度很高。<8> log file switch日志文件轉(zhuǎn)換

13、 (歸檔慢 增加或者擴大重做日志 )有兩種情況:A 、 log file switch (archiving needed) 當日志切換的時候由于日志組循環(huán)使用了一圈但日志歸檔還沒有完成,通常是 io 有嚴重問 題,可增大日志文件和增加日志組,調(diào)整 log_archive_max_processesB、 log file switch (checkpoint incomplete) 當日志切換的時候由于日志組循環(huán)使用了一圈但將被使用的日志組中的 checkpoint 還沒有 完成造成,通常是 io 有嚴重問題,可增大日志文件和增加日志組<9> log file sync日志文件同步

14、 (提交太頻繁 批量提交 )當用戶 commit 的時候通知 lgwr 寫日志但 lwgr 正忙,造成的可能原因是 commit 太頻繁 或者 lgwr 一次寫日志時間太長 (可能是因為一次 log io size 太大),可調(diào)整 _log_io_size , 結(jié)合 log_buffer, 使得 (_log_io_size*db_block_size)*n = log_buffer, 這樣可避免和增大 log_buffer 引起沖突 ;放置日志文件于高速磁盤上<10> library cache pin該事件通常是發(fā)生在先有會話在運行 PL/SQL,VIEW,TYPES 等 obj

15、ect 時 ,又有另外的會話執(zhí) 行重新編譯這些 object, 即先給對象加上了一個共享鎖 ,然后又給它加排它鎖 ,這樣在加排它 鎖的會話上就會出現(xiàn)這個等待。 P1,P2 可與 x$kglpn 和 x$kglob 表相關(guān)X$KGLOB (Kernel Generic Library Cache Manager Object)X$KGLPN (Kernel Generic Library Cache Manager Object Pins)- 查詢 X$KGLOB, 可找到相關(guān)的 object, 其 SQL 語句如下(即把 V$SESSION_WAIT 中的 P1raw 與 X$KGLOB 中的

16、 KGLHDADR 相關(guān)連 )select kglnaown,kglnaobj from X$KGLOBwhere KGLHDADR =(select p1raw from v$session_waitwhere event='library cache pin')- 查出引起該等待事件的阻塞者的 sidselect sid from x$kglpn , v$sessionwhere KGLPNHDL in(select p1raw from v$session_waitwhere wait_time=0 and event like 'library cache pi

17、n%')and KGLPNMOD <> 0and v$session.saddr=x$kglpn.kglpnuse- 查出阻塞者正執(zhí)行的 SQL 語句select sid,sql_textfrom v$session, v$sqlareawhere v$session.sql_address=v$sqlarea.addressand sid=< 阻塞者的 sid>這樣 ,就可找到 "library cache pin" 等待的根源,從而解決由此引起的性能問題。<11> library cache lock該事件通常是由于執(zhí)行多個

18、DDL 操作導致的 ,即在 library cache object上添加一個排它鎖后 ,又從另一個會話給它添加一個排它鎖,這樣在第二個會話就會生成等待??赏ㄟ^到基表x$kgllk 中查找其對應的對象。- 查詢引起該等待事件的阻塞者的 sid 、會話用戶、鎖住的對象select b.sid,a.user_name,a.kglnaobjfrom x$kgllk a , v$session bwhere a.kgllkhdl in(select p1raw from v$session_waitwhere wait_time=0 and event = 'library cache loc

19、k')and a.kgllkmod <> 0and b.saddr=a.kgllkuse當然也可以直接從 v$locked_objects 中查看,但沒有上面語句直觀根據(jù) sid 可以到 v$process 中查出 pid ,然后將其 kill 或者其它處理。<5> latch free ( 等待 LATCH FREE)latch 是一種低級排隊機制 (它們被準確地稱為相互排斥機制 ),用于保護系統(tǒng)全局區(qū)域 (SGA) 中共享內(nèi)存結(jié)構(gòu)。 latch 就像是一種快速地被獲取和釋放的內(nèi)存鎖。 latch 用于防止共享內(nèi) 存結(jié)構(gòu)被多個用戶同時訪問。如果 latch 不

20、可用,就會記錄 latch 釋放失敗。大多數(shù) latch 問題都與以下操作相關(guān): 不能使用邦定變量 (庫緩存 latch )、重復生成問題 (重復分配 latch )、 緩沖存儲器競爭問題 (緩沖器存儲 LRU 鏈),以及緩沖存儲器中的 "熱"塊(緩沖存儲器鏈) 。 也有一些 latch 等待與 bug (程序錯誤)有關(guān),如果懷疑是這種情況,可以檢查 MetaLink 上的 bug 報告。該事件的熱點對象可通過以下語句查找, 其中 &2 值是 v$session_wait 中的 P1RAW ,x$bh 中的字段 Hladdr 表示該 block buffer 在哪個

21、 cache buffer chain latch 上,可以通過v$latch_children 定位哪些 segment 是熱點塊。select a.hladdr, a.file#, a.dbablk, a.tch, a.obj, b.object_name from x$bh a, dba_objects bwhere (a.obj = b.object_id or a.obj = b.data_object_id)and a.hladdr = &2unionselect hladdr, file#, dbablk, tch, obj, nullfrom x$bhwhere obj

22、 in(select obj from x$bhwhere hladdr = &2minusselect object_id from dba_objectsminusselect data_object_id from dba_objects)and hladdr = &2order by 4;*Latch 問題及可能解決辦法* Library Cache and Shared Pool (未綁定變量 - 綁定變量 , 調(diào)整 shared_pool_size) 每當執(zhí)行 SQL 或 PL/SQL 存儲過程 ,包 ,函數(shù)和觸發(fā)器時 ,這個 Latch 即被用到 .Parse 操

23、作中 此 Latch 也會被頻繁使用 .* Redo Copy ( 增大 _LOG_SIMULTANEOUS_COPIES 參數(shù) )重做拷貝 Latch 用來從 PGA 向重做日志緩沖區(qū)拷貝重做記錄 .* Redo Allocation ( 最小化 REDO 生成 ,避免不必要提交 )此 Latch 用來分配重做日志緩沖區(qū)中的空間,可以用 NOLOGGING 來減緩競爭 .* Row Cache Objects ( 增大共享池 )數(shù)據(jù)字典競爭 .過度 parsing.* Cache Buffers Chains (_DB_BLOCK_HASH_BUCKETS 應增大或設(shè)為質(zhì)數(shù) )"過

24、熱 "數(shù)據(jù)塊造成了內(nèi)存緩沖鏈 Latch 競爭.* Cache Buffers Lru Chain ( 調(diào)整 SQL ,設(shè)置 DB_BLOCK_LRU_LATCHES, 或使用多個緩沖 區(qū)池)掃描全部內(nèi)存緩沖區(qū)塊的 LRU(最近最少使用)鏈時要用到內(nèi)存緩沖區(qū) LRU鏈Latch.太小內(nèi) 存緩沖區(qū)、過大的內(nèi)存緩沖區(qū)吞吐量、過多的內(nèi)存中進行的排序操作、DBWR 速度跟不上工作負載等會引起此 Latch 競爭。<12> db file parallel write與 DBWR 進程相關(guān)的等待 , 一般代表了 I/O 能力出現(xiàn)了問題 . 通常與配置的多個 DBWR 進程或者 DB

25、WU 的 I/O slaves 個數(shù)有關(guān) .當然也可能意味著設(shè)備上存在著I/O 競爭<13> db file single write 表示在檢查點發(fā)生時與文件頭寫操作相關(guān)的等待.通常與檢查點同步數(shù)據(jù)文件頭時文件號的紊亂有關(guān) .<14> direct path read 和 direct path write表示與直接 I/O 讀相關(guān)的等待 . 當直接讀數(shù)據(jù)到 PGA 內(nèi)存時 ,direct path read出現(xiàn) .這種類型的讀請求典型地作為 :排序 IO( 為排序不能在內(nèi)存中完成的時候 ),并行 Slave 查詢或者預先 讀請求等 . 通常這種等待與 I/O 能力或

26、者 I/O 競爭有關(guān) .<15> free buffer inspected 表示在將數(shù)據(jù)讀入數(shù)據(jù)調(diào)整緩存區(qū)的時候等待進程找到足夠大的內(nèi)在空間通常這類等待表 示數(shù)據(jù)調(diào)整緩存區(qū)偏小 .<16> library cache load lock表示在將對象裝載到庫高速緩存時出現(xiàn)了等待.這種事件通常代表著發(fā)生了負荷爾蒙很重的語句重載或者裝載 ,可能由于 SQL 語句沒有共享或者共享池區(qū)域編小造成的 .<17> log file parallel write表示等待 LGWR 向操作系統(tǒng)請求 I/O 開始直到完成 IO. 在觸發(fā) LGWR 寫的情況下如 3 秒、 1/

27、3 、 1MB 、 DBWR 寫之前可能發(fā)生 .這種事件發(fā)生通常表示日志文件發(fā)生了I/O 競爭或者文件所在的驅(qū)動器較慢<18> log file single write 表示寫日志文件頭塊時出現(xiàn)了等待 .一般都是發(fā)生在檢查點發(fā)生時 .<19> transaction表示發(fā)生了一個阻塞回滾操作的等待<20> undo segment extension表示在等待回滾段的動態(tài)擴展 . 這表示可能事務量過大 ,同時也意味著可能回滾段的寢大小不 是最優(yōu) ,MINEXTENTS 設(shè)置得偏小 .考慮減少事務 ,或者使用最小區(qū)數(shù)更大的回滾段 .Oracle 常見錯誤診斷

28、內(nèi)容摘要: Oracle 的這類錯誤在 ORALCE 的文檔中有具體說明, 但原因及措施說明不具體, 本文當著重說明如何解決這類錯誤。1、ORA-12571 、 ORA-03113 、ORA-03114 、ORA-01041特征 :客戶端 (代理或應用服務器 )有時報這類斷連錯誤原因 :假如偶然出現(xiàn)一次,則可能為網(wǎng)絡原因或用戶異常中止,假如經(jīng)常出現(xiàn)則為客戶 端與服務端的字符集不一致。措施 :假如偶然出現(xiàn),可在服務端的協(xié)議配置文件PROTOCOL.ORA 中增加一行TCP.NODELAY=YES;假如經(jīng)常出現(xiàn),則為客戶端與服務端字符集不一致或網(wǎng)絡原因。客戶端的字符集在注冊表里定義HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG在 客 戶 端 注 冊 表 中 的 TCP 參 數(shù) 項 中 設(shè) TCPMAXDATARETRANSMITIONS=20 。2、ORA-01000特征 :達到會話答應的最大游標數(shù)原因 :達到會話答應的最大游標數(shù)措施 :有兩種解決方法(1) 在初始化文件 INIT

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論