DBMS_SQLTUNE
DBMS_SQLTUNE 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명합니다.
개요
DBMS_SQLTUNE은 SQL 튜닝 관련 기능을 위한 인터페이스를 제공하는 패키지입니다. SQL 튜닝 관련 기 능의 목록은 다음과 같습니다.
Real-Time SQL Monitoring
SQL Tuning Advisor
SQL Profile
타입
본 절에서는 DBMS_SQLTUNE 패키지에서 제공하는 별도 정의된 타입들을 알파벳 순으로 설명합니다.
SQLPROF_ATTR
outline 힌트를 목록으로 관리하기 위한 타입입니다.
SQLPROF_ATTR 타입의 세부 내용은 다음과 같습니다.
프로토타입
TYPE SQLPROF_ATTR IS VARRAY(2000) OF VARCHAR2(500)프러시저와 함수
본 절에서는 DBMS_SQLTUNE 패키지에서 제공하는 프러시저와 함수를 알파벳 순으로 설명합니다.
ALTER_SQL_PROFILE
생성되어 있는 SQL Profile의 속성을 변경하는 프러시저입니다. 변경 가능한 속성의 목록은 다음과 같으며, 목록 이외의 속성을 변경하기 위해서는 SQL Profile을 삭제한 뒤 재생성해야 합니다.
STATUS : SQL Profile의 활성화 여부. 'ENABLED' 와 'DISABLED' 중 한 가지 값으로만 설정할 수 있다.
NAME : SQL Profile의 이름. 다른 SQL Profile과 중복되지 않아야 합니다.
DESCRIPTION : SQL Profile에 대한 설명. 최대 500 bytes까지 작성할 수 있다.
CATEGORY : SQL Profile의 분류. 'SQL 질의문 + 분류' 의 조합이 다른 SQL Profile과 중복되지 않아야 합니다.
ALTER_SQL_PROFILE 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
name
속성을 변경하고자 하는 SQL Profile의 이름
attribute_name
SQL Profile에서 변경하고자 하는 속성의 이름
value
변경할 SQL Profile 속성의 값
예제
– SQL Profile에 설명 추가
– SQL Profile 이름 변경
– SQL Profile 비활성화
DROP_SQL_PROFILE
생성되어 있는 SQL Profile을 삭제하는 프러시저입니다.
DROP_SQL_PROFILE 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
name
삭제하고자 하는 SQL Profile의 이름
ignore
에러 발생 시 무시 여부
예제
GET_PROFILE_HINTS
TPR에 등록되어 있는 플랜에 대해, 해당 플랜을 생성하기 위한 outline 힌트의 목록을 반환하는 함수입니다. (대상 플랜이 OPTIMIZER_LOG_OUTLINE=Y 상태에서 하드파싱 되었어야 합니다)
GET_PROFILE_HINTS 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
in_sql_id
Outline 힌트를 추출할 플랜의 SQL ID
in_plan_hash_value
Outline 힌트를 추출할 플랜의 Plan hash value
반환값
SQLPROF_ATTR 데이터
대상 플랜으로부터 추출한 outline 힌트의 목록을 반환
예제
GET_PROFILE_HINTS_GV
Physical Plan Cache에 등록되어 있는 플랜에 대해, 해당 플랜을 생성하기 위한 outline 힌트의 목록을 반 환하는 함수입니다. (대상 플랜이 OPTIMIZER_LOG_OUTLINE=Y 상태에서 하드파싱 되었어야 합니다)
GET_PROFILE_HINTS_GV 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
in_sql_id
Outline 힌트를 추출할 플랜의 SQL ID
in_plan_hash_value
Outline 힌트를 추출할 플랜의 Plan hash value
in_child_number
Outline 힌트를 추출할 플랜의 Child number
반환값
SQLPROF_ATTR 데이터
대상 플랜으로부터 추출한 outline 힌트의 목록을 반환
예제
– 플랜으로부터 outline 힌트 추출하여 조회
– 추출한 outline 힌트를 이용하여 SQL Profile 생성
IMPORT_SQL_PROFILE
SQL Profile을 생성하는 프러시저입니다. SQL Profile을 생성한 뒤 대상 SQL 질의를 수행하면 해당 질의에 기재되어 있는 힌트는 무시되고, 대신 SQL Profile에 명시되어 있는 outline 힌트가 적용됩니다.
IMPORT_SQL_PROFILE 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
sql_text
생성할 SQL Profile의 대상 SQL 질의문
profile
생성할 SQL Profile의 대상 SQL 질의에 적용하고자 하는 outline 힌트의 목록
category
생성할 SQL Profile의 분류
name
생성할 SQL Profile의 이름
description
생성할 SQL Profile에 대한 설명
replace
동일한 ‘SQL 질의 + 분류’ 조합의 SQL Profile이 이미 존재하는 경우, 현재 생성하고자 하는 내용으로 대체할지 여부
force_match
생성할 SQL Profile의 적용 범위
TRUE: 대상 SQL 질의와 리터럴만 다른 형태의 질의에 대해서도 SQL Profile을 적용 (CURSOR_SHARING=FORCE에 대응)
FALSE : 대상 SQL 질의와 완벽하게 동일한 형태의 질의에 대해서만 SQL Profile을 적용 (CURSOR_SHARING=EXACT 에 대응)
예제
– 튜닝 플랜으로부터 outline 힌트를 추출하여 SQL Profile 생성
– outline 힌트를 직접 작성하여 SQL Profile 생성
NORMALIZE_SQLTEXT
대상 SQL 질의문으로부터 SIGNATURE를 얻을 때의 질의문 형태를 반환하는 함수입니다.
NORMALIZE_SQLTEXT 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
sql_text
형태를 변환할 SQL 질의문
force_match
1 : 질의문의 리터럴을 바인드 변수로 치환(CURSOR_SHAR ING=FORCE 에 대응)
0 : 질의문의 리터럴을 바인드 변수로 치환하지 않음(CURSOR_SHAR ING=EXACT 에 대응)
반환값
CLOB 데이터
변환된 SQL 질의문을 반환
예제
REPORT_SQL_ACCESS_ADVISOR
대상 플랜의 수행 결과를 기반으로, SQL 질의의 성능 향상에 기여할 수 있는 인덱스 생성을 추천하는 함 수입니다. 추천 결과는 텍스트 형태로 확인할 수 있다.
REPORT_SQL_ACCESS_ADVISOR 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
sql_id
인덱스 추천에 참조할 플랜의 SQL ID
child_number
인덱스 추천에 참조할 플랜의 Child number
반환값
CLOB 데이터
인덱스 추천 결과가 기재되어 있는 문자열을 CLOB 형태로 반환
예제
REPORT_SQL_ADVISOR
대상 플랜의 수행 결과를 기반으로, SQL 질의의 성능 향상에 기여할 수 있는 인덱스 생성 및 통계 수집을 추천하는 함수입니다. 추천 결과는 텍스트 형태로 확인할 수 있다.
REPORT_SQL_ADVISOR 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
sql_id
인덱스 및 통계 수집 추천에 참조할 플랜의 SQL ID
child_number
인덱스 및 통계 수집 추천에 참조할 플랜의 Child number
반환값
CLOB 데이터
인덱스 및 통계 수집 추천 결과가 기재되어 있는 문자열을 CLOB 형태로 반환
예제
REPORT_SQL_MONITOR
특정 SQL 수행에 대해서 실시간 SQL 모니터링 기능에 의해 수집된 성능 관련 정보를 보고서 형태로 돌려 주는 함수입니다. 보고서 형식은 텍스트 형식입니다.
REPORT_SQL_MONITOR 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
sql_id
보고서를 생성할 SQL 수행의 SQL 식별자
여기에 NULL을 명시하면 현재 시스템에서 가장 최근에 모니터링된 SQL 수행에 대한 보고서를 생성
session_id
이 값이 NULL이 아니면 해당 세션에서 수행된 SQL 수행에 한정하여 보고서를 생성할 수 있음
만약 이 파라미터에 NULL이 아닌 값을 명시하고 sql_id 파라미터에 NULL을 명시할 경우, 해당 세션에서 가장 최근에 모니터링된 SQL 수행에 대한 보고서를 생성
session_serial
원하는 특정 세션을 확실히 한정하고 싶을 때 추가적으로 명시할 수 있음
단, session_id 파라미터가 NULL일 경우 이 파라미터는 무시됨
sql_exec_start
sql_id 파라미터를 명시했을 때만 이 파라미터를 사용할 수 있음
모니터링된 SQL 수행 중에서 해당 sql_id를 가진 것 중 sql_exec_start 값이 일치하는 모니터링 정보를 찾아 보고서를 생성
sql_exec_id
sql_id 파라미터를 명시했을 때만 이 파라미터를 사용할 수 있음
모니터링된 SQL 수행 중에서 해당 sql_id를 가진 것 중 sql_exec_id 값이 일치하는 모니터링 정보를 찾아 보고서를 생성
반환값
CLOB 데이터
보고서 형식으로 생성된 문자열을 CLOB 형태로 반환
예제
REPORT_SQL_STAT_ADVISOR
대상 플랜의 수행 결과를 기반으로, SQL 질의의 성능 향상에 기여할 수 있는 통계 수집을 추천하는 함수 입니다. 추천 결과는 텍스트 형태로 확인할 수 있다.
REPORT_SQL_STAT_ADVISOR 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
sql_id
통계 수집 추천에 참조할 플랜의 SQL ID
child_number
통계 수집 추천에 참조할 플랜의 Child number
반환값
CLOB 데이터
통계 수집 추천 결과가 기재되어 있는 문자열을 CLOB 형태로 반환
예제
SQLTEXT_TO_SIGNATURE
SQL 질의문을 SIGNATURE로 변환하여, 그 값을 반환하는 함수입니다.
SIGNATURE는 DBA_SQL_PROFILES에서 SQL 질의문을 식별하는 데 사용됩니다.
SQLTEXT_TO_SIGNATURE 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
sql_text
SIGNATURE로 변환할 SQL 질의문
force_match
1 : 질의문의 리터럴을 바인드 변수로 치환한 뒤 SIGNATURE로 변환 ( CURSOR_SHARING=FORCE 에 대응 )
0 : 질의문의 리터럴을 치환하지 않은 채 SIGNATURE로 변환 ( CURSOR_SHARING=EXACT 에 대응 )
반환값
NUMBER 데이터
SQL 질의문의 signature를 반환
예제
SQL_TUNE_BY_ADJUST_SELECT
대상 플랜의 수행 결과를 기반으로, 인덱스 컬럼에 대한 조건문의 selectivity를 보정하는 프러시저입니다.
조건문의 selectivity 보정을 통해 더욱 성능이 좋은 플랜을 유도할 수 있게 됩니다.
SQL_TUNE_BY_ADJUST_SELECT 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
sql_id
selectivity를 보정할 플랜의 SQL ID
pp_id
selectivity를 보정할 플랜의 Child number
create_outline
selectivity 보정 결과를 outline 힌트로 생성할지 여부
예제
VERIFY_SQL_PROFILE
생성되어 있는 SQL Profile이 유효한지 검사하는 프러시저입니다. VERIFY_SQL_PROFILE 프러시저에서
SQL Profile의 유효성을 검사하는 과정은 다음과 같습니다.
SQL Profile의 대상 SQL 질의문을 하드파싱합니다.
하드파싱을 통해 얻은 플랜으로부터 outline 힌트를 추출한 뒤, SQL Profile의 outline 힌트 목록과 비교 합니다.
플랜의 outline 힌트와 SQL Profile의 outline 힌트 목록이 일치하는 경우, 해당 SQL Profile이 유효한 것 으로 간주합니다.
플랜의 outline 힌트와 SQL Profile의 outline 힌트 목록이 일치하지 않거나, 대상 SQL 질의문을 하드파 싱 할 수 없는 경우, 해당 SQL Profile이 유효하지 않은 것으로 간주합니다.
프로시저 수행이 종료되면 다음의 결과가 출력됩니다. (serveroutput이 켜져 있는 상태여야 합니다)
SQL Profile의 유효성(SUCCESS/FAILURE)
대상 SQL 질의문 정보 (SQL Profile이 유효하지 않은 경우)
SQL Profile과 플랜 간 outline 힌트 비교 (대상 SQL의 하드파싱에는 성공하였으나, SQL Profile이 유효 하지 않은 경우)
대상 SQL 질의문의 Logical Plan 정보 (대상 SQL의 하드파싱에는 성공하였으나, SQL Profile이 유효하 지 않은 경우)
VERIFY_SQL_PROFILE 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
name
검사하고자 하는 SQL Profile의 이름
NULL일 경우 생성되어 있는 모든 SQL Profile을 검사
schema_name
SQL Profile의 대상 SQL 질의문을 하드파싱할 스키마의 이름
NULL일 경우, 대상 질의문을 하드파싱 할 수 있는 스키마 중 userid가 가장 작은 것으 로 하드파싱
예제
– 유효한 SQL Profile 예시
– 유효하지 않은 SQL Profile 예시
Last updated

