欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Oracle進(jìn)程占用CPU100%的問(wèn)題分析及解決方法

 更新時(shí)間:2024年08月22日 09:18:20   作者:Z.Virgil  
這篇文章主要介紹了Oracle進(jìn)程占用CPU100%的問(wèn)題分析及解決方法,文中通過(guò)代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下

問(wèn)題現(xiàn)象

Linux環(huán)境,數(shù)據(jù)庫(kù)CPU一直處于100%。業(yè)務(wù)系統(tǒng)運(yùn)行很慢。Top命令結(jié)果如下:

問(wèn)題分析

方法1

根據(jù)上圖中的oracle進(jìn)程在操作系統(tǒng)對(duì)應(yīng)的 PID號(hào) :  如  6999,8100 等

通過(guò)下面的SQL,查詢

select s.SQL_HASH_VALUE, s.SQL_ADDRESS
  from v$session s, v$process p
 where s.PADDR = p.ADDR
   and p.SPID = '6999' ---換成相關(guān)的pid值

然后,將 查詢出的 SQL_HASH_VALUE ,SQL_ADDRESS 對(duì)應(yīng)代入下面的sql,或者只用其中一個(gè)也可以。

select *
  from v$sqltext t
 where (t.HASH_VALUE = ' s.SQL_HASH_VALUE ' or --自行替換上述查的值
       t.ADDRESS = ' s.SQL_ADDRESS ') --自行替換上述查的值
 order by piece

方法2

通過(guò)如下SQL查詢?cè)跀?shù)據(jù)庫(kù)中執(zhí)行緩慢的sql

SELECT /*+rule*/
 S.SQL_ID,
 S.SID,
 s.BLOCKING_SESSION,
 S.SERIAL#,
 S.USERNAME,
 W.EVENT,
 W.SECONDS_IN_WAIT,
 W.WAIT_TIME,
 S.LAST_CALL_ET,
 S.STATUS,
 S.CLIENT_INFO,
 Q.SQL_TEXT,
 Q.HASH_VALUE,
 Q.ADDRESS,
 'alter system kill session ''' || S.SID || ',' || S.SERIAL# ||
 ''' immediate;'
  FROM V$SESSION_WAIT W, V$SESSION S, V$SQL Q
 WHERE W.SID = S.SID
   AND Q.HASH_VALUE = S.SQL_HASH_VALUE
   AND W.EVENT NOT LIKE '%message from client%'
   AND S.SID >= 6
 ORDER BY LAST_CALL_ET DESC;

發(fā)現(xiàn)耗時(shí)sql如下

--- SQL-1  
--- 這個(gè) SQL 語(yǔ)句用于獲取特定用戶活動(dòng)會(huì)話相關(guān)的執(zhí)行計(jì)劃,并以一種特定的格式展示這些信息
select *
  from (select hash_value || '***' ||
               rpad('|' || substr(lpad(' ', 1 * (depth - 1)) || operation ||
                                  decode(options, null, '', ' ' || options),
                                  1,
                                  32),
                    33,
                    ' ') || '|' ||
               rpad(decode(id,
                           0,
                           '----- ' || to_char(hash_value) || ' -----',
                           substr(decode(substr(object_name, 1, 7),
                                         'SYS_LE_',
                                         null,
                                         object_name) || ' ',
                                  1,
                                  20)),
                    21,
                    ' ') || '|' ||
               lpad(decode(cardinality,
                           null,
                           ' ',
                           decode(sign(cardinality - 1000),
                                  -1,
                                  cardinality || ' ',
                                  decode(sign(cardinality - 1000000),
                                         -1,
                                         trunc(cardinality / 1000) || 'K',
                                         decode(sign(cardinality - 1000000000),
                                                -1,
                                                trunc(cardinality / 1000000) || 'M',
                                                trunc(cardinality / 1000000000) || 'G')))),
                    7,
                    ' ') || '|' ||
               lpad(decode(bytes,
                           null,
                           ' ',
                           decode(sign(bytes - 1024),
                                  -1,
                                  bytes || ' ',
                                  decode(sign(bytes - 1048576),
                                         -1,
                                         trunc(bytes / 1024) || 'K',
                                         decode(sign(bytes - 1073741824),
                                                -1,
                                                trunc(bytes / 1048576) || 'M',
                                                trunc(bytes / 1073741824) || 'G')))),
                    6,
                    ' ') || '|' ||
               lpad(decode(cost,
                           null,
                           ' ',
                           decode(sign(cost - 10000000),
                                  -1,
                                  cost || ' ',
                                  decode(sign(cost - 1000000000),
                                         -1,
                                         trunc(cost / 1000000) || 'M',
                                         trunc(cost / 1000000000) || 'G'))),
                    8,
                    ' ') || '|' as "Explain plan"
          from v$sql_plan
         where hash_value in (select s.sql_hash_value
                                from v$session s
                               where s.username = upper('[user]')
                                 and s.status = 'ACTIVE'
                                 and s.last_call_et > 10))
 
--- SQL-2
--- 監(jiān)控和分析數(shù)據(jù)庫(kù)中活動(dòng)會(huì)話的執(zhí)行情況
select s.client_identifier,
       s.sid,
       s.serial#,
       sql.sql_fulltext,
       s.last_call_et,
       s.event,
       sql.SQL_ID,
       child_number,
       s.sql_hash_value
  from v$session s, v$sql sql
 where s.sql_address = sql.ADDRESS
   and s.username = upper('[user]')
   and s.status = 'ACTIVE'
   and s.last_call_et > 10
 order by sid

方法3

使用AWR查看耗時(shí)SQL

Oracle>sqlplus  “/as sysdba”
 
SQL>@?/rdbms/admin/awrrpt.sql

查詢SQL ordered by Elapsed Time

查詢SQL ordered by CPU Time 

相關(guān)SQL

根據(jù)awr的報(bào)告 ,也可以看出, 耗費(fèi)CPU的 SQL 時(shí) 在awr中 ,可以 通過(guò) SQL ID找到當(dāng)時(shí)執(zhí)行時(shí)對(duì)應(yīng)的執(zhí)行計(jì)劃:

select * from table(dbms_xplan.display_awr('6h6zz42n9rmnw'));

解決方案

1、經(jīng)過(guò)溝通,發(fā)現(xiàn)相關(guān)的SQL是由于NMC調(diào)用了Oracle監(jiān)控腳本導(dǎo)致的。

nmc\server\conf\monitor.properties 文件中配置的監(jiān)控腳本 。注釋掉即可 。

2、停止NMC,殺掉相關(guān)數(shù)據(jù)庫(kù)會(huì)話。

以上就是Oracle進(jìn)程占用CPU100%的問(wèn)題分析及解決方法的詳細(xì)內(nèi)容,更多關(guān)于Oracle進(jìn)程占用CPU100%的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論