如何查询占用系统资源较高的进程及系统进程对应的sql语句及会话id的方法
查询占用数据库cpu资源使用率较高进程信息
ps -e -o pcpu,pid,user,tty,args | sort -n -k 1 -r | head
查询占用数据库内存资源使用率较高的Oracle进程信息
ps -e -o pmem,pid,user,tty,args | grep -i oracle | sort -n -k 1-r | head
当然,还可以利用top、vmstat、sar等其他方式定位占用资源比较高的进程及其id,查询到系统进程id后,便可以通过以下语句查询其在数据库中对应的会话id及其sql语句。
SELECT sql_id,sql_text FROM v$sqltext a WHERE a.hash_value=(SELECT sql_hash_value FROM v$session b,v$process c WHERE b.paddr=c.addr AND c.spid=&pid) ORDER BY piece ASC ;
直接粘贴在sql命令行运行,输入相应的操作系统进程id即可。
进一步可以根据以上查询到的sql_id,来查询详细的sql执行计划,详细分析问题出现的原因。
SELECT * FROM TABLE(dbms_xplan.display_awr('&sql_id'));
查询占用数据库cpu资源使用率较高进程信息
ps -e -o pcpu,pid,user,tty,args | sort -n -k 1 -r | head
查询占用数据库内存资源使用率较高的Oracle进程信息
ps -e -o pmem,pid,user,tty,args | grep -i oracle | sort -n -k 1-r | head
当然,还可以利用top、vmstat、sar等其他方式定位占用资源比较高的进程及其id,查询到系统进程id后,便可以通过以下语句查询其在数据库中对应的会话id及其sql语句。
SELECT sql_id,sql_text FROM v$sqltext a WHERE a.hash_value=(SELECT sql_hash_value FROM v$session b,v$process c WHERE b.paddr=c.addr AND c.spid=&pid) ORDER BY piece ASC ;
直接粘贴在sql命令行运行,输入相应的操作系统进程id即可。
进一步可以根据以上查询到的sql_id,来查询详细的sql执行计划,详细分析问题出现的原因。
SELECT * FROM TABLE(dbms_xplan.display_awr('&sql_id'));
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31403259/viewspace-2138296/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31403259/viewspace-2138296/