0
点赞
收藏
分享

微信扫一扫

查找正在执行的select以及dml语句的相关信息

凌得涂 2022-06-27 阅读 49

数据库:oracle 12.1.0.2

系统:oel 6.8

实验目标:查找正在执行的select以及dml语句的相关信息.

适应场景:select语句或者dml语句占用大量资源,导致系统缓慢,此时就需要查找出该语句的相关信息,然后进行处理.

1、查找执行中的sql

col username for a15

col program for a30

col sql_text for a70

set line 200

col machine for a20

select username, lockwait, status, machine, program, sql_text

 from v$session

INNER JOIN v$sql hv

   ON sql_hash_value = hv.hash_value

where sid in (select session_id from v$locked_object)

  AND status = 'ACTIVE';

   

USERNAME        LOCKWAIT         STATUS   MACHINE              PROGRAM                        SQL_TEXT

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

SYS                              ACTIVE   leo                  sqlplus@leo (TNS V1-V3)        insert into t1 select * from t1

2、查看进程

col object_name for a20

set line 200

select sess.sid,

      sess.serial#,

      lo.oracle_username,

      lo.os_user_name,

      ao.object_name,

      lo.locked_mode,

      SESS.machine

 from v$locked_object lo, dba_objects ao, v$session sess

where ao.object_id = lo.object_id

  and lo.session_id = sess.sid;


      SID    SERIAL# ORACLE_USERNAME                OS_USER_NAME                   OBJECT_NAME     LOCKED_MODE MACHINE

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

      124      27139 SYS                            oracle                         T1                             3 leo

说明:以上语句测试出虽然insert语句执行完后,却依然能查找出那个sid.

3、结束进程

alter system kill session 'sid,serial#' immediate;

说明:经测试以上只能查找出dml语句.select语句查找不出来.

那么怎么查找出select语句的进程呢?通过以下语句查询出来.

set linesize 400;

set pagesize 400;

col sql_text format a100;

col machine format a25;

col username format a15;

SELECT a.username, a.machine, a.sid, a.serial#, b.sql_id, b.SQL_FULLTEXT

 FROM v$session a, v$sqlarea b

WHERE a.sql_address = b.address

  AND a.SQL_HASH_VALUE = b.HASH_VALUE;

USERNAME        MACHINE                          SID    SERIAL# SQL_ID        SQL_FULLTEXT

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

SYS             leo                              132      40396 aj72dk1umgn0s SELECT a.username, a.machine, a.sid, a.serial#, b.sql_id,                                                                                                     b.SQL_FULLTEXT

                                                                                                   FROM v$session a, v$sqlarea b

                                                                                                   WHERE a.sql_address = b.address

                                                                                                   AND a.SQL_HASH_VALUE = b.HASH_VALUE


SYS             WorkGroup\NEWMACHINE     357      51634 2z5kqzmsngdpd select * from t1


Elapsed: 00:00:00.00

​终止该条select语句的执行.

SQL> alter system kill session '357,51634' immediate;

System altered.

Elapsed: 00:00:00.06

举报

相关推荐

0 条评论