加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ORACLE 查看CPU使用率最高的语句及一些性能查询语句

发布时间:2020-12-12 14:49:26 所属栏目:百科 来源:网络整理
导读:如何查看及解决最耗CPU的SQL语句 1.1.用top监控服务器负载 [root@node1 ~]# top top - 22:51:02 up 56 min,1 user,load average: 0.00,0.00,0.00 Tasks:96 total,1 running,95 sleeping,0 stopped,0 zombie Cpu(s):0.0%us,0.0%sy,0.0%ni,100.0%id,0.0%wa,0.0

[root@node1 ~]# top

top - 22:51:02 up 56 min,1 user,load average: 0.00,0.00,0.00

Tasks:96 total,1 running,95 sleeping,0 stopped,0 zombie

Cpu(s):0.0%us,0.0%sy,0.0%ni,100.0%id,0.0%wa,0.0%hi,0.0%si,0.0%st

Mem: 1035096k total,351488k used,683608k free,24140k buffers

Swap:2096472k total,0k used,2096472k free,270360k cached

PID USER PRNIVIRTRESSHR S %CPU %MEM TIME+COMMAND

1 root 15 02084660560 S0.00.1 0:00.22 init

2 root RT-5 0 0 0 S0.00.0 0:00.00 migration/0

如果发现user中的CPU过高,比如oracle中最高的进程pid为1138782,占CPU27%,则执行下一步。

1.2.查询数据库会话的sid、serial#

进入数据库,根据oracle进程的pid查出对应数据库会话的sid、serial#:

select s.sid,s.serial#

from v$session s,v$process p

where s.paddr=p.addr and p.spid='1138782';

查询出来的结果sid、serial#分别为482、56767

1.3.查询SQL语句

根据数据库会话的sid查出具体的SQL语句:

desc v$sqltext

名称 是否为空?类型

----------------------------------------- -------- --------------

ADDRESS RAW(4)

HASH_VALUE NUMBER

COMMAND_TYPE NUMBER

PIECE NUMBER

SQL_TEXT VARCHAR2(64)

select sql_text

from v$sqltext a

where a.hash_value=(select sql_hash_value from v$session b

where b.sid='&sid')

order by piece;

输入sid的值:

1.4.处理SQL语句

如果SQL语句影响了数据库的运行,可以kill掉SQL语句的会话:

①在数据库中杀死SQL语句的会话:

alter system kill session '482,56767';

如果不能在数据库中杀死SQL语句,可在LINUX系统中强制杀死Oracle进程

②在linux系统中强制杀死oracle进程

#kill -9 1138782

1.5.SQL语句优化

最后可以根据步骤(3)查询出来的SQL语句进行优化,以避免再次出现上述消耗CPU的情况。

1.4.处理SQL语句

如果SQL语句影响了数据库的运行,可以kill掉SQL语句的会话:

①在数据库中杀死SQL语句的会话:

alter system kill session '482,56767';

如果不能在数据库中杀死SQL语句,可在LINUX系统中强制杀死Oracle进程

②在linux系统中强制杀死oracle进程

#kill -9 1138782

1.5.SQL语句优化

最后可以根据步骤(3)查询出来的SQL语句进行优化,以避免再次出现上述消耗CPU的情况。

列出使用频率最高的5个查询:

selectsql_text,executions

from(selectsql_text,executions,

rank()over

(orderbyexecutionsdesc)exec_rank

fromv$sql)

whereexec_rank<=5;

消耗磁盘读取最多的sqltop5:

selectdisk_reads,sql_text

from(selectsql_text,disk_reads,

dense_rank()over

(orderbydisk_readsdesc)disk_reads_rank

fromv$sql)

wheredisk_reads_rank<=5;

找出需要大量缓冲读取(逻辑读)操作的查询:

selectbuffer_gets,buffer_gets,

dense_rank()over

(orderbybuffer_getsdesc)buffer_gets_rank

fromv$sql)

wherebuffer_gets_rank<=5;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

如何查看及解决最耗CPU的SQL语句1.1.用top监控服务器负载

    推荐文章
      热点阅读