数据库mysql查询时间长_数据库查询一条语句就需要很长的时间

2016年7月8日

今天开发提供了一条删除表中数据的语句,delete语句。放在plsql中执行了之后发现执行了半个小时还没有结束,这个时候开发还有脚本需要执行,本想创建新的会话,来执行开发提供的语句,可是一个简单的建表语句也不能够执行了。

我就把delete的那个会话在plsql中强制给关掉了,只是把plsql窗口关掉了,虽然管了好半天才给强制关掉。但是建表语句依旧不能够执行。执行了就是没有回应。这个时候测试人员反映点击界面很卡,登录客户端也是一直处于打转的状态。

根据以上情况想到,可能是刚刚强制关掉plsql窗口,虽然窗口关掉了,但是进程还是没有关掉的。

那么怎么查看进程是都存在呢。

查看这个表

select * from v$session

select * from v$session a

where a.USERNAME='SYS' and a.TERMINAL='SHA-P07010086' and a.status='ACTIVE';

这里是因为我执行delete是用sys用户执行的,我的电脑名称是SHA-P07010086

查看进程号

select * from v$process

select * from v$sqlarea b

where b.SQL_ID in ('dauuu7kkf7xma','gs36qsq4dju1v');

--dauuu7kkf7xma

杀掉进程

alter system kill session '133,15615' immediate;

这样操作之后,我delete的进程就杀掉了。

之后再查数据,就好些了。测试人员重新登陆应用后,也好了。

定位性能sql

1、查找前十条性能差的sql

SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS,

COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea

order BY disk_reads DESC )where ROWNUM<10 ;

2、查看IO高的session

SELECT se.sid,se.serial#,pr.SPID,

--se.username,se.status,

--se.terminal,se.program,se.MODULE,se.sql_address,st.event,

st.p1text,si.physical_reads

--,si.block_changes

FROM v$session se,v$session_wait st,

v$sess_io si,v$process pr WHERE st.sid=se.sid AND st.sid=si.sid AND se.PADDR=pr.ADDR AND se.sid>6 AND st.

wait_time=0 AND st.event NOT LIKE '%SQL%' ORDER BY physical_reads DESC;

3、通过进程号查看异常sql

SELECT a.username,

a.machine,

a.program,

a.sid,

a.serial#,

a.status,

c.piece,

c.sql_text

FROM v$session a,

v$process b,

v$sqltext c

WHERE b.spid=5200

AND b.addr=a.paddr

AND a.sql_address=c.address(+)

ORDER BY c.piece  ;

alter system kill session 'sid,serial#' ;--查看sql

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值