OS환경 : Oracle Linux 7.5 (64bit)
DB 환경 : Oracle Database 19.3.0.0
방법 : 오라클 19c Statspack 리포트 생성 가이드
Statspack 이란?
Staspack은 Oracle Database에 대한 부하 및 resource 사용량의 trend 분석이나 성능 문제 분석을 위하여 사용되는 툴임
성능관련 통계정보들이 perfstat 유저에 누적되어 저장되므로 원하는 기간별로 비교 분석이 가능함
DBMS_JOB이나 OS Utility (예를 들면 cron)등을 사용하여 주기적으로 Data의 수집 할 수 있음
AWR은 유료이지만 Statspack는 무료임
AWR처럼 Top 5 Timed Event 및 메모리 Advisory 도 확인 가능함
자세한 리포트 확인방법은 추가 게시물 참고
Statspack 사용방법
Statspack 용 테이블스페이스 생성(선택사항)
1 2 3 | SQL> create tablespace statspack_ts datafile '/app/oracle/oradata/ORCL19/statspack_ts01.dbf' size 100m autoextend on; Tablespace created. |
Statspack 설치
1 2 3 4 5 | SQL> connect /as sysdba SQL> @?/rdbms/admin/spcreate.sql Enter value for perfstat_password: [패스워드 입력] Enter value for default_tablespace: [perfstat 용 테이블스페이스 입력, 엔터시 default 테이블스페이스로 지정됨] Enter value for temporary_tablespace: [perfstat 용 템프 테이블스페이스 입력 , 엔터시 default 템프 테이블스페이스로 지정됨] |
Statspack을 설치하면 perfstat라는 유저를 생성하고, 이 사용자에 여러 개의 STAT$ 테이블을 생성하고,
성능분석데이터는 이 테이블들에 저장됨
Statspack 용 스냅샷 생성
1 2 3 4 5 6 7 8 9 10 | SQL> conn perfstat/perfstat Connected. SQL> exec statspack.snap; PL/SQL procedure successfully completed. SQL> exec statspack.snap; PL/SQL procedure successfully completed. |
(리포트 생성을 위해 스냅샷 2개 생성)
생성된 스냅샷 확인
1 2 3 4 5 6 7 8 | SQL> select snap_id, snap_time from stats$snapshot; SNAP_ID SNAP_TIME ---------- --------- 1 28-JUL-20 2 28-JUL-20 2 rows selected. |
Statspack 리포트 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | SQL> conn perfstat/perfstat Connected. SQL> @?/rdbms/admin/spreport.sql . . Listing all Completed Snapshots Snap Instance DB Name Snap Id Snap Started Level Comment ------------ ------------ --------- ----------------- ----- -------------------- ORCL19 ORCL19 1 28 Jul 2020 23:21 5 2 28 Jul 2020 23:23 5 Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ . . Enter value for begin_snap: 1 [스냅샷 시작점 입력(스냅샷 ID)] Begin Snapshot Id specified: 1 Enter value for end_snap: 2 [스냅샷 종료점 입력(스냅샷 ID)] End Snapshot Id specified: 2 Enter value for report_name: [리포트 이름 입력, 엔터시 sp_(스냅샷 시작점)_(스냅샷 종료점).lst 으로 파일 생성됨] . . ------------------------------------------------------------- End of Report ( sp_1_2.lst ) |
현재 스냅샷이 2개밖에 없어서 1~2번 스냅샷으로 리포트를 생성함
sqlplus 종료 후 현재 위치에서 해당 파일 vi로 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | $ vi sp_1_2.lst STATSPACK report for Database DB Id Instance Inst Num Startup Time Release RAC ~~~~~~~~ ----------- ------------ -------- --------------- ----------- --- 323838205 ORCL19 1 02-Jul-20 14:59 19.0.0.0.0 NO Host Name Platform CPUs Cores Sockets Memory (G) ~~~~ ---------------- ---------------------- ----- ----- ------- ------------ ORACLE19 Linux x86 64-bit 1 1 1 3.8 Snapshot Snap Id Snap Time Sessions Curs/Sess Comment ~~~~~~~~ ---------- ------------------ -------- --------- ------------------ Begin Snap: 1 28-Jul-20 23:21:03 56 10.0 End Snap: 2 28-Jul-20 23:23:37 56 10.0 Elapsed: 2.57 (mins) Av Act Sess: 0.0 DB time: 0.04 (mins) DB CPU: 0.03 (mins) Cache Sizes Begin End ~~~~~~~~~~~ ---------- ---------- Buffer Cache: 784M Std Block Size: 8K Shared Pool: 304M Log Buffer: 7,364K Load Profile Per Second Per Transaction Per Exec Per Call ~~~~~~~~~~~~ ------------------ ----------------- ----------- ----------- DB time(s): 0.0 2.2 0.00 0.43 DB CPU(s): 0.0 1.5 0.00 0.31 Redo size: 18,566.0 2,859,168.0 Logical reads: 135.1 20,806.0 Block changes: 51.8 7,973.0 Physical reads: 0.8 115.0 Physical writes: 7.1 1,096.0 User calls: 0.0 5.0 Parses: 6.2 957.0 Hard parses: 1.5 231.0 W/A MB processed: 0.1 17.3 Logons: 0.0 0.0 . . |
작업 후 불필요한 스냅샷 삭제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | SQL> @?/rdbms/admin/sppurge.sql Database Instance currently connected to ======================================== Instance DB Id DB Name Inst Num Name ----------- ---------- -------- ---------- 323838205 ORCL19 1 ORCL19 Snapshots for this database instance ==================================== Base- Snap Snap Id Snapshot Started line? Level Host Comment -------- --------------------- ----- ----- --------------- -------------------- 1 28 Jul 2020 23:21:03 5 ORACLE19 2 28 Jul 2020 23:23:37 5 ORACLE19 Warning ~~~~~~~ sppurge.sql deletes all snapshots ranging between the lower and upper bound Snapshot Id''s specified, for the database instance you are connected to. Snapshots identified as Baseline snapshots which lie within the snapshot range will not be purged. It is NOT possible to rollback changes once the purge begins. You may wish to export this data before continuing. Specify the Lo Snap Id and Hi Snap Id range to purge ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Enter value for losnapid: 1 [삭제하고픈 스냅샷 시작점 입력(스냅샷 ID)] Using 1 for lower bound. Enter value for hisnapid: 2 [삭제하고픈 스냅샷 종료점 입력(스냅샷 ID)] Using 2 for upper bound. Deleting snapshots 1 - 2. Number of Snapshots purged: 2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Purge of specified Snapshot range complete. |
스냅샷 목록 확인
1 2 3 | SQL> select snap_id, snap_time from stats$snapshot; no rows selected |
정상적으로 삭제됨
테스트용 스냅샷 몇개 더 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | SQL> conn perfstat/perfstat Connected. SQL> exec statspack.snap; PL/SQL procedure successfully completed. SQL> exec statspack.snap; PL/SQL procedure successfully completed. SQL> exec statspack.snap; PL/SQL procedure successfully completed. SQL> exec statspack.snap; PL/SQL procedure successfully completed. SQL> exec statspack.snap; PL/SQL procedure successfully completed. |
스냅샷 목록 확인
1 2 3 4 5 6 7 8 9 10 11 | SQL> select snap_id, snap_time from stats$snapshot; Snap Id SNAP_TIME -------- --------- 11 28-JUL-20 12 28-JUL-20 13 28-JUL-20 14 28-JUL-20 15 28-JUL-20 5 rows selected. |
스냅샷 자동 생성
방법 1. spauto.sql 사용
oracle job을 이용해 스냅샷을 생성함
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | SQL> @?/rdbms/admin/spauto.sql PL/SQL procedure successfully completed. Job number for automated statistics collection for this instance ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Note that this job number is needed when modifying or removing the job: JOBNO ---------- 1 Job queue process ~~~~~~~~~~~~~~~~~ Below is the current setting of the job_queue_processes init.ora parameter - the value for this parameter must be greater than 0 to use automatic statistics gathering: NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ job_queue_processes integer 1 Next scheduled run ~~~~~~~~~~~~~~~~~~ The next scheduled run for this job is: JOB NEXT_DATE NEXT_SEC ---------- --------- ---------------- 1 11-AUG-20 09:00:00 |
spauto.sql 을 수정하여 job 시간 수정가능
spauto.sql 내용
방법 2. crontab 이용
statspack.sh 파일 생성
1 2 3 4 | $ cat statspack.sh sqlplus perfstat/perfstat << EOF execute statspack.snap; EOF |
실행권한 부여
1 | $ chmod +x statspack.sh |
crontab 등록
1 2 | $ crontab -l 0 * * * * /home/oracle/script/statspack.sh |
매일 1시간마다 스냅샷을 생성하도록 crontab 등록
참조 crontab 등록형식
1 2 3 4 5 6 7 8 9 | * * * * * 수행할 명령어 ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └───────── 요일 (0 - 6) (0:일요일, 1:월요일, 2:화요일, …, 6:토요일) │ │ │ └───────── 월 (1 - 12) │ │ └───────── 일 (1 - 31) │ └───────── 시 (0 - 23) └───────── 분 (0 - 59) |
스냅샷 일괄 삭제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | SQL> @?/rdbms/admin/sptrunc.sql Warning ~~~~~~~ Running sptrunc.sql removes ALL data from Statspack tables. You may wish to export the data before continuing. About to Truncate Statspack Tables ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If would like to exit WITHOUT truncating the tables, enter any text at the begin_or_exit prompt (e.g. 'exit'), otherwise if you would like to begin the truncate operation, press <return> Enter value for begin_or_exit: [엔터] Entered at the 'begin_or_exit' prompt ... Starting truncate operation |
스냅샷 목록 확인
1 2 3 | SQL> select snap_id, snap_time from stats$snapshot; no rows selected |
정상적으로 삭제됨
Statspack 삭제
1 2 | SQL> conn / as sysdba SQL> @?/rdbms/admin/spdrop.sql |
참조 : http://www.gurubee.net/lecture/1915
http://www.gurubee.net/lecture/1916
http://haisins.epac.to/wordpress/?p=2577'ORACLE > Performance Tuning ' 카테고리의 다른 글
오라클 19c dbms_xplan.display_cursor Hint Report 포맷 (0) | 2021.10.23 |
---|---|
로그스위치 과다 발생 시 확인 사항 (3) | 2020.08.03 |
sql 실행계획 확인 및 cpu 등 성능확인 스크립트 (3) | 2020.03.26 |
오라클 데이터펌프 expdp 시 세부 trace log남기기 (0) | 2020.02.23 |
SPM(SQL Plan Management) SQL PLAN BASELINE 이용한 Export / Import 테스트 (실행계획 변경) (0) | 2019.09.19 |