oracle常用查询慢SQL的语句

--查看某个时间段内历史会话连接数信息
 SELECT * FROM dba_users WHERE username='';     --得到USER_ID

SELECT TO_CHAR(SAMPLE_TIME, 'yyyy-mm-dd hh24'), COUNT(*)
  FROM DBA_HIST_ACTIVE_SESS_HISTORY
 WHERE USER_ID = 59 AND 
 sample_time>=SYSDATE-1
 GROUP BY TO_CHAR(SAMPLE_TIME, 'yyyy-mm-dd hh24') 
 HAVING COUNT(*)>=1
 ORDER BY 1;

--查看历史会话中等待事件为enq: TX - row lock contention的sql和执行次数
SELECT D.SQL_ID, COUNT(1)
  FROM DBA_HIST_ACTIVE_SESS_HISTORY D
 WHERE D.SAMPLE_TIME BETWEEN
       TO_DATE('2020-10-16 11:30:00', 'YYYY-MM-DD HH24:MI:SS') 
             AND
       TO_DATE('2020-10-16 12:30:00', 'YYYY-MM-DD HH24:MI:SS')
   AND D.EVENT = 'enq: TX - row lock contention'
 GROUP BY D.SQL_ID;
 
 
--查询某一时间的快照信息
SELECT *
  FROM DBA_HIST_SNAPSHOT
 WHERE BEGIN_INTERVAL_TIME >=
       TO_DATE('2020-10-16 11:30:00', 'YYYY-MM-DD HH24:MI:SS')
   AND BEGIN_INTERVAL_TIME <
       TO_DATE('2020-10-16 12:30:00', 'YYYY-MM-DD HH24:MI:SS');
       
       
--查看某一快照时间内sql执行计划是全表扫描的信息
SELECT SQL_ID, COUNT(1)
  FROM DBA_HIST_ACTIVE_SESS_HISTORY
 WHERE SNAP_ID IN (147873, 147874)
   AND SQL_PLAN_OPERATION = 'TABLE ACCESS'
   AND SQL_PLAN_OPTIONS = 'FULL'
   AND SESSION_TYPE = 'FOREGROUND'
 GROUP BY SQL_ID;
 

--通过得到的sql_id,找到对应的sql
SELECT *
  FROM V$SQL
 WHERE SQL_ID IN ('5d83cb75qvj5d',
                  '954zfk4kdfg6a',
                  'da90pycpdy62b',
                  '01bn98uy78r58',
                  'dh40yv9x8qgy0')

 
 
SELECT SQL_ID,
       USER_ID,
       SQL_OPNAME,
       SQL_PLAN_LINE_ID,
       SQL_PLAN_OPERATION,
       SQL_PLAN_OPTIONS,
       EVENT,
       PROGRAM
  FROM DBA_HIST_ACTIVE_SESS_HISTORY
 WHERE SNAP_ID IN (147877, 147878)
   AND SESSION_TYPE = 'FOREGROUND'
   AND SQL_ID = 'da90pycpdy62b'


--查看慢查询sql
 SELECT A.USERNAME,
        A.SQL_ID,
        A.SQL_PLAN_OPERATION,
        A.SQL_PLAN_OPTIONS,
        A.ELAPSED_SECONDS,
        COUNT(1)
   FROM V$SESSION_LONGOPS A, V$SQL B
  WHERE A.START_TIME >= TRUNC(SYSDATE) - 10/24/60
    AND A.SQL_ID = B.SQL_ID
    AND A.USERNAME NOT IN ('SYS', 'SYSTEM')
  GROUP BY A.USERNAME,
           A.SQL_ID,
           A.SQL_PLAN_OPERATION,
           A.SQL_PLAN_OPTIONS,
           A.ELAPSED_SECONDS;

       
--查看表空间使用率           
SELECT * FROM ( 
  SELECT D.TABLESPACE_NAME, 
          SPACE || 'M' "SUM_SPACE(M)", 
          BLOCKS "SUM_BLOCKS", 
          SPACE - NVL (FREE_SPACE, 0) || 'M' "USED_SPACE(M)", 
          ROUND ( (1 - NVL (FREE_SPACE, 0) / SPACE) * 100, 2) || '%' 
             "USED_RATE(%)", 
          FREE_SPACE || 'M' "FREE_SPACE(M)" 
     FROM (  SELECT TABLESPACE_NAME, 
                    ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 
                    SUM (BLOCKS) BLOCKS 
               FROM DBA_DATA_FILES 
           GROUP BY TABLESPACE_NAME) D, 
          (  SELECT TABLESPACE_NAME, 
                    ROUND (SUM (BYTES) / (1024 * 1024), 2) FREE_SPACE 
               FROM DBA_FREE_SPACE 
           GROUP BY TABLESPACE_NAME) F 
    WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) 
   UNION ALL                                                           
   SELECT D.TABLESPACE_NAME, 
          SPACE || 'M' "SUM_SPACE(M)", 
          BLOCKS SUM_BLOCKS, 
          USED_SPACE || 'M' "USED_SPACE(M)", 
          ROUND (NVL (USED_SPACE, 0) / SPACE * 100, 2) || '%' "USED_RATE(%)", 
          NVL (FREE_SPACE, 0) || 'M' "FREE_SPACE(M)" 
     FROM (  SELECT TABLESPACE_NAME, 
                    ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 
                    SUM (BLOCKS) BLOCKS 
               FROM DBA_TEMP_FILES 
           GROUP BY TABLESPACE_NAME) D, 
          (  SELECT TABLESPACE_NAME, 
                    ROUND (SUM (BYTES_USED) / (1024 * 1024), 2) USED_SPACE, 
                    ROUND (SUM (BYTES_FREE) / (1024 * 1024), 2) FREE_SPACE 
               FROM V$TEMP_SPACE_HEADER 
           GROUP BY TABLESPACE_NAME) F 
    WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) 
   ORDER BY 1)  
   WHERE TABLESPACE_NAME IN ('SYSAUX','SYSTEM'); 

猜你喜欢

转载自blog.csdn.net/weixin_41561862/article/details/109275406