如何定位占用oracle数据库cpu过高的sql
来源:互联网 发布:windows桌面经典壁纸 编辑:程序博客网 时间:2024/05/17 22:22
如何定位占用oracle数据库cpu过高的sql
今天是2013-09-24日,今天在吃饭的时候我的朋友的数据库出现了问题,cpu占用率为97%,当我看到这个问题的时候我就想到了或许是sql导致的此问题,由于忍不住吃饭,暂时没有帮他看这个问题,这是我饭后自己模拟的故障,进行的分析:
1)查看一下cpu进程占用情况:
看到oracle进程为6331,6517等这几个进程占用cpu过高,
2)查看相关进程信息:
[oracle@oracle-one ~]$ ps -ef | grep 6331oracle 6331 1 23 20:24 ? 00:02:05 ora_vktm_RHYSoracle 6555 6385 0 20:32 pts/2 00:00:00 grep 6331[oracle@oracle-one ~]$ ps -ef | grep 6517oracle 6517 6513 9 20:28 ? 00:00:24 oracleRHYS (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))oracle 6557 6385 0 20:33 pts/2 00:00:00 grep 6517[oracle@oracle-one ~]$
3)查看该会话信息:
SQL> select sid,serial#,username,machine,osuser,process from v$session s 2 where s.paddr=(select addr from v$process p where p.spid='&pid');Enter value for pid: 6517old 2: where s.paddr=(select addr from v$process p where p.spid='&pid')new 2: where s.paddr=(select addr from v$process p where p.spid='6517') SID SERIAL# USERNAME MACHINE OSUSER PROCESS---------- ---------- ------------------------------ ---------------------------------------------------------------- ------------------------------ ------------------------ 1 21 RHYS oracle-one oracle 6513
可知:session 的信息为sid:1 serial#:21 数据库用户为:RHYS,客户端机器为:oracle-one,操作系统用户为:oracle 进程号:6513
4)查看该会话正在运行的sql:
SQL> select sql_text from v$sqltext 2 where (address,hash_value) in ( select sql_address,sql_hash_value from v$session s 3 4 where s.paddr= 5 (select addr from v$process p where p.spid='&pid'));Enter value for pid: 6517old 5: (select addr from v$process p where p.spid='&pid'))new 5: (select addr from v$process p where p.spid='6517'))SQL_TEXT----------------------------------------------------------------delete from amy_emp
可知,当前用户正在进行删除表的操作,本次就是通过v$process 的spid找到进程号,然后找到v$session 的addr地址,然后找到v$sqltext的sql_address以及sql_hash_value,通过这两个字段就可以定位出唯一的sql_text,本次通过v$process,v$session,v$sql_text三个视图结合找到相应的sql;
5)如果该session为非法的,可以使用如下命令杀掉该会话:
alter sytem kill session ‘1,21’;
既然找到sql了,那么 我们就可以通知应用相关人员,确认是否在进行相关数据操作。
另外我们也可以使用dbms_system包对该session进行更加详细的跟踪。
- 如何定位占用oracle数据库cpu过高的sql
- 如何定位占用oracle数据库cpu过高的sql
- 如何定位CPU占用过高问题
- ThreadMXBean定位CPU占用过高
- Oracle 占用cpu过高的处理办法
- Oracle 占用cpu过高的处理办法
- 定位cpu占用过高的线程和对应的方法
- SQL 查询数据库占用CPU过高问题脚本
- 如何设置SQL Server服务器上面的CPU占用过高的警报
- ThreadMXBean定位CPU占用过高JSP
- JAVA进程CPU占用过高快速定位
- Cpu占用过高的总结
- mysql 占用过高的cpu
- 如何揪出java程序占用cpu过高的线程代码
- 查找Oracle数据库中占用最多CPU的SQL
- 关于JVM介绍以及CPU占用过高的问题定位及解决实战经验
- 定位 占用CPU最多 SQL
- JVM定位占用cpu过高堆栈信息(Linux)
- 代理相关,对话框相关,UITextField
- XML布局文件中 android:width与android:layout_width 的区别
- 在线画图工具【高仿rose】方便地画工作流
- 品牌banner设计理念和方法
- CSS3之过渡Transition
- 如何定位占用oracle数据库cpu过高的sql
- ORACLE导入导出
- ExtJS 4 grid 带参数 查询 分页 store beforeload 解决办法
- 正则表达式——毕向东java
- 题目1057:众数
- 字符串逆序的算法汇总
- 头文件string与string.h的区别
- Switch (ASCII)分离不同单词
- Codeforces Beta Round #94 (Div. 2 Only) B. Students and Shoelaces