DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 944|回复: 0
打印 上一主题 下一主题

[待整理] Oracle进程导致CPU 100%的具体解决步骤

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-13 15:12:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Oracle进程导致CPU 100%解决步骤

1:检查系统

           
  1. sar -u 5 5
复制代码
           
  

2: 看谁在用CPU

           
  1. topas

  2. ps -ef |grep ora #检查第四列,C的大小(unit,100 per cpu)
复制代码
           

 

3:检查CPU数量

           
  1. /usr/sbin/bindprocessor -q
  2.    
  3. lsattr El proc0
复制代码
           

  

4:两种可能:

           
  1. 1: A Background (instance) process
  2.    
  3. 2: An oracle (user) process #此种可能最大。
复制代码
           


5: 如果是用户进程:那么高CPU的主要原因有:

           
  1. Large Queries, Procedure compilation or execution,
  2. Space management and Sorting
复制代码
           

  

5.1 查看每个Session的CPU利用情况:

           
  1. select ss.sid,se.command,ss.value CPU ,se.username,se.program
  2. from v$sesstat ss, v$session se
  3. where ss.statistic# in
  4. (select statistic#
  5. from v$statname
  6. where name = 'CPU used by this session')
  7. and se.sid=ss.sid
  8. and ss.sid>6
  9. order by ss.sid
复制代码
           

        


5.2: 比较上述Session

比较一下哪个session的CPU使用时间最多,然后查看该Session的具体情况:

           
  1. select s.sid, event, wait_time, w.seq#, q.sql_text
  2. from v$session_wait w, v$session s, v$process p, v$sqlarea q
  3. where s.paddr=p.addr and
  4. s.sid=&p and
  5. s.sql_address=q.address;
复制代码
           


5.3:查看
得到上述信息后,查看相应操作是否有hash joins 和 full table scans。如果有hash joins 和 full table scans那么必须创建相应的Index或者检查Index是否有效。

另外必须检查是否有并行的查询存在和同一时刻有多个用户在执行相同的SQL语句,如果有必须关闭并行的查询和任何类型的并行提示(hints);如果查询使用intermedia数据,那么为了减少总的Index大小,必须限制使用Intermedia的Worldlist。(try restricting the wordlist that intermedia uses to help reduce the total indexsize)。

6:注意事项
上述方案只能根据已经运行完成的操作,对于正在执行的长时间操作只能等操作完成后才能检测得到。因此我们可以通过另外一个很好的工具来检测正在运行的长时间操作语句。v$session_longops,这个视图显示那些操作正在被运行,或者已经完成。每个process完成后会刷新本视图的信息。

7:怎样寻找集中使用CPU的Process:

很多时候会发现有N个Process在平均分享着CPU的利用率,这种情况唯一的可能性就是这些Process在执行着相同的Package或者Query.

这种情况:建议通过statspack,在CPU高利用率额时候运行几个快照,然后根据这些快照检查Statspack报告,检查报告中最TOP的Query。然后使用 sql_trace and tkprof 工具去跟踪一下。
同时检查buffer cache 的命中率是否大雨95%。

同时在报告中还需要检查一下table scans (long tables),看是否在报告生成期间有存在全表扫描。

8:参数
另外还有一些不是特别重要的,但是也必须关心检查的参数可能消耗CPU。

parallel query 并行查询:

并行查询最好用于数据仓库的环境下,那种情况任何时候只有几个用户在同时使用。在一个联机事务处理环境中,当同时许多用户去并行查询一个数据库的巨大表时候,会导致CPU的爆满。所以最好在数据库的级别关闭并行查询:设置参数如下:

           
  1. parallel_min_server = 0    parallel_max_server = 0   
  2. parallel_automatic_tuning = false;
复制代码
           



在配置上述参数后,如果SQL语句中使用的并行的提示,那么还是有可能会出现并行查询的情况,所以还需要继续监视相关的SQL语句,如果有可以直接去除提示。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-16 01:03 , 耗时 0.104495 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表