프린트 하기

OS환경 : Oracle Linux6.8(64bit)


DB 환경 : Oracle Database 11.2.0.4


쿼리 : STATSPACK 테이블로 SQL_ID별 실행횟수 확인

sqlplus 접속 후 STATSPACK 설치

1
2
3
4
5
6
7
8
9
10
11
12
$ sqlplus / as sysdba
 
SQL*Plus: Release 11.2.0.4.0 Production on Fri Dec 28 10:33:43 2018
 
Copyright (c) 19822013, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters and Data Mining options
 
SQL> @$ORACLE_HOME/rdbms/admin/spcreate.sql


PERFSTAT 계정으로 접속 후 스냅샷 생성 후 STATS$SQL_SUMMARY 테이블 조회 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SQL> conn perfstat/perfstat
SQL> execute statspack.snap;
SQL> SELECT SQL_ID, EXECUTIONS FROM STATS$SQL_SUMMARY;
 
SQL_ID          EXECUTIONS
------------- ----------
0rc4km05kgzb9         144
0v3dvmc22qnam          47
1att0guk2skhm         282
2tkw12w5k68vd         213
32hbap2vtmf53         953
3s1yukp05bzg6         243
459f3z9u4fb3u        1784
...

select 절에 컬럼을 추가하거나 where에 조건을 추가하여 다양한 결과 추출가능함


단순히 특정시간대에 실행횟수를 확인하기위한 작업을 한다면

STATS$SQL_SUMMARY 테이블의 실행횟수 전시간과 최근시간 비교해가면서 추출가능


STATSPACK 테이블로 특정 시간대 SQL_ID별 실행횟수 확인

snap_id 지정 후 해당 snapshot에서 특정 sql의 실행횟수를 확인 가능

특정시점 snapshot 확인

1
2
3
4
5
6
7
8
SQL> 
SELECT SNAP_ID, TO_CHAR(SNAP_TIME, 'YYYYMMDDHH24MI') SNAP_TIME 
FROM STATS$SNAPSHOT;
 
   SNAP_ID SNAP_TIME
---------- ------------
     1 201812281028
     2 201812281120


특정시점 snaphot의 snap_id로 sql 실행횟수 조회

1
2
3
4
5
6
7
8
9
10
11
12
13
SQL> 
SELECT SNAP_ID, SQL_ID, EXECUTIONS 
FROM STATS$SQL_SUMMARY
WHERE SNAP_ID = 1;
 
   SNAP_ID SQL_ID     EXECUTIONS
---------- ------------- ----------
     1 0rc4km05kgzb9    144
     1 0v3dvmc22qnam     47
     1 1att0guk2skhm    282
     1 2tkw12w5k68vd    213
     1 32hbap2vtmf53    953
     1 3s1yukp05bzg6    243



참조 : https://cafe.naver.com/prodba/50359