暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何查询什么原因导致Oracle数据库慢?

JVM 2022-09-05
941

马上又到了一年一度的中秋节了,在此小编提前祝大家中秋节快乐。


回归正题:实际工作中,相信大家和我一样,都会遇到数据库忽然变慢,导致业务系统无法使用的情况,那么今天给大家描述我是如何在数据库方面定位问题的,供大家参考:

第一步

  • 查看当前的数据库连接数:select count(*) from v$process ;  

  • 查看数据库允许的最大连接数:select value from v$parameter where name ='processes';
  • 如果超出最大连接数,进行修改:alter system set processes = 300 scope = spfile;
  • 修改完毕后关闭/重启数据库。


第二步

  • 查看当前的session连接数:select count(*) from v$session;

  • 查看当前并发连接数:select count(*) from v$session where status='ACTIVE';

  • 查询哪些服务连接数高:select b.MACHINE, b.PROGRAM, b.USERNAME, count(*)  from v$process a, v$session b where a.ADDR = b.PADDR   and b.USERNAME is not null group by b.MACHINE, b.PROGRAM, b.USERNAME order by count(*) desc;

  • 查询连接数高的服务,执行最多的sql:select  b."SQL_ID",count(*) from v$process a, v$session b where a.ADDR = b.PADDR and  b.USERNAME is not null and b.MACHINE='机器名称' group by b."SQL_ID";

  • 查询执行最多的sql语句,判断sql是否存在影响数据库速度的可能能性:select * from v$sqlarea where sql_id ='sql对应的ID';


第三步

  • 查询数据库中是否存在死锁的表,分析表对应的业务情况:select object_name as 对象名称, s.sid, s.serial#, p.spid as 系统进程号 from v$locked_object l, dba_objects o, v$session s, v$process p where l.object_id = o.object_id and l.session_id = s.sid and s.paddr = p.addr;

  • 如存在死锁,可先将死锁进程kill:alter system kill session 'sid,serial#';

文章转载自JVM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论