database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Tutorials 8763 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 8763
OCP 강좌 - Tuning 기초 (2)
작성자
정재익(advance)
작성일
2001-12-07 23:40
조회수
9,053
첨부파일: SQL-ACCESS-조인분석.pdf (1,067,710bytes)

이 기사에서는 연결 액세스 분석 시간으로 '분석에 앞선 용어정리와 튜닝 영역'에 대한 정보를 얻을 수 있다.

지면 관계상 생략된 자세한 내용은 밑의 첨부된 PDF 파일을 다운로드 하면 얻을 수 있다.

 

제1장 연결 액세스 분석1 (조인)

 

이제 본격적으로 수준높은 RDB 액세스에 대한 비밀을 벗겨보는 순간이다.

RDB를 이용하면서 얻는 기본적인 잇점은 여기저기 테이블에 흩어져 존재하는 정보를 연결키를 통해 하나의 RELATION으로 하여 필요한 연산을 수행하여 처리할 수 있는 능력에 있다. 그러나 수많은 RDB APPLICATION이 진정 RDB의 이러한 강점을 최대한 이용했는지는 미지수다.

 

RDB를 이용하면서 조인에 대한 두려움을 가지면 그것은 더 이상 RDB를 이용할 필요가 없음을 뜻한다. 여러분은 왜 관계형 DATABASE를 이용하여 정보를 조직화,구조화하는가. 우리는 이 기본적인 물음에 대답해야만 한다.

이제 조인의 비밀을 완전히 벗겨보고 그런 두려움에서 해방되자.

 

제1절 용어정리

[b]    . 대상 릴레이션 [/b]
    . 액세스의 대상이 되는 오브젝트를 2차원의 행렬구조을 가진 집합으로 정의하는 
      내용이다. 액세스되는 실제 2차원의 행렬구조의 형태로 데이터 값을 가진 
      집합을 의미한다. 객체지향적인 개념으로 말하면 테이블의 인스턴스를 의미한다. 
      쿼리를 빌어 쉽게 표현하면 ‘FROM’절에 있는 테이블을 의미하는 것으로 
      해석하면 될 것이다.
  
[b]    . 중간 릴레이션 [/b]
    . 대상이 되는 릴레이션을 액세스하여 최종 리턴되기를 원하는 목표릴레이션을 
      도출하기까지의 과정속에서 만들어지는 2차원의 행렬구조의 집합을 의미한다. 
      GROUP BY를 가진 인라인뷰의 경우는 먼저 수행되어 메모리상의 테이블 형태로 
      임시저장되는데, 이러한 SQL 수행중간에 생성되어 사라지는 가상 릴레이션을 
      의미하는 것으로 해석하면 된다.
  
[b]    . 목표 릴레이션 [/b]
    . SQL구사로 인해 보기를 원하는 결과OUTPUT으로 모두 2차원의 행렬구조의 
      집합이다. 실제 SQL을 통해 우리가 보고자 하는 릴레이션을 의미한다.
  
[b]    . DRIVING TABLE(OUTER TABLE) [/b]
    . 주로 NESTED-LOOP조인에서 먼저 액세스 되는 테이블을 의미한다.
  
[b]    . DRIVED TABLE(INNER TABLE) [/b]
    . 주로 NESTED-LOOP조인에서 나중에 액세스 되는 테이블을 의미한다.
  
[b]    . LOOKUP [/b]
    . 조인과정에서 INNER TABLE의 인덱스를 통한 연결을 의미한다. 즉 DRIVING의 
      결과 조인값으로 DRIVED OBJECT의 매칭되는 조인값을 찾는 행위를 표현한다. 
      주로 매칭되는 조인값을 찾기위해 연결인덱스(LOOKUP INDEX)를 쳐다본다는 
      의미로 해석하면 될 것이다.
  
[b]    . LOOKUP INDEX(INNER TABLE 연결 INDEX) [/b]
    . 조인에서 DRIVING의 연결키 값이 결정된 다음 그 값으로 INNER TABLE의 
      연결인덱스를 쳐다보게 되는데, 이때 대상이되는 인덱스를 의미한다.
  
[b]    . UNIQUE LOOKUP [/b]
    . INNER TABLE 연결INDEX가 PK나 UNIQUE 인덱스이고 인덱스 구성 컬럼 
      모두의 값이 연결되어 넘어오는 경우에 발생하는 액세스 행위를 의미한다.
  
[b]    . RANGE LOOKUP [/b]
    . 위의 UNIQUE LOOKUP 의 경우를 제외한 일반적인 일대다 연결의 경우, 
      INNER TABLE 연결INDEX의 RANGE SCAN을 의미한다.
  
[b]    . OBJECT [/b]
    . 액세스가 인덱스나, 테이블만을 의미 할 수도 있고, 인덱스를 통한 테이블의 
      액세스도 동시에 존재하므로 그냥 편하게 모든 경우를 대표할 수 있는 표현으로 
      썼다. 객체지향의 객체를 의미한 것이 아님에 유념하기 바란다.
  
[b]    . ONE PLUS SCAN [/b]
    . RANGE LOOKUP의 경우 발생하는 연결시도 횟수만큼의 LOOKUP INDEX 
      스캔량을 의미한다. UNIQUE LOOKUP이 아닌 경우, 매 연결시도마다 한번 더 
      인덱스를 스캔해야 하므로 발생한다. ONE PLUS SCAN은 곧 연결시도의 횟수를 
      의미하는 것으로 LOOKUP INDEX FILTERING이 존재하는 경우, INNER 
      TABLE의 ROWID 액세스 양과 비교하여 FILTERING양를 계산해 낼 수 있다.
      DRIVING FILTERING이 존재하는 경우는 아주 쉽게 트레이스상의 DRIVING 
      최종 액세스양에서 이 ONE PLUS SCAN을 제함으로써 FILTERING양을 
      계산해 낼 수 있을 것이다. 액세스 량의 정확한 계산을 위해 필요한 아주 
      중요한 개념이다.
  
[b]    . FILTERING [/b]
    . WHERE절의 특정 컬럼에 대한 조건이 해당 오브젝트의 일량에 바로 기여를 
      하지 못하고 다음의 액세스로 연결(조인만을 의미하는 것이 아님)되기 직전에 
      걸러지는 양을 의미한다. 이는 단일액세스(조인이 없는 단일 테이블 액세스)의 
      경우는 인덱스를 통한 액세스의 경우라야 TABLE 액세스를 줄여주는 일량으로 
      존재가치가 있으며, 연결액세스(조인)의 경우는 연결전에 연결시도의 횟수를 
      줄여주는 기여를 하기도 한다. 잘 이용하면 나름대로 큰 역할을 수행할 수 
      있으므로 튜닝의 방법으로 쓰일 수 있다.
  
[b]    . DRIVING OBJECT FILTERING(DRIVING FILTERING) [/b]
    . 조인전 FILTERING의 경우를 정확하게 표현한 경우로 조인전(연결전)에 
      먼저 읽힌 오브젝트에서 최종적으로 걸러진 양을 의미한다. 인덱스만 액세스 
      했던지, 아니면 테이블을 통해 액세스가 이루어 졌던지간에 SQL의 조건에서 
      액세스에 바로 기여를 하지 못하고 다음 연결전에 걸러주는 역할만의 일량이다. 
      트레이스 상에서 보면 LOOKUP을 하기 직전의 일량에서 걸러지는 양을 
      의미한다.
  
[b]    . LOOKUP INDEX FILTERING [/b]
    . DRIVING의 값이 결정되고 실제적으로 INNER TABLE 연결인덱스를 통해 
      연결이 시도된 다음, INNER TABLE 연결인덱스의 구성컬럼중 WHERE 조건에 
      등장하지만 LOOKUP과정에서 LOOKUP INDEX의 일량에 바로 기여를 하지 
      못하고 INNER TABLE로의 ROWID 액세스를 줄요주는 FILTERING역할만을 
      수행한 컬럼의 액세스 량을 의미한다.
  
[b]    . 연결시도횟수 [/b]
    . 실제로 조인(연결)을 시도한 횟수를 의미하며, 이는 DRIVING OBJECT FILTERING이 
      존재하지 않는다면 트레이스상에서 DRIVING의 최종적인 일량과 일치하며, 
      DRIVING OBJECT FILTERING이 존재한다면 이를 제외한 일량과 일치한다.
  
[b]    . 연결성공횟수 [/b]
    . 연결시도횟수중 INNER TABLE의 인덱스를 LOOKUP하여 조인값이 존재하여 
      실제로 연결이 이루어진 횟수를 의미한다.
  
[b]    . 연결실패횟수 [/b]
    . 연결시도횟수중 INNER TABLE의 인덱스를 LOOKUP하였으나 조인값이 
      존재하지 않아서 실제로 연결이 이루어 지지 못한 횟수를 의미한다. 위의 
      세가지 연결과 관련된 정의는 드라이빙에서의 연결을 기준으로 한 정의이므로 
      INNER TABLE이 상세 테이블이어서 일대다 조인이 이루어져 1회연결로 
      여러 레코드가 선택되더라도 그것은 1회를 의미함을 기억하기 바란다.
  
[b]    . 순수스캔량 [/b]
    . RANGE LOOKUP의 경우 발생하는 ONE PLUS SCAN을 제외한 
      LOOKUP INDEX의 스캔량을 의미한다. LOOKUP INDEX FILTERING이 
      존재하지 않는다면 이것만큼 테이블로의 ROWID 액세스가 이루어 진다. 
      특히 이것은 연결성공에 대한 순수스캔량임에 유념하기 바란다.
  
[b]    . 연결성공의LOOKUP RANGE 조합 [/b]
    . RANGE LOOKUP에서 연결성공횟수의 각회마다 조회된 LOOKUP INDEX의 
      순수스캔량(ONE PLUS SCAN 제외)의 조합 

 

우리가 SQL 튜닝을 위해 관심을 가지고 추적해야 하는 내용은 다음과 같다.

 

1. DRIVING FILTERING

2. LOOKUP INDEX FILTERING

3. JOIN TRY COUNT

4. JOIN SUCESS COUNT

5. JOIN FAILURE COUNT

6. 연결성공 각각의 LOOKUP SCAN량

 

트레이스상에서 LOOKUP 인덱스의 일량에 2와 5가 혼재되어 존재가 가능하므로 추적이 어렵다는 오해가 있을 수 있는데, 이는 잘못된 생각이다.

연결의 실패는 연결시도횟수에 해당하는 PLUS ONE SCAN을 제외하면, 제외하는 숫자 속에 이미 연결실패 횟수도 필터링되어 버리는 경우이다.

이는 매우 중요한 개념이다. 이것은 DRIVING의 필터링 양만 파악하면 4와 5 그리고 6(4의 조합)을 제외하고는 모든 액세스를 파악할 수 있다는 것을 의미한다. 그리고 어떤 상황에서도 UNIQUE LOOKUP(NO LOOKUP FILTERING 이 당연보장) 만은 모든 값을 추적할 수 있음을 명심하기 바란다.

 

4,5,6의 파악이 어려운 RANGE LOOKUP의 경우, 튜닝의 관점에서 4,5,6의 추가 파악이 중요하지 않는 경우가 많고, 정 필요할 것 같으면 SQL을 적절하게 구사하여 오브젝트의 속을 파악할 줄 아는 능력을 갖추면 가능하다.

그 능력은 결국 해당 SQL에 대한 트레이스에 대한 분석능력이 갖추어지면 어렵지 않게 확인할 수 있는 것이므로 독자 여러분은 본장에서 언급되는 저자의 SQL 트레이스 분석방법을 숙지하기 바란다.

 

첨부된 문서에는 다음과 같은 정보가 담겨져 있다. - 연결 액세스 조인 분석.PDF

 

제1절 용어정리

제2절 UNIQUE LOOKUP과 RANGE LOOKUP

1 연결UNIQUE INDEX의 UNIQUE LOOKUP

2 연결UNIQUE INDEX의 RANGE LOOKUP

3 연결NON-UNIQUE INDEX의 RANGE LOOKUP

제3절 연결시도, 연결실패, 연결성공, 연결성공 각각의 LOOKUP량 조합

1 UNIQUE LOOKUP의 예

2 RANGE LOOKUP의 예

제4절 DRIVING FILTERING & LOOKUP INDEX FILTERING

1 NO LOOKUP FILTERING,NO DRIVING FILTERING - 4,5를 알 수 없다

2 NO LOOKUP FILTERING,A FEW DRIVING FILTERING - 4,5를 알 수없다

3 A FEW LOOKUP FILTERING,NO DRIVING FILTERING - 4,5를 알 수 없다

4 A FEW LOOKUP FILTERING,A FEW DRIVING FILTERING 확인 쿼리 필요

[Top]
No.
제목
작성자
작성일
조회
8767SQL*Loader 사용법
정재익
2001-12-08
10709
8765OCP 강좌 - Performance and Tuning (1)
정재익
2001-12-07
12741
8764OCP 강좌 - Tuning 기초 (3)
정재익
2001-12-07
7649
8763OCP 강좌 - Tuning 기초 (2)
정재익
2001-12-07
9053
8762OCP 강좌 - Tuning 기초 (1)
정재익
2001-12-07
10459
8761OCP 강좌 - Backup and Recovery (2)
정재익
2001-12-07
9432
8760OCP 강좌 - Backup and Recovery (1)
정재익
2001-12-07
9590
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2021 DSN, All rights reserved.
작업시간: 0.030초, 이곳 서비스는
	PostgreSQL v13.3으로 자료를 관리합니다