亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Oracle進程占用CPU100%的問題分析及解決方法

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

問題現(xiàn)象

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

問題分析

方法1

根據上圖中的oracle進程在操作系統(tǒng)對應的 PID號 :  如  6999,8100 等

通過下面的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' ---換成相關的pid值

然后,將 查詢出的 SQL_HASH_VALUE ,SQL_ADDRESS 對應代入下面的sql,或者只用其中一個也可以。

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

方法2

通過如下SQL查詢在數據庫中執(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)耗時sql如下

--- SQL-1  
--- 這個 SQL 語句用于獲取特定用戶活動會話相關的執(zhí)行計劃,并以一種特定的格式展示這些信息
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)控和分析數據庫中活動會話的執(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查看耗時SQL

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

查詢SQL ordered by Elapsed Time

查詢SQL ordered by CPU Time 

相關SQL

根據awr的報告 ,也可以看出, 耗費CPU的 SQL 時 在awr中 ,可以 通過 SQL ID找到當時執(zhí)行時對應的執(zhí)行計劃:

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

解決方案

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

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

2、停止NMC,殺掉相關數據庫會話。

以上就是Oracle進程占用CPU100%的問題分析及解決方法的詳細內容,更多關于Oracle進程占用CPU100%的資料請關注腳本之家其它相關文章!

相關文章

  • Oracle數據庫的空間管理技巧

    Oracle數據庫的空間管理技巧

    在oracle數據庫中,DBA可以通過觀測一定的表或視圖來了解當前空間的使用狀況,進而作出可能的調整決定
    2007-03-03
  • 常見數據庫系統(tǒng)比較  Oracle數據庫

    常見數據庫系統(tǒng)比較 Oracle數據庫

    常見數據庫系統(tǒng)比較 Oracle數據庫...
    2007-03-03
  • Oracle數據庫數據遷移完整解決步驟

    Oracle數據庫數據遷移完整解決步驟

    我們常常需要對數據進行遷移,遷移到更性能配置更高級的主機OS上、遷移到遠程的機房、遷移到不同的平臺下,這篇文章主要給大家介紹了關于Oracle數據庫數據遷移的相關資料,需要的朋友可以參考下
    2024-02-02
  • Oracle數據庫密碼文件的使用與維護

    Oracle數據庫密碼文件的使用與維護

    Oracle數據庫密碼文件的使用與維護...
    2007-03-03
  • 隨機獲取oracle數據庫中的任意一行數據(rownum)示例介紹

    隨機獲取oracle數據庫中的任意一行數據(rownum)示例介紹

    對于rownum來說它是oracle系統(tǒng)順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,依此類推,這個偽字段可以用于限制查詢返回的總行數,且rownum不能以任何表的名稱作為前綴
    2014-07-07
  • Oracle中的分析函數匯總

    Oracle中的分析函數匯總

    本文詳細講解了Oracle中的分析函數,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • Oracle數據庫中保留小數點后兩位的問題解讀

    Oracle數據庫中保留小數點后兩位的問題解讀

    在Oracle數據庫中,對數字和百分比進行格式化,以保留兩位小數,主要使用to_char()函數,對于大數字如10000000.12,使用to_char(字段名, 'FM99999999999990.00')可確保保留兩位小數而無額外空格,對于百分比如86.63%
    2024-09-09
  • Oracle數學相關函數小結

    Oracle數學相關函數小結

    這篇文章主要介紹了Oracle數學相關函數,實例總結了Oracle常用的數學相關函數并給出了相應用法示例,需要的朋友可以參考下
    2016-03-03
  • Oracle9i 動態(tài)SGA,PGA特性探索

    Oracle9i 動態(tài)SGA,PGA特性探索

    雖然Oracle9i中的內存管理仍然需要很多的手工操作,不過大部分的Oracle管理員可以使用工具來連續(xù)地監(jiān)控Oracle SGA中的內存使用,并且可以根據Oracle instance中現(xiàn)在的使用情況來自動地重新分配內存。
    2009-03-03
  • Oracle根據逗號拆分字段內容轉成多行的函數說明

    Oracle根據逗號拆分字段內容轉成多行的函數說明

    在做系統(tǒng)時經常會遇到在一個字段中,用逗號或其他符號分隔存儲多個信息,下面這篇文章主要給大家介紹了關于Oracle根據逗號拆分字段內容轉成多行的函數說明,需要的朋友可以參考下
    2023-04-04

最新評論