|
導讀數據庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。所謂“數據庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應... 數據庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。所謂“數據庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應用程序彼此獨立的數據集合。 一、數據庫Hang時可能的現象 1、最直觀的是你的大部分的業務操作,比如說一個查詢都使用好長的時間,或根本就返回不出結果。這和簡單那種鎖表是有區別的。 2、在操作系統上用Hp-unix用glance、Aix用nmon及用sar做監測會出現系統空閑的假象,表面看起來系統很閑,實際上系統已經Hang了。 3、查v$session_wait會出現大量的”latch free”、”enqueue”、” free buffer waits”等等待事件,有時后臺會出現大量的.trc文件,另外需要觀注一下$ORACLE_HOME/rdbms/log這個位置,有一些時侯trace文件會生成到這里。 二、Oracle庫Hang時一些有用的操作和查詢 1、如果要尋求Oracle的技術支持,我們需要dump一下Oracle的systemstate,操作如下 SQL>conn / as sysdba; SQL> alter session set events ’immediate trace name SYSTEMSTATE level 10’; 需要等幾分鐘的時間,這時在init<SID>.ora中所設置的user_dump_dest所標識的位置就可以找到這個.trc文件,一般比較大。 2、捕獲一些視圖的狀態值 SQL>conn / as sysdba; SQL>set linesize 500 SQL>set pagesize 0 SQL>spool v_views.txt SQL> SELECT * FROM v$parameter; SQL>SELECT class, value, name FROM v$sysstat; SQL>SELECT sid, id1, id2, type, lmode, request FROM v$lock; SQL>SELECT l.latch#, n.name, h.pid, l.gets, l.misses, l.immediate_gets, l.immediate_misses, l.sleeps FROM v$latchname n, v$latchholder h, v$latch l WHERE l.latch# = n.latch# AND l.addr = h.laddr(+); SQL>SELECT * FROM v$session_wait ORDER BY sid; --隔幾秒重復執行3次。 SQL>spool off 3、有條件的話用statspack生成了一個Report,如果你對statspach不熟悉,可以參照http://www.itpub.net/showthread.php?s=&threadid=144448這個鏈接。 三、產生Hang可能的幾個原因 1、開歸檔的情況下,歸檔位置所在的文件系統滿了,這時lgwr就會等待歸檔進程的完成,DML寫不了日志,都處于等待的狀態。 2、在HP的系統開異步Io時,沒為dba的組設置MLOCK權限。正常來說Oracle的啟動是會報錯的,可是有些時侯比如Oracle8.1.6的版本就不報錯啟動,但是此時的異步Io是有問題的,仔細查看你會在$ORACLE_HOME/rdbms/log看到大量的.trc文件。這種情形引的Hang我遇到過。 3、由于異常進程引起的,我所說的是那些占用系統資源(cpu,memory)特別大的進程,這些進程一般占用cpu會達到90%以上,相對其它的進程比較突出?梢酝ㄟ^hp-unix的glance、topas,IBM的nmod,topas,ps等工具進行監測。 4、由于主機系統、陣列的某方面的瓶頸引起的,在實際中最普遍的應該是Io的問題,比如IO方面有瓶頸,則dbwr、lgwr就會引” free buffer waits”、” log buffer space”等一系列的等待事件,此時是性能的問題,感覺起來像Hang。 5、也有bug的因素,我的庫都是最新的補丁,這方面的問題還沒遇到過。 四、幾點處理建議 當得到Oracle的庫奇慢或Hang時保持冷靜的頭腦很重要的,可以按如下的方法進行一些處理: 1、首先要到操作系統上去,用glance等工具進行一下觀察,看一下cpu、內存、交換區、磁盤的繁忙程度與平時是不是相似的,同時看一看有沒有占系統資源特別大的進程,有些時侯是這些進程引起的,通過v$process和v$session兩個視圖找到這Oracle進程的sid,serial#,把它用Alter system kill session ‘sid,serial#’;殺掉就行了。如果平時同樣的時段你的磁盤的繁忙程度是95%,而些時它為20%,當然是假設了,說明Oracle的庫沒準真的hang了。 2、時間來得及的話執行一下”二”中的語句是很必要的,這樣可以把這些信息提交給Oracle的supporter,讓你們給你分析一下,查一下原因。 3、如果你的庫開歸檔了,出現Hang的時侯一定要看一下歸檔日志的文件系統是不是滿了,做一個完備一些的網管系統是很必要的。 4、在HP系統上打開異步IO時一定不要忘記為dba這個組加上MLOCK的權限,我就吃過這個虧。 5、時常的觀注一下v$session_wait或用statspack進行觀注一下等待事件,一般IO相關的事件較多,為Oracle打開異步IO、多加幾個寫進程及為Oracle數據文件所用的raw device使用條帶都是很必要的。與應用的開發商交流也很重要,沒準最近新上的一個應用就特耗IO或特占CPU資源。 6、盡量要使用比較穩定的Oracle的版本,比如Oracle8.1.7.4及Oracel9.2.0.4(最新為 9.2.0.5)都很穩定的,可以少去好多的麻煩。 全新的路由器不僅讓你更穩定快速地連接無線網絡,更可以讓家中的智能設備連接在一起。 |
溫馨提示:喜歡本站的話,請收藏一下本站!