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

回归正题:实际工作中,相信大家和我一样,都会遇到数据库忽然变慢,导致业务系统无法使用的情况,那么今天给大家描述我是如何在数据库方面定位问题的,供大家参考:
第一步
查看当前的数据库连接数: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#';




