SlideShare a Scribd company logo
112│2013 기술백서 White Paper
SPA(SQL Performance Analyze)를 이용한 통계 정보
수집
㈜엑셈 컨설팅본부/DB컨설팅팀 오 경렬
1. SPA란?
SPA(SQL Performance Analyze)는 RAT(Real Application Testing)서비스의 옵션 중에 하나
이다. 본 문서는 SPA 를 이용해 좀더 안정적으로 통계정보를 생성하는 Process 에 대해 다룬다.
2. 통계 정보와 SQL Tuning
튜닝은 LEADING(A) USE_NL(B) INDEX(A A(COL1))처럼 간단한 힌트로 대부분 해결 가능하
다. 이것이 가능한 이유는 Leading 과 같은 힌트로 쿼리의 키 조건이 무엇인지 지정해주면 나머
지 플랜은 Oracle Optimizer 가 Query Transformation 등 최적화 알고리즘을 적용해 최적의
성능을 낼 수 있도록 플랜을 작성하기 때문이다.
튜너 A 가 사이트에 튜닝 지원을 간다.
사이트에 도착한 A 는 가지고 있던 스크립트로 능숙하게 Tuning 대상을 발췌한다.
수집 기준은 Execution 이 1000 번 이상이면서 Buffer Gets 이 10000 Block 이상인 쿼리
무려 200 개의 쿼리가 추출되었다...
A 군은 순간 당황했지만 빠르게 안정을 되찾고
입고 있던 와이셔츠의 소매 단추를 풀고 두번 접어올리고 나서는 차고 있던 시계를 풀어 책상 위
에 올려 놓는다.
시간은 9 시 30 분을 지나고 있다.
"흠.. 오늘 몇 개나 할 수 있을까...."
A 군은 알듯 말듯한 미소를 지어 보이고는 중지 손가락으로 안경을 한번 치켜 올리고 이내 불꽃
튜닝에 들어간다
Part 1 ORACLE │113
그리고.. 엑셀에 하나 둘 완료된 쿼리가 늘어날 때 마다... 희열을 느낀다....
이 글을 보는 당신은 어떻게 할 것인가?
A 군의 판단이 잘못된 것인가?
잘못된 판단이 아니다 최선의 판단이다..... 11g 전 까지는....
11g New Feature 인 Pending Statistics 를 SPA 와 함께 사용한다면
A 군의 200 개의 튜닝 대상 쿼리는 10 개 내외로 줄어 들 수도 있다.
오라클 Optimizer 는 생각보다 똑똑하다.
3. SPA 사용 가능 여부 확인
RAT Option 이 FALSE 면 사용할 수 없다.
SELECT * FROM V$OPTION
WHERE PARAMETER = 'Real Application Testing'
PARAMETER VALUE
-------------------------------------- --------
Real Application Testing TRUE
4. 사용 예
간단한 사례를 다룬다. 본인의 것으로 흡수하고 수정해서 실무에 적용하길 바란다.
시나리오 요약
0. 테스트 스키마 생성 및 쿼리 수행
1. SQL_SET 생성
2. ANALYSIS_TASK #1 생성
3. SCHEMA or TABLE Pending Statistcs 설정
4. 통계 정보 수집
5. Session Use Pending Statistics 설정
114│2013 기술백서 White Paper
6. ANALYSIS_TASK #2 생성
7. ANALYSIS_TASK #1, #2 비교
8. 리포팅
9. 비교 결과 조회 스크립트
0. 테스트 스키마 생성 및 쿼리 수행
DROP TABLE EXEM_T1 PURGE;
CREATE TABLE EXEM_T1
AS
SELECT LEVEL C1, 'A' C2
FROM DUAL
CONNECT BY LEVEL <= 100000;
INSERT INTO EXEM_T1 VALUES(1, 'B');
CREATE INDEX I1_EXEM_T1 ON EXEM_T1(C2) TABLESPACE TSD_QM;
EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME =>'MAXGAUGE'
, TABNAME =>'EXEM_T1'
, NO_INVALIDATE =>FALSE
, METHOD_OPT =>'FOR ALL COLUMNS SIZE 3'
, ESTIMATE_PERCENT =>10);
-- SQL 수행 (A, B 두 가지가 있고 분포가 좋지 않음 -> FTS)
SELECT COUNT(C1)
FROM EXEM_T1
WHERE C2 = :B1;
--COUNT(C1)
--100000
1. SQL_SET 생성
SELECT ID,
Part 1 ORACLE │115
NAME,
OWNER,
DESCRIPTION,
CREATED,
LAST_MODIFIED,
STATEMENT_COUNT
FROM DBA_SQLSET
where name = 'OKR_TEST';
--ID NAME OWNER DESCRIPTION CREATED LAST_MODIFIED STATEMENT_COUNT
--24 OKR_TEST MAXGAUGE 2013-06-27 오후 1:37:31 2013-06-27 오후
1:37:43 4
-- SQLSET 과 ANALYSIS_TASK 연결 고리 확인
SELECT DESCRIPTION
FROM DBA_SQLSET_REFERENCES
WHERE SQLSET_NAME = 'OKR_TEST';
--DESCRIPTION
--created by: SQL Performance Analyzer - task: OKR_SPA
SELECT TASK_NAME,
EXECUTION_NAME,
EXECUTION_TYPE,
STATUS,
EXECUTION_END
FROM USER_ADVISOR_EXECUTIONS
WHERE TASK_NAME = 'OKR_SPA';
--TASK_NAME EXECUTION_NAME EXECUTION_TYPE STATUS EXECUTION_END
--OKR_SPA OKR_AFTER TEST EXECUTE COMPLETED 2013-06-27 오후 1:48:07
--OKR_SPA OKR_BEFORE TEST EXECUTE COMPLETED 2013-06-27 오후 1:42:52
--OKR_SPA OKR_COMP COMPARE PERFORMANCE COMPLETED 2013-06-27 오후 1:48:34
-- TASK 가 존재할 경우 SET 삭제 전에 TASK 먼저 삭제해야 그 다음 SET 삭제가 가능하다.
-- ANALYSIS_TASK DROP
EXEC DBMS_SQLPA.DROP_ANALYSIS_TASK('OKR_SPA');
-- TUNING SET DROP
EXEC DBMS_SQLTUNE.DROP_SQLSET('OKR_TEST');
116│2013 기술백서 White Paper
2. ANALYSIS_TASK #1 생성
ANALYSIS_TASK 는 4 가지 방법으로 생성 가능하다.
(1) Sql text format
EXEC :stmt_task := DBMS_SQLPA.CREATE_ANALYSIS_TASK(
sql_text => 'select quantity_sold from sales s, times t where s.time_id = t.time_id
and s.time_id = TO_DATE(''24-NOV-00'')');
(2) Sql id format (cursor cache)
EXEC :stmt_task := DBMS_SQLPA.CREATE_ANALYSIS_TASK(sql_id => 'ay1m3ssvtrh24');
(3) Workload repository format
exec :stmt_task := DBMS_SQLPA.CREATE_ANALYSIS_TASK(
begin_snap => 1,
end_snap => 2,
sql_id => 'ay1m3ssvtrh24');
(4) Sql tuning set format (first we need to load an STS, then analyze it)
EXEC :sts_task := DBMS_SQLPA.CREATE_ANALYSIS_TASK( --- sqlset_name => 'my_workload',
--- order_by => 'BUFFER_GETS', --- description => 'process workload ordered by
buffer gets');
--아래는 Sql tuning set format 사용한 예제이다.
--SQLSET 생성
EXEC DBMS_SQLTUNE.CREATE_SQLSET('OKR_TEST');
--내용을 채워넣는다
--COMMAND TYPE
--2 --> insert
--3 --> select (for update)
--6 --> update
Part 1 ORACLE │117
--7 --> delete
--189 --> merge
DECLARE
cur DBMS_SQLTUNE.SQLSET_CURSOR;
BEGIN
OPEN cur FOR
SELECT VALUE(P)
FROM table(
DBMS_SQLTUNE.SELECT_CURSOR_CACHE(
'parsing_schema_name in (''MAXGAUGE'')
and upper(sql_text) like ''%EXEM_T1%''
AND command_type IN (2,3,6,7,189)',
NULL, NULL, NULL, NULL, 1, NULL,
'ALL')) P;
DBMS_SQLTUNE.LOAD_SQLSET(sqlset_name => 'OKR_TEST'
,populate_cursor => cur);
END;
----update and delete SQL statements from an STS based on a search condition
--BEGIN
-- DBMS_SQLTUNE.DELETE_SQLSET(
-- sqlset_name => 'my_sql_tuning_set',
-- basic_filter => 'executions < 50');
--END;
--/
--
-- Task 생성 확인
select count(1) from DBA_SQLSET_STATEMENTS where sqlset_name = 'OKR_TEST'
--count(1)
--4
-- 생성
DECLARE
TNAME VARCHAR2(30);
BEGIN
TNAME := DBMS_SQLPA.CREATE_ANALYSIS_TASK( SQLSET_NAME => 'OKR_TEST'
, BASIC_FILTER => NULL
, ORDER_BY => 'EXECUTIONS'
, TOP_SQL => 100
118│2013 기술백서 White Paper
, TASK_NAME => 'OKR_SPA'
, DESCRIPTION => NULL
, SQLSET_OWNER => NULL
);
END;
-- EXECUTE_ANALYSIS_TASK
-- 가장 빠른 방법은 execution_type => 'CONVERT SQLSET'
-- ANALYSIS_TASK 생성
begin
DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(
task_name => 'OKR_SPA',
execution_type => 'EXECUTE',
execution_name => 'OKR_BEFORE');
end;
-- 생성 결과 조회
select execution_name
,status
,execution_end
,execution_end
from USER_ADVISOR_EXECUTIONS
where task_name = 'OKR_SPA';
--EXECUTION_NAME STATUS EXECUTION_END
--OKR_BEFORE COMPLETED 2013-07-02 오후 3:04:03
3. SCHEMA or TABLE Pending Statistcs 설정
-- 조회 결과가 TRUE 이면 Pending 이 걸려있지 않은 상태다
SELECT DBMS_STATS.GET_PREFS('PUBLISH', 'maxgauge', 'EXeM_T1') PUBLISH FROM DUAL;
--PUBLISH
--TRUE
-- FALSE 로 변경 -> 운영간에 통계정보 생성에 의한 플랜 변경을 막기위한 조치
Exec dbms_stats.set_schema_prefs('maxgauge', pname => 'PUBLISH', pvalue => 'FALSE');
Part 1 ORACLE │119
4. 통계정보 수집
-- 거의 대부분의 데이터를 지우고 Histogram 도 생성하기 때문에 인덱스를 이용함
delete exem_t1
where c2 = 'A'
-- 통계정보 재생성
exec dbms_stats.gather_table_stats(ownname =>'MAXGAUGE'
, tabname =>'EXEM_T1'
, no_invalidate =>FALSE
, method_opt =>'for all columns size 3'
, estimate_percent=>10);
-- Pending 통계 조회
SELECT * FROM DBA_TAB_PENDING_STATS
WHERE TABLE_NAME = 'EXEM_T1'
-- 하지만 통계를 Pending 했으므로 여전히 FTS 플랜
select count(c1)
from exem_t1
where c2 = :b1;
--Pending 상태에서 수집한 최신 통계정보를 이용해서 SPA 수행
5. Session Use Pending Statistics 설정
alter session set optimizer_use_pending_statistics = TRUE;
-- 하지만 통계를 Pending 했으므로 여전히 FTS 플랜
select count(c1)
from exem_t1
where c2 = :b1;
6. ANALYSIS_TASK #2 생성
-- OKR_AFTER 이름으로 TASK 를 만든다.
begin
DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(
120│2013 기술백서 White Paper
task_name => 'OKR_SPA',
execution_type => 'EXECUTE',
execution_name => 'OKR_AFTER');
새 섹션 2 페이지 5
execution_name => 'OKR_AFTER');
end;
7. ANALYSIS_TASK #1, #2 비교
begin
DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(
task_name => 'OKR_SPA',
execution_type => 'COMPARE PERFORMANCE',
execution_name => 'OKR_COMP',
execution_params => dbms_advisor.arglist(
'execution_name1',
'OKR_BEFORE',
'execution_name2',
'OKR_AFTER'
)
);
end;
8. 리포팅
set long 100000 longchunksize 100000 linesize 200 head off feedback off echo off
spool report.html
SELECT dbms_sqlpa.report_analysis_task('OKR_SPA', 'HTML', 'ALL','ALL') FROM dual;
spool off
--Click here to see the file report.html in html formart
;
Part 1 ORACLE │121
9. 비교 결과 조회 스크립트
with TMP as
(
select /*+ materialize */
122│2013 기술백서 White Paper
b.sql_id
,b.plan_hash_value b_ph
,a.plan_hash_value a_ph
,case when (b.buffer_gets-a.buffer_gets) >= 0
then '개선'
when (b.buffer_gets-a.buffer_gets) < 0
then '저하'
end "성능"
,b.optimizer_cost b_cost
,a.optimizer_cost a_cost
,b.executions b_exec
,a.executions a_exec
,b.rows_processed b_rows
,a.rows_processed a_rows
,b.elapsed_time B_ET
,a.elapsed_time A_ET
,b.buffer_gets B_BG
,a.buffer_gets A_BG
,b.disk_reads b_dr
,a.disk_reads a_dr
,round(100-
(decode(a.buffer_gets,0,1,a.buffer_gets)/decode(b.buffer_gets,0,1,b.buffer_gets))*100,
1) bg_rate
,round(100-
(decode(a.elapsed_time,0,1,a.elapsed_time)/decode(b.elapsed_time,0,1,b.elapsed_time))*
100,1) et_rate
from dba_advisor_sqlstats b
,dba_advisor_sqlstats a
where 1=1
and b.execution_name = :before
and a.execution_name = :after
and a.sql_id = b.sql_id
and a.plan_hash_value <> b.plan_hash_value
)
select /*+ leading(a) use_nl(r) */
hash_value hv
,a.*
,parsing_schema_name pars_nm
,sql_profile Pf
,module
,executions R_EXEC
Part 1 ORACLE │123
,round(BUFFER_GETS/decode(executions,0,1,executions),0) R_BG
,round(DISK_READS/decode(executions,0,1,executions),1) R_DR
,round(ROWS_PROCESSED/decode(executions,0,1,executions),0) R_ROWS
,round(ELAPSED_TIME/decode(executions,0,1,executions)/1000000,1) R_ET
,round(CPU_TIME/decode(executions,0,1,executions)/1000000,1) R_CT
,last_active_time last_t
,first_load_time first_t
,sql_fulltext text
from tmp a
,v$sqlarea r
where a.sql_id = r.sql_id
5. 마치며
본 문서의 내용은 프로그램으로 치면 "Hello World" 이다. 꼭 내용을 숙지하고 스크립트나 엑셀
메크로 등으로 자동화하여 업무에 적용하길 바란다. 이론은 절대 경험을 이기지 못한다.

More Related Content

What's hot

Oracle Database Performance Tuning Concept
Oracle Database Performance Tuning ConceptOracle Database Performance Tuning Concept
Oracle Database Performance Tuning Concept
Chien Chung Shen
 
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1
Osama Mustafa
 
Zabbix Performance Tuning
Zabbix Performance TuningZabbix Performance Tuning
Zabbix Performance Tuning
Ricardo Santos
 
Comparison of ACFS and DBFS
Comparison of ACFS and DBFSComparison of ACFS and DBFS
Comparison of ACFS and DBFS
DanielHillinger
 
IBM DB2 LUW UDB DBA Training by www.etraining.guru
IBM DB2 LUW UDB DBA Training by www.etraining.guruIBM DB2 LUW UDB DBA Training by www.etraining.guru
IBM DB2 LUW UDB DBA Training by www.etraining.guru
Ravikumar Nandigam
 
MySQLHeatwave-TheBasics.pptx
MySQLHeatwave-TheBasics.pptxMySQLHeatwave-TheBasics.pptx
MySQLHeatwave-TheBasics.pptx
Bobby Curtis
 
Automating Your Clone in E-Business Suite R12.2
Automating Your Clone in E-Business Suite R12.2Automating Your Clone in E-Business Suite R12.2
Automating Your Clone in E-Business Suite R12.2
Michael Brown
 
Solaris Linux Performance, Tools and Tuning
Solaris Linux Performance, Tools and TuningSolaris Linux Performance, Tools and Tuning
Solaris Linux Performance, Tools and Tuning
Adrian Cockcroft
 
Oracle RAC Virtualized - In VMs, in Containers, On-premises, and in the Cloud
Oracle RAC Virtualized - In VMs, in Containers, On-premises, and in the CloudOracle RAC Virtualized - In VMs, in Containers, On-premises, and in the Cloud
Oracle RAC Virtualized - In VMs, in Containers, On-premises, and in the Cloud
Markus Michalewicz
 
ASM
ASMASM
Snowflake on Googleのターゲットエンドポイントとしての利用
Snowflake on Googleのターゲットエンドポイントとしての利用Snowflake on Googleのターゲットエンドポイントとしての利用
Snowflake on Googleのターゲットエンドポイントとしての利用
QlikPresalesJapan
 
DB2 utilities
DB2 utilitiesDB2 utilities
DB2 utilities
Udayakumar Suseendran
 
Weblogic 12c installation (oracle linux)
Weblogic 12c installation (oracle linux)Weblogic 12c installation (oracle linux)
Weblogic 12c installation (oracle linux)
Osama Mustafa
 
[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏
[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏
[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏
Insight Technology, Inc.
 
Testing Big Data: Automated Testing of Hadoop with QuerySurge
Testing Big Data: Automated  Testing of Hadoop with QuerySurgeTesting Big Data: Automated  Testing of Hadoop with QuerySurge
Testing Big Data: Automated Testing of Hadoop with QuerySurge
RTTS
 
Oracle Multitenant meets Oracle RAC - IOUG 2014 Version
Oracle Multitenant meets Oracle RAC - IOUG 2014 VersionOracle Multitenant meets Oracle RAC - IOUG 2014 Version
Oracle Multitenant meets Oracle RAC - IOUG 2014 Version
Markus Michalewicz
 
Oracle RAC - New Generation
Oracle RAC - New GenerationOracle RAC - New Generation
Oracle RAC - New Generation
Anil Nair
 
Optimize DR and Cloning with Logical Hostnames in Oracle E-Business Suite (OA...
Optimize DR and Cloning with Logical Hostnames in Oracle E-Business Suite (OA...Optimize DR and Cloning with Logical Hostnames in Oracle E-Business Suite (OA...
Optimize DR and Cloning with Logical Hostnames in Oracle E-Business Suite (OA...
Andrejs Prokopjevs
 
Oracle advanced queuing
Oracle advanced queuingOracle advanced queuing
Oracle advanced queuing
Gurpreet singh
 
Exadata master series_asm_2020
Exadata master series_asm_2020Exadata master series_asm_2020
Exadata master series_asm_2020
Anil Nair
 

What's hot (20)

Oracle Database Performance Tuning Concept
Oracle Database Performance Tuning ConceptOracle Database Performance Tuning Concept
Oracle Database Performance Tuning Concept
 
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1
 
Zabbix Performance Tuning
Zabbix Performance TuningZabbix Performance Tuning
Zabbix Performance Tuning
 
Comparison of ACFS and DBFS
Comparison of ACFS and DBFSComparison of ACFS and DBFS
Comparison of ACFS and DBFS
 
IBM DB2 LUW UDB DBA Training by www.etraining.guru
IBM DB2 LUW UDB DBA Training by www.etraining.guruIBM DB2 LUW UDB DBA Training by www.etraining.guru
IBM DB2 LUW UDB DBA Training by www.etraining.guru
 
MySQLHeatwave-TheBasics.pptx
MySQLHeatwave-TheBasics.pptxMySQLHeatwave-TheBasics.pptx
MySQLHeatwave-TheBasics.pptx
 
Automating Your Clone in E-Business Suite R12.2
Automating Your Clone in E-Business Suite R12.2Automating Your Clone in E-Business Suite R12.2
Automating Your Clone in E-Business Suite R12.2
 
Solaris Linux Performance, Tools and Tuning
Solaris Linux Performance, Tools and TuningSolaris Linux Performance, Tools and Tuning
Solaris Linux Performance, Tools and Tuning
 
Oracle RAC Virtualized - In VMs, in Containers, On-premises, and in the Cloud
Oracle RAC Virtualized - In VMs, in Containers, On-premises, and in the CloudOracle RAC Virtualized - In VMs, in Containers, On-premises, and in the Cloud
Oracle RAC Virtualized - In VMs, in Containers, On-premises, and in the Cloud
 
ASM
ASMASM
ASM
 
Snowflake on Googleのターゲットエンドポイントとしての利用
Snowflake on Googleのターゲットエンドポイントとしての利用Snowflake on Googleのターゲットエンドポイントとしての利用
Snowflake on Googleのターゲットエンドポイントとしての利用
 
DB2 utilities
DB2 utilitiesDB2 utilities
DB2 utilities
 
Weblogic 12c installation (oracle linux)
Weblogic 12c installation (oracle linux)Weblogic 12c installation (oracle linux)
Weblogic 12c installation (oracle linux)
 
[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏
[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏
[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏
 
Testing Big Data: Automated Testing of Hadoop with QuerySurge
Testing Big Data: Automated  Testing of Hadoop with QuerySurgeTesting Big Data: Automated  Testing of Hadoop with QuerySurge
Testing Big Data: Automated Testing of Hadoop with QuerySurge
 
Oracle Multitenant meets Oracle RAC - IOUG 2014 Version
Oracle Multitenant meets Oracle RAC - IOUG 2014 VersionOracle Multitenant meets Oracle RAC - IOUG 2014 Version
Oracle Multitenant meets Oracle RAC - IOUG 2014 Version
 
Oracle RAC - New Generation
Oracle RAC - New GenerationOracle RAC - New Generation
Oracle RAC - New Generation
 
Optimize DR and Cloning with Logical Hostnames in Oracle E-Business Suite (OA...
Optimize DR and Cloning with Logical Hostnames in Oracle E-Business Suite (OA...Optimize DR and Cloning with Logical Hostnames in Oracle E-Business Suite (OA...
Optimize DR and Cloning with Logical Hostnames in Oracle E-Business Suite (OA...
 
Oracle advanced queuing
Oracle advanced queuingOracle advanced queuing
Oracle advanced queuing
 
Exadata master series_asm_2020
Exadata master series_asm_2020Exadata master series_asm_2020
Exadata master series_asm_2020
 

Viewers also liked

TP-Monitor_Wh apm
TP-Monitor_Wh apmTP-Monitor_Wh apm
TP-Monitor_Wh apm
엑셈
 
Commit Wait Class 대기시간 감소 방안_Wh oracle
Commit Wait Class 대기시간 감소 방안_Wh oracleCommit Wait Class 대기시간 감소 방안_Wh oracle
Commit Wait Class 대기시간 감소 방안_Wh oracle
엑셈
 
SQL PlAN MANAGEMENT 활용_Wh oracle
SQL PlAN MANAGEMENT 활용_Wh oracleSQL PlAN MANAGEMENT 활용_Wh oracle
SQL PlAN MANAGEMENT 활용_Wh oracle
엑셈
 
Result Cache 동작원리 및 활용방안_Wh oracle
Result Cache 동작원리 및 활용방안_Wh oracleResult Cache 동작원리 및 활용방안_Wh oracle
Result Cache 동작원리 및 활용방안_Wh oracle
엑셈
 
TCP 연결 과정_Wh apm
TCP 연결 과정_Wh apmTCP 연결 과정_Wh apm
TCP 연결 과정_Wh apm
엑셈
 
네트워크 기반 통신 및 계층 구조_Wh apm
네트워크 기반 통신 및 계층 구조_Wh apm네트워크 기반 통신 및 계층 구조_Wh apm
네트워크 기반 통신 및 계층 구조_Wh apm
엑셈
 
스위치의 분류 및 역할_Wh apm
스위치의 분류 및 역할_Wh apm스위치의 분류 및 역할_Wh apm
스위치의 분류 및 역할_Wh apm
엑셈
 
SQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracleSQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracle
엑셈
 
ORACLE EXADATA HCC 압축방식 이해하기_Wh oracle
ORACLE EXADATA HCC 압축방식 이해하기_Wh oracleORACLE EXADATA HCC 압축방식 이해하기_Wh oracle
ORACLE EXADATA HCC 압축방식 이해하기_Wh oracle
엑셈
 
NLJ BATCH와 부분범위 처리_Wh oracle
NLJ BATCH와 부분범위 처리_Wh oracleNLJ BATCH와 부분범위 처리_Wh oracle
NLJ BATCH와 부분범위 처리_Wh oracle
엑셈
 
JVM Synchronization_Wh apm
JVM Synchronization_Wh apmJVM Synchronization_Wh apm
JVM Synchronization_Wh apm
엑셈
 
Runtime Data Areas_Wh apm
Runtime Data Areas_Wh apmRuntime Data Areas_Wh apm
Runtime Data Areas_Wh apm
엑셈
 
All about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apmAll about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apm
엑셈
 
IBM JVM GC_Wh apm
IBM JVM GC_Wh apmIBM JVM GC_Wh apm
IBM JVM GC_Wh apm
엑셈
 
WINDOW FUNCTION의 이해와 활용방법_Wh oracle
WINDOW FUNCTION의 이해와 활용방법_Wh oracleWINDOW FUNCTION의 이해와 활용방법_Wh oracle
WINDOW FUNCTION의 이해와 활용방법_Wh oracle
엑셈
 
Class Loader_Wh apm
Class Loader_Wh apmClass Loader_Wh apm
Class Loader_Wh apm
엑셈
 
KEEP BUFFER 활용 방안_Wh oracle
KEEP BUFFER 활용 방안_Wh oracleKEEP BUFFER 활용 방안_Wh oracle
KEEP BUFFER 활용 방안_Wh oracle
엑셈
 
SQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracle
SQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracleSQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracle
SQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracle
엑셈
 
웹 서버의 기능 및 역할_Wh apm
웹 서버의 기능 및 역할_Wh apm웹 서버의 기능 및 역할_Wh apm
웹 서버의 기능 및 역할_Wh apm
엑셈
 
Hotspot JVM GC_Wh apm
Hotspot JVM GC_Wh apmHotspot JVM GC_Wh apm
Hotspot JVM GC_Wh apm
엑셈
 

Viewers also liked (20)

TP-Monitor_Wh apm
TP-Monitor_Wh apmTP-Monitor_Wh apm
TP-Monitor_Wh apm
 
Commit Wait Class 대기시간 감소 방안_Wh oracle
Commit Wait Class 대기시간 감소 방안_Wh oracleCommit Wait Class 대기시간 감소 방안_Wh oracle
Commit Wait Class 대기시간 감소 방안_Wh oracle
 
SQL PlAN MANAGEMENT 활용_Wh oracle
SQL PlAN MANAGEMENT 활용_Wh oracleSQL PlAN MANAGEMENT 활용_Wh oracle
SQL PlAN MANAGEMENT 활용_Wh oracle
 
Result Cache 동작원리 및 활용방안_Wh oracle
Result Cache 동작원리 및 활용방안_Wh oracleResult Cache 동작원리 및 활용방안_Wh oracle
Result Cache 동작원리 및 활용방안_Wh oracle
 
TCP 연결 과정_Wh apm
TCP 연결 과정_Wh apmTCP 연결 과정_Wh apm
TCP 연결 과정_Wh apm
 
네트워크 기반 통신 및 계층 구조_Wh apm
네트워크 기반 통신 및 계층 구조_Wh apm네트워크 기반 통신 및 계층 구조_Wh apm
네트워크 기반 통신 및 계층 구조_Wh apm
 
스위치의 분류 및 역할_Wh apm
스위치의 분류 및 역할_Wh apm스위치의 분류 및 역할_Wh apm
스위치의 분류 및 역할_Wh apm
 
SQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracleSQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracle
 
ORACLE EXADATA HCC 압축방식 이해하기_Wh oracle
ORACLE EXADATA HCC 압축방식 이해하기_Wh oracleORACLE EXADATA HCC 압축방식 이해하기_Wh oracle
ORACLE EXADATA HCC 압축방식 이해하기_Wh oracle
 
NLJ BATCH와 부분범위 처리_Wh oracle
NLJ BATCH와 부분범위 처리_Wh oracleNLJ BATCH와 부분범위 처리_Wh oracle
NLJ BATCH와 부분범위 처리_Wh oracle
 
JVM Synchronization_Wh apm
JVM Synchronization_Wh apmJVM Synchronization_Wh apm
JVM Synchronization_Wh apm
 
Runtime Data Areas_Wh apm
Runtime Data Areas_Wh apmRuntime Data Areas_Wh apm
Runtime Data Areas_Wh apm
 
All about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apmAll about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apm
 
IBM JVM GC_Wh apm
IBM JVM GC_Wh apmIBM JVM GC_Wh apm
IBM JVM GC_Wh apm
 
WINDOW FUNCTION의 이해와 활용방법_Wh oracle
WINDOW FUNCTION의 이해와 활용방법_Wh oracleWINDOW FUNCTION의 이해와 활용방법_Wh oracle
WINDOW FUNCTION의 이해와 활용방법_Wh oracle
 
Class Loader_Wh apm
Class Loader_Wh apmClass Loader_Wh apm
Class Loader_Wh apm
 
KEEP BUFFER 활용 방안_Wh oracle
KEEP BUFFER 활용 방안_Wh oracleKEEP BUFFER 활용 방안_Wh oracle
KEEP BUFFER 활용 방안_Wh oracle
 
SQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracle
SQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracleSQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracle
SQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracle
 
웹 서버의 기능 및 역할_Wh apm
웹 서버의 기능 및 역할_Wh apm웹 서버의 기능 및 역할_Wh apm
웹 서버의 기능 및 역할_Wh apm
 
Hotspot JVM GC_Wh apm
Hotspot JVM GC_Wh apmHotspot JVM GC_Wh apm
Hotspot JVM GC_Wh apm
 

Similar to SPA(SQL Performance Analyze)를 이용한 통계 정보 수집_Wh oracle

배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
엑셈
 
제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancementsbeamofhope
 
1.3 dbms stats 패키지사용하기
1.3 dbms stats 패키지사용하기1.3 dbms stats 패키지사용하기
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Database 튜닝 교육 110124
Database 튜닝 교육 110124Database 튜닝 교육 110124
Database 튜닝 교육 110124
한 경만
 
3.2 실행계획 sql 연산 (concatenation)
3.2 실행계획 sql 연산 (concatenation)3.2 실행계획 sql 연산 (concatenation)
3.2 실행계획 sql 연산 (concatenation)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
생체 광학 데이터 분석 AI 경진대회 1위 수상작
생체 광학 데이터 분석 AI 경진대회 1위 수상작생체 광학 데이터 분석 AI 경진대회 1위 수상작
생체 광학 데이터 분석 AI 경진대회 1위 수상작
DACON AI 데이콘
 
1.7 튜닝의도구 sql autorace
1.7 튜닝의도구 sql autorace1.7 튜닝의도구 sql autorace
[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL Tuning[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL Tuning
PgDay.Seoul
 
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
Seok-joon Yun
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQL
JAEGEUN YU
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQL
I Goo Lee
 
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
Seok-joon Yun
 
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4Seok-joon Yun
 
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
Seok-joon Yun
 
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
대량의 DML 작업에 대한 성능개선방안_Wh oracle
대량의 DML 작업에 대한 성능개선방안_Wh oracle대량의 DML 작업에 대한 성능개선방안_Wh oracle
대량의 DML 작업에 대한 성능개선방안_Wh oracle
엑셈
 
1.8 튜닝의도구 dbms xplan
1.8 튜닝의도구 dbms xplan1.8 튜닝의도구 dbms xplan

Similar to SPA(SQL Performance Analyze)를 이용한 통계 정보 수집_Wh oracle (20)

배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
 
제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements
 
1.3 dbms stats 패키지사용하기
1.3 dbms stats 패키지사용하기1.3 dbms stats 패키지사용하기
1.3 dbms stats 패키지사용하기
 
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
 
Database 튜닝 교육 110124
Database 튜닝 교육 110124Database 튜닝 교육 110124
Database 튜닝 교육 110124
 
3.2 실행계획 sql 연산 (concatenation)
3.2 실행계획 sql 연산 (concatenation)3.2 실행계획 sql 연산 (concatenation)
3.2 실행계획 sql 연산 (concatenation)
 
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
 
생체 광학 데이터 분석 AI 경진대회 1위 수상작
생체 광학 데이터 분석 AI 경진대회 1위 수상작생체 광학 데이터 분석 AI 경진대회 1위 수상작
생체 광학 데이터 분석 AI 경진대회 1위 수상작
 
1.7 튜닝의도구 sql autorace
1.7 튜닝의도구 sql autorace1.7 튜닝의도구 sql autorace
1.7 튜닝의도구 sql autorace
 
[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL Tuning[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL Tuning
 
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQL
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQL
 
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
 
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
 
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
 
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
대량의 DML 작업에 대한 성능개선방안_Wh oracle
대량의 DML 작업에 대한 성능개선방안_Wh oracle대량의 DML 작업에 대한 성능개선방안_Wh oracle
대량의 DML 작업에 대한 성능개선방안_Wh oracle
 
1.8 튜닝의도구 dbms xplan
1.8 튜닝의도구 dbms xplan1.8 튜닝의도구 dbms xplan
1.8 튜닝의도구 dbms xplan
 

More from 엑셈

WAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apmWAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apm
엑셈
 
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracleTABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
엑셈
 
SSD 개념 및 활용_Wh oracle
SSD 개념 및 활용_Wh oracleSSD 개념 및 활용_Wh oracle
SSD 개념 및 활용_Wh oracle
엑셈
 
BlOOM FILTER의 이해와 활용방법_Wh oracle
BlOOM FILTER의 이해와 활용방법_Wh oracleBlOOM FILTER의 이해와 활용방법_Wh oracle
BlOOM FILTER의 이해와 활용방법_Wh oracle
엑셈
 
Bind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracle
Bind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracleBind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracle
Bind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracle
엑셈
 
Oracle Query Optimizer 관련 Parameter_OracleParameter
Oracle Query Optimizer 관련 Parameter_OracleParameterOracle Query Optimizer 관련 Parameter_OracleParameter
Oracle Query Optimizer 관련 Parameter_OracleParameter
엑셈
 
System Capa Planning_DBA oracle edu
System Capa Planning_DBA oracle eduSystem Capa Planning_DBA oracle edu
System Capa Planning_DBA oracle edu
엑셈
 
TX락 경험에 의한 시스템 성능 저하 분석 사례_Maxgauge case study
TX락 경험에 의한 시스템 성능 저하 분석 사례_Maxgauge case studyTX락 경험에 의한 시스템 성능 저하 분석 사례_Maxgauge case study
TX락 경험에 의한 시스템 성능 저하 분석 사례_Maxgauge case study
엑셈
 

More from 엑셈 (8)

WAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apmWAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apm
 
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracleTABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
 
SSD 개념 및 활용_Wh oracle
SSD 개념 및 활용_Wh oracleSSD 개념 및 활용_Wh oracle
SSD 개념 및 활용_Wh oracle
 
BlOOM FILTER의 이해와 활용방법_Wh oracle
BlOOM FILTER의 이해와 활용방법_Wh oracleBlOOM FILTER의 이해와 활용방법_Wh oracle
BlOOM FILTER의 이해와 활용방법_Wh oracle
 
Bind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracle
Bind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracleBind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracle
Bind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracle
 
Oracle Query Optimizer 관련 Parameter_OracleParameter
Oracle Query Optimizer 관련 Parameter_OracleParameterOracle Query Optimizer 관련 Parameter_OracleParameter
Oracle Query Optimizer 관련 Parameter_OracleParameter
 
System Capa Planning_DBA oracle edu
System Capa Planning_DBA oracle eduSystem Capa Planning_DBA oracle edu
System Capa Planning_DBA oracle edu
 
TX락 경험에 의한 시스템 성능 저하 분석 사례_Maxgauge case study
TX락 경험에 의한 시스템 성능 저하 분석 사례_Maxgauge case studyTX락 경험에 의한 시스템 성능 저하 분석 사례_Maxgauge case study
TX락 경험에 의한 시스템 성능 저하 분석 사례_Maxgauge case study
 

SPA(SQL Performance Analyze)를 이용한 통계 정보 수집_Wh oracle

  • 1. 112│2013 기술백서 White Paper SPA(SQL Performance Analyze)를 이용한 통계 정보 수집 ㈜엑셈 컨설팅본부/DB컨설팅팀 오 경렬 1. SPA란? SPA(SQL Performance Analyze)는 RAT(Real Application Testing)서비스의 옵션 중에 하나 이다. 본 문서는 SPA 를 이용해 좀더 안정적으로 통계정보를 생성하는 Process 에 대해 다룬다. 2. 통계 정보와 SQL Tuning 튜닝은 LEADING(A) USE_NL(B) INDEX(A A(COL1))처럼 간단한 힌트로 대부분 해결 가능하 다. 이것이 가능한 이유는 Leading 과 같은 힌트로 쿼리의 키 조건이 무엇인지 지정해주면 나머 지 플랜은 Oracle Optimizer 가 Query Transformation 등 최적화 알고리즘을 적용해 최적의 성능을 낼 수 있도록 플랜을 작성하기 때문이다. 튜너 A 가 사이트에 튜닝 지원을 간다. 사이트에 도착한 A 는 가지고 있던 스크립트로 능숙하게 Tuning 대상을 발췌한다. 수집 기준은 Execution 이 1000 번 이상이면서 Buffer Gets 이 10000 Block 이상인 쿼리 무려 200 개의 쿼리가 추출되었다... A 군은 순간 당황했지만 빠르게 안정을 되찾고 입고 있던 와이셔츠의 소매 단추를 풀고 두번 접어올리고 나서는 차고 있던 시계를 풀어 책상 위 에 올려 놓는다. 시간은 9 시 30 분을 지나고 있다. "흠.. 오늘 몇 개나 할 수 있을까...." A 군은 알듯 말듯한 미소를 지어 보이고는 중지 손가락으로 안경을 한번 치켜 올리고 이내 불꽃 튜닝에 들어간다
  • 2. Part 1 ORACLE │113 그리고.. 엑셀에 하나 둘 완료된 쿼리가 늘어날 때 마다... 희열을 느낀다.... 이 글을 보는 당신은 어떻게 할 것인가? A 군의 판단이 잘못된 것인가? 잘못된 판단이 아니다 최선의 판단이다..... 11g 전 까지는.... 11g New Feature 인 Pending Statistics 를 SPA 와 함께 사용한다면 A 군의 200 개의 튜닝 대상 쿼리는 10 개 내외로 줄어 들 수도 있다. 오라클 Optimizer 는 생각보다 똑똑하다. 3. SPA 사용 가능 여부 확인 RAT Option 이 FALSE 면 사용할 수 없다. SELECT * FROM V$OPTION WHERE PARAMETER = 'Real Application Testing' PARAMETER VALUE -------------------------------------- -------- Real Application Testing TRUE 4. 사용 예 간단한 사례를 다룬다. 본인의 것으로 흡수하고 수정해서 실무에 적용하길 바란다. 시나리오 요약 0. 테스트 스키마 생성 및 쿼리 수행 1. SQL_SET 생성 2. ANALYSIS_TASK #1 생성 3. SCHEMA or TABLE Pending Statistcs 설정 4. 통계 정보 수집 5. Session Use Pending Statistics 설정
  • 3. 114│2013 기술백서 White Paper 6. ANALYSIS_TASK #2 생성 7. ANALYSIS_TASK #1, #2 비교 8. 리포팅 9. 비교 결과 조회 스크립트 0. 테스트 스키마 생성 및 쿼리 수행 DROP TABLE EXEM_T1 PURGE; CREATE TABLE EXEM_T1 AS SELECT LEVEL C1, 'A' C2 FROM DUAL CONNECT BY LEVEL <= 100000; INSERT INTO EXEM_T1 VALUES(1, 'B'); CREATE INDEX I1_EXEM_T1 ON EXEM_T1(C2) TABLESPACE TSD_QM; EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME =>'MAXGAUGE' , TABNAME =>'EXEM_T1' , NO_INVALIDATE =>FALSE , METHOD_OPT =>'FOR ALL COLUMNS SIZE 3' , ESTIMATE_PERCENT =>10); -- SQL 수행 (A, B 두 가지가 있고 분포가 좋지 않음 -> FTS) SELECT COUNT(C1) FROM EXEM_T1 WHERE C2 = :B1; --COUNT(C1) --100000 1. SQL_SET 생성 SELECT ID,
  • 4. Part 1 ORACLE │115 NAME, OWNER, DESCRIPTION, CREATED, LAST_MODIFIED, STATEMENT_COUNT FROM DBA_SQLSET where name = 'OKR_TEST'; --ID NAME OWNER DESCRIPTION CREATED LAST_MODIFIED STATEMENT_COUNT --24 OKR_TEST MAXGAUGE 2013-06-27 오후 1:37:31 2013-06-27 오후 1:37:43 4 -- SQLSET 과 ANALYSIS_TASK 연결 고리 확인 SELECT DESCRIPTION FROM DBA_SQLSET_REFERENCES WHERE SQLSET_NAME = 'OKR_TEST'; --DESCRIPTION --created by: SQL Performance Analyzer - task: OKR_SPA SELECT TASK_NAME, EXECUTION_NAME, EXECUTION_TYPE, STATUS, EXECUTION_END FROM USER_ADVISOR_EXECUTIONS WHERE TASK_NAME = 'OKR_SPA'; --TASK_NAME EXECUTION_NAME EXECUTION_TYPE STATUS EXECUTION_END --OKR_SPA OKR_AFTER TEST EXECUTE COMPLETED 2013-06-27 오후 1:48:07 --OKR_SPA OKR_BEFORE TEST EXECUTE COMPLETED 2013-06-27 오후 1:42:52 --OKR_SPA OKR_COMP COMPARE PERFORMANCE COMPLETED 2013-06-27 오후 1:48:34 -- TASK 가 존재할 경우 SET 삭제 전에 TASK 먼저 삭제해야 그 다음 SET 삭제가 가능하다. -- ANALYSIS_TASK DROP EXEC DBMS_SQLPA.DROP_ANALYSIS_TASK('OKR_SPA'); -- TUNING SET DROP EXEC DBMS_SQLTUNE.DROP_SQLSET('OKR_TEST');
  • 5. 116│2013 기술백서 White Paper 2. ANALYSIS_TASK #1 생성 ANALYSIS_TASK 는 4 가지 방법으로 생성 가능하다. (1) Sql text format EXEC :stmt_task := DBMS_SQLPA.CREATE_ANALYSIS_TASK( sql_text => 'select quantity_sold from sales s, times t where s.time_id = t.time_id and s.time_id = TO_DATE(''24-NOV-00'')'); (2) Sql id format (cursor cache) EXEC :stmt_task := DBMS_SQLPA.CREATE_ANALYSIS_TASK(sql_id => 'ay1m3ssvtrh24'); (3) Workload repository format exec :stmt_task := DBMS_SQLPA.CREATE_ANALYSIS_TASK( begin_snap => 1, end_snap => 2, sql_id => 'ay1m3ssvtrh24'); (4) Sql tuning set format (first we need to load an STS, then analyze it) EXEC :sts_task := DBMS_SQLPA.CREATE_ANALYSIS_TASK( --- sqlset_name => 'my_workload', --- order_by => 'BUFFER_GETS', --- description => 'process workload ordered by buffer gets'); --아래는 Sql tuning set format 사용한 예제이다. --SQLSET 생성 EXEC DBMS_SQLTUNE.CREATE_SQLSET('OKR_TEST'); --내용을 채워넣는다 --COMMAND TYPE --2 --> insert --3 --> select (for update) --6 --> update
  • 6. Part 1 ORACLE │117 --7 --> delete --189 --> merge DECLARE cur DBMS_SQLTUNE.SQLSET_CURSOR; BEGIN OPEN cur FOR SELECT VALUE(P) FROM table( DBMS_SQLTUNE.SELECT_CURSOR_CACHE( 'parsing_schema_name in (''MAXGAUGE'') and upper(sql_text) like ''%EXEM_T1%'' AND command_type IN (2,3,6,7,189)', NULL, NULL, NULL, NULL, 1, NULL, 'ALL')) P; DBMS_SQLTUNE.LOAD_SQLSET(sqlset_name => 'OKR_TEST' ,populate_cursor => cur); END; ----update and delete SQL statements from an STS based on a search condition --BEGIN -- DBMS_SQLTUNE.DELETE_SQLSET( -- sqlset_name => 'my_sql_tuning_set', -- basic_filter => 'executions < 50'); --END; --/ -- -- Task 생성 확인 select count(1) from DBA_SQLSET_STATEMENTS where sqlset_name = 'OKR_TEST' --count(1) --4 -- 생성 DECLARE TNAME VARCHAR2(30); BEGIN TNAME := DBMS_SQLPA.CREATE_ANALYSIS_TASK( SQLSET_NAME => 'OKR_TEST' , BASIC_FILTER => NULL , ORDER_BY => 'EXECUTIONS' , TOP_SQL => 100
  • 7. 118│2013 기술백서 White Paper , TASK_NAME => 'OKR_SPA' , DESCRIPTION => NULL , SQLSET_OWNER => NULL ); END; -- EXECUTE_ANALYSIS_TASK -- 가장 빠른 방법은 execution_type => 'CONVERT SQLSET' -- ANALYSIS_TASK 생성 begin DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( task_name => 'OKR_SPA', execution_type => 'EXECUTE', execution_name => 'OKR_BEFORE'); end; -- 생성 결과 조회 select execution_name ,status ,execution_end ,execution_end from USER_ADVISOR_EXECUTIONS where task_name = 'OKR_SPA'; --EXECUTION_NAME STATUS EXECUTION_END --OKR_BEFORE COMPLETED 2013-07-02 오후 3:04:03 3. SCHEMA or TABLE Pending Statistcs 설정 -- 조회 결과가 TRUE 이면 Pending 이 걸려있지 않은 상태다 SELECT DBMS_STATS.GET_PREFS('PUBLISH', 'maxgauge', 'EXeM_T1') PUBLISH FROM DUAL; --PUBLISH --TRUE -- FALSE 로 변경 -> 운영간에 통계정보 생성에 의한 플랜 변경을 막기위한 조치 Exec dbms_stats.set_schema_prefs('maxgauge', pname => 'PUBLISH', pvalue => 'FALSE');
  • 8. Part 1 ORACLE │119 4. 통계정보 수집 -- 거의 대부분의 데이터를 지우고 Histogram 도 생성하기 때문에 인덱스를 이용함 delete exem_t1 where c2 = 'A' -- 통계정보 재생성 exec dbms_stats.gather_table_stats(ownname =>'MAXGAUGE' , tabname =>'EXEM_T1' , no_invalidate =>FALSE , method_opt =>'for all columns size 3' , estimate_percent=>10); -- Pending 통계 조회 SELECT * FROM DBA_TAB_PENDING_STATS WHERE TABLE_NAME = 'EXEM_T1' -- 하지만 통계를 Pending 했으므로 여전히 FTS 플랜 select count(c1) from exem_t1 where c2 = :b1; --Pending 상태에서 수집한 최신 통계정보를 이용해서 SPA 수행 5. Session Use Pending Statistics 설정 alter session set optimizer_use_pending_statistics = TRUE; -- 하지만 통계를 Pending 했으므로 여전히 FTS 플랜 select count(c1) from exem_t1 where c2 = :b1; 6. ANALYSIS_TASK #2 생성 -- OKR_AFTER 이름으로 TASK 를 만든다. begin DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(
  • 9. 120│2013 기술백서 White Paper task_name => 'OKR_SPA', execution_type => 'EXECUTE', execution_name => 'OKR_AFTER'); 새 섹션 2 페이지 5 execution_name => 'OKR_AFTER'); end; 7. ANALYSIS_TASK #1, #2 비교 begin DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( task_name => 'OKR_SPA', execution_type => 'COMPARE PERFORMANCE', execution_name => 'OKR_COMP', execution_params => dbms_advisor.arglist( 'execution_name1', 'OKR_BEFORE', 'execution_name2', 'OKR_AFTER' ) ); end; 8. 리포팅 set long 100000 longchunksize 100000 linesize 200 head off feedback off echo off spool report.html SELECT dbms_sqlpa.report_analysis_task('OKR_SPA', 'HTML', 'ALL','ALL') FROM dual; spool off --Click here to see the file report.html in html formart ;
  • 10. Part 1 ORACLE │121 9. 비교 결과 조회 스크립트 with TMP as ( select /*+ materialize */
  • 11. 122│2013 기술백서 White Paper b.sql_id ,b.plan_hash_value b_ph ,a.plan_hash_value a_ph ,case when (b.buffer_gets-a.buffer_gets) >= 0 then '개선' when (b.buffer_gets-a.buffer_gets) < 0 then '저하' end "성능" ,b.optimizer_cost b_cost ,a.optimizer_cost a_cost ,b.executions b_exec ,a.executions a_exec ,b.rows_processed b_rows ,a.rows_processed a_rows ,b.elapsed_time B_ET ,a.elapsed_time A_ET ,b.buffer_gets B_BG ,a.buffer_gets A_BG ,b.disk_reads b_dr ,a.disk_reads a_dr ,round(100- (decode(a.buffer_gets,0,1,a.buffer_gets)/decode(b.buffer_gets,0,1,b.buffer_gets))*100, 1) bg_rate ,round(100- (decode(a.elapsed_time,0,1,a.elapsed_time)/decode(b.elapsed_time,0,1,b.elapsed_time))* 100,1) et_rate from dba_advisor_sqlstats b ,dba_advisor_sqlstats a where 1=1 and b.execution_name = :before and a.execution_name = :after and a.sql_id = b.sql_id and a.plan_hash_value <> b.plan_hash_value ) select /*+ leading(a) use_nl(r) */ hash_value hv ,a.* ,parsing_schema_name pars_nm ,sql_profile Pf ,module ,executions R_EXEC
  • 12. Part 1 ORACLE │123 ,round(BUFFER_GETS/decode(executions,0,1,executions),0) R_BG ,round(DISK_READS/decode(executions,0,1,executions),1) R_DR ,round(ROWS_PROCESSED/decode(executions,0,1,executions),0) R_ROWS ,round(ELAPSED_TIME/decode(executions,0,1,executions)/1000000,1) R_ET ,round(CPU_TIME/decode(executions,0,1,executions)/1000000,1) R_CT ,last_active_time last_t ,first_load_time first_t ,sql_fulltext text from tmp a ,v$sqlarea r where a.sql_id = r.sql_id 5. 마치며 본 문서의 내용은 프로그램으로 치면 "Hello World" 이다. 꼭 내용을 숙지하고 스크립트나 엑셀 메크로 등으로 자동화하여 업무에 적용하길 바란다. 이론은 절대 경험을 이기지 못한다.