[PL/SQL] oracle sql语句 存储过程执行慢,单独执行快

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sun120204535/article/details/78332812

一、执行计划情况

当存储过程挂住的时候,看看V$SESSION里面的 SQL_ID, SQL_CHILD_NUMBER

再根据这两个信息用DBMS_XPLAN.DISPLAY_CURSOR把计划拿出来看看。

SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('gwp663cqh5qbf',0));


二、锁表情况

Oracle:

select  ao.owner,ao.object_name,lo.LOCKED_MODE,lo.OS_USER_NAME,LO.PROCESS,SESSION_ID,LO.ORACLE_USERNAME

from v$locked_object lo, dba_objects ao 
where ao.object_id = lo.object_id

Sybase:

select l.spid, locktype=convert(char(12),name),dbname=convert(char(15),db_name(l.dbid)),  'table'=convert(char(25),object_name(l.id,l.dbid)), page,  

       class=convert(char(15),class),  hostname, cmd  
from master..syslocks l,master..spt_values v,master..sysprocesses p  
where l.type = v.number and  
v.type = 'L' and  
      l.spid = p.spid  
order by spid 


Oracle杀掉进程

1、进程对应SID,SERIAL#

select SID,SERIAL#,USERNAME,SCHEMANAME,OSUSER,MACHINE,PROGRAM,SQL_ID, SQL_CHILD_NUMBER,SQL_EXEC_START,ACTION 
from V$SESSION 
where machine ='XXX';

2、Oracle杀掉

ALTER SYSTEM KILL SESSION '1089,16019' ;

3、被标记为Killed后,无法kill,在系统找对应进程spid并杀掉:

select spid, osuser, s.program
 from v$session s, v$process p
 where s.paddr = p.addr
   and s.sid =1089;

kill xxxxx


三、查存储过程正在运行的SQL运行情况

  SELECT a.username,a.machine, b.sql_id, b.SQL_TEXT
FROM v$session a, v$sqlarea b
WHERE a.sql_address = b.address
    AND a.SQL_HASH_VALUE = b.HASH_VALUE;


四、索引是否创建


展开阅读全文

SQL语句执行特别慢

12-12

业务如下:rn从表A中取得电话字段到表B中的三个电话字段去匹配,只要表B中有一个电话匹配,即输出该条数据,如果不匹配到表C中的三个电话字段去匹配,只要有一个电话匹配,即输出该条数据rnrn以表A中电话循环。rn※电话字段不是表中的主键rnrn源代码如下:数据一共10万条,运行超20秒, 请大家帮忙看看rn——————————————————————————————rnSELECT *rnFROM @CustomerDt --用户自定义表类型rn WHERE EXISTS (SELECT 1rn FROM KH_QZKHrn WHERE ISDEL = 0rn AND (KH_QZKH.MOBILEPHONE1 = [联系方式1]rn OR KH_QZKH.MOBILEPHONE2 = [联系方式1]rn OR KH_QZKH.MOBILEPHONE3 = [联系方式1] rn OR KH_QZKH.FIXPHONE1 = [联系方式1]rn OR KH_QZKH.FIXPHONE2 = [联系方式1]rn OR KH_QZKH.FIXPHONE3 = [联系方式1]rn rn OR KH_QZKH.MOBILEPHONE1 = 联系方式2rn OR KH_QZKH.MOBILEPHONE2 = 联系方式2rn OR KH_QZKH.MOBILEPHONE3 = 联系方式2rn OR KH_QZKH.FIXPHONE1 = 联系方式2rn OR KH_QZKH.FIXPHONE2 = 联系方式2rn OR KH_QZKH.FIXPHONE3 = 联系方式2rn rn OR KH_QZKH.MOBILEPHONE1 = 联系方式3rn OR KH_QZKH.MOBILEPHONE2 = 联系方式3rn OR KH_QZKH.MOBILEPHONE3 = 联系方式3rn OR KH_QZKH.FIXPHONE1 = 联系方式3rn OR KH_QZKH.FIXPHONE2 = 联系方式3rn OR KH_QZKH.FIXPHONE3 = 联系方式3)rnrn OR EXISTS (SELECT 1rn FROM CUSTOMERrn WHERE [联系方式1(*)] = CUSTOMER.MOBILEPHONE1rn OR [联系方式1(*)] = CUSTOMER.MOBILEPHONE2rn OR [联系方式1(*)] = CUSTOMER.MOBILEPHONE3rn OR [联系方式1(*)] = CUSTOMER.FIXPHONE1rn OR [联系方式1(*)] = CUSTOMER.FIXPHONE2rn OR [联系方式1(*)] = CUSTOMER.FIXPHONE3 rn rn OR 联系方式2 = CUSTOMER.MOBILEPHONE1rn OR 联系方式2 = CUSTOMER.MOBILEPHONE2rn OR 联系方式2 = CUSTOMER.MOBILEPHONE3rn OR 联系方式2 = CUSTOMER.FIXPHONE1rn OR 联系方式2 = CUSTOMER.FIXPHONE2rn OR 联系方式2 = CUSTOMER.FIXPHONE3rn rn OR 联系方式3 = CUSTOMER.MOBILEPHONE1rn OR 联系方式3 = CUSTOMER.MOBILEPHONE2rn OR 联系方式3 = CUSTOMER.MOBILEPHONE3rn OR 联系方式3 = CUSTOMER.FIXPHONE1rn OR 联系方式3 = CUSTOMER.FIXPHONE2rn OR 联系方式3 = CUSTOMER.FIXPHONE3rn ) 论坛

没有更多推荐了,返回首页