Oracle SQL Stat 조회 스크립트



WITH A

     AS (  SELECT /*+ MATERIALIZE LEADING(DBI SNAP) USE_HASH(SQLS TXT) NO_MERGE(SQLS) NO_MERGE(TXT) */

                 SQLS.DBID,

                  SQLS.SQL_ID,

                  SQLS.OPTIMIZER_MODE,

                  SQLS.MODULE,

                  SUM (SQLS.FETCHES_DELTA) FETCHES,

                  SUM (SQLS.EXECUTIONS_DELTA) EXECUTIONS,

                  SUM (SQLS.SORTS_DELTA) SORTS,

                  SUM (SQLS.DISK_READS_DELTA) DISK_READS,

                  SUM (SQLS.BUFFER_GETS_DELTA) BUFFER_GETS,

                  SUM (SQLS.ROWS_PROCESSED_DELTA) ROWS_PROCESSED,

                  SUM (SQLS.CPU_TIME_DELTA) / 1000000 CPU_TIME,

                  SUM (SQLS.ELAPSED_TIME_DELTA) / 1000000 ELAPSED_TIME,

                  SUM (SQLS.IOWAIT_DELTA) / 1000000 IOWAIT,

                  SUM (SQLS.CLWAIT_DELTA) / 1000000 CLWAIT,

                  SUM (SQLS.APWAIT_DELTA) / 1000000 APWAIT,

                  SUM (SQLS.CCWAIT_DELTA) / 1000000 CCWAIT,

                  SUM (DIRECT_WRITES_DELTA) DIRECT_WRITES,

                  NULL RNUM

             FROM (SELECT DI.DBID, DI.INSTANCE_NUMBER, DI.STARTUP_TIME

                     FROM DBA_HIST_DATABASE_INSTANCE DI

                    WHERE DI.DBID = (SELECT dbid FROM v$database)         --변경

                          AND DI.INSTANCE_NUMBER =

                                 (SELECT INSTANCE_NUMBER FROM v$instance) --변경

                          AND ROWNUM <= 1) DBI,

                  DBA_HIST_SNAPSHOT SNAP,

                  DBA_HIST_SQLSTAT SQLS

            WHERE     DBI.DBID = SNAP.DBID

                  AND DBI.INSTANCE_NUMBER = SNAP.INSTANCE_NUMBER

                  AND SNAP.SNAP_ID >= :3 + 1

                  AND SNAP.SNAP_ID <= :4

                  AND SNAP.DBID = SQLS.DBID

                  AND SNAP.INSTANCE_NUMBER = SQLS.INSTANCE_NUMBER

                  AND SNAP.SNAP_ID = SQLS.SNAP_ID

         GROUP BY SQLS.DBID,

                  SQLS.SQL_ID,

                  SQLS.OPTIMIZER_MODE,

                  SQLS.MODULE

           HAVING SUM (SQLS.EXECUTIONS_DELTA) > 0),

     A_TOT

     AS (SELECT 0 DBID,

                'TOT' SQL_ID,

                NULL OPTIMIZER_MODE,

                NULL MODULE,

                MAX (STAT.EXECUTIONS) EXECUTIONS,

                SUM (A.FETCHES) FETCHES,

                (MAX (STAT.SORTS_D) + MAX (STAT.SORTS_M)) SORTS,

                MAX (STAT.BUFFER_GETS) BUFFER_GETS,

                MAX (STAT.DISK_READS) DISK_READS,

                SUM (A.ROWS_PROCESSED) ROWS_PROCESSED,

                MAX (TIME.DB_CPU) CPU_TIME,

                MAX (TIME.DB_TIME) ELAPSED_TIME,

                MAX (STAT.BUFFER_GETS) / MAX (STAT.EXECUTIONS) BUF_EXEC,

                MAX (STAT.DISK_READS) / MAX (STAT.EXECUTIONS) DISK_EXEC,

                SUM (A.ROWS_PROCESSED) / SUM (A.EXECUTIONS) ROWS_EXEC,

                MAX (TIME.DB_CPU) / MAX (STAT.EXECUTIONS) CPU_EXEC,

                MAX (TIME.DB_TIME) / MAX (STAT.EXECUTIONS) ELAP_EXEC,

                MAX (STAT.IOWAIT) IOWAIT,

                MAX (STAT.CLWAIT) CLWAIT,

                MAX (STAT.APWAIT) APWAIT,

                MAX (STAT.CCWAIT) CCWAIT,

                COUNT (DISTINCT SQL_ID) RNUM

           FROM A,

                (SELECT MAX (DECODE (STAT_NAME, 'execute count', TOT_VALUE))

                           EXECUTIONS,

                        MAX (

                           DECODE (STAT_NAME,

                                   'session logical reads', TOT_VALUE))

                           BUFFER_GETS,

                        MAX (DECODE (STAT_NAME, 'physical reads', TOT_VALUE))

                           DISK_READS,

                        MAX (DECODE (STAT_NAME, 'sorts (disk)', TOT_VALUE))

                           SORTS_D,

                        MAX (DECODE (STAT_NAME, 'sorts (memory)', TOT_VALUE))

                           SORTS_M,

                        MAX (

                           DECODE (STAT_NAME,

                                   'cluster wait time', TOT_VALUE / 100))

                           CLWAIT,

                        MAX (

                           DECODE (STAT_NAME,

                                   'application wait time', TOT_VALUE / 100))

                           APWAIT,

                        MAX (

                           DECODE (STAT_NAME,

                                   'concurrency wait time', TOT_VALUE / 100))

                           CCWAIT,

                        MAX (

                           DECODE (STAT_NAME,

                                   'user I/O wait time', TOT_VALUE / 100))

                           IOWAIT

                   FROM (  SELECT STAT_NAME, SUM (TOT_VALUE) TOT_VALUE

                             FROM (SELECT STAT_NAME,

                                          TO_CHAR (SNAP_TIME_1, 'HH24:MI:SS')

                                             SNAP_TIME,

                                          DECODE (SNAP_TIME_2,

                                                  NULL, 0,

                                                  ROUND ( (VALUE_1 - VALUE_2)))

                                             TOT_VALUE,

                                          (EXTRACT (

                                              DAY FROM SNAP_TIME_1

                                                       - SNAP_TIME_2)

                                           * 86400

                                           + EXTRACT (

                                                HOUR FROM SNAP_TIME_1

                                                          - SNAP_TIME_2)

                                             * 3600

                                           + EXTRACT (

                                                MINUTE FROM SNAP_TIME_1

                                                            - SNAP_TIME_2)

                                             * 60

                                           + EXTRACT (

                                                SECOND FROM SNAP_TIME_1

                                                            - SNAP_TIME_2))

                                             TOT_TIME_SEC

                                     FROM (  SELECT /*+ LEADING(DBI) USE_HASH(SNAP STAT) NO_MERGE(SNAP) NO_MERGE(STAT) */

                                                   SNAP.END_INTERVAL_TIME

                                                       SNAP_TIME_1,

                                                    STAT.STAT_NAME,

                                                    STAT.VALUE VALUE_1,

                                                    LAG (

                                                       STAT.VALUE)

                                                    OVER (PARTITION BY STAT_NAME

                                                          ORDER BY SNAP.SNAP_ID)

                                                       VALUE_2,

                                                    LAG (

                                                       SNAP.END_INTERVAL_TIME)

                                                    OVER (PARTITION BY STAT_NAME

                                                          ORDER BY SNAP.SNAP_ID)

                                                       SNAP_TIME_2,

                                                    SNAP.SNAP_ID

                                               FROM (SELECT    /*+ NO_MERGE */

                                                           DI.DBID,

                                                            DI.INSTANCE_NUMBER,

                                                            DI.STARTUP_TIME

                                                       FROM DBA_HIST_DATABASE_INSTANCE DI

                                                      WHERE DI.DBID =

                                                               (SELECT dbid

                                                                  FROM v$database) --변경

                                                            AND DI.INSTANCE_NUMBER =

                                                                   (SELECT INSTANCE_NUMBER

                                                                      FROM v$instance) --변경

                                                            AND ROWNUM <= 1) DBI,

                                                    DBA_HIST_SNAPSHOT SNAP,

                                                    DBA_HIST_SYSSTAT STAT

                                              WHERE DBI.DBID = SNAP.DBID

                                                    AND DBI.INSTANCE_NUMBER =

                                                           SNAP.INSTANCE_NUMBER

                                                    AND SNAP.SNAP_ID >= :7

                                                    AND SNAP.SNAP_ID <= :8

                                                    AND SNAP.DBID = STAT.DBID

                                                    AND SNAP.INSTANCE_NUMBER =

                                                           STAT.INSTANCE_NUMBER

                                                    AND SNAP.SNAP_ID =

                                                           STAT.SNAP_ID

                                                    AND STAT.STAT_NAME IN

                                                           ('execute count',

                                                            'session logical reads',

                                                            'sorts (disk)',

                                                            'sorts (memory)',

                                                            'physical reads',

                                                            'cluster wait time',

                                                            'application wait time',

                                                            'user I/O wait time',

                                                            'concurrency wait time')

                                           ORDER BY SNAP.SNAP_ID))

                         GROUP BY STAT_NAME)) STAT,

                (SELECT MAX (

                           DECODE (STAT_NAME, 'DB CPU', TOT_VALUE / 1000000))

                           DB_CPU,

                        MAX (

                           DECODE (STAT_NAME, 'DB time', TOT_VALUE / 1000000))

                           DB_TIME

                   FROM (  SELECT STAT_NAME, SUM (TOT_VALUE) TOT_VALUE

                             FROM (SELECT STAT_NAME,

                                          TO_CHAR (SNAP_TIME_1, 'HH24:MI:SS')

                                             SNAP_TIME,

                                          DECODE (SNAP_TIME_2,

                                                  NULL, 0,

                                                  ROUND ( (VALUE_1 - VALUE_2)))

                                             TOT_VALUE,

                                          (EXTRACT (

                                              DAY FROM SNAP_TIME_1

                                                       - SNAP_TIME_2)

                                           * 86400

                                           + EXTRACT (

                                                HOUR FROM SNAP_TIME_1

                                                          - SNAP_TIME_2)

                                             * 3600

                                           + EXTRACT (

                                                MINUTE FROM SNAP_TIME_1

                                                            - SNAP_TIME_2)

                                             * 60

                                           + EXTRACT (

                                                SECOND FROM SNAP_TIME_1

                                                            - SNAP_TIME_2))

                                             TOT_TIME_SEC

                                     FROM (  SELECT /*+ LEADING(DBI) USE_HASH(SNAP STAT) NO_MERGE(SNAP) NO_MERGE(STAT) */

                                                   SNAP.END_INTERVAL_TIME

                                                       SNAP_TIME_1,

                                                    STAT.STAT_NAME,

                                                    STAT.VALUE VALUE_1,

                                                    LAG (

                                                       STAT.VALUE)

                                                    OVER (PARTITION BY STAT_NAME

                                                          ORDER BY SNAP.SNAP_ID)

                                                       VALUE_2,

                                                    LAG (

                                                       SNAP.END_INTERVAL_TIME)

                                                    OVER (PARTITION BY STAT_NAME

                                                          ORDER BY SNAP.SNAP_ID)

                                                       SNAP_TIME_2,

                                                    SNAP.SNAP_ID

                                               FROM (SELECT    /*+ NO_MERGE */

                                                           DI.DBID,

                                                            DI.INSTANCE_NUMBER,

                                                            DI.STARTUP_TIME

                                                       FROM DBA_HIST_DATABASE_INSTANCE DI

                                                      WHERE DI.DBID =

                                                               (SELECT dbid

                                                                  FROM v$database) --변경

                                                            AND DI.INSTANCE_NUMBER =

                                                                   (SELECT INSTANCE_NUMBER

                                                                      FROM v$instance) --변경

                                                            AND ROWNUM <= 1) DBI,

                                                    DBA_HIST_SNAPSHOT SNAP,

                                                    DBA_HIST_SYS_TIME_MODEL STAT

                                              WHERE DBI.DBID = SNAP.DBID

                                                    AND DBI.INSTANCE_NUMBER =

                                                           SNAP.INSTANCE_NUMBER

                                                    AND SNAP.SNAP_ID >= :11

                                                    AND SNAP.SNAP_ID <= :12

                                                    AND SNAP.DBID = STAT.DBID

                                                    AND SNAP.INSTANCE_NUMBER =

                                                           STAT.INSTANCE_NUMBER

                                                    AND SNAP.SNAP_ID =

                                                           STAT.SNAP_ID

                                                    AND STAT.STAT_NAME IN

                                                           ('DB CPU', 'DB time')

                                           ORDER BY SNAP.SNAP_ID))

                         GROUP BY STAT_NAME)) TIME),

     A_ET

     AS (SELECT *

           FROM (SELECT 'ELAPSED TIME ALL' VIEWTYPE,

                        DBID,

                        SQL_ID,

                        OPTIMIZER_MODE,

                        MODULE,

                        EXECUTIONS,

                        FETCHES,

                        SORTS,

                        BUFFER_GETS,

                        DISK_READS,

                        ROWS_PROCESSED,

                        CPU_TIME,

                        ELAPSED_TIME,

                        BUFFER_GETS / EXECUTIONS BUF_EXEC,

                        DISK_READS / EXECUTIONS DISK_EXEC,

                        ROWS_PROCESSED / EXECUTIONS ROWS_EXEC,

                        CPU_TIME / EXECUTIONS CPU_EXEC,

                        ELAPSED_TIME / EXECUTIONS ELAP_EXEC,

                        IOWAIT,

                        CLWAIT,

                        APWAIT,

                        CCWAIT,

                        ROW_NUMBER ()

                        OVER (

                           ORDER BY ELAPSED_TIME DESC, CPU_TIME DESC, ROWNUM)

                           RNUM

                   FROM A

                 UNION ALL

                 SELECT 'ELAPSED TIME ALL' VIEWTYPE,

                        NULL DBID,

                        NULL SQL_ID,

                        NULL OPTIMIZER_MODE,

                        NULL MODULE,

                        NULL EXECUTIONS,

                        NULL FETCHES,

                        NULL SORTS,

                        NULL BUFFER_GETS,

                        NULL DISK_READS,

                        NULL ROWS_PROCESSED,

                        NULL CPU_TIME,

                        NULL ELAPSED_TIME,

                        NULL BUF_EXEC,

                        NULL DISK_EXEC,

                        NULL ROWS_EXEC,

                        NULL CPU_EXEC,

                        NULL ELAP_EXEC,

                        NULL IOWAIT,

                        NULL CLWAIT,

                        NULL APWAIT,

                        NULL CCWAIT,

                        NULL RNUM

                   FROM A

                  WHERE ROWNUM <= :13)

          WHERE RNUM <= :14 AND ROWNUM <= :15),

     A_CT

     AS (SELECT *

           FROM (SELECT 'CPU TIME ALL' VIEWTYPE,

                        DBID,

                        SQL_ID,

                        OPTIMIZER_MODE,

                        MODULE,

                        EXECUTIONS,

                        FETCHES,

                        SORTS,

                        BUFFER_GETS,

                        DISK_READS,

                        ROWS_PROCESSED,

                        CPU_TIME,

                        ELAPSED_TIME,

                        BUFFER_GETS / EXECUTIONS BUF_EXEC,

                        DISK_READS / EXECUTIONS DISK_EXEC,

                        ROWS_PROCESSED / EXECUTIONS ROWS_EXEC,

                        CPU_TIME / EXECUTIONS CPU_EXEC,

                        ELAPSED_TIME / EXECUTIONS ELAP_EXEC,

                        IOWAIT,

                        CLWAIT,

                        APWAIT,

                        CCWAIT,

                        ROW_NUMBER ()

                        OVER (

                           ORDER BY CPU_TIME DESC, BUFFER_GETS DESC, ROWNUM)

                           RNUM

                   FROM A

                 UNION ALL

                 SELECT 'CPU TIME ALL' VIEWTYPE,

                        NULL DBID,

                        NULL SQL_ID,

                        NULL OPTIMIZER_MODE,

                        NULL MODULE,

                        NULL EXECUTIONS,

                        NULL FETCHES,

                        NULL SORTS,

                        NULL BUFFER_GETS,

                        NULL DISK_READS,

                        NULL ROWS_PROCESSED,

                        NULL CPU_TIME,

                        NULL ELAPSED_TIME,

                        NULL BUF_EXEC,

                        NULL DISK_EXEC,

                        NULL ROWS_EXEC,

                        NULL CPU_EXEC,

                        NULL ELAP_EXEC,

                        NULL IOWAIT,

                        NULL CLWAIT,

                        NULL APWAIT,

                        NULL CCWAIT,

                        NULL RNUM

                   FROM A

                  WHERE ROWNUM <= :16)

          WHERE RNUM <= :17 AND ROWNUM <= :18),

     A_BG

     AS (SELECT *

           FROM (SELECT 'BUFFER GETS ALL' VIEWTYPE,

                        DBID,

                        SQL_ID,

                        OPTIMIZER_MODE,

                        MODULE,

                        EXECUTIONS,

                        FETCHES,

                        SORTS,

                        BUFFER_GETS,

                        DISK_READS,

                        ROWS_PROCESSED,

                        CPU_TIME,

                        ELAPSED_TIME,

                        BUFFER_GETS / EXECUTIONS BUF_EXEC,

                        DISK_READS / EXECUTIONS DISK_EXEC,

                        ROWS_PROCESSED / EXECUTIONS ROWS_EXEC,

                        CPU_TIME / EXECUTIONS CPU_EXEC,

                        ELAPSED_TIME / EXECUTIONS ELAP_EXEC,

                        IOWAIT,

                        CLWAIT,

                        APWAIT,

                        CCWAIT,

                        ROW_NUMBER ()

                        OVER (

                           ORDER BY BUFFER_GETS DESC, CPU_TIME DESC, ROWNUM)

                           RNUM

                   FROM A

                 UNION ALL

                 SELECT 'BUFFER GETS ALL' VIEWTYPE,

                        NULL DBID,

                        NULL SQL_ID,

                        NULL OPTIMIZER_MODE,

                        NULL MODULE,

                        NULL EXECUTIONS,

                        NULL FETCHES,

                        NULL SORTS,

                        NULL BUFFER_GETS,

                        NULL DISK_READS,

                        NULL ROWS_PROCESSED,

                        NULL CPU_TIME,

                        NULL ELAPSED_TIME,

                        NULL BUF_EXEC,

                        NULL DISK_EXEC,

                        NULL ROWS_EXEC,

                        NULL CPU_EXEC,

                        NULL ELAP_EXEC,

                        NULL IOWAIT,

                        NULL CLWAIT,

                        NULL APWAIT,

                        NULL CCWAIT,

                        NULL RNUM

                   FROM A

                  WHERE ROWNUM <= :19)

          WHERE RNUM <= :20 AND ROWNUM <= :21),

     A_DR

     AS (SELECT *

           FROM (SELECT 'DISK READS ALL' VIEWTYPE,

                        DBID,

                        SQL_ID,

                        OPTIMIZER_MODE,

                        MODULE,

                        EXECUTIONS,

                        FETCHES,

                        SORTS,

                        BUFFER_GETS,

                        DISK_READS,

                        ROWS_PROCESSED,

                        CPU_TIME,

                        ELAPSED_TIME,

                        BUFFER_GETS / EXECUTIONS BUF_EXEC,

                        DISK_READS / EXECUTIONS DISK_EXEC,

                        ROWS_PROCESSED / EXECUTIONS ROWS_EXEC,

                        CPU_TIME / EXECUTIONS CPU_EXEC,

                        ELAPSED_TIME / EXECUTIONS ELAP_EXEC,

                        IOWAIT,

                        CLWAIT,

                        APWAIT,

                        CCWAIT,

                        ROW_NUMBER ()

                        OVER (ORDER BY DISK_READS DESC, IOWAIT DESC, ROWNUM)

                           RNUM

                   FROM A

                 UNION ALL

                 SELECT 'DISK READS ALL' VIEWTYPE,

                        NULL DBID,

                        NULL SQL_ID,

                        NULL OPTIMIZER_MODE,

                        NULL MODULE,

                        NULL EXECUTIONS,

                        NULL FETCHES,

                        NULL SORTS,

                        NULL BUFFER_GETS,

                        NULL DISK_READS,

                        NULL ROWS_PROCESSED,

                        NULL CPU_TIME,

                        NULL ELAPSED_TIME,

                        NULL BUF_EXEC,

                        NULL DISK_EXEC,

                        NULL ROWS_EXEC,

                        NULL CPU_EXEC,

                        NULL ELAP_EXEC,

                        NULL IOWAIT,

                        NULL CLWAIT,

                        NULL APWAIT,

                        NULL CCWAIT,

                        NULL RNUM

                   FROM A

                  WHERE ROWNUM <= :22)

          WHERE RNUM <= :23 AND ROWNUM <= :24),

     A_CL

     AS (SELECT *

           FROM (SELECT 'CLUSTER WAIT ALL' VIEWTYPE,

                        DBID,

                        SQL_ID,

                        OPTIMIZER_MODE,

                        MODULE,

                        EXECUTIONS,

                        FETCHES,

                        SORTS,

                        BUFFER_GETS,

                        DISK_READS,

                        ROWS_PROCESSED,

                        CPU_TIME,

                        ELAPSED_TIME,

                        BUFFER_GETS / EXECUTIONS BUF_EXEC,

                        DISK_READS / EXECUTIONS DISK_EXEC,

                        ROWS_PROCESSED / EXECUTIONS ROWS_EXEC,

                        CPU_TIME / EXECUTIONS CPU_EXEC,

                        ELAPSED_TIME / EXECUTIONS ELAP_EXEC,

                        IOWAIT,

                        CLWAIT,

                        APWAIT,

                        CCWAIT,

                        ROW_NUMBER ()

                        OVER (ORDER BY CLWAIT DESC, DISK_READS DESC, ROWNUM)

                           RNUM

                   FROM A

                 UNION ALL

                 SELECT 'CLUSTER WAIT ALL' VIEWTYPE,

                        NULL DBID,

                        NULL SQL_ID,

                        NULL OPTIMIZER_MODE,

                        NULL MODULE,

                        NULL EXECUTIONS,

                        NULL FETCHES,

                        NULL SORTS,

                        NULL BUFFER_GETS,

                        NULL DISK_READS,

                        NULL ROWS_PROCESSED,

                        NULL CPU_TIME,

                        NULL ELAPSED_TIME,

                        NULL BUF_EXEC,

                        NULL DISK_EXEC,

                        NULL ROWS_EXEC,

                        NULL CPU_EXEC,

                        NULL ELAP_EXEC,

                        NULL IOWAIT,

                        NULL CLWAIT,

                        NULL APWAIT,

                        NULL CCWAIT,

                        NULL RNUM

                   FROM A

                  WHERE ROWNUM <= :25)

          WHERE RNUM <= :26 AND ROWNUM <= :27),

     A_CC

     AS (SELECT *

           FROM (SELECT 'CONSISTENT WAIT ALL' VIEWTYPE,

                        DBID,

                        SQL_ID,

                        OPTIMIZER_MODE,

                        MODULE,

                        EXECUTIONS,

                        FETCHES,

                        SORTS,

                        BUFFER_GETS,

                        DISK_READS,

                        ROWS_PROCESSED,

                        CPU_TIME,

                        ELAPSED_TIME,

                        BUFFER_GETS / EXECUTIONS BUF_EXEC,

                        DISK_READS / EXECUTIONS DISK_EXEC,

                        ROWS_PROCESSED / EXECUTIONS ROWS_EXEC,

                        CPU_TIME / EXECUTIONS CPU_EXEC,

                        ELAPSED_TIME / EXECUTIONS ELAP_EXEC,

                        IOWAIT,

                        CLWAIT,

                        APWAIT,

                        CCWAIT,

                        ROW_NUMBER ()

                        OVER (ORDER BY CCWAIT DESC, BUFFER_GETS DESC, ROWNUM)

                           RNUM

                   FROM A

                 UNION ALL

                 SELECT 'CONSISTENT WAIT ALL' VIEWTYPE,

                        NULL DBID,

                        NULL SQL_ID,

                        NULL OPTIMIZER_MODE,

                        NULL MODULE,

                        NULL EXECUTIONS,

                        NULL FETCHES,

                        NULL SORTS,

                        NULL BUFFER_GETS,

                        NULL DISK_READS,

                        NULL ROWS_PROCESSED,

                        NULL CPU_TIME,

                        NULL ELAPSED_TIME,

                        NULL BUF_EXEC,

                        NULL DISK_EXEC,

                        NULL ROWS_EXEC,

                        NULL CPU_EXEC,

                        NULL ELAP_EXEC,

                        NULL IOWAIT,

                        NULL CLWAIT,

                        NULL APWAIT,

                        NULL CCWAIT,

                        NULL RNUM

                   FROM A

                  WHERE ROWNUM <= :28)

          WHERE RNUM <= :29 AND ROWNUM <= :30),

     A_IW

     AS (SELECT *

           FROM (SELECT 'IO WAIT ALL' VIEWTYPE,

                        DBID,

                        SQL_ID,

                        OPTIMIZER_MODE,

                        MODULE,

                        EXECUTIONS,

                        FETCHES,

                        SORTS,

                        BUFFER_GETS,

                        DISK_READS,

                        ROWS_PROCESSED,

                        CPU_TIME,

                        ELAPSED_TIME,

                        BUFFER_GETS / EXECUTIONS BUF_EXEC,

                        DISK_READS / EXECUTIONS DISK_EXEC,

                        ROWS_PROCESSED / EXECUTIONS ROWS_EXEC,

                        CPU_TIME / EXECUTIONS CPU_EXEC,

                        ELAPSED_TIME / EXECUTIONS ELAP_EXEC,

                        IOWAIT,

                        CLWAIT,

                        APWAIT,

                        CCWAIT,

                        ROW_NUMBER ()

                        OVER (ORDER BY IOWAIT DESC, DISK_READS DESC, ROWNUM)

                           RNUM

                   FROM A

                 UNION ALL

                 SELECT 'IO WAIT ALL' VIEWTYPE,

                        NULL DBID,

                        NULL SQL_ID,

                        NULL OPTIMIZER_MODE,

                        NULL MODULE,

                        NULL EXECUTIONS,

                        NULL FETCHES,

                        NULL SORTS,

                        NULL BUFFER_GETS,

                        NULL DISK_READS,

                        NULL ROWS_PROCESSED,

                        NULL CPU_TIME,

                        NULL ELAPSED_TIME,

                        NULL BUF_EXEC,

                        NULL DISK_EXEC,

                        NULL ROWS_EXEC,

                        NULL CPU_EXEC,

                        NULL ELAP_EXEC,

                        NULL IOWAIT,

                        NULL CLWAIT,

                        NULL APWAIT,

                        NULL CCWAIT,

                        NULL RNUM

                   FROM A

                  WHERE ROWNUM <= :31)

          WHERE RNUM <= :32 AND ROWNUM <= :33),

     A_AW

     AS (SELECT *

           FROM (SELECT 'LOCK WAIT ALL' VIEWTYPE,

                        DBID,

                        SQL_ID,

                        OPTIMIZER_MODE,

                        MODULE,

                        EXECUTIONS,

                        FETCHES,

                        SORTS,

                        BUFFER_GETS,

                        DISK_READS,

                        ROWS_PROCESSED,

                        CPU_TIME,

                        ELAPSED_TIME,

                        BUFFER_GETS / EXECUTIONS BUF_EXEC,

                        DISK_READS / EXECUTIONS DISK_EXEC,

                        ROWS_PROCESSED / EXECUTIONS ROWS_EXEC,

                        CPU_TIME / EXECUTIONS CPU_EXEC,

                        ELAPSED_TIME / EXECUTIONS ELAP_EXEC,

                        IOWAIT,

                        CLWAIT,

                        APWAIT,

                        CCWAIT,

                        ROW_NUMBER ()

                           OVER (ORDER BY APWAIT DESC, CPU_TIME DESC, ROWNUM)

                           RNUM

                   FROM A

                 UNION ALL

                 SELECT 'LOCK WAIT ALL' VIEWTYPE,

                        NULL DBID,

                        NULL SQL_ID,

                        NULL OPTIMIZER_MODE,

                        NULL MODULE,

                        NULL EXECUTIONS,

                        NULL FETCHES,

                        NULL SORTS,

                        NULL BUFFER_GETS,

                        NULL DISK_READS,

                        NULL ROWS_PROCESSED,

                        NULL CPU_TIME,

                        NULL ELAPSED_TIME,

                        NULL BUF_EXEC,

                        NULL DISK_EXEC,

                        NULL ROWS_EXEC,

                        NULL CPU_EXEC,

                        NULL ELAP_EXEC,

                        NULL IOWAIT,

                        NULL CLWAIT,

                        NULL APWAIT,

                        NULL CCWAIT,

                        NULL RNUM

                   FROM A

                  WHERE ROWNUM <= :34)

          WHERE RNUM <= :35 AND ROWNUM <= :36),

     A_EC

     AS (SELECT *

           FROM (SELECT 'EXEC CNT ALL' VIEWTYPE,

                        DBID,

                        SQL_ID,

                        OPTIMIZER_MODE,

                        MODULE,

                        EXECUTIONS,

                        FETCHES,

                        SORTS,

                        BUFFER_GETS,

                        DISK_READS,

                        ROWS_PROCESSED,

                        CPU_TIME,

                        ELAPSED_TIME,

                        BUFFER_GETS / EXECUTIONS BUF_EXEC,

                        DISK_READS / EXECUTIONS DISK_EXEC,

                        ROWS_PROCESSED / EXECUTIONS ROWS_EXEC,

                        CPU_TIME / EXECUTIONS CPU_EXEC,

                        ELAPSED_TIME / EXECUTIONS ELAP_EXEC,

                        IOWAIT,

                        CLWAIT,

                        APWAIT,

                        CCWAIT,

                        ROW_NUMBER ()

                        OVER (

                           ORDER BY EXECUTIONS DESC, CPU_TIME DESC, ROWNUM)

                           RNUM

                   FROM A

                 UNION ALL

                 SELECT 'EXEC CNT ALL' VIEWTYPE,

                        NULL DBID,

                        NULL SQL_ID,

                        NULL OPTIMIZER_MODE,

                        NULL MODULE,

                        NULL EXECUTIONS,

                        NULL FETCHES,

                        NULL SORTS,

                        NULL BUFFER_GETS,

                        NULL DISK_READS,

                        NULL ROWS_PROCESSED,

                        NULL CPU_TIME,

                        NULL ELAPSED_TIME,

                        NULL BUF_EXEC,

                        NULL DISK_EXEC,

                        NULL ROWS_EXEC,

                        NULL CPU_EXEC,

                        NULL ELAP_EXEC,

                        NULL IOWAIT,

                        NULL CLWAIT,

                        NULL APWAIT,

                        NULL CCWAIT,

                        NULL RNUM

                   FROM A

                  WHERE ROWNUM <= :37)

          WHERE RNUM <= :38 AND ROWNUM <= :39)

  SELECT /*+ OPT_PARAM('_gby_hash_aggregation_enabled','TRUE') OPT_PARAM('_optimizer_distinct_agg_transform','FALSE') BUG_9002336 */

        SQLSTAT.VIEWTYPE,

         SQLSTAT.SQL_ID,

         SQLSTAT.OPTIMIZER_MODE,

         SQLSTAT.MODULE,

         TO_CHAR (SQLSTAT.EXECUTIONS, 'FM999,999,999,999,999,999') EXECUTIONS,

         TO_CHAR (SQLSTAT.FETCHES, 'FM999,999,999,999,999,999') FETCHES,

         TO_CHAR (SQLSTAT.SORTS, 'FM999,999,999,999,999,999') SORTS,

         TO_CHAR (SQLSTAT.BUFFER_GETS, 'FM999,999,999,999,999,999') BUFFER_GETS,

         TO_CHAR (SQLSTAT.DISK_READS, 'FM999,999,999,999,999,999') DISK_READS,

         TO_CHAR (SQLSTAT.ROWS_PROCESSED, 'FM999,999,999,999,999,999')

            ROWS_PROCESSED,

         TO_CHAR (SQLSTAT.CPU_TIME, 'FM999,999,999,999,999,999.9') CPU_TIME,

         TO_CHAR (SQLSTAT.ELAPSED_TIME, 'FM999,999,999,999,999,999.9')

            ELAPSED_TIME,

         TO_CHAR (SQLSTAT.BUF_EXEC, 'FM999,999,999,999,999,999.9') BUF_EXEC,

         TO_CHAR (SQLSTAT.DISK_EXEC, 'FM999,999,999,999,999,999.9') DISK_EXEC,

         TO_CHAR (SQLSTAT.ROWS_EXEC, 'FM999,999,999,999,999,999.9') ROWS_EXEC,

         TO_CHAR (SQLSTAT.CPU_EXEC, 'FM999,999,999,999,999.999') CPU_EXEC,

         TO_CHAR (SQLSTAT.ELAP_EXEC, 'FM999,999,999,999,999.999') ELAP_EXEC,

         TO_CHAR (SQLSTAT.IOWAIT, 'FM999,999,999,999,999,999.9') IOWAIT,

         TO_CHAR (SQLSTAT.CLWAIT, 'FM999,999,999,999,999,999.9') CLWAIT,

         TO_CHAR (SQLSTAT.APWAIT, 'FM999,999,999,999,999,999.9') APWAIT,

         TO_CHAR (SQLSTAT.CCWAIT, 'FM999,999,999,999,999,999.9') CCWAIT,

         SQLSTAT.RNUM,

         DBMS_LOB.SUBSTR (SQLT.SQL_TEXT, 3000, 1) SQL_TEXT,

         NULL SQL_PLAN,

         (SELECT 'Table Count:'

                 || COUNT (

                       DISTINCT CASE

                                   WHEN OBJECT_ALIAS IS NOT NULL

                                        AND OPERATION NOT IN ('VIEW')

                                   THEN

                                      OBJECT_ALIAS

                                END)

                 || CHR (10)

                 || 'View Count:'

                 || COUNT (

                       DISTINCT CASE

                                   WHEN OBJECT_ALIAS IS NOT NULL

                                        AND OPERATION IN ('VIEW')

                                   THEN

                                      OBJECT_ALIAS

                                END)

                 || CHR (10)

                 || 'Window Func Count:'

                 || COUNT (CASE WHEN OPERATION IN ('WINDOW') THEN OPTIONS END)

                 || CHR (10)

                 || 'Query Block Count:'

                 || COUNT (DISTINCT QBLOCK_NAME)

                 || CHR (10)

                 || 'TIME:'

                 || MAX (TIME)

                 || CHR (10)

                 || 'COST:'

                 || TO_CHAR (MAX (COST), 'FM999,999,999')

                 || CHR (10)

                 || 'CPU COST:'

                 || TO_CHAR (MAX (CPU_COST), 'FM999,999,999,999,999')

                 || CHR (10)

                 || 'IO COST:'

                 || TO_CHAR (MAX (IO_COST), 'FM999,999,999,999')

            FROM V$SQL_PLAN

           WHERE SQL_ID = SQLSTAT.SQL_ID)

            PLAN_COST1,

         (SELECT 'Table Count:'

                 || COUNT (

                       DISTINCT CASE

                                   WHEN OBJECT_ALIAS IS NOT NULL

                                        AND OPERATION NOT IN ('VIEW')

                                   THEN

                                      OBJECT_ALIAS

                                END)

                 || CHR (10)

                 || 'View Count:'

                 || COUNT (

                       DISTINCT CASE

                                   WHEN OBJECT_ALIAS IS NOT NULL

                                        AND OPERATION IN ('VIEW')

                                   THEN

                                      OBJECT_ALIAS

                                END)

                 || CHR (10)

                 || 'Window Func Count:'

                 || COUNT (CASE WHEN OPERATION IN ('WINDOW') THEN OPTIONS END)

                 || CHR (10)

                 || 'Query Block Count:'

                 || COUNT (DISTINCT QBLOCK_NAME)

                 || CHR (10)

                 || 'TIME:'

                 || MAX (TIME)

                 || CHR (10)

                 || 'COST:'

                 || TO_CHAR (MAX (COST), 'FM999,999,999')

                 || CHR (10)

                 || 'CPU COST:'

                 || TO_CHAR (MAX (CPU_COST), 'FM999,999,999,999,999')

                 || CHR (10)

                 || 'IO COST:'

                 || TO_CHAR (MAX (IO_COST), 'FM999,999,999,999')

            FROM DBA_HIST_SQL_PLAN

           WHERE SQL_ID = SQLSTAT.SQL_ID AND DBID = SQLSTAT.DBID

                 AND TIMESTAMP IN

                        (SELECT MAX (TIMESTAMP)

                           FROM DBA_HIST_SQL_PLAN

                          WHERE SQL_ID = SQLSTAT.SQL_ID AND DBID = SQLSTAT.DBID))

            PLAN_COST2,

         NULL BIND_VALUE,

         NULL SQL_PROFILE

    FROM (SELECT * FROM A_ET

          UNION ALL

          SELECT 'ELAPSED TIME ALL' VIEWTYPE,

                 0 DBID,

                 'ETC' SQL_ID,

                 NULL OPTIMIZER_MODE,

                 'ETC' MODULE,

                 V2.EXECUTIONS - V1.EXECUTIONS EXECUTIONS,

                 V2.FETCHES - V1.FETCHES FETCHES,

                 V2.SORTS - V1.SORTS SORTS,

                 V2.BUFFER_GETS - V1.BUFFER_GETS BUFFER_GETS,

                 V2.DISK_READS - V1.DISK_READS DISK_READS,

                 V2.ROWS_PROCESSED - V1.ROWS_PROCESSED ROWS_PROCESSED,

                 V2.CPU_TIME - V1.CPU_TIME CPU_TIME,

                 V2.ELAPSED_TIME - V1.ELAPSED_TIME ELAPSED_TIME,

                 0 BUF_EXEC,

                 0 DISK_EXEC,

                 0 ROWS_EXEC,

                 0 CPU_EXEC,

                 0 ELAP_EXEC,

                 V2.IOWAIT - V1.IOWAIT IOWAIT,

                 V2.CLWAIT - V1.CLWAIT CLWAIT,

                 V2.APWAIT - V1.APWAIT APWAIT,

                 V2.CCWAIT - V1.CCWAIT CCWAIT,

                 NULL RNUM

            FROM (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_ET) V1,

                 (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_TOT) V2

          UNION ALL

          SELECT *

            FROM (SELECT 'ELAPSED TIME ONE' VIEWTYPE,

                         DBID,

                         SQL_ID,

                         OPTIMIZER_MODE,

                         MODULE,

                         EXECUTIONS,

                         FETCHES,

                         SORTS,

                         BUFFER_GETS,

                         DISK_READS,

                         ROWS_PROCESSED,

                         CPU_TIME,

                         ELAPSED_TIME,

                         BUFFER_GETS / EXECUTIONS BUF_EXEC,

                         DISK_READS / EXECUTIONS DISK_EXEC,

                         ROWS_PROCESSED / EXECUTIONS ROWS_EXEC,

                         CPU_TIME / EXECUTIONS CPU_EXEC,

                         ELAPSED_TIME / EXECUTIONS ELAP_EXEC,

                         IOWAIT,

                         CLWAIT,

                         APWAIT,

                         CCWAIT,

                         ROW_NUMBER ()

                         OVER (

                            ORDER BY

                               ELAPSED_TIME / EXECUTIONS DESC,

                               CPU_TIME DESC,

                               ROWNUM)

                            RNUM

                    FROM A

                  UNION ALL

                  SELECT 'ELAPSED TIME ONE' VIEWTYPE,

                         NULL DBID,

                         NULL SQL_ID,

                         NULL OPTIMIZER_MODE,

                         NULL MODULE,

                         NULL EXECUTIONS,

                         NULL FETCHES,

                         NULL SORTS,

                         NULL BUFFER_GETS,

                         NULL DISK_READS,

                         NULL ROWS_PROCESSED,

                         NULL CPU_TIME,

                         NULL ELAPSED_TIME,

                         NULL BUF_EXEC,

                         NULL DISK_EXEC,

                         NULL ROWS_EXEC,

                         NULL CPU_EXEC,

                         NULL ELAP_EXEC,

                         NULL IOWAIT,

                         NULL CLWAIT,

                         NULL APWAIT,

                         NULL CCWAIT,

                         NULL RNUM

                    FROM A

                   WHERE ROWNUM <= :40 + 1)

           WHERE RNUM <= :41 + 1 AND ROWNUM <= :42 + 1

          UNION ALL

          SELECT * FROM A_CT

          UNION ALL

          SELECT 'CPU TIME ALL' VIEWTYPE,

                 0 DBID,

                 'ETC' SQL_ID,

                 NULL OPTIMIZER_MODE,

                 'ETC' MODULE,

                 V2.EXECUTIONS - V1.EXECUTIONS EXECUTIONS,

                 V2.FETCHES - V1.FETCHES FETCHES,

                 V2.SORTS - V1.SORTS SORTS,

                 V2.BUFFER_GETS - V1.BUFFER_GETS BUFFER_GETS,

                 V2.DISK_READS - V1.DISK_READS DISK_READS,

                 V2.ROWS_PROCESSED - V1.ROWS_PROCESSED ROWS_PROCESSED,

                 V2.CPU_TIME - V1.CPU_TIME CPU_TIME,

                 V2.ELAPSED_TIME - V1.ELAPSED_TIME ELAPSED_TIME,

                 0 BUF_EXEC,

                 0 DISK_EXEC,

                 0 ROWS_EXEC,

                 0 CPU_EXEC,

                 0 ELAP_EXEC,

                 V2.IOWAIT - V1.IOWAIT IOWAIT,

                 V2.CLWAIT - V1.CLWAIT CLWAIT,

                 V2.APWAIT - V1.APWAIT APWAIT,

                 V2.CCWAIT - V1.CCWAIT CCWAIT,

                 NULL RNUM

            FROM (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_CT) V1,

                 (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_TOT) V2

          UNION ALL

          SELECT *

            FROM (SELECT 'CPU TIME ONE' VIEWTYPE,

                         DBID,

                         SQL_ID,

                         OPTIMIZER_MODE,

                         MODULE,

                         EXECUTIONS,

                         FETCHES,

                         SORTS,

                         BUFFER_GETS,

                         DISK_READS,

                         ROWS_PROCESSED,

                         CPU_TIME,

                         ELAPSED_TIME,

                         BUFFER_GETS / EXECUTIONS BUF_EXEC,

                         DISK_READS / EXECUTIONS DISK_EXEC,

                         ROWS_PROCESSED / EXECUTIONS ROWS_EXEC,

                         CPU_TIME / EXECUTIONS CPU_EXEC,

                         ELAPSED_TIME / EXECUTIONS ELAP_EXEC,

                         IOWAIT,

                         CLWAIT,

                         APWAIT,

                         CCWAIT,

                         ROW_NUMBER ()

                         OVER (

                            ORDER BY

                               CPU_TIME / EXECUTIONS DESC,

                               BUFFER_GETS DESC,

                               ROWNUM)

                            RNUM

                    FROM A

                  UNION ALL

                  SELECT 'CPU TIME ONE' VIEWTYPE,

                         NULL DBID,

                         NULL SQL_ID,

                         NULL OPTIMIZER_MODE,

                         NULL MODULE,

                         NULL EXECUTIONS,

                         NULL FETCHES,

                         NULL SORTS,

                         NULL BUFFER_GETS,

                         NULL DISK_READS,

                         NULL ROWS_PROCESSED,

                         NULL CPU_TIME,

                         NULL ELAPSED_TIME,

                         NULL BUF_EXEC,

                         NULL DISK_EXEC,

                         NULL ROWS_EXEC,

                         NULL CPU_EXEC,

                         NULL ELAP_EXEC,

                         NULL IOWAIT,

                         NULL CLWAIT,

                         NULL APWAIT,

                         NULL CCWAIT,

                         NULL RNUM

                    FROM A

                   WHERE ROWNUM <= :43 + 1)

           WHERE RNUM <= :44 + 1 AND ROWNUM <= :45 + 1

          UNION ALL

          SELECT * FROM A_BG

          UNION ALL

          SELECT 'BUFFER GETS ALL' VIEWTYPE,

                 0 DBID,

                 'ETC' SQL_ID,

                 NULL OPTIMIZER_MODE,

                 'ETC' MODULE,

                 V2.EXECUTIONS - V1.EXECUTIONS EXECUTIONS,

                 V2.FETCHES - V1.FETCHES FETCHES,

                 V2.SORTS - V1.SORTS SORTS,

                 V2.BUFFER_GETS - V1.BUFFER_GETS BUFFER_GETS,

                 V2.DISK_READS - V1.DISK_READS DISK_READS,

                 V2.ROWS_PROCESSED - V1.ROWS_PROCESSED ROWS_PROCESSED,

                 V2.CPU_TIME - V1.CPU_TIME CPU_TIME,

                 V2.ELAPSED_TIME - V1.ELAPSED_TIME ELAPSED_TIME,

                 0 BUF_EXEC,

                 0 DISK_EXEC,

                 0 ROWS_EXEC,

                 0 CPU_EXEC,

                 0 ELAP_EXEC,

                 V2.IOWAIT - V1.IOWAIT IOWAIT,

                 V2.CLWAIT - V1.CLWAIT CLWAIT,

                 V2.APWAIT - V1.APWAIT APWAIT,

                 V2.CCWAIT - V1.CCWAIT CCWAIT,

                 NULL RNUM

            FROM (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_BG) V1,

                 (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_TOT) V2

          UNION ALL

          SELECT *

            FROM (SELECT 'BUFFER GETS ONE' VIEWTYPE,

                         DBID,

                         SQL_ID,

                         OPTIMIZER_MODE,

                         MODULE,

                         EXECUTIONS,

                         FETCHES,

                         SORTS,

                         BUFFER_GETS,

                         DISK_READS,

                         ROWS_PROCESSED,

                         CPU_TIME,

                         ELAPSED_TIME,

                         BUFFER_GETS / EXECUTIONS BUF_EXEC,

                         DISK_READS / EXECUTIONS DISK_EXEC,

                         ROWS_PROCESSED / EXECUTIONS ROWS_EXEC,

                         CPU_TIME / EXECUTIONS CPU_EXEC,

                         ELAPSED_TIME / EXECUTIONS ELAP_EXEC,

                         IOWAIT,

                         CLWAIT,

                         APWAIT,

                         CCWAIT,

                         ROW_NUMBER ()

                         OVER (

                            ORDER BY

                               BUFFER_GETS / EXECUTIONS DESC,

                               CPU_TIME DESC,

                               ROWNUM)

                            RNUM

                    FROM A

                  UNION ALL

                  SELECT 'BUFFER GETS ONE' VIEWTYPE,

                         NULL DBID,

                         NULL SQL_ID,

                         NULL OPTIMIZER_MODE,

                         NULL MODULE,

                         NULL EXECUTIONS,

                         NULL FETCHES,

                         NULL SORTS,

                         NULL BUFFER_GETS,

                         NULL DISK_READS,

                         NULL ROWS_PROCESSED,

                         NULL CPU_TIME,

                         NULL ELAPSED_TIME,

                         NULL BUF_EXEC,

                         NULL DISK_EXEC,

                         NULL ROWS_EXEC,

                         NULL CPU_EXEC,

                         NULL ELAP_EXEC,

                         NULL IOWAIT,

                         NULL CLWAIT,

                         NULL APWAIT,

                         NULL CCWAIT,

                         NULL RNUM

                    FROM A

                   WHERE ROWNUM <= :46 + 1)

           WHERE RNUM <= :47 + 1 AND ROWNUM <= :48 + 1

          UNION ALL

          SELECT * FROM A_DR

          UNION ALL

          SELECT 'DISK READS ALL' VIEWTYPE,

                 0 DBID,

                 'ETC' SQL_ID,

                 NULL OPTIMIZER_MODE,

                 'ETC' MODULE,

                 V2.EXECUTIONS - V1.EXECUTIONS EXECUTIONS,

                 V2.FETCHES - V1.FETCHES FETCHES,

                 V2.SORTS - V1.SORTS SORTS,

                 V2.BUFFER_GETS - V1.BUFFER_GETS BUFFER_GETS,

                 V2.DISK_READS - V1.DISK_READS DISK_READS,

                 V2.ROWS_PROCESSED - V1.ROWS_PROCESSED ROWS_PROCESSED,

                 V2.CPU_TIME - V1.CPU_TIME CPU_TIME,

                 V2.ELAPSED_TIME - V1.ELAPSED_TIME ELAPSED_TIME,

                 0 BUF_EXEC,

                 0 DISK_EXEC,

                 0 ROWS_EXEC,

                 0 CPU_EXEC,

                 0 ELAP_EXEC,

                 V2.IOWAIT - V1.IOWAIT IOWAIT,

                 V2.CLWAIT - V1.CLWAIT CLWAIT,

                 V2.APWAIT - V1.APWAIT APWAIT,

                 V2.CCWAIT - V1.CCWAIT CCWAIT,

                 NULL RNUM

            FROM (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_DR) V1,

                 (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_TOT) V2

          UNION ALL

          SELECT *

            FROM (SELECT 'DISK READS ONE' VIEWTYPE,

                         DBID,

                         SQL_ID,

                         OPTIMIZER_MODE,

                         MODULE,

                         EXECUTIONS,

                         FETCHES,

                         SORTS,

                         BUFFER_GETS,

                         DISK_READS,

                         ROWS_PROCESSED,

                         CPU_TIME,

                         ELAPSED_TIME,

                         BUFFER_GETS / EXECUTIONS BUF_EXEC,

                         DISK_READS / EXECUTIONS DISK_EXEC,

                         ROWS_PROCESSED / EXECUTIONS ROWS_EXEC,

                         CPU_TIME / EXECUTIONS CPU_EXEC,

                         ELAPSED_TIME / EXECUTIONS ELAP_EXEC,

                         IOWAIT,

                         CLWAIT,

                         APWAIT,

                         CCWAIT,

                         ROW_NUMBER ()

                         OVER (

                            ORDER BY

                               DISK_READS / EXECUTIONS DESC,

                               CLWAIT DESC,

                               ROWNUM)

                            RNUM

                    FROM A

                  UNION ALL

                  SELECT 'DISK READS ONE' VIEWTYPE,

                         NULL DBID,

                         NULL SQL_ID,

                         NULL OPTIMIZER_MODE,

                         NULL MODULE,

                         NULL EXECUTIONS,

                         NULL FETCHES,

                         NULL SORTS,

                         NULL BUFFER_GETS,

                         NULL DISK_READS,

                         NULL ROWS_PROCESSED,

                         NULL CPU_TIME,

                         NULL ELAPSED_TIME,

                         NULL BUF_EXEC,

                         NULL DISK_EXEC,

                         NULL ROWS_EXEC,

                         NULL CPU_EXEC,

                         NULL ELAP_EXEC,

                         NULL IOWAIT,

                         NULL CLWAIT,

                         NULL APWAIT,

                         NULL CCWAIT,

                         NULL RNUM

                    FROM A

                   WHERE ROWNUM <= :49 + 1)

           WHERE RNUM <= :50 + 1 AND ROWNUM <= :51 + 1

          UNION ALL

          SELECT * FROM A_CL

          UNION ALL

          SELECT 'CLUSTER WAIT ALL' VIEWTYPE,

                 0 DBID,

                 'ETC' SQL_ID,

                 NULL OPTIMIZER_MODE,

                 'ETC' MODULE,

                 V2.EXECUTIONS - V1.EXECUTIONS EXECUTIONS,

                 V2.FETCHES - V1.FETCHES FETCHES,

                 V2.SORTS - V1.SORTS SORTS,

                 V2.BUFFER_GETS - V1.BUFFER_GETS BUFFER_GETS,

                 V2.DISK_READS - V1.DISK_READS DISK_READS,

                 V2.ROWS_PROCESSED - V1.ROWS_PROCESSED ROWS_PROCESSED,

                 V2.CPU_TIME - V1.CPU_TIME CPU_TIME,

                 V2.ELAPSED_TIME - V1.ELAPSED_TIME ELAPSED_TIME,

                 0 BUF_EXEC,

                 0 DISK_EXEC,

                 0 ROWS_EXEC,

                 0 CPU_EXEC,

                 0 ELAP_EXEC,

                 V2.IOWAIT - V1.IOWAIT IOWAIT,

                 V2.CLWAIT - V1.CLWAIT CLWAIT,

                 V2.APWAIT - V1.APWAIT APWAIT,

                 V2.CCWAIT - V1.CCWAIT CCWAIT,

                 NULL RNUM

            FROM (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_CL) V1,

                 (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_TOT) V2

          UNION ALL

          SELECT * FROM A_CC

          UNION ALL

          SELECT 'CONSISTENT WAIT ALL' VIEWTYPE,

                 0 DBID,

                 'ETC' SQL_ID,

                 NULL OPTIMIZER_MODE,

                 'ETC' MODULE,

                 V2.EXECUTIONS - V1.EXECUTIONS EXECUTIONS,

                 V2.FETCHES - V1.FETCHES FETCHES,

                 V2.SORTS - V1.SORTS SORTS,

                 V2.BUFFER_GETS - V1.BUFFER_GETS BUFFER_GETS,

                 V2.DISK_READS - V1.DISK_READS DISK_READS,

                 V2.ROWS_PROCESSED - V1.ROWS_PROCESSED ROWS_PROCESSED,

                 V2.CPU_TIME - V1.CPU_TIME CPU_TIME,

                 V2.ELAPSED_TIME - V1.ELAPSED_TIME ELAPSED_TIME,

                 0 BUF_EXEC,

                 0 DISK_EXEC,

                 0 ROWS_EXEC,

                 0 CPU_EXEC,

                 0 ELAP_EXEC,

                 V2.IOWAIT - V1.IOWAIT IOWAIT,

                 V2.CLWAIT - V1.CLWAIT CLWAIT,

                 V2.APWAIT - V1.APWAIT APWAIT,

                 V2.CCWAIT - V1.CCWAIT CCWAIT,

                 NULL RNUM

            FROM (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_CC) V1,

                 (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_TOT) V2

          UNION ALL

          SELECT * FROM A_IW

          UNION ALL

          SELECT 'IO WAIT ALL' VIEWTYPE,

                 0 DBID,

                 'ETC' SQL_ID,

                 NULL OPTIMIZER_MODE,

                 'ETC' MODULE,

                 V2.EXECUTIONS - V1.EXECUTIONS EXECUTIONS,

                 V2.FETCHES - V1.FETCHES FETCHES,

                 V2.SORTS - V1.SORTS SORTS,

                 V2.BUFFER_GETS - V1.BUFFER_GETS BUFFER_GETS,

                 V2.DISK_READS - V1.DISK_READS DISK_READS,

                 V2.ROWS_PROCESSED - V1.ROWS_PROCESSED ROWS_PROCESSED,

                 V2.CPU_TIME - V1.CPU_TIME CPU_TIME,

                 V2.ELAPSED_TIME - V1.ELAPSED_TIME ELAPSED_TIME,

                 0 BUF_EXEC,

                 0 DISK_EXEC,

                 0 ROWS_EXEC,

                 0 CPU_EXEC,

                 0 ELAP_EXEC,

                 V2.IOWAIT - V1.IOWAIT IOWAIT,

                 V2.CLWAIT - V1.CLWAIT CLWAIT,

                 V2.APWAIT - V1.APWAIT APWAIT,

                 V2.CCWAIT - V1.CCWAIT CCWAIT,

                 NULL RNUM

            FROM (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_IW) V1,

                 (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_TOT) V2

          UNION ALL

          SELECT * FROM A_AW

          UNION ALL

          SELECT 'LOCK WAIT ALL' VIEWTYPE,

                 0 DBID,

                 'ETC' SQL_ID,

                 NULL OPTIMIZER_MODE,

                 'ETC' MODULE,

                 V2.EXECUTIONS - V1.EXECUTIONS EXECUTIONS,

                 V2.FETCHES - V1.FETCHES FETCHES,

                 V2.SORTS - V1.SORTS SORTS,

                 V2.BUFFER_GETS - V1.BUFFER_GETS BUFFER_GETS,

                 V2.DISK_READS - V1.DISK_READS DISK_READS,

                 V2.ROWS_PROCESSED - V1.ROWS_PROCESSED ROWS_PROCESSED,

                 V2.CPU_TIME - V1.CPU_TIME CPU_TIME,

                 V2.ELAPSED_TIME - V1.ELAPSED_TIME ELAPSED_TIME,

                 0 BUF_EXEC,

                 0 DISK_EXEC,

                 0 ROWS_EXEC,

                 0 CPU_EXEC,

                 0 ELAP_EXEC,

                 V2.IOWAIT - V1.IOWAIT IOWAIT,

                 V2.CLWAIT - V1.CLWAIT CLWAIT,

                 V2.APWAIT - V1.APWAIT APWAIT,

                 V2.CCWAIT - V1.CCWAIT CCWAIT,

                 NULL RNUM

            FROM (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_AW) V1,

                 (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_TOT) V2

          UNION ALL

          SELECT * FROM A_EC

          UNION ALL

          SELECT 'EXEC CNT ALL' VIEWTYPE,

                 0 DBID,

                 'ETC' SQL_ID,

                 NULL OPTIMIZER_MODE,

                 'ETC' MODULE,

                 V2.EXECUTIONS - V1.EXECUTIONS EXECUTIONS,

                 V2.FETCHES - V1.FETCHES FETCHES,

                 V2.SORTS - V1.SORTS SORTS,

                 V2.BUFFER_GETS - V1.BUFFER_GETS BUFFER_GETS,

                 V2.DISK_READS - V1.DISK_READS DISK_READS,

                 V2.ROWS_PROCESSED - V1.ROWS_PROCESSED ROWS_PROCESSED,

                 V2.CPU_TIME - V1.CPU_TIME CPU_TIME,

                 V2.ELAPSED_TIME - V1.ELAPSED_TIME ELAPSED_TIME,

                 0 BUF_EXEC,

                 0 DISK_EXEC,

                 0 ROWS_EXEC,

                 0 CPU_EXEC,

                 0 ELAP_EXEC,

                 V2.IOWAIT - V1.IOWAIT IOWAIT,

                 V2.CLWAIT - V1.CLWAIT CLWAIT,

                 V2.APWAIT - V1.APWAIT APWAIT,

                 V2.CCWAIT - V1.CCWAIT CCWAIT,

                 NULL RNUM

            FROM (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_EC) V1,

                 (SELECT SUM (EXECUTIONS) EXECUTIONS,

                         SUM (FETCHES) FETCHES,

                         SUM (SORTS) SORTS,

                         SUM (BUFFER_GETS) BUFFER_GETS,

                         SUM (DISK_READS) DISK_READS,

                         SUM (ROWS_PROCESSED) ROWS_PROCESSED,

                         SUM (CPU_TIME) CPU_TIME,

                         SUM (ELAPSED_TIME) ELAPSED_TIME,

                         SUM (IOWAIT) IOWAIT,

                         SUM (CLWAIT) CLWAIT,

                         SUM (APWAIT) APWAIT,

                         SUM (CCWAIT) CCWAIT

                    FROM A_TOT) V2

          UNION ALL

          SELECT 'TOTAL' VIEWTYPE,

                 DBID,

                 SQL_ID,

                 OPTIMIZER_MODE,

                 MODULE,

                 EXECUTIONS,

                 FETCHES,

                 SORTS,

                 BUFFER_GETS,

                 DISK_READS,

                 ROWS_PROCESSED,

                 CPU_TIME,

                 ELAPSED_TIME,

                 BUF_EXEC,

                 DISK_EXEC,

                 ROWS_EXEC,

                 CPU_EXEC,

                 ELAP_EXEC,

                 IOWAIT,

                 CLWAIT,

                 APWAIT,

                 CCWAIT,

                 RNUM

            FROM A_TOT) SQLSTAT,

         DBA_HIST_SQLTEXT SQLT

   WHERE SQLSTAT.SQL_ID = SQLT.SQL_ID(+) AND SQLSTAT.DBID = SQLT.DBID(+)

ORDER BY VIEWTYPE, RNUM


--2.SQL_PLAN

/* Formatted on 2015-02-17 오후 2:17:18 (QP5 v5.163.1008.3004) */

  SELECT LPAD (' ', DEPTH) || OPERATION || '_' || OPTIONS || ' ' || OBJECT_NAME

            operation

    FROM DBA_HIST_SQL_PLAN

   WHERE SQL_ID = '8uru9t6frg2mw'

         AND TIMESTAMP IN

                (SELECT MAX (TIMESTAMP)

                   FROM DBA_HIST_SQL_PLAN

                  WHERE SQL_ID = '8uru9t6frg2mw'

                        AND DBID = (SELECT dbid FROM v$database))         --변경

ORDER BY ID, PLAN_HASH_VALUE;


/* Formatted on 2015-02-17 오후 1:17:13 (QP5 v5.163.1008.3004) */

    SELECT DECODE (id, 0, CHR (10)) || LPAD (' ', 1 * (LEVEL - 1)) || OPERATION

           || DECODE (

                 id,

                 0,    ' : '

                    || optimizer

                    || ' : '

                    || TO_CHAR (TIMESTAMP, 'YYYY.MM.DD HH24:MI:SS')

                    || ' ['

                    || PLAN_HASH_VALUE

                    || ']')

           || DECODE (options, NULL, NULL, ' (')

           || options

           || DECODE (options, NULL, NULL, ')')

           || DECODE (object_name, NULL, NULL, ' : ')

           || object_owner

           || DECODE (object_owner, NULL, NULL, '.')

           || OBJECT_NAME

           || DECODE (

                 operation,

                 'TABLE ACCESS', DECODE (

                                    options,

                                    'FULL', ' <'

                                            || TRIM (

                                                  TO_CHAR (

                                                     (SELECT num_rows

                                                        FROM all_tables at

                                                       WHERE at.owner =

                                                                object_owner

                                                             AND at.table_name =

                                                                    object_name)))

                                            || '>'))

           || DECODE (

                 operation,

                 'INDEX', ' <'

                          || TRIM (

                                TO_CHAR (

                                   (SELECT avg_data_blocks_per_key

                                      FROM all_indexes ai

                                     WHERE ai.owner = object_owner

                                           AND ai.index_name = object_name)))

                          || '>')

           || DECODE (

                 SUBSTR (operation, 1, 5),

                 'INDEX', '(' || SEARCH_COLUMNS || ':'

                          || REPLACE (

                                TRIM (

                                   (SELECT /*+ LEADING(DIC.IO) USE_NL(DIC.IDX DIC.IC DIC.I) INDEX(DIC.BASE DIC.IDX) */

                                          MAX (

                                              DECODE (column_position,

                                                      1, column_name))

                                           || ' '

                                           || MAX (

                                                 DECODE (column_position,

                                                         2, column_name))

                                           || ' '

                                           || MAX (

                                                 DECODE (column_position,

                                                         3, column_name))

                                           || ' '

                                           || MAX (

                                                 DECODE (column_position,

                                                         4, column_name))

                                           || ' '

                                           || MAX (

                                                 DECODE (column_position,

                                                         5, column_name))

                                           || ' '

                                           || MAX (

                                                 DECODE (column_position,

                                                         6, column_name))

                                           || ' '

                                           || MAX (

                                                 DECODE (column_position,

                                                         7, column_name))

                                           || ' '

                                           || MAX (

                                                 DECODE (column_position,

                                                         8, column_name))

                                           || ' '

                                           || MAX (

                                                 DECODE (column_position,

                                                         9, column_name))

                                           || ' '

                                           || MAX (

                                                 DECODE (column_position,

                                                         10, column_name))

                                           || ' '

                                           || MAX (

                                                 DECODE (column_position,

                                                         11, column_name))

                                           || ' '

                                      FROM all_ind_columns dic

                                     WHERE dic.index_owner = object_owner

                                           AND dic.index_name = object_name)),

                                ' ',

                                ',')

                          || ')',

                 NULL)

           || DECODE (other_tag, NULL, NULL, '(')

           || other_tag

           || DECODE (other_tag, NULL, NULL, ')')

           || DECODE (partition_start, NULL, NULL, ' pst:')

           || partition_start

           || DECODE (partition_start, NULL, NULL, ' pstop: ')

           || partition_stop

              AS OPERATION

      FROM (SELECT                                    /*+ ALL_ROWS NO_MERGE */

                  TO_CHAR (DBID),

                   SQL_ID,

                   PLAN_HASH_VALUE,

                   ID,

                   OPERATION,

                   OPTIONS,

                   OBJECT_NODE,

                   OBJECT#,

                   OBJECT_OWNER,

                   OBJECT_NAME,

                   OBJECT_ALIAS,

                   OBJECT_TYPE,

                   OPTIMIZER,

                   PARENT_ID,

                   DEPTH,

                   POSITION,

                   SEARCH_COLUMNS,

                   COST,

                   CARDINALITY,

                   BYTES,

                   OTHER_TAG,

                   PARTITION_START,

                   PARTITION_STOP,

                   PARTITION_ID,

                   OTHER,

                   DISTRIBUTION,

                   CPU_COST,

                   IO_COST,

                   TEMP_SPACE,

                   ACCESS_PREDICATES,

                   FILTER_PREDICATES,

                   PROJECTION,

                   TIME,

                   QBLOCK_NAME,

                   REMARKS,

                   TIMESTAMP,

                      RPAD (TO_CHAR (ID), 10, ' ')

                   || TO_CHAR (TIMESTAMP, 'YYYYMMDDHH24MISS')

                   || PLAN_HASH_VALUE

                   || 'P'

                   || SQL_ID

                      ID_M,

                      RPAD (TO_CHAR (PARENT_ID), 10, ' ')

                   || TO_CHAR (TIMESTAMP, 'YYYYMMDDHH24MISS')

                   || PLAN_HASH_VALUE

                   || 'P'

                   || SQL_ID

                      PID_M

              FROM DBA_HIST_SQL_PLAN

             WHERE     SQL_ID = :1

                   AND DBID = (select dbid from v$database) --변경 

                   AND TIMESTAMP IN (SELECT MAX (TIMESTAMP)

                                       FROM DBA_HIST_SQL_PLAN

                                      WHERE SQL_ID = :3 AND DBID = (select dbid from v$database) --변경 

                                      ))

CONNECT BY PRIOR ID_M = PID_M

START WITH ID = 0 AND SQL_ID = :5;


--3.SQL_PROFILE 내역 

/* Formatted on 2015-02-17 오후 12:58:52 (QP5 v5.163.1008.3004) */

SELECT    LPAD ('DATE', 12, ' ')

       || LPAD ('BUFFER GETS TOTAL', 20, ' ')

       || LPAD ('CPU TIME TOTAL', 15, ' ')

       || LPAD ('CC WAIT TIME', 14, ' ')

       || LPAD ('IO WAIT TIME', 14, ' ')

       || LPAD ('ROWS PROCESSED', 15, ' ')

       || LPAD ('BUFF/EXEC', 15, ' ')

       || LPAD ('CPU/EXEC', 14, ' ')

       || LPAD ('CC/EXEC', 14, ' ')

       || LPAD ('IO/EXEC', 14, ' ')

       || CHR (10)

       || LPAD ('TOTAL EXECU', 12, ' ')

       || LPAD ('DISK READS TOTAL', 20, ' ')

       || LPAD ('ELAPSED TIME', 15, ' ')

       || LPAD ('CL WAIT TIME', 14, ' ')

       || LPAD ('AP WAIT TIME', 14, ' ')

       || LPAD ('ROWS PROC/EXEC', 15, ' ')

       || LPAD ('DISK/EXEC', 15, ' ')

       || LPAD ('ELAP/EXEC', 14, ' ')

       || LPAD ('CL/EXEC', 14, ' ')

       || LPAD ('AP/EXEC', 14, ' ')

          A

  FROM DUAL

UNION ALL

SELECT LPAD ('-', 147, '-') A FROM DUAL

UNION ALL

SELECT A

  FROM (  SELECT LPAD (TO_CHAR (END_INTERVAL_TIME, 'YYYY.MM.DD'), 12, ' ')

                 || LPAD (

                       TO_CHAR (SUM (BUFFER_GETS_DELTA),

                                'FM999,999,999,999,999'),

                       20,

                       ' ')

                 || LPAD (

                       TO_CHAR (ROUND (SUM (CPU_TIME_DELTA) / 1000000, 1),

                                'FM999,999,999.9'),

                       15,

                       ' ')

                 || LPAD (

                       TO_CHAR (ROUND (SUM (CCWAIT_DELTA) / 1000000, 1),

                                'FM999,999,999.9'),

                       14,

                       ' ')

                 || LPAD (

                       TO_CHAR (ROUND (SUM (IOWAIT_DELTA) / 1000000, 1),

                                'FM999,999,999.9'),

                       14,

                       ' ')

                 || LPAD (

                       TO_CHAR (SUM (ROWS_PROCESSED_DELTA),

                                'FM999,999,999,999,999.9'),

                       15,

                       ' ')

                 || LPAD (

                       TO_CHAR (

                          ROUND (

                             SUM (BUFFER_GETS_DELTA)

                             / DECODE (SUM (EXECUTIONS_DELTA),

                                       0, 1,

                                       SUM (EXECUTIONS_DELTA)),

                             0),

                          'FM999,999,999,999.9'),

                       15,

                       ' ')

                 || LPAD (

                       TO_CHAR (

                          ROUND (

                             (SUM (CPU_TIME_DELTA) / 1000000)

                             / DECODE (SUM (EXECUTIONS_DELTA),

                                       0, 1,

                                       SUM (EXECUTIONS_DELTA)),

                             1),

                          'FM999,999.9'),

                       14,

                       ' ')

                 || LPAD (

                       TO_CHAR (

                          ROUND (

                             (SUM (CCWAIT_DELTA) / 1000000)

                             / DECODE (SUM (EXECUTIONS_DELTA),

                                       0, 1,

                                       SUM (EXECUTIONS_DELTA)),

                             1),

                          'FM999,999.9'),

                       14,

                       ' ')

                 || LPAD (

                       TO_CHAR (

                          ROUND (

                             (SUM (IOWAIT_DELTA) / 1000000)

                             / DECODE (SUM (EXECUTIONS_DELTA),

                                       0, 1,

                                       SUM (EXECUTIONS_DELTA)),

                             1),

                          'FM999,999.9'),

                       14,

                       ' ')

                 || CHR (10)

                 || LPAD (TO_CHAR (SUM (EXECUTIONS_DELTA), 'FM999,999,999'),

                          12,

                          ' ')

                 || LPAD (

                       TO_CHAR (SUM (DISK_READS_DELTA),

                                'FM999,999,999,999,999'),

                       20,

                       ' ')

                 || LPAD (

                       TO_CHAR (ROUND (SUM (ELAPSED_TIME_DELTA) / 1000000, 1),

                                'FM999,999,999.9'),

                       15,

                       ' ')

                 || LPAD (

                       TO_CHAR (ROUND (SUM (CLWAIT_DELTA) / 1000000, 1),

                                'FM999,999,999.9'),

                       14,

                       ' ')

                 || LPAD (

                       TO_CHAR (ROUND (SUM (APWAIT_DELTA) / 1000000, 1),

                                'FM999,999,999.9'),

                       14,

                       ' ')

                 || LPAD (

                       TO_CHAR (

                          ROUND (

                             SUM (ROWS_PROCESSED_DELTA)

                             / DECODE (SUM (EXECUTIONS_DELTA),

                                       0, 1,

                                       SUM (EXECUTIONS_DELTA)),

                             1),

                          'FM999,999,999.9'),

                       15,

                       ' ')

                 || LPAD (

                       TO_CHAR (

                          ROUND (

                             SUM (DISK_READS_DELTA)

                             / DECODE (SUM (EXECUTIONS_DELTA),

                                       0, 1,

                                       SUM (EXECUTIONS_DELTA)),

                             0),

                          'FM999,999,999,999.9'),

                       15,

                       ' ')

                 || LPAD (

                       TO_CHAR (

                          ROUND (

                             (SUM (ELAPSED_TIME_DELTA) / 1000000)

                             / DECODE (SUM (EXECUTIONS_DELTA),

                                       0, 1,

                                       SUM (EXECUTIONS_DELTA)),

                             1),

                          'FM999,999.9'),

                       14,

                       ' ')

                 || LPAD (

                       TO_CHAR (

                          ROUND (

                             (SUM (CLWAIT_DELTA) / 1000000)

                             / DECODE (SUM (EXECUTIONS_DELTA),

                                       0, 1,

                                       SUM (EXECUTIONS_DELTA)),

                             1),

                          'FM999,999.9'),

                       14,

                       ' ')

                 || LPAD (

                       TO_CHAR (

                          ROUND (

                             (SUM (APWAIT_DELTA) / 1000000)

                             / DECODE (SUM (EXECUTIONS_DELTA),

                                       0, 1,

                                       SUM (EXECUTIONS_DELTA)),

                             1),

                          'FM999,999.9'),

                       14,

                       ' ')

                    A

            FROM DBA_HIST_SQLSTAT DHSQL, DBA_HIST_SNAPSHOT DHSS

           WHERE     DHSQL.DBID = (select dbid from v$database) --변경 

                 AND DHSQL.INSTANCE_NUMBER = (select  INSTANCE_NUMBER from v$instance)  --변경

                 AND DHSQL.SQL_ID = :3

                 AND DHSS.DBID = DHSQL.DBID

                 AND DHSS.SNAP_ID = DHSQL.SNAP_ID

                 AND DHSS.INSTANCE_NUMBER = DHSQL.INSTANCE_NUMBER

        GROUP BY TO_CHAR (END_INTERVAL_TIME, 'YYYY.MM.DD')

        ORDER BY 1);


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

Oracle Top 10 Event 추출 스크립트



   SELECT SNAP_TIME,

         TO_CHAR (SUM (DECODE (RNK, 1, VALUE)), 'FM999,999,999,999.999')

            "VALUE Per SEC_1",

         TO_CHAR (SUM (DECODE (RNK, 2, VALUE)), 'FM999,999,999,999.999')

            "VALUE Per SEC_2",

         TO_CHAR (SUM (DECODE (RNK, 3, VALUE)), 'FM999,999,999,999.999')

            "VALUE Per SEC_3",

         TO_CHAR (SUM (DECODE (RNK, 4, VALUE)), 'FM999,999,999,999.999')

            "VALUE Per SEC_4",

         TO_CHAR (SUM (DECODE (RNK, 5, VALUE)), 'FM999,999,999,999.999')

            "VALUE Per SEC_5",

         TO_CHAR (SUM (DECODE (RNK, 6, VALUE)), 'FM999,999,999,999.999')

            "VALUE Per SEC_6",

         TO_CHAR (SUM (DECODE (RNK, 7, VALUE)), 'FM999,999,999,999.999')

            "VALUE Per SEC_7",

         TO_CHAR (SUM (DECODE (RNK, 8, VALUE)), 'FM999,999,999,999.999')

            "VALUE Per SEC_8",

         TO_CHAR (SUM (DECODE (RNK, 9, VALUE)), 'FM999,999,999,999.999')

            "VALUE Per SEC_9",

         TO_CHAR (SUM (DECODE (RNK, 10, VALUE)), 'FM999,999,999,999.999')

            "VALUE Per SEC_10",

         TO_CHAR (SUM (DECODE (RNK, 11, VALUE)), 'FM999,999,999,999.999')

            "VALUE Per SEC_ETC",

         TO_CHAR (SUM (DECODE (RNK, 1, VALUE_DIFF)), 'FM999,999,999,999,999')

            VALUE_DIFF_1,

         TO_CHAR (SUM (DECODE (RNK, 2, VALUE_DIFF)), 'FM999,999,999,999,999')

            VALUE_DIFF_2,

         TO_CHAR (SUM (DECODE (RNK, 3, VALUE_DIFF)), 'FM999,999,999,999,999')

            VALUE_DIFF_3,

         TO_CHAR (SUM (DECODE (RNK, 4, VALUE_DIFF)), 'FM999,999,999,999,999')

            VALUE_DIFF_4,

         TO_CHAR (SUM (DECODE (RNK, 5, VALUE_DIFF)), 'FM999,999,999,999,999')

            VALUE_DIFF_5,

         TO_CHAR (SUM (DECODE (RNK, 6, VALUE_DIFF)), 'FM999,999,999,999,999')

            VALUE_DIFF_6,

         TO_CHAR (SUM (DECODE (RNK, 7, VALUE_DIFF)), 'FM999,999,999,999,999')

            VALUE_DIFF_7,

         TO_CHAR (SUM (DECODE (RNK, 8, VALUE_DIFF)), 'FM999,999,999,999,999')

            VALUE_DIFF_8,

         TO_CHAR (SUM (DECODE (RNK, 9, VALUE_DIFF)), 'FM999,999,999,999,999')

            VALUE_DIFF_9,

         TO_CHAR (SUM (DECODE (RNK, 10, VALUE_DIFF)), 'FM999,999,999,999,999')

            VALUE_DIFF_10,

         TO_CHAR (SUM (DECODE (RNK, 11, VALUE_DIFF)), 'FM999,999,999,999,999')

            VALUE_DIFF_ETC

    FROM (SELECT A.EVENT_NAME,

                 B.EVENT_NAME B_EVENT_NAME,

                 A.SNAP_TIME,

                 A.VALUE,

                 A.VALUE_DIFF,

                 B.RNK RNK

            FROM (SELECT EVENT_NAME,

                         DECODE (G1, 1, 'SUB AVG', SNAP_TIME) SNAP_TIME,

                         VALUE,

                         VALUE_DIFF

                    FROM (  SELECT EVENT_NAME,

                                   END_TIME SNAP_TIME,

                                   AVG (NVL (VALUE, 0)) VALUE,

                                   AVG (NVL (VALUE_DIFF, 0)) VALUE_DIFF,

                                   GROUPING (END_TIME) G1,

                                   GROUPING (EVENT_NAME) G2

                              FROM (SELECT EVENT_NAME,

                                           TO_CHAR (SNAP_TIME_C1,

                                                    'MM.DD HH24:MI')

                                              START_TIME,

                                           TO_CHAR (SNAP_TIME_C2,

                                                    'MM.DD HH24:MI')

                                              END_TIME,

                                           DECODE (

                                              SNAP_TIME_C2,

                                              NULL, 0,

                                              (CASE

                                                  WHEN VALUE_2 < VALUE_1 THEN 0

                                                  ELSE VALUE_2 - VALUE_1

                                               END)

                                              / (1000000

                                                 * (EXTRACT (

                                                       DAY FROM SNAP_TIME_C2

                                                                - SNAP_TIME_C1)

                                                    * 86400

                                                    + EXTRACT (

                                                         HOUR FROM SNAP_TIME_C2

                                                                   - SNAP_TIME_C1)

                                                      * 3600

                                                    + EXTRACT (

                                                         MINUTE FROM SNAP_TIME_C2

                                                                     - SNAP_TIME_C1)

                                                      * 60

                                                    + EXTRACT (

                                                         SECOND FROM SNAP_TIME_C2

                                                                     - SNAP_TIME_C1))))

                                              VALUE,

                                           (CASE

                                               WHEN VALUE_2 < VALUE_1 THEN 0

                                               ELSE VALUE_2 - VALUE_1

                                            END)

                                           / 1000000

                                              VALUE_DIFF,

                                           ROW_NUMBER ()

                                           OVER (

                                              PARTITION BY INSTANCE_NUMBER,

                                                           EVENT_NAME

                                              ORDER BY SNAP_ID)

                                              RNUM,

                                           SNAP_ID,

                                           INSTANCE_NUMBER

                                      FROM (  SELECT SNAP.END_INTERVAL_TIME

                                                        SNAP_TIME_C1,

                                                     LEAD (

                                                        SNAP.END_INTERVAL_TIME)

                                                     OVER (

                                                        PARTITION BY DBI.INSTANCE_NUMBER,

                                                                     EVENT_NAME

                                                        ORDER BY SNAP.SNAP_ID)

                                                        SNAP_TIME_C2,

                                                     EVENT.EVENT_NAME,

                                                     EVENT.TIME_WAITED_MICRO

                                                        VALUE_1,

                                                     LEAD (

                                                        EVENT.TIME_WAITED_MICRO)

                                                     OVER (

                                                        PARTITION BY DBI.INSTANCE_NUMBER,

                                                                     EVENT_NAME

                                                        ORDER BY SNAP.SNAP_ID)

                                                        VALUE_2,

                                                     SNAP.SNAP_ID,

                                                     DBI.INSTANCE_NUMBER

                                                FROM (SELECT DI.DBID,

                                                             DI.INSTANCE_NUMBER,

                                                             DI.STARTUP_TIME

                                                        FROM DBA_HIST_DATABASE_INSTANCE DI

                                                       WHERE DI.DBID = (select dbid from v$database) --변경

                                                             AND DI.INSTANCE_NUMBER =(select  INSTANCE_NUMBER from v$instance)  --변경

                                                             AND ROWNUM <= 1) DBI,

                                                     DBA_HIST_SNAPSHOT SNAP,

                                                     DBA_HIST_SYSTEM_EVENT EVENT

                                               WHERE DBI.DBID = SNAP.DBID

                                                     AND DBI.INSTANCE_NUMBER =

                                                            SNAP.INSTANCE_NUMBER

                                                     AND SNAP.SNAP_ID >= :3

                                                     AND SNAP.SNAP_ID <= :4

                                                     AND SNAP.DBID = EVENT.DBID

                                                     AND SNAP.INSTANCE_NUMBER =

                                                            EVENT.INSTANCE_NUMBER

                                                     AND SNAP.SNAP_ID =

                                                            EVENT.SNAP_ID

                                                     AND UPPER (EVENT.WAIT_CLASS) <>

                                                            'IDLE'

                                            ORDER BY SNAP.SNAP_ID))

                             WHERE START_TIME IS NOT NULL

                                   AND END_TIME IS NOT NULL

                          GROUP BY ROLLUP (EVENT_NAME, END_TIME))

                   WHERE NOT (G1 = 1 AND G2 = 1)) A,

                 (SELECT EVENT_NAME, RNK

                    FROM (SELECT EVENT_NAME, RNK

                            FROM (SELECT EVENT_NAME,

                                         RANK ()

                                         OVER (

                                            ORDER BY

                                               VALUE_DIFF DESC,

                                               EVENT_NAME ASC NULLS LAST)

                                            RNK

                                    FROM (SELECT EVENT_NAME,

                                                 DECODE (G1,

                                                         1, 'SUB AVG',

                                                         SNAP_TIME)

                                                    SNAP_TIME,

                                                 VALUE,

                                                 VALUE_DIFF

                                            FROM (  SELECT EVENT_NAME,

                                                           END_TIME SNAP_TIME,

                                                           AVG (NVL (VALUE, 0))

                                                              VALUE,

                                                           AVG (

                                                              NVL (VALUE_DIFF, 0))

                                                              VALUE_DIFF,

                                                           GROUPING (END_TIME) G1,

                                                           GROUPING (EVENT_NAME)

                                                              G2

                                                      FROM (SELECT EVENT_NAME,

                                                                   TO_CHAR (

                                                                      SNAP_TIME_C1,

                                                                      'MM.DD HH24:MI')

                                                                      START_TIME,

                                                                   TO_CHAR (

                                                                      SNAP_TIME_C2,

                                                                      'MM.DD HH24:MI')

                                                                      END_TIME,

                                                                   DECODE (

                                                                      SNAP_TIME_C2,

                                                                      NULL, 0,

                                                                      (CASE

                                                                          WHEN VALUE_2 <

                                                                                  VALUE_1

                                                                          THEN

                                                                             0

                                                                          ELSE

                                                                             VALUE_2

                                                                             - VALUE_1

                                                                       END)

                                                                      / (1000000

                                                                         * (EXTRACT (

                                                                               DAY FROM SNAP_TIME_C2

                                                                                        - SNAP_TIME_C1)

                                                                            * 86400

                                                                            + EXTRACT (

                                                                                 HOUR FROM SNAP_TIME_C2

                                                                                           - SNAP_TIME_C1)

                                                                              * 3600

                                                                            + EXTRACT (

                                                                                 MINUTE FROM SNAP_TIME_C2

                                                                                             - SNAP_TIME_C1)

                                                                              * 60

                                                                            + EXTRACT (

                                                                                 SECOND FROM SNAP_TIME_C2

                                                                                             - SNAP_TIME_C1))))

                                                                      VALUE,

                                                                   (CASE

                                                                       WHEN VALUE_2 <

                                                                               VALUE_1

                                                                       THEN

                                                                          0

                                                                       ELSE

                                                                          VALUE_2

                                                                          - VALUE_1

                                                                    END)

                                                                   / 1000000

                                                                      VALUE_DIFF,

                                                                   ROW_NUMBER ()

                                                                   OVER (

                                                                      PARTITION BY INSTANCE_NUMBER,

                                                                                   EVENT_NAME

                                                                      ORDER BY

                                                                         SNAP_ID)

                                                                      RNUM,

                                                                   SNAP_ID,

                                                                   INSTANCE_NUMBER

                                                              FROM (  SELECT SNAP.END_INTERVAL_TIME

                                                                                SNAP_TIME_C1,

                                                                             LEAD (

                                                                                SNAP.END_INTERVAL_TIME)

                                                                             OVER (

                                                                                PARTITION BY DBI.INSTANCE_NUMBER,

                                                                                             EVENT_NAME

                                                                                ORDER BY

                                                                                   SNAP.SNAP_ID)

                                                                                SNAP_TIME_C2,

                                                                             EVENT.EVENT_NAME,

                                                                             EVENT.TIME_WAITED_MICRO

                                                                                VALUE_1,

                                                                             LEAD (

                                                                                EVENT.TIME_WAITED_MICRO)

                                                                             OVER (

                                                                                PARTITION BY DBI.INSTANCE_NUMBER,

                                                                                             EVENT_NAME

                                                                                ORDER BY

                                                                                   SNAP.SNAP_ID)

                                                                                VALUE_2,

                                                                             SNAP.SNAP_ID,

                                                                             DBI.INSTANCE_NUMBER

                                                                        FROM (SELECT DI.DBID,

                                                                                     DI.INSTANCE_NUMBER,

                                                                                     DI.STARTUP_TIME

                                                                                FROM DBA_HIST_DATABASE_INSTANCE DI

                                                                               WHERE DI.DBID =(select dbid from v$database) --변경

                                                                                     AND DI.INSTANCE_NUMBER =(select  INSTANCE_NUMBER from v$instance)  --변경

                                                                                     AND ROWNUM <=

                                                                                            1) DBI,

                                                                             DBA_HIST_SNAPSHOT SNAP,

                                                                             DBA_HIST_SYSTEM_EVENT EVENT

                                                                       WHERE DBI.DBID = SNAP.DBID

                                                                             AND DBI.INSTANCE_NUMBER = SNAP.INSTANCE_NUMBER

                                                                             AND SNAP.SNAP_ID >=

                                                                                    :7

                                                                             AND SNAP.SNAP_ID <=

                                                                                    :8

                                                                             AND SNAP.DBID =

                                                                                    EVENT.DBID

                                                                             AND SNAP.INSTANCE_NUMBER =

                                                                                    EVENT.INSTANCE_NUMBER

                                                                             AND SNAP.SNAP_ID =

                                                                                    EVENT.SNAP_ID

                                                                             AND UPPER (

                                                                                    EVENT.WAIT_CLASS) <>

                                                                                    'IDLE'

                                                                    ORDER BY SNAP.SNAP_ID))

                                                     WHERE START_TIME IS NOT NULL

                                                           AND END_TIME

                                                                  IS NOT NULL

                                                  GROUP BY ROLLUP (EVENT_NAME,

                                                                   END_TIME))

                                           WHERE NOT (G1 = 1 AND G2 = 1))

                                   WHERE SNAP_TIME = 'SUB AVG')

                           WHERE RNK <= 10)) B

           WHERE A.EVENT_NAME = B.EVENT_NAME

          UNION ALL

            SELECT ' 나머지 Event Sum' EVENT_NAME,

                   NULL B_EVENT_NAME,

                   A.SNAP_TIME,

                   SUM (A.VALUE) VALUE,

                   SUM (A.VALUE_DIFF) VALUE_DIFF,

                   11 RNK

              FROM (SELECT EVENT_NAME,

                           DECODE (G1, 1, 'SUB AVG', SNAP_TIME) SNAP_TIME,

                           VALUE,

                           VALUE_DIFF

                      FROM (  SELECT EVENT_NAME,

                                     END_TIME SNAP_TIME,

                                     AVG (NVL (VALUE, 0)) VALUE,

                                     AVG (NVL (VALUE_DIFF, 0)) VALUE_DIFF,

                                     GROUPING (END_TIME) G1,

                                     GROUPING (EVENT_NAME) G2

                                FROM (SELECT EVENT_NAME,

                                             TO_CHAR (SNAP_TIME_C1,

                                                      'MM.DD HH24:MI')

                                                START_TIME,

                                             TO_CHAR (SNAP_TIME_C2,

                                                      'MM.DD HH24:MI')

                                                END_TIME,

                                             DECODE (

                                                SNAP_TIME_C2,

                                                NULL, 0,

                                                (CASE

                                                    WHEN VALUE_2 < VALUE_1 THEN 0

                                                    ELSE VALUE_2 - VALUE_1

                                                 END)

                                                / (1000000

                                                   * (EXTRACT (

                                                         DAY FROM SNAP_TIME_C2

                                                                  - SNAP_TIME_C1)

                                                      * 86400

                                                      + EXTRACT (

                                                           HOUR FROM SNAP_TIME_C2

                                                                     - SNAP_TIME_C1)

                                                        * 3600

                                                      + EXTRACT (

                                                           MINUTE FROM SNAP_TIME_C2

                                                                       - SNAP_TIME_C1)

                                                        * 60

                                                      + EXTRACT (

                                                           SECOND FROM SNAP_TIME_C2

                                                                       - SNAP_TIME_C1))))

                                                VALUE,

                                             (CASE

                                                 WHEN VALUE_2 < VALUE_1 THEN 0

                                                 ELSE VALUE_2 - VALUE_1

                                              END)

                                             / 1000000

                                                VALUE_DIFF,

                                             ROW_NUMBER ()

                                             OVER (

                                                PARTITION BY INSTANCE_NUMBER,

                                                             EVENT_NAME

                                                ORDER BY SNAP_ID)

                                                RNUM,

                                             SNAP_ID,

                                             INSTANCE_NUMBER

                                        FROM (  SELECT SNAP.END_INTERVAL_TIME

                                                          SNAP_TIME_C1,

                                                       LEAD (

                                                          SNAP.END_INTERVAL_TIME)

                                                       OVER (

                                                          PARTITION BY DBI.INSTANCE_NUMBER,

                                                                       EVENT_NAME

                                                          ORDER BY SNAP.SNAP_ID)

                                                          SNAP_TIME_C2,

                                                       EVENT.EVENT_NAME,

                                                       EVENT.TIME_WAITED_MICRO

                                                          VALUE_1,

                                                       LEAD (

                                                          EVENT.TIME_WAITED_MICRO)

                                                       OVER (

                                                          PARTITION BY DBI.INSTANCE_NUMBER,

                                                                       EVENT_NAME

                                                          ORDER BY SNAP.SNAP_ID)

                                                          VALUE_2,

                                                       SNAP.SNAP_ID,

                                                       DBI.INSTANCE_NUMBER

                                                  FROM (SELECT DI.DBID,

                                                               DI.INSTANCE_NUMBER,

                                                               DI.STARTUP_TIME

                                                          FROM DBA_HIST_DATABASE_INSTANCE DI

                                                         WHERE DI.DBID = (select dbid from v$database) --변경

                                                               AND DI.INSTANCE_NUMBER =(select  INSTANCE_NUMBER from v$instance)  --변경

                                                               AND ROWNUM <= 1) DBI,

                                                       DBA_HIST_SNAPSHOT SNAP,

                                                       DBA_HIST_SYSTEM_EVENT EVENT

                                                 WHERE DBI.DBID = SNAP.DBID

                                                       AND DBI.INSTANCE_NUMBER =

                                                              SNAP.INSTANCE_NUMBER

                                                       AND SNAP.SNAP_ID >= :11

                                                       AND SNAP.SNAP_ID <= :12

                                                       AND SNAP.DBID = EVENT.DBID

                                                       AND SNAP.INSTANCE_NUMBER =

                                                              EVENT.INSTANCE_NUMBER

                                                       AND SNAP.SNAP_ID =

                                                              EVENT.SNAP_ID

                                                       AND UPPER (EVENT.WAIT_CLASS) <>

                                                              'IDLE'

                                              ORDER BY SNAP.SNAP_ID))

                               WHERE START_TIME IS NOT NULL

                                     AND END_TIME IS NOT NULL

                            GROUP BY ROLLUP (EVENT_NAME, END_TIME))

                     WHERE NOT (G1 = 1 AND G2 = 1)) A

             WHERE A.EVENT_NAME NOT IN (SELECT EVENT_NAME

                                          FROM (SELECT EVENT_NAME, RNK

                                                  FROM (SELECT EVENT_NAME, RNK

                                                          FROM (SELECT EVENT_NAME,

                                                                       RANK ()

                                                                       OVER (

                                                                          ORDER BY

                                                                             VALUE_DIFF DESC,

                                                                             EVENT_NAME ASC NULLS LAST)

                                                                          RNK

                                                                  FROM (SELECT EVENT_NAME,

                                                                               DECODE (

                                                                                  G1,

                                                                                  1, 'SUB AVG',

                                                                                  SNAP_TIME)

                                                                                  SNAP_TIME,

                                                                               VALUE,

                                                                               VALUE_DIFF

                                                                          FROM (  SELECT EVENT_NAME,

                                                                                         END_TIME

                                                                                            SNAP_TIME,

                                                                                         AVG (

                                                                                            NVL (

                                                                                               VALUE,

                                                                                               0))

                                                                                            VALUE,

                                                                                         AVG (

                                                                                            NVL (

                                                                                               VALUE_DIFF,

                                                                                               0))

                                                                                            VALUE_DIFF,

                                                                                         GROUPING (

                                                                                            END_TIME)

                                                                                            G1,

                                                                                         GROUPING (

                                                                                            EVENT_NAME)

                                                                                            G2

                                                                                    FROM (SELECT EVENT_NAME,

                                                                                                 TO_CHAR (

                                                                                                    SNAP_TIME_C1,

                                                                                                    'MM.DD HH24:MI')

                                                                                                    START_TIME,

                                                                                                 TO_CHAR (

                                                                                                    SNAP_TIME_C2,

                                                                                                    'MM.DD HH24:MI')

                                                                                                    END_TIME,

                                                                                                 DECODE (

                                                                                                    SNAP_TIME_C2,

                                                                                                    NULL, 0,

                                                                                                    (CASE

                                                                                                        WHEN VALUE_2 <

                                                                                                                VALUE_1

                                                                                                        THEN

                                                                                                           0

                                                                                                        ELSE

                                                                                                           VALUE_2

                                                                                                           - VALUE_1

                                                                                                     END)

                                                                                                    / (1000000

                                                                                                       * (EXTRACT (

                                                                                                             DAY FROM SNAP_TIME_C2

                                                                                                                      - SNAP_TIME_C1)

                                                                                                          * 86400

                                                                                                          + EXTRACT (

                                                                                                               HOUR FROM SNAP_TIME_C2

                                                                                                                         - SNAP_TIME_C1)

                                                                                                            * 3600

                                                                                                          + EXTRACT (

                                                                                                               MINUTE FROM SNAP_TIME_C2

                                                                                                                           - SNAP_TIME_C1)

                                                                                                            * 60

                                                                                                          + EXTRACT (

                                                                                                               SECOND FROM SNAP_TIME_C2

                                                                                                                           - SNAP_TIME_C1))))

                                                                                                    VALUE,

                                                                                                 (CASE

                                                                                                     WHEN VALUE_2 <

                                                                                                             VALUE_1

                                                                                                     THEN

                                                                                                        0

                                                                                                     ELSE

                                                                                                        VALUE_2

                                                                                                        - VALUE_1

                                                                                                  END)

                                                                                                 / 1000000

                                                                                                    VALUE_DIFF,

                                                                                                 ROW_NUMBER ()

                                                                                                 OVER (

                                                                                                    PARTITION BY INSTANCE_NUMBER,

                                                                                                                 EVENT_NAME

                                                                                                    ORDER BY

                                                                                                       SNAP_ID)

                                                                                                    RNUM,

                                                                                                 SNAP_ID,

                                                                                                 INSTANCE_NUMBER

                                                                                            FROM (  SELECT SNAP.END_INTERVAL_TIME

                                                                                                              SNAP_TIME_C1,

                                                                                                           LEAD (

                                                                                                              SNAP.END_INTERVAL_TIME)

                                                                                                           OVER (

                                                                                                              PARTITION BY DBI.INSTANCE_NUMBER,

                                                                                                                           EVENT_NAME

                                                                                                              ORDER BY

                                                                                                                 SNAP.SNAP_ID)

                                                                                                              SNAP_TIME_C2,

                                                                                                           EVENT.EVENT_NAME,

                                                                                                           EVENT.TIME_WAITED_MICRO

                                                                                                              VALUE_1,

                                                                                                           LEAD (

                                                                                                              EVENT.TIME_WAITED_MICRO)

                                                                                                           OVER (

                                                                                                              PARTITION BY DBI.INSTANCE_NUMBER,

                                                                                                                           EVENT_NAME

                                                                                                              ORDER BY

                                                                                                                 SNAP.SNAP_ID)

                                                                                                              VALUE_2,

                                                                                                           SNAP.SNAP_ID,

                                                                                                           DBI.INSTANCE_NUMBER

                                                                                                      FROM (SELECT DI.DBID,

                                                                                                                   DI.INSTANCE_NUMBER,

                                                                                                                   DI.STARTUP_TIME

                                                                                                              FROM DBA_HIST_DATABASE_INSTANCE DI

                                                                                                             WHERE DI.DBID =(select dbid from v$database) --변경 

                                                                                                                   AND DI.INSTANCE_NUMBER =(select  INSTANCE_NUMBER from v$instance)  --변경

                                                                                                                   AND ROWNUM <=

                                                                                                                          1) DBI,

                                                                                                           DBA_HIST_SNAPSHOT SNAP,

                                                                                                           DBA_HIST_SYSTEM_EVENT EVENT

                                                                                                     WHERE DBI.DBID =

                                                                                                              SNAP.DBID

                                                                                                           AND DBI.INSTANCE_NUMBER =

                                                                                                                  SNAP.INSTANCE_NUMBER

                                                                                                           AND SNAP.SNAP_ID >=

                                                                                                                  :15

                                                                                                           AND SNAP.SNAP_ID <=

                                                                                                                  :16

                                                                                                           AND SNAP.DBID =

                                                                                                                  EVENT.DBID

                                                                                                           AND SNAP.INSTANCE_NUMBER =

                                                                                                                  EVENT.INSTANCE_NUMBER

                                                                                                           AND SNAP.SNAP_ID =

                                                                                                                  EVENT.SNAP_ID

                                                                                                           AND UPPER (

                                                                                                                  EVENT.WAIT_CLASS) <>

                                                                                                                  'IDLE'

                                                                                                  ORDER BY SNAP.SNAP_ID))

                                                                                   WHERE START_TIME

                                                                                            IS NOT NULL

                                                                                         AND END_TIME

                                                                                                IS NOT NULL

                                                                                GROUP BY ROLLUP (EVENT_NAME,

                                                                                                 END_TIME))

                                                                         WHERE NOT (G1 =

                                                                                       1

                                                                                    AND G2 =

                                                                                           1))

                                                                 WHERE SNAP_TIME =

                                                                          'SUB AVG')

                                                         WHERE RNK <= 10)) B)

          GROUP BY A.SNAP_TIME, A.SNAP_TIME

          ORDER BY RNK, SNAP_TIME)

GROUP BY SNAP_TIME

ORDER BY SNAP_TIME;



블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,


Oracle DB AWR 활용하여 IO 성능 조회 스크립트



  

SELECT SNAP_TIME,         SNAP_TIME_RANGE,

         TO_CHAR (SUM (DECODE (STAT_NAME, 'session logical reads', VALUE)),

                  'FM999,999,999,999.9')

            "Session Logical Reads/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'physical reads', VALUE)),

                  'FM999,999,999.9')

            "Physical Reads/Sec",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'physical read total IO requests', VALUE))

            + SUM (

                 DECODE (STAT_NAME, 'physical write total IO requests', VALUE)),

            'FM999,999,999.9')

            "IOPS",

         TO_CHAR (

            (SUM (DECODE (STAT_NAME, 'physical read total bytes', VALUE))

             + SUM (DECODE (STAT_NAME, 'physical write total bytes', VALUE)))

            / 1024

            / 1024,

            'FM999,999,999.99')

            "MBPS",

         TO_CHAR (

            GREATEST (

               LEAST (

                  (1

                   - (SUM (DECODE (STAT_NAME, 'physical reads', VALUE))

                      - SUM (

                           DECODE (STAT_NAME, 'physical reads direct', VALUE))

                      - SUM (

                           DECODE (STAT_NAME,

                                   'physical reads direct (lob)', VALUE)))

                     / DECODE (

                          (SUM (

                              DECODE (STAT_NAME,

                                      'session logical reads', VALUE))

                           - SUM (

                                DECODE (STAT_NAME,

                                        'physical reads direct', VALUE))

                           - SUM (

                                DECODE (STAT_NAME,

                                        'physical reads direct (lob)', VALUE))),

                          0, 1,

                          (SUM (

                              DECODE (STAT_NAME,

                                      'session logical reads', VALUE))

                           - SUM (

                                DECODE (STAT_NAME,

                                        'physical reads direct', VALUE))

                           - SUM (

                                DECODE (STAT_NAME,

                                        'physical reads direct (lob)', VALUE)))))

                  * 100,

                  100),

               0),

            'FM999.99')

            "Buffer Cache Hit Ratio(%)",

         TO_CHAR (

            NVL (SUM (DECODE (STAT_NAME, 'db file sequential read', WAITS)), 0),

            'FM999,999,999.99')

            "db file sequential r avg.(ms)",

         TO_CHAR (

            NVL (SUM (DECODE (STAT_NAME, 'db file scattered read', WAITS)), 0),

            'FM999,999,999.99')

            "db file scattered r avg.(ms)",

         TO_CHAR (

            NVL (SUM (DECODE (STAT_NAME, 'db file parallel write', WAITS)), 0),

            'FM999,999,999.99')

            "db file parallel w avg.(ms)",

         TO_CHAR (

            NVL (SUM (DECODE (STAT_NAME, 'log file parallel write', WAITS)), 0),

            'FM999,999,999.99')

            "log file parallel w avg.(ms)",

         TO_CHAR (NVL (SUM (DECODE (STAT_NAME, 'log file sync', WAITS)), 0),

                  'FM999,999,999.99')

            "log file sync avg.(ms)",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'physical read total IO requests', VALUE)),

            'FM999,999,999,999.9')

            "Physical R total IO req./Sec",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'physical write total IO requests', VALUE)),

            'FM999,999,999,999.9')

            "Physical W total IO req./Sec",

         TO_CHAR (

              SUM (DECODE (STAT_NAME, 'physical read total bytes', VALUE))

            / 1024

            / 1024,

            'FM999,999,999,999.9')

            "Physical R total MB/Sec",

         TO_CHAR (

              SUM (DECODE (STAT_NAME, 'physical write total bytes', VALUE))

            / 1024

            / 1024,

            'FM999,999,999,999.9')

            "Physical W total MB/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'physical reads direct', VALUE)),

                  'FM999,999,999,999.9')

            "Physical Reads Direct/Sec",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'physical reads direct (lob)', VALUE)),

            'FM999,999,999,999.9')

            "Physical Reads Direct(LOB)/Sec"

    FROM (SELECT STAT_NAME,

                 DECODE (G1,

                         1, 'SUB AVG',

                         SUBSTR (SNAP_TIME, 1, INSTR (SNAP_TIME, '-') - 1))

                    SNAP_TIME,

                 SNAP_TIME SNAP_TIME_RANGE,

                 NVL (VALUE, 0) VALUE,

                 NVL (VALUE_DIFF, 0) VALUE_DIFF,

                 NVL (WAITS, 0) WAITS,

                 NVL (WAITS_DIFF, 0) WAITS_DIFF

            FROM (  SELECT STAT_NAME,

                           START_TIME || '-' || END_TIME SNAP_TIME,

                           ROUND (AVG (NVL (VALUE, 0)), 3) VALUE,

                           ROUND (AVG (NVL (VALUE_DIFF, 0)), 3) VALUE_DIFF,

                           ROUND (AVG (NVL (WAITS, 0)), 3) WAITS,

                           ROUND (AVG (NVL (WAITS_DIFF, 0)), 3) WAITS_DIFF,

                           GROUPING (START_TIME || '-' || END_TIME) G1,

                           GROUPING (STAT_NAME) G2

                      FROM (SELECT STAT_NAME,

                                   TO_CHAR (SNAP_TIME_C1, 'MM.DD HH24:MI')

                                      START_TIME,

                                   TO_CHAR (SNAP_TIME_C2, 'MM.DD HH24:MI')

                                      END_TIME,

                                   DECODE (

                                      SNAP_TIME_C2,

                                      NULL, 0,

                                      ROUND (

                                         (CASE

                                             WHEN VALUE_2 < VALUE_1 THEN 0

                                             ELSE VALUE_2 - VALUE_1

                                          END)

                                         / (EXTRACT (

                                               DAY FROM SNAP_TIME_C2

                                                        - SNAP_TIME_C1)

                                            * 86400

                                            + EXTRACT (

                                                 HOUR FROM SNAP_TIME_C2

                                                           - SNAP_TIME_C1)

                                              * 3600

                                            + EXTRACT (

                                                 MINUTE FROM SNAP_TIME_C2

                                                             - SNAP_TIME_C1)

                                              * 60

                                            + EXTRACT (

                                                 SECOND FROM SNAP_TIME_C2

                                                             - SNAP_TIME_C1)),

                                         1))

                                      VALUE,

                                   (CASE

                                       WHEN VALUE_2 < VALUE_1 THEN 0

                                       ELSE VALUE_2 - VALUE_1

                                    END)

                                      VALUE_DIFF,

                                   NULL WAITS,

                                   NULL WAITS_DIFF,

                                   SNAP_ID,

                                   INSTANCE_NUMBER

                              FROM (  SELECT /*+ LEADING(DBI) USE_HASH(SNAP STAT) */

                                            SNAP.END_INTERVAL_TIME

                                                SNAP_TIME_C1,

                                             LEAD (

                                                SNAP.END_INTERVAL_TIME)

                                             OVER (

                                                PARTITION BY DBI.INSTANCE_NUMBER,

                                                             STAT_NAME

                                                ORDER BY SNAP.SNAP_ID)

                                                SNAP_TIME_C2,

                                             STAT.STAT_NAME,

                                             STAT.VALUE VALUE_1,

                                             LEAD (

                                                STAT.VALUE)

                                             OVER (

                                                PARTITION BY DBI.INSTANCE_NUMBER,

                                                             STAT_NAME

                                                ORDER BY SNAP.SNAP_ID)

                                                VALUE_2,

                                             SNAP.SNAP_ID,

                                             DBI.INSTANCE_NUMBER

                                        FROM (SELECT           /*+ NO_MERGE */

                                                    DI.DBID,

                                                     DI.INSTANCE_NUMBER,

                                                     DI.STARTUP_TIME

                                                FROM DBA_HIST_DATABASE_INSTANCE DI

                                               WHERE     DI.DBID = (select dbid from v$database) --변경 

                                                     AND DI.INSTANCE_NUMBER = (select  INSTANCE_NUMBER from v$instance)  --변경

                                                     AND ROWNUM <= 1) DBI,

                                             DBA_HIST_SNAPSHOT SNAP,

                                             DBA_HIST_SYSSTAT STAT

                                       WHERE DBI.DBID = SNAP.DBID

                                             AND DBI.INSTANCE_NUMBER =

                                                    SNAP.INSTANCE_NUMBER

                                             AND DBI.DBID = SNAP.DBID

                                             AND SNAP.SNAP_ID >= :3

                                             AND SNAP.SNAP_ID <= :4

                                             AND SNAP.DBID = STAT.DBID

                                             AND SNAP.INSTANCE_NUMBER =

                                                    STAT.INSTANCE_NUMBER

                                             AND SNAP.SNAP_ID = STAT.SNAP_ID

                                             AND STAT.STAT_NAME IN

                                                    ('session logical reads',

                                                     'physical reads',

                                                     'physical read total IO requests',

                                                     'physical write total IO requests',

                                                     'physical read total bytes',

                                                     'physical write total bytes',

                                                     'physical reads direct',

                                                     'physical reads direct (lob)')

                                    ORDER BY SNAP.SNAP_ID)

                             WHERE SNAP_TIME_C2 <> SNAP_TIME_C1

                            UNION ALL

                            SELECT STAT_NAME,

                                   TO_CHAR (SNAP_TIME_C1, 'MM.DD HH24:MI')

                                      START_TIME,

                                   TO_CHAR (SNAP_TIME_C2, 'MM.DD HH24:MI')

                                      END_TIME,

                                   ROUND (

                                      DECODE (

                                         SNAP_TIME_C2,

                                         NULL, 0,

                                         (CASE

                                             WHEN VALUE_2 < VALUE_1 THEN 0

                                             ELSE VALUE_2 - VALUE_1

                                          END)

                                         / (EXTRACT (

                                               DAY FROM SNAP_TIME_C2

                                                        - SNAP_TIME_C1)

                                            * 86400

                                            + EXTRACT (

                                                 HOUR FROM SNAP_TIME_C2

                                                           - SNAP_TIME_C1)

                                              * 3600

                                            + EXTRACT (

                                                 MINUTE FROM SNAP_TIME_C2

                                                             - SNAP_TIME_C1)

                                              * 60

                                            + EXTRACT (

                                                 SECOND FROM SNAP_TIME_C2

                                                             - SNAP_TIME_C1)))

                                      / 1000000,

                                      3)

                                      VALUE,

                                   ROUND (

                                      (CASE

                                          WHEN VALUE_2 < VALUE_1 THEN 0

                                          ELSE VALUE_2 - VALUE_1

                                       END)

                                      / 1000000,

                                      1)

                                      VALUE_DIFF,

                                   ROUND (

                                      DECODE (

                                         SNAP_TIME_C2,

                                         NULL, 0,

                                         (CASE

                                             WHEN WAITS_2 <= WAITS_1 THEN 0

                                             ELSE VALUE_2 - VALUE_1

                                          END)

                                         / (WAITS_2 - WAITS_1))

                                      / 1000,

                                      3)

                                      WAITS,

                                   ROUND (

                                      (CASE

                                          WHEN WAITS_2 <= WAITS_1 THEN 0

                                          ELSE WAITS_2 - WAITS_1

                                       END),

                                      1)

                                      WAITS_DIFF,

                                   SNAP_ID,

                                   INSTANCE_NUMBER

                              FROM (  SELECT SNAP.END_INTERVAL_TIME SNAP_TIME_C1,

                                             LEAD (

                                                SNAP.END_INTERVAL_TIME)

                                             OVER (

                                                PARTITION BY DBI.INSTANCE_NUMBER,

                                                             EVENT_NAME

                                                ORDER BY SNAP.SNAP_ID)

                                                SNAP_TIME_C2,

                                             STAT.EVENT_NAME STAT_NAME,

                                             STAT.TIME_WAITED_MICRO VALUE_1,

                                             LEAD (

                                                STAT.TIME_WAITED_MICRO)

                                             OVER (

                                                PARTITION BY DBI.INSTANCE_NUMBER,

                                                             EVENT_NAME

                                                ORDER BY SNAP.SNAP_ID)

                                                VALUE_2,

                                             STAT.TOTAL_WAITS WAITS_1,

                                             LEAD (

                                                STAT.TOTAL_WAITS)

                                             OVER (

                                                PARTITION BY DBI.INSTANCE_NUMBER,

                                                             EVENT_NAME

                                                ORDER BY SNAP.SNAP_ID)

                                                WAITS_2,

                                             SNAP.SNAP_ID,

                                             DBI.INSTANCE_NUMBER

                                        FROM (SELECT DI.DBID,

                                                     DI.INSTANCE_NUMBER,

                                                     DI.STARTUP_TIME

                                                FROM DBA_HIST_DATABASE_INSTANCE DI

                                               WHERE     DI.DBID = (select dbid from v$database) --변경 

                                                     AND DI.INSTANCE_NUMBER = (select  INSTANCE_NUMBER from v$instance)  --변경

                                                     AND ROWNUM <= 1) DBI,

                                             DBA_HIST_SNAPSHOT SNAP,

                                             DBA_HIST_SYSTEM_EVENT STAT

                                       WHERE DBI.DBID = SNAP.DBID

                                             AND DBI.INSTANCE_NUMBER =

                                                    SNAP.INSTANCE_NUMBER

                                             AND SNAP.SNAP_ID >= :7

                                             AND SNAP.SNAP_ID <= :8

                                             AND SNAP.DBID = STAT.DBID

                                             AND SNAP.INSTANCE_NUMBER =

                                                    STAT.INSTANCE_NUMBER

                                             AND SNAP.SNAP_ID = STAT.SNAP_ID

                                             AND STAT.EVENT_NAME IN

                                                    ('db file sequential read',

                                                     'db file scattered read',

                                                     'db file parallel write',

                                                     'log file parallel write',

                                                     'log file sync')

                                    ORDER BY SNAP.SNAP_ID)

                             WHERE SNAP_TIME_C2 <> SNAP_TIME_C1

                                   AND WAITS_2 <> WAITS_1)

                     WHERE START_TIME IS NOT NULL AND END_TIME IS NOT NULL

                  GROUP BY ROLLUP (STAT_NAME, START_TIME || '-' || END_TIME))

           WHERE NOT (G1 = 1 AND G2 = 1))

GROUP BY SNAP_TIME, SNAP_TIME_RANGE

ORDER BY SNAP_TIME




블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

Oracle AWR을 활용한 주요 Stats 지표 추출 스크립트



 

해당 시점의 SNAP.SNAP_ID를 설정하여 추출한 데이터를 엑셀 또는 시각화 Tool로 뽑아내여 주요 Stats 상태 분석이 가능하도록 해준다. 각 Stats의 명칭을 조정하여 원하는 DB 상태를 조회해볼수 있다.



  SELECT SNAP_TIME,

         SNAP_TIME_RANGE,

         TO_CHAR (SUM (DECODE (STAT_NAME, 'session logical reads', VALUE)),

                  'FM999,999,999,999.9')

            "Session Logical Reads/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'physical reads', VALUE)),

                  'FM999,999,999.9')

            "Physical Reads/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'execute count', VALUE)),

                  'FM999,999,999.9')

            "Execute Count/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'user calls', VALUE)),

                  'FM999,999,999.9')

            "User Calls/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'user commits', VALUE)),

                  'FM999,999,999.9')

            "User Commits/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'user rollbacks', VALUE)),

                  'FM999,999,999.9')

            "User Rollbacks/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'CPU used by this session', VALUE)),

                  'FM999,999,999.9')

            "CPU used by this session/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'DB time', VALUE)),

                  'FM999,999,999.9')

            "DB time/Sec",

         TO_CHAR (

            (SUM (DECODE (STAT_NAME, 'DB time', VALUE)) * 10)

            / DECODE (SUM (DECODE (STAT_NAME, 'user calls', VALUE)),

                      0, 1,

                      SUM (DECODE (STAT_NAME, 'user calls', VALUE))),

            'FM999,999,999.999')

            "User Response Time(ms)/Sec",

         TO_CHAR (

            (SUM (DECODE (STAT_NAME, 'DB time', VALUE)) * 10)

            / DECODE (

                 (SUM (DECODE (STAT_NAME, 'user commits', VALUE))

                  + SUM (DECODE (STAT_NAME, 'user rollbacks', VALUE))),

                 0, 1,

                 (SUM (DECODE (STAT_NAME, 'user commits', VALUE))

                  + SUM (DECODE (STAT_NAME, 'user rollbacks', VALUE)))),

            'FM999,999,999.999')

            "TX Response Time(ms)/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'application wait time', VALUE)),

                  'FM999,999,999.9')

            "Application Wait Time(cs)/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'cluster wait time', VALUE)),

                  'FM999,999,999.9')

            "Cluster Wait Time(cs)/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'concurrency wait time', VALUE)),

                  'FM999,999,999.9')

            "Concurrency Wait Time(cs)/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'user I/O wait time', VALUE)),

                  'FM999,999,999.9')

            "User I/O Wait Time(cs)/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'CR blocks created', VALUE)),

                  'FM999,999,999.9')

            "CR blocks created/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'consistent gets', VALUE)),

                  'FM999,999,999.9')

            "Consistent Gets/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'consistent changes', VALUE)),

                  'FM999,999,999.9')

            "Consistent Changes/Sec",

         TO_CHAR (

            SUM (

               DECODE (

                  STAT_NAME,

                  'data blocks consistent reads - undo records applied', VALUE)),

            'FM999,999,999.9')

            "DB Blocks cr-undo rec appl/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'db block gets', VALUE)),

                  'FM999,999,999.9')

            "DB Block Gets/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'db block changes', VALUE)),

                  'FM999,999,999.9')

            "DB Block Changes/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'enqueue releases', VALUE)),

                  'FM999,999,999.9')

            "Enqueue Releases/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'enqueue waits', VALUE)),

                  'FM999,999,999.9')

            "Enqueue Waits/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'free buffer inspected', VALUE)),

                  'FM999,999,999.9')

            "Free Buffer Inspected/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'free buffer requested', VALUE)),

                  'FM999,999,999.9')

            "Free Buffer Requested/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'DBWR checkpoints', VALUE)),

                  'FM999,999,999.9')

            "DBWR checkpoints/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'DBWR lru scans', VALUE)),

                  'FM999,999,999.9')

            "DBWR lru scans/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'DBWR undo block writes', VALUE)),

                  'FM999,999,999.9')

            "DBWR undo block writes/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'physical writes', VALUE)),

                  'FM999,999,999.9')

            "Physical Writes/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'physical writes direct', VALUE)),

                  'FM999,999,999.9')

            "Physical Writes Direct/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'branch node splits', VALUE)),

                  'FM999,999,999.9')

            "Branch Node Splits/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'leaf node splits', VALUE)),

                  'FM999,999,999.9')

            "Leaf Node Splits/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'leaf node 90-10 splits', VALUE)),

                  'FM999,999,999.9')

            "Leaf Node 90-10 Splits/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'commit cleanouts', VALUE)),

                  'FM999,999,999.9')

            "Commit Cleanouts/Sec",

         TO_CHAR (

            SUM (

               DECODE (STAT_NAME,

                       'cleanouts only - consistent read gets', VALUE)),

            'FM999,999,999.9')

            "Cleanouts Only-CRgets/Sec",

         TO_CHAR (

            SUM (

               DECODE (STAT_NAME,

                       'cleanouts and rollbacks - consistent read gets', VALUE)),

            'FM999,999,999.9')

            "Cleanouts&Rollbacks-CRgets/Sec",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'index fast full scans (full)', VALUE)),

            'FM999,999,999.9')

            "Index FastFullScans(full)/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'table fetch by rowid', VALUE)),

                  'FM999,999,999.9')

            "Table Fetch By Rowid/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'table fetch continued row', VALUE)),

                  'FM999,999,999.9')

            "Table Fetch Continued Row/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'table scans (long tables)', VALUE)),

                  'FM999,999,999.9')

            "Table Scans (long tables)/Sec",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'table scans (short tables)', VALUE)),

            'FM999,999,999.9')

            "Table Scans (short tables)/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'table scan blocks gotten', VALUE)),

                  'FM999,999,999.9')

            "Table Scan Blocks gotten/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'table scan rows gotten', VALUE)),

                  'FM999,999,999.9')

            "Table Scan Rows gotten/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'logons cumulative', VALUE)),

                  'FM999,999,999.9')

            "Logons Cumulative/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'opened cursors cumulative', VALUE)),

                  'FM999,999,999.9')

            "Opened Cursors Cumulative/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'parse count (total)', VALUE)),

                  'FM999,999,999.9')

            "Parse Count (total)/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'parse count (hard)', VALUE)),

                  'FM999,999,999.9')

            "Parse Count (hard)/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'parse count (failures)', VALUE)),

                  'FM999,999,999.9')

            "Parse Count (failures)/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'parse time cpu', VALUE)),

                  'FM999,999,999.9')

            "Parse Time CPU/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'parse time elapsed', VALUE)),

                  'FM999,999,999.9')

            "Parse Time Elapsed/Sec",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'session cursor cache count', VALUE)),

            'FM999,999,999.9')

            "Session Cursor Cache Count/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'session cursor cache hits', VALUE)),

                  'FM999,999,999.9')

            "Session Cursor Cache Hits/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'redo entries', VALUE)),

                  'FM999,999,999.9')

            "Redo Entries/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'redo size', VALUE)),

                  'FM999,999,999.9')

            "Redo Size/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'redo write time', VALUE)),

                  'FM999,999,999.9')

            "Redo Write Time/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'sorts (disk)', VALUE)),

                  'FM999,999,999.9')

            "Sorts (disk)/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'sorts (memory)', VALUE)),

                  'FM999,999,999.9')

            "Sorts (memory)/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'sorts (rows)', VALUE)),

                  'FM999,999,999.9')

            "Sorts (rows)/Sec",

         TO_CHAR (

            SUM (

               DECODE (

                  STAT_NAME,

                  'transaction tables consistent reads - undo records applied', VALUE)),

            'FM999,999,999.9')

            "TX cr Undo Record applied/Sec",

         TO_CHAR (

            SUM (

               DECODE (STAT_NAME,

                       'transaction tables consistent read rollbacks', VALUE)),

            'FM999,999,999.9')

            "TX cr read rollbacks/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'undo change vector size', VALUE)),

                  'FM999,999,999.9')

            "Undo Change Vector Size/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'logons current', VALUE)),

                  'FM999,999,999.9')

            "Logons Current",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'opened cursors current', VALUE)),

                  'FM999,999,999.9')

            "Opened Cursors Current",

         TO_CHAR (

            SUM (

               DECODE (STAT_NAME, 'SQL*Net roundtrips to/from client', VALUE)),

            'FM999,999,999.9')

            "SQLNet RoundTrip Client/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'physical read total bytes', VALUE)),

                  'FM999,999,999.9')

            "Physical Read Total Bytes/Sec",

         TO_CHAR (

            SUM (

               DECODE (STAT_NAME, 'cell physical IO interconnect bytes', VALUE)),

            'FM999,999,999.9')

            "CellPhy.IOInterconnectByte/Sec",

         TO_CHAR (

            SUM (

               DECODE (STAT_NAME,

                       'cell physical IO bytes saved by storage index', VALUE)),

            'FM999,999,999.9')

            "CellPhy.IOBytesSavedbySInd/Sec",

         TO_CHAR (

            SUM (

               DECODE (

                  STAT_NAME,

                  'cell physical IO interconnect bytes returned by smart scan', VALUE)),

            'FM999,999,999.9')

            "CellPhy.IOByteReturnedbySS/Sec",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'physical read total IO requests', VALUE)),

            'FM999,999,999.9')

            "Physical Read Total IO Req/Sec",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'physical read requests optimized', VALUE)),

            'FM999,999,999.9')

            "Physical Read Req Opt./Sec",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'cell flash cache read hits', VALUE)),

            'FM999,999,999.9')

            "Cell Flash Cache Read Hits/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'cell scans', VALUE)),

                  'FM999,999,999.9')

            "Cell Scans/Sec",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'cell index scans', VALUE)),

                  'FM999,999,999.9')

            "Cell Index Scans/Sec"

    FROM (SELECT STAT_NAME,

                 DECODE (G1,

                         1, 'SUB AVG',

                         SUBSTR (SNAP_TIME, 1, INSTR (SNAP_TIME, '-') - 1))

                    SNAP_TIME,

                 SNAP_TIME SNAP_TIME_RANGE,

                 VALUE,

                 VALUE_DIFF

            FROM (  SELECT STAT_NAME,

                           START_TIME || '-' || END_TIME SNAP_TIME,

                           ROUND (AVG (NVL (VALUE, 0)), 1) VALUE,

                           ROUND (AVG (NVL (VALUE_DIFF, 0)), 1) VALUE_DIFF,

                           GROUPING (START_TIME || '-' || END_TIME) G1,

                           GROUPING (STAT_NAME) G2

                      FROM (SELECT STAT_NAME,

                                   TO_CHAR (SNAP_TIME_C1, 'MM.DD HH24:MI')

                                      START_TIME,

                                   TO_CHAR (SNAP_TIME_C2, 'MM.DD HH24:MI')

                                      END_TIME,

                                   DECODE (

                                      SNAP_TIME_C2,

                                      NULL, 0,

                                      ROUND (

                                         (CASE

                                             WHEN VALUE_2 < VALUE_1 THEN 0

                                             ELSE VALUE_2 - VALUE_1

                                          END)

                                         / (EXTRACT (

                                               DAY FROM SNAP_TIME_C2

                                                        - SNAP_TIME_C1)

                                            * 86400

                                            + EXTRACT (

                                                 HOUR FROM SNAP_TIME_C2

                                                           - SNAP_TIME_C1)

                                              * 3600

                                            + EXTRACT (

                                                 MINUTE FROM SNAP_TIME_C2

                                                             - SNAP_TIME_C1)

                                              * 60

                                            + EXTRACT (

                                                 SECOND FROM SNAP_TIME_C2

                                                             - SNAP_TIME_C1)),

                                         1))

                                      VALUE,

                                   (CASE

                                       WHEN VALUE_2 < VALUE_1 THEN 0

                                       ELSE VALUE_2 - VALUE_1

                                    END)

                                      VALUE_DIFF,

                                   ROW_NUMBER ()

                                   OVER (PARTITION BY INSTANCE_NUMBER, STAT_NAME

                                         ORDER BY SNAP_ID)

                                      RNUM,

                                   SNAP_ID,

                                   INSTANCE_NUMBER

                              FROM (  SELECT /*+ LEADING(DBI) USE_HASH(SNAP STAT) */

                                            SNAP.END_INTERVAL_TIME

                                                SNAP_TIME_C1,

                                             LEAD (

                                                SNAP.END_INTERVAL_TIME)

                                             OVER (

                                                PARTITION BY DBI.INSTANCE_NUMBER,

                                                             STAT_NAME

                                                ORDER BY SNAP.SNAP_ID)

                                                SNAP_TIME_C2,

                                             STAT.STAT_NAME,

                                             STAT.VALUE VALUE_1,

                                             LEAD (

                                                STAT.VALUE)

                                             OVER (

                                                PARTITION BY DBI.INSTANCE_NUMBER,

                                                             STAT_NAME

                                                ORDER BY SNAP.SNAP_ID)

                                                VALUE_2,

                                             SNAP.SNAP_ID,

                                             DBI.INSTANCE_NUMBER

                                        FROM (SELECT           /*+ NO_MERGE */

                                                    DI.DBID,

                                                     DI.INSTANCE_NUMBER,

                                                     DI.STARTUP_TIME

                                                FROM DBA_HIST_DATABASE_INSTANCE DI

                                               WHERE     DI.DBID = (select dbid from v$database) --변경 

                                                     AND DI.INSTANCE_NUMBER = (select  INSTANCE_NUMBER from v$instance)  --변경

                                                     AND ROWNUM <= 1) DBI,

                                             DBA_HIST_SNAPSHOT SNAP,

                                             DBA_HIST_SYSSTAT STAT

                                       WHERE DBI.DBID = SNAP.DBID

                                             AND DBI.INSTANCE_NUMBER =

                                                    SNAP.INSTANCE_NUMBER

                                             AND DBI.DBID = SNAP.DBID

                                             AND SNAP.SNAP_ID >= :3

                                             AND SNAP.SNAP_ID <= :4

                                             AND SNAP.DBID = STAT.DBID

                                             AND SNAP.INSTANCE_NUMBER =

                                                    STAT.INSTANCE_NUMBER

                                             AND SNAP.SNAP_ID = STAT.SNAP_ID

                                             AND STAT.STAT_NAME IN

                                                    ('session logical reads',

                                                     'physical reads',

                                                     'execute count',

                                                     'user calls',

                                                     'user commits',

                                                     'user rollbacks',

                                                     'CPU used by this session',

                                                     'DB time',

                                                     'application wait time',

                                                     'cluster wait time',

                                                     'concurrency wait time',

                                                     'user I/O wait time',

                                                     'CR blocks created',

                                                     'consistent changes',

                                                     'consistent gets',

                                                     'db block changes',

                                                     'data blocks consistent reads - undo records applied',

                                                     'db block gets',

                                                     'enqueue releases',

                                                     'enqueue waits',

                                                     'DBWR checkpoints',

                                                     'DBWR lru scans',

                                                     'DBWR undo block writes',

                                                     'free buffer inspected',

                                                     'free buffer requested',

                                                     'physical writes',

                                                     'physical writes direct',

                                                     'branch node splits',

                                                     'leaf node 90-10 splits',

                                                     'leaf node splits',

                                                     'cleanouts and rollbacks - consistent read gets',

                                                     'cleanouts only - consistent read gets',

                                                     'commit cleanouts',

                                                     'index fast full scans (full)',

                                                     'table fetch by rowid',

                                                     'table fetch continued row',

                                                     'table scan blocks gotten',

                                                     'table scan rows gotten',

                                                     'table scans (long tables)',

                                                     'table scans (short tables)',

                                                     'logons cumulative',

                                                     'opened cursors cumulative',

                                                     'parse count (total)',

                                                     'parse count (hard)',

                                                     'parse count (failures)',

                                                     'parse time cpu',

                                                     'parse time elapsed',

                                                     'session cursor cache count',

                                                     'session cursor cache hits',

                                                     'redo entries',

                                                     'redo size',

                                                     'redo sync time',

                                                     'redo write time',

                                                     'sorts (disk)',

                                                     'sorts (memory)',

                                                     'sorts (rows)',

                                                     'sql area evicted',

                                                     'sql area purged',

                                                     'undo change vector size',

                                                     'SQL*Net roundtrips to/from client',

                                                     'transaction tables consistent reads - undo records applied',

                                                     'transaction tables consistent read rollbacks',

                                                     'physical read total bytes',

                                                     'physical read total IO requests',

                                                     'physical read requests optimized',

                                                     'cell physical IO interconnect bytes',

                                                     'cell physical IO bytes saved by storage index',

                                                     'cell physical IO interconnect bytes returned by smart scan',

                                                     'cell flash cache read hits',

                                                     'cell scans',

                                                     'cell index scans')

                                    ORDER BY SNAP.SNAP_ID)

                             WHERE SNAP_TIME_C2 <> SNAP_TIME_C1)

                     WHERE START_TIME IS NOT NULL AND END_TIME IS NOT NULL

                  GROUP BY ROLLUP (STAT_NAME, START_TIME || '-' || END_TIME))

           WHERE NOT (G1 = 1 AND G2 = 1)

          UNION ALL

          SELECT STAT_NAME,

                 DECODE (G1,

                         1, 'SUB AVG',

                         SUBSTR (SNAP_TIME, 1, INSTR (SNAP_TIME, '-') - 1))

                    SNAP_TIME,

                 SNAP_TIME SNAP_TIME_RANGE,

                 VALUE,

                 NULL VALUE_DIFF

            FROM (  SELECT STAT_NAME,

                           START_TIME || '-' || END_TIME SNAP_TIME,

                           ROUND (

                              AVG (DECODE (SIGN (VALUE), -1, 0, NVL (VALUE, 0))),

                              1)

                              VALUE,

                           GROUPING (START_TIME || '-' || END_TIME) G1,

                           GROUPING (STAT_NAME) G2

                      FROM (SELECT STAT_NAME,

                                   TO_CHAR (SNAP_TIME_1, 'MM.DD HH24:MI')

                                      START_TIME,

                                   TO_CHAR (SNAP_TIME_2, 'MM.DD HH24:MI')

                                      END_TIME,

                                   DECODE (SNAP_TIME_2,

                                           NULL, 0,

                                           ROUND ( (VALUE_1 - VALUE_2), 1))

                                      VALUE,

                                   ROW_NUMBER ()

                                   OVER (PARTITION BY INSTANCE_NUMBER, STAT_NAME

                                         ORDER BY SNAP_ID)

                                      RNUM,

                                   SNAP_ID,

                                   INSTANCE_NUMBER

                              FROM (  SELECT SNAP.BEGIN_INTERVAL_TIME SNAP_TIME_1,

                                             STAT.STAT_NAME,

                                             STAT.VALUE VALUE_1,

                                             0 VALUE_2,

                                             SNAP.END_INTERVAL_TIME SNAP_TIME_2,

                                             SNAP.SNAP_ID,

                                             DBI.INSTANCE_NUMBER

                                        FROM (SELECT DI.DBID,

                                                     DI.INSTANCE_NUMBER,

                                                     DI.STARTUP_TIME

                                                FROM DBA_HIST_DATABASE_INSTANCE DI

                                               WHERE     DI.DBID = (select dbid from v$database) --변경

                                                     AND DI.INSTANCE_NUMBER = (select  INSTANCE_NUMBER from v$instance)  --변경

                                                     AND ROWNUM <= 1) DBI,

                                             DBA_HIST_SNAPSHOT SNAP,

                                             DBA_HIST_SYSSTAT STAT

                                       WHERE DBI.DBID = SNAP.DBID

                                             AND DBI.INSTANCE_NUMBER =

                                                    SNAP.INSTANCE_NUMBER

                                             AND SNAP.SNAP_ID >= :7

                                             AND SNAP.SNAP_ID <= :8

                                             AND SNAP.DBID = STAT.DBID

                                             AND SNAP.INSTANCE_NUMBER =

                                                    STAT.INSTANCE_NUMBER

                                             AND SNAP.SNAP_ID = STAT.SNAP_ID

                                             AND STAT.STAT_NAME IN

                                                    ('opened cursors current',

                                                     'logons current',

                                                     'session pga memory',

                                                     'session uga memory',

                                                     'session pga memory max',

                                                     'session uga memory max')

                                    ORDER BY SNAP.SNAP_ID))

                     WHERE RNUM > 1

                  GROUP BY ROLLUP (STAT_NAME, START_TIME || '-' || END_TIME))

           WHERE NOT (G1 = 1 AND G2 = 1)

          ORDER BY STAT_NAME, SNAP_TIME)

GROUP BY SNAP_TIME, SNAP_TIME_RANGE

ORDER BY SNAP_TIME








블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,


Oracle Cold(콜드) 백업 스크립트



define 3 = /backup/cold/

 

Set Heading Off

 

Set Verify Off

 

Set FeedBack Off

 

Set LineSize 132

 

Set PageSize 1000

 

set termout off

 

Spool runcoldbackup.sh

 

/* Data Files */

Select 'cp ' || File_Name || ' &&3 ' From DBA_Data_Files

/

 

/* Redo Log Files */

Select 'cp ' || Member || ' &&3 ' From V$LogFile

/

 

/* Control Files */

Select 'cp ' || name || ' &&3 ' From V$controlfile

/

 

/* Temp files */

Select 'cp ' || File_Name || ' &&3 ' From dba_temp_files

 

Spool Off 




블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,



Source 비교 S/W: Beyond Compare 활용

    • IT 업종에서 개발 및 SQL Source가 많아지게 되는데 각 Source의 비교를 통하여 데이터를 찾거나 수정하고 정리할 경우에 유용하게 사용할 수 있다.

   

 1. beyond Compare

http://software.naver.com/software/summary.nhn?softwareId=MFS_100881

    • 네이버에서 검색을 통하여 손 쉽게 해당 SW를 다운 받을 수 있다.

         

 2. beyond Compare 주요 기능

    • Folder Compare, Text Compare, Data Compare 등등 다양한 형태로 데이터를 비교해주는 기능을 가지고 있다.

   

Folder Compare

    • Folder Tree를 비교하여 중복되는 내역이 없는지 확인하여 백업 시에 불피룡한 Folder 및 파일을 비교하여 정리할 수 있다.

         

Text Compare

    • 주로 많이 사용하는 기능으로는 Text Compare로 2개의 문서의 내용을 비교하여 다른 부분을 찾아 빨간색으로 표기해 준다.

         

    • 같은 데이터만 보기

         

    • 다른 데이터만 보기

         

    • 왼쪽 데이터를 기준으로 오른쪽 데이터를 변경하여 동일하게 맞추어 주는 기능



블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,


Oracle 서비스지원(SR) 신청 방법

   - Oracle DB를 지원하다 보면 다양한 에러와 만나고 해결하는 과정을 겪게 된다. 이 과정에서 Ora-600, Ora-7445와 같은 에러가 발생되거나 정확한 원인 및 해결방법에 대하여 가이드 받고자 할 때 SR을 요청하며 신속한 처리과정으로 많은 도움이 된다.


 1. Oracle Support 로그인

https://support.oracle.com

   

 2. 서비스 요청 진행

    • SR은 라이선스를 구매한 고객이 직접 요청하는 것이 가장 빠른 답변을 얻을 수 있기 때문에 고객의 ID로 진행하거나 "내 계정 => 설정에서 고객 지원번호를 Access 받아 진행하는 것이 좋다.

         

 3. SR 요청 진행

    • 라이선스를 구매한 고객이나 인증요청을 수락된다면 아래 네모칸에 SR 생성 버튼이 생성된다.
    • 그 아래 일반 SR생성으로 진행하게 될 경우에 답변이 많이 늦기 때문에 추천하지는 않지만 테스트로 진행해보는 것도 좋을 것 같다.

   

    • SR 생성을 진행하게 되면 1. 문제에 대한 요약 및 상세 내역을 작성하게 되고, 2. 현재 DB 버전 및 SR 지원 종류(복구, 설치, 장애지원 등)을 선택하여 진행하면 된다.
    • 진행 하는 중간에 공식문서 가이드와 추가 파일 첨부를 요청하지만 모두 다 첨부하면 좋고 그렇지 않다고 해도 다음으로 진행하면 된다.
    • SR에 따른 진행에 있어 필요한 부분이 있으면 Oracle에서 필요한 내역에 대한 것들을 보내달라고 답변이 오며 그에 맞추어 정보를 주면서 진행하면 된다.
    • 추가적으로 SR 담당 엔지니어와 연락할 경우에 1588-8501을 통하여 진행(한국어 지원, SR 번호 필요)하면 된다.

         



블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,



InnoDB Storage Engine Architecture

   

1.InnoDB Storage Engine 기본 기능

프라이머리 키에 의한 클러스터링

InnoDB의 모든 테이블은 기본적으로 프라이머리 키를 기준으로 클러스터링 되어 저장된다.

즉 프라이머리 키 값의 순서대로 디스크에 저장된다는 뜻이며, 이로 인해 프라이머리 키에 의한 레인지 스캔은 상당히 빨리 처리될 수 있다. 결론적으로 쿼리의 실행 계획에서 프라이머리 키는 기본적으로 다른 보조 인덱스에 비해 비중이 높게 설정(쿼리의 실행 계획에서 다른 보조 인덱스보다 프라이머리 키를 선택될 확률이 높음)된다.

잠금이 필요 없는 일관된 읽기(Non-locking consistent read)

MVCC(Multi Version Concurrency Control)라는 기술을 이용해 락을 걸지 않고 읽기 작업을 수행(Undo 활용)

외래 키 지원

MyISAM이나 Memory 테이블에서는 사용할 수 없다.

부모, 자식 테이블 간에 데이터 Check하는 작업으로 인하여 락, 데드락이 발생될 때가 많다.

자동 데드락 감지

그래프 기반의 데드락 체크 방식을 사용하기 때문에 데드락이 발생함과 동시에 바로 감지되고, 감지된 데드락은 관련 트랙잭션 중에서 Rollback이 가장 용이한 트랜잭션을 자동적으로 강제 종료해 버린다. => 실제로는 완벽하지는 않을 듯.

자동화된 장애 복구

Mysql서버가 시작될 때, 완료되지 못한 트랜잭션이나 디스크에 일부만 기록된 데이터 페이지(Partial Write)등에 대한 일련의 복구 작업이 자동으로 진행된다. (SMON,PMON과 비슷한 역할을 내역이 있는 듯)

오라클의 아키텍처 적용

Oracle DBMS와 비슷한 부분이 많다.(UNDO, SYSTEM TBS, TBS 등)

   

   

2.InnoDB Architecture

Oracle VS MySQL

  • Oracle과 흡사한 형태이지만 MySQL은 Storage의 선택에 따라 세부 구조가 달라진다. 주로 RDBMS로 InnoDB가 사용되는데 Oracle 구조와 비슷한 형태인 것을 확인할 수 있다. (아래 상세 구성도 확인)

   

MySQL InnoDB 상세구조

1) InnoDB 전체 구성도

  • 사용자는 mysqld를 통하여 InnoDB에 접근하게 되며 Buffer Pool, Storage의 Access를 통하여 RDBMS의 Transaction이 발생됩니다.

 

   

2) Buffer Pool & 기타 Caching 영역

  • Buffer Pool

    가장 핵심적인 부분으로 디스크의 데이터 파일이나 인덱스 정보를 메모리에 캐시해 두는 공간 MyISAM 키 캐시가 인덱스의 캐시만을 주로 처리하는데 비해 InnoDB의 버퍼 풀은 데이터와 인덱스 모두 캐시하고 쓰기 버퍼링의 역할까지 모두 처리함.

    Innodb_buffer_pool_size 설정 중요

    OS를 고려하여 50~80%수중으로 메모리 크기 설정

    Oracle과 비슷하게 바로 변경된 사항에 대하여 디스크에 반영하지 않고 메모리에만 변경를 먼저 변경한 뒤, 디스크에 기록되지 않는 변경된 데이터를 가지고 있다(더티 페이지)

    체크포인트가 발생되면 Write 스레드가 필요한 만큼 디스크로 기록 진행

    Oracle Buffer Cache 영역과 비슷한 기능

       

  • Undo log

    트랜잭션의 롤백 대비용

    트랜잭션의 격리 수준을 유지하면서 높은 동시성을 제공하는 데 사용된다.

    Oracle 과 다르게 별도의 TBS가 아닌 System TBS에서 관리하는 것으로 구조상으로는 확인됩니다.

    Oracle UNDO TBS 와 비슷한 기능

       

  • Insert Buffer

    Data Insert, Update에 따른 변경작업이 발생될 때 인덱스에도 해당 내역을 반영해야 하는데 해당 테이블에 인덱스가 많다면, 이 작업 시 랜덤하게 디스크를 읽은 작업을 하면서 상당히 많은 자원을 소모하기 때문에 별도의 Insert Buffer공간(임시공간)을 만들어 성능 향상

    Innodb_change_buffering 파라미터로 설정

    MySQL 5.5이전 버전은 Insert까지만 지원, 이후에는 Insert, Delete로 인해 키를 추가하거나 삭제하는 작업에 대해서도 버퍼링이 될 수 있도록 개선 => Update의 경우는 확인이 필요할 듯.

    0.인덱스 페이지가 버퍼 풀에 있으면 바로 업데이트 수행

    1. 임시 공간(Insert Buffer)에 필요한 데이터를 디스크에서 읽어 와서 데이터 변경작업 진행

    2. 인덱스 레코드가 조작된 조각은 이후 백그라운드 스레드에 의해 병합되는데 이 스레드를 버퍼 머지 스레드라고 한다.

    3. 완료 (Oracle의 PGA + TEMP와 비슷한 기능)

   

3) Log Buffer & Redo Log

   

  • Commit시 바로 Disk 에 변경된 데이터 조작을 하지않고 ACID(원자성,일관성,격리성,데이터 유지)를 보장하면서 체크포인트가 발생할 경우 일괄적으로 반영하는 형태로 부하를 줄이기 위한 기능
  • 자동화된 자동 복구시 해당 Redo log를 확인하여 복구 진행
  • 로그 버퍼의 크기는 일반적으로 1~8MB 수전으로 설정 (단, BLOB이나 TEXT와 같은 큰데이터를 자주 변경한다면 더 크게 설정하는 것이 좋다)
  • Oracle Redo log file과 log buffer 영역과 비슷한 기능

   

3. MySQL 기본 명령어

MySQL START / STOP

[root@localhost mysql]# /etc/init.d/mysqld stop

Stopping mysqld: [ OK ]

[root@localhost mysql]# /etc/init.d/mysqld start

   

MySQL Password 변경 및 Login

[root@localhost mysql]# mysqladmin -u root password 새비밀번호

[root@localhost mysql]# mysql -uroot -p => 패스워드 입력

   

MySQL 기본 정보 검색

show databases;

show variables like 'have_innodb';

select version();

show engines;

select @@innodb_version;

show plugins;

show variables where Variable_Name LIKE "innodb_buffer%";

show variables where Variable_Name LIKE "innodb_change_buffering%";

show variables where Variable_Name LIKE "innodb_log%";

show variables where Variable_Name LIKE "%innodb_write_io_threads%";

   

SHOW VARIABLES WHERE Variable_Name LIKE "%dir";

/var/lib/mysql

mysql 8350 8143 0 03:25 pts/1 00:00:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock

   

[접속 IP 권한 할당]

mysql> GRANT ALL PRIVILEGES ON *.* TO root@'ip주소' IDENTIFIED BY '비밀번호'' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO root@192.168.22.123 IDENTIFIED BY 'mysql' WITH GRANT OPTION;

   

mysql> show information_schema

mysql> SHOW TABLES;

mysql> DESC 테이블이름;

mysql> DESCRIBE 테이블이름;

mysql> EXPLAIN 테이블이름;

  

 

MySQL 기본 Dictionary 조회

[현재 DB 전체 Size 확인]

mysql> SELECT table_schema "Database Name",

-> SUM(data_length + index_length) / 1024 / 1024 "Size(MB)"

-> FROM information_schema.TABLES

-> GROUP BY table_schema;

+--------------------+------------+

| Database Name | Size(MB) |

+--------------------+------------+

| information_schema | 0.00390625 |

| mysql | 0.52499485 |

+--------------------+------------+

2 rows in set (0.04 sec)

   

mysql>

   

   

mysql> SELECT

-> count(*) NUM_OF_TABLE,

-> table_schema,concat(round(sum(table_rows)/1000000,2),'M') rows,

-> concat(round(sum(data_length)/(1024*1024*1024),2),'G') DATA,

-> concat(round(sum(index_length)/(1024*1024*1024),2),'G') idx,

-> concat(round(sum(data_length+index_length)/(1024*1024*1024),2),'G') total_size,

-> round(sum(index_length)/sum(data_length),2) idxfrac

-> FROM information_schema.TABLES

-> GROUP BY table_schema

-> ORDER BY sum(data_length+index_length) DESC LIMIT 10;

+--------------+--------------------+-------+-------+-------+------------+---------+

| NUM_OF_TABLE | table_schema | rows | DATA | idx | total_size | idxfrac |

+--------------+--------------------+-------+-------+-------+------------+---------+

| 18 | mysql | 0.00M | 0.00G | 0.00G | 0.00G | 0.14 |

| 17 | information_schema | NULL | 0.00G | 0.00G | 0.00G | NULL |

+--------------+--------------------+-------+-------+-------+------------+---------+

2 rows in set (0.00 sec)

   

mysql>

[특정 Table 사이즈 확인]

mysql> SELECT

-> concat(table_schema,'.',table_name),

-> concat(round(table_rows/1000000,2),'M') rows,

-> concat(round(data_length/(1024*1024*1024),2),'G') DATA,

-> concat(round(index_length/(1024*1024*1024),2),'G') idx,

-> concat(round((data_length+index_length)/(1024*1024*1024),2),'G') total_size,

-> round(index_length/data_length,2) idxfrac

-> FROM information_schema.TABLES

-> where table_name = 'events_statements_current' ;

+-------------------------------------+-------+-------+-------+------------+---------+

| concat(table_schema,'.',table_name) | rows | DATA | idx | total_size | idxfrac |

+-------------------------------------+-------+-------+-------+------------+---------+

| mysql.TEST | 0.00M | 0.00G | 0.00G | 0.00G | 93.09 |

+-------------------------------------+-------+-------+-------+------------+---------+

1 row in set (0.00 sec)

[특정 스키마 테이블 정보 확인]

mysql> SELECT table_name, table_type, engine

-> FROM information_schema.tables

-> WHERE table_schema = 'mysql'

-> ORDER BY table_name DESC;

+---------------------------+------------+--------+

| table_name | table_type | engine |

+---------------------------+------------+--------+

| user | BASE TABLE | MyISAM |

| time_zone_transition_type | BASE TABLE | MyISAM |

| time_zone_transition | BASE TABLE | MyISAM |

| time_zone_name | BASE TABLE | MyISAM |

| time_zone_leap_second | BASE TABLE | MyISAM |

| time_zone | BASE TABLE | MyISAM |

| TEST | BASE TABLE | MyISAM |

| tables_priv | BASE TABLE | MyISAM |

| procs_priv | BASE TABLE | MyISAM |

| proc | BASE TABLE | MyISAM |

| host | BASE TABLE | MyISAM |

| help_topic | BASE TABLE | MyISAM |

| help_relation | BASE TABLE | MyISAM |

| help_keyword | BASE TABLE | MyISAM |

| help_category | BASE TABLE | MyISAM |

| func | BASE TABLE | MyISAM |

| db | BASE TABLE | MyISAM |

| columns_priv | BASE TABLE | MyISAM |

+---------------------------+------------+--------+

18 rows in set (0.00 sec)

[성능 분석 Setting]

SHOW VARIABLES LIKE 'perf%';

+---------------------------------------------------+---------+

| Variable_name | Value |

+---------------------------------------------------+---------+

| performance_schema | OFF |

   

/etc/my.cnf

UPDATE performance_schema.setup_consumers SET enabled = 'YES' WHERE name like 'events_waits%';

   

SELECT * FROM INFORMATION_SCHEMA.ENGINES

WHERE ENGINE='PERFORMANCE_SCHEMA'\G;

SHOW ENGINES\G;

   

[TOP 5 Wait EVENT]

select event_name, count_star, sum_timer_wait from performance_schema.

events_waits_summary_global_by_event_name where event_name like

'wait/synch/mutex/innodb%' and count_star > 0 order by sum_timer_wait desc limit 5;

   

[Slow SQL 추출]

# vi /etc/my.cnf

[mysqld]

log-slow-queries = /usr/local/mysql/var/mysql-slow.log

long_query_time = 3

위 내용은 쿼리 타임이 '3초'를 초과 하는 쿼리에 대해 /usr/local/mysql/var/mysql-slow.log파일에 기록 한다는 뜻입니다.

my.cnf에 설정 및 mysql을 Restart 한 뒤 운영 하다 보면 아래와 같이 slow-query-log가 남게 됩니다.

[mysql-slow.log파일]

use iamroot;

select max(wr_comment) as max_comment from g4_write_ja

where wr_parent = '92' and wr_is_comment = 1;

# Time: 120809 16:08:15

# User@Host: iamroot[iamroot] @ []

# Query_time: 253 Lock_time: 0 Rows_sent: 1 Rows_examined: 419562

select max(wr_comment) as max_comment from test1

where wr_parent = '92' and wr_is_comment = 1;

# Time: 120809 16:08:17

# User@Host: iamroot[iamroot] @ []

# Query_time: 94 Lock_time: 0 Rows_sent: 0 Rows_examined: 640675

use iamroot;

SELECT count(*) from emp where boardcode=1045552594 and boardidx=274;

# Time: 120809 16:08:23

# User@Host: iamroot[iamroot] @ []

# Query_time: 183 Lock_time: 0 Rows_sent: 1 Rows_examined: 268576

   

[로그 내용 중 각 항목에 대한 설명]

Query_time : 쿼리 수행시간

Lock_time : 테이블 LOCK 이 걸린시간

Row_sent : 쿼리 처리 결과 ROW 수

Rows_examined : 쿼리 처리 대상의 ROW 수

   

[참고 자료 및 사이트]

https://www.mysql.com/

http://www.oracle.com/technetwork/database/mysql/index.html

http://www.slideshare.net/morgo/inno-db-presentation

Real MySQL Book

   


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,