제 17 장 (Oracle) 오라클에서 질의 최적화

Slides:



Advertisements
Similar presentations
CUBRID 소개 (Object 개념) 서비스 사업부 / 기술지원팀. 목차 구조 일반적 특징 객체지향 특징 ORDB 개념을 이용한 스키마 ORDB 개념을 이용한 질의.
Advertisements

Set Query for Oracle 이우진, 이상협 숭실대학교 컴퓨터학과 June 2002.
널 (null) 의 처리 널을 검색하는 방법 형식 예 ) takes 테이블에서 아직 학점이 부여되지 않은 학생의 학번을 검색 is null is not null ( 질의 64) select stu_id from takes where grade is null.
SQL 언어 SQL.
SAP Tuning 실무 교육 목 차 1. SAP Architecture 의 이해 2. Monitoring 3. Tuning 방법 결정 (DB or ABAP) 4. Performance Trace (DB) 5. Run Time Analysis (CPU)
SQL Statement Tuning e-Architecture 팀 임성욱.
Nested Queries CSED421: Database Systems Labs.
19.(코드+년도+월)별,(코드)별,전체총액을 한번에
오라클 데이터베이스 성능 튜닝.
Perfect! 대용량 데이터베이스 튜닝Ⅱ.
소리가 작으면 이어폰 사용 권장!.
데이터 모델링 방법론 2003년 03월.
Chapter 02. 데이터 모델링.
질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL
관계 대수와 SQL.
대용량 데이터베이스 솔루션 발표자: 박보영 2007년 5월19일.
오라클 데이터베이스 성능 튜닝.
DataBase 기본 교육 신입사원용 최지철.
SQL Server Migration Assistant For Oracle
Database & Internet Computing Laboratory 한 양 대 학 교
박시우 ( 업무에 바로 쓰는 SQL 튜닝 박시우 (
Chapter 5 SQL: 확장된 질의, 주장, 트리거, 뷰.
제 5 장 인덱스 생성 및 관리.
Execution Plan의 수립 결과 SQL OPTIMIZER SQL해석 실행 계획 실행 수립 참조 참조 추출
4장. 관계 대수와 SQL SQL 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어
SQL-99: 스키마 정의, 기본제약조건, 질의어 충북대학교 구조시스템공학과 시스템공학연구실
You YoungSEok 고급 SQL You YoungSEok
SQL 개요 SQL 개요 - SQL은 현재 DBMS 시장에서 관계 DBMS가 압도적인 우위를 차지하는 데 중요한 요인의 하나
데이터베이스 담당교수 신정식 Chapter 4 SQL(1).
Toad for Oracle 설치 방법.
질의처리 최적화 충북대학교 정보통신공학부 복경수
오라클 데이터베이스 성능 튜닝.
11장. 데이터베이스 서버 구축과 운영.
오라클 데이터베이스 성능 튜닝.
강남/죽전/사당/잠실/성남/야탑/분당
6장. 물리적 데이터베이스 설계 물리적 데이터베이스 설계
4.2 SQL 개요 SQL 개요 SQL은 IBM 연구소에서 1974년에 System R이라는 관계 DBMS 시제품을 연구할 때 관계 대수와 관계 해석을 기반으로, 집단 함수, 그룹화, 갱신 연산 등을 추가하여 개발된 언어 1986년에 ANSI(미국 표준 기구)에서 SQL.
14 뷰(View) 뷰의 개념 뷰 관리.
뷰와 저장 프로시저 뷰의 개념을 이해한다. 뷰의 정의와 관리 방법을 이해한다. 뷰를 사용함으로써 생기는 장점을 알아본다.
SELECT empno, ename, job, sal, dname FROM emp, dept
DP-ORA 쿼리 최적화 가이드 쿼리 최적화 방법 2014년 7월.
SQL.
01 데이터베이스 개론 데이터베이스의 등장 배경 데이터베이스의 발전 과정 데이터베이스의 정의 데이터베이스의 특징
강사: 이종인 다우 교육원 전임강사 / 온디멘드 수석 컨설턴트 / FMG 수석 컨설턴트
SQL Server 7.0 세미나 (Performance Tuning)
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
Chapter 3: Introduction to SQL
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
고급 T-SQL.
CHAPTER 06. 데이터베이스 자료의 조직적 집합체_데이터베이스 시스템의 이해
목차 INDEX 1. 회원가입 및 로그인 2. 업체정보 3. 제조검사 신청 4. 인보이스 5. 검사진행현황(현장검사 신청)
Database 중고차 매매 DB 비즈니스IT 윤동섭.
인터넷응용프로그래밍 과제 실습.
11장. GROUP BY와 HAVING 열의 그룹화 2개 이상의 열에 대한 그룹화
3장. SQL Server 2008전체 운영 실습 및 DB와 프로그램의 연동
SQL Tuning.
조세의 형평성 함의: 조세의 귀착 Chapter 19
문양세 (1st version: 문성우) (revised by 손시운)
MS-SQL7.0 Implementation 강의 노트
4.DECODE 함수를 이용한 IF 처리의 효율화
06. SQL 명지대학교 ICT 융합대학 김정호.
과제 #5 MySQL 연동 php문서에서 SQL문의 삽입, 삭제, 수정, 검색을 수행한다. 주어진 form을 최대한 활용한다.
How I Approach Tuning a SQL Statement
테이블 관리 테이블 생성,수정,삭제 데이터 입력 수정, 삭제 2010학년도 2학기.
뇌를 자극하는 Windows Server 장. 데이터베이스 서버.
차세대 뱅킹시스템 프로젝트의 DBMS 튜닝 이슈 극복 사례
책을 읽읍시다  탈향 진지하게 설명해드림 1303 김소희 1309박지호 1315이지수.
제 5 장 MariaDB인덱스 생성 및 관리.
2016년 제1차 운영위원회 평택시건강가정 ∙다문화가족지원센터
Presentation transcript:

제 17 장 (Oracle) 오라클에서 질의 최적화

오라클 옵티마이저 종류 규칙 기반 옵티마이저 (RBO) 비용 기반 옵티마이저 (CBO) 미리 정해진 일정한 규칙(Rule)에 따라 실행 계획을 생성한다 이 규칙에는 연산자 우선순위, 접근 경로의 우선순위, SQL 문장의 Syntax 규칙에 의한 우선 순위에 따라 여러가지 종류의 규칙이 존재함 Oracle 9i까지만 RBO를 지원하고 10g부터는 더 이상 지원하지 않음 비용 기반 옵티마이저 (CBO) SQL문을 분석하고 처리하는데 소요되는 비용을 기반으로 실행계획을 결정한다. 테이블에 저장되어 있는 데이터에 대한 각종 통계 정보(데이터 양, 인덱스 종류, 컬럼별 크기와 카디날리티등)를 기반으로 실행계획을 세운다 비용에는 데이터 파일에 대한 입/출력 횟수, CPU 사용량, 메모리 사용량, 네트워크 사용량 등이 포함된다

오라클 옵티마이저 구성요소 및 처리 단계 가능한 모든 실행 계획을 생성 각종 통계 정보를 이용한 비용 계산 최소 비용의 실행 계획을 선택

쿼리 변환기 파싱된 쿼리를 더 성능이 좋고 효율적인 쿼리로 변환함 뷰 병합 (View Merging) 쿼리 내에 존재하는 뷰를 기본 테이블로 변환하여 SQL문을 수정

쿼리 변환기 밀어넣기 (Predicate Pushing) 병합이 어려운 뷰를 처리할 때 사용함 서버쿼리 변환 서브쿼리 문장을 조인을 사용한 SQL문으로 변환 OR-Expansion WHERE 절에 OR 연산자가 포함된 여러가지 조건을 UNION ALL을 사용한 문장으로 변환하면 성능이 좋아질 수 있음

에스티메이터(Estimator) 통계 정보를 이용하여, 변환된 쿼리를 수행하기 위한 비용 계산 선택도 (Selectivity) 조건을 만족하는 Row의 비율을 말함. 카디널리티 (Cardinality) 쿼리의 실행 결과로 나오는 구별된(distinct) Row 수 비용 SQL문을 실행하는데 예상되는 CPU, 메모리와 디스크 I/O 횟수를 말함 오라클 10g부터는 비용의 단위 기준이 I/O가 아닌 처리시간(즉, CPU, 메모리와 디스크 접근, 처리하는 시간의 합)으로 바뀌어 좀 더 정확한 비용을 사용

실행계획 생성기 한 SQL 문에 대해 조인 방법이나 접근 경로에 따라 가능한 한 모든 종류의 실행계획을 만들어 냄 에스티메이터에서 계산한 비용을 근거로 가장 니용이 낮은 실행 계획을 채택함

접근 경로와 조인 방법(1) 접근 경로 Full Table Scan ROWID Scan Index Unique Scan Index Range Scan Fast Full Index Scan 쿼리에 필요한 모든 컬럼이 인덱스 컬럼인 경우, 테이블이 아닌 인덱스 자체내 에서 테이블을 Full Scan 방식으로 접근함

접근 경로와 조인 방법(2) 조인 방법 중첩 루프 조인(NLJ) 정렬 병합 조인(SML) 해쉬 조인(HJ)

옵티마이저 추적(실행계획 추적)-1 SQl*Plus에서 실행계획 보는 법

옵티마이저 추적(실행계획 추적)-2 SQl Developer에서 실행계획 보는 법 해당 문장을 선택해서 ‘Execute Explain Plan(F6) 클릭

실행계획의 분석(1) Nested Loop Join을 사용한 실행계획 분석 하위 레벨이 있으면 하위 레벨부터, 같은 레벨이면 위에서부터 아래로 처리됨

실행계획의 분석(2) 두개의 Nested Loop Join을 사용한 실행계획 예

실행계획의 분석(3) Hash Join을 사용한 실행계획 분석

실행계획의 분석(3) Sort Merge Join을 사용한 실행계획 분석

힌트 사용 (1) 힌트절의 형태 /*+ hint */ /*+ hint(argument) */ /*+ hint(argument-1, argument-20 */ 힌트의 종류 옵티마이저의 목표에 따른 힌트 접근 경로에 따른 힌트 쿼리 변환에 따른 힌트 조인 순서에 따른 힌트 조인 방법에 따른 힌트

힌트 사용 (2) 옵티마이저의 목표에 따른 힌트 /*+ ALL_ROWS */ : 질의의 모든 결과를 반환 /*+ FIRST_ROWS(n) */ : 질의의 첫 n개 결과를 반환 /*+ CHOOSE */ : 최적화 방법을 RBO에서 CBO로 변경

힌트 사용 (3) 접근 경로에 따른 힌트 /*+ FULL (table) */ : table을 full scan /*+ CLUSTER (table) */ : table을 cluster scan /*+ HASH (table) */ : table을 hash scan /*+ INDEX (table index) */ : table을 index scan /*+ NO_INDEX (table index) */ : table의 index를 사용하지 않음 /*+ INDEX_ASC (table index) */ : table을 오름차순으로 index scan /*+ INDEX_COMBINE (table index) */ : table의 비트맵 접근 경로 사용 /*+ INDEX_FFS (table index) */ : table을 fast full index scan 사용 /*+ NO_INDEX_FFS (table index) */ : fast full index scan 사용하찌 않음 /*+ INDEX_SS (table index) */ : index skip scan 사용

힌트 사용 (4) 쿼리 변환에 따른 힌트 /*+ NO_QUERY_TRANSFORMATION */ : 쿼리 변환하지 않음 /*+ USE_CONCAT */ : OR 조건을 UNION ALL로 변환 /*+ NO_EXAPAND */ : OR 조건을 UNION ALL로 변환하지 않음 /*+ REWRITE */ : MView에 대해 쿼리를 다시 작성하게 함 /*+ MERGE */ : 쿼리에 사용된 뷰들을 병합 /*+ UNNEST */ : 서브쿼리를 조인 문장으로 변환

힌트 사용 (5) 조인 순서에 따른 힌트 /*+ LEADING(table1, …) */ : 파라메터에 명시된 순서대로 테이블들을 조인 /*+ ORDERED */ : FROM절에 명신된 순서대로 조인을 수행 조인 방법에 따른 힌트 /*+ USE_NL (table) */ : NLJ 사용 /*+ USE_NL_WITH_INDEX (table index) */ : 인덱스 이용한 NLJ 사용 /*+ USE_MERGE (table) */ : SMJ 사용 /*+ USE_HASH (table) */ : 해시 조인 사용

일반적인 SQL 튜닝 기법 바인드 변수를 사용 가급적 WHERE 조건에서 인덱스 컬럼을 모두 사용 상수 값이 바뀌더라도 이전 질의를 동일하게 사용  최적화 실행 단계 줄임 가급적 WHERE 조건에서 인덱스 컬럼을 모두 사용 인덱스 컬럼에 사용하는 연산자는 가급적 동등(=) 을 사용 인덱스 컬럼은 변형을 하여 사용하지 않음 SUBSTR(last_name, 1,1) = ‘오;  last_name like ‘%오’ OR 보다는 AND를 사용 그룹핑 쿼리는 가급적 HAVING 보다는 WHERE절에서 데이터를 필터링 DISTINCT는 가급적 사용하지 않음 IN, NOT IN 대신에 EXISTS와 NOT EXISTS를 사용 SET 연산자 사용시 UNION 대신 UNION ALL을 사용