DBMS 2

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

성능 분석 툴 (SQL 모니터링)

DBMS 2
DB2 가이드
DB2 성능가이드
성능 분석 툴(SQL 모니터링)
작성자
admin
작성일
2021-02-19 15:06
조회
2592

성능 분석 툴 (SQL 모니터링)

쿼리가 어떻게 DB2에 의해 수행되는지를 알기 원한다면, 반드시 액세스 플랜을 분석해야 한다. Explain 기능은 SQL 문장을 해석하기 위해 어떻게 DB2가 데이터를 액세스하는지에 대한 정보를 제공한다. 먼 저 DB2 데이터베이스 엔진에 의해 SQL 문장들이 어떻게 처리되는지를 이해해야 한다. 각 SQL 문장은 DB2에 의해 분석되고, 그리고 나서 정적 바인드 동안이나 동적으로 실행할 때 문장이 처리하는 방법을 결정한다. 테이블에서 데이터를 추출하기 위해 사용되는 방법을 액세스 플랜이라 불리운다.

사용되는 액세스 플랜을 결정하는 DB2내의 구성요소는 옵티마이저라고 한다. SQL 문장의 정적 준비동안, SQL 컴파일러는 액세스 플랜을 생성하기 위해 호출된다. 액세스 플랜은 인덱스 사용, 정렬 방법, 잠금, 조인 방법을 포함하여 데이터 액세스 전략을 포함한다. SQL 문장의 실행가능한 형식은 BIND 명령어가 실행될 때, 시스템 카탈로그 테이블에 저장된다. 이것은 패키지라 불리운다. 색인을 사용할 지와 같이 특정 테이블에서 데이터를 추출하는 방법을 액세스 플랜이라 한다. 액세스 플랜은 액세스 패스들의 집합이다.

때로는 완벽한 문장이 응용프로그램 개발시에 알려지지 않기도 한다. 이러한 경우, 컴파일러는 데이터베이스 관리자가 데이터를 액세스하기 위해 사용될 수 있도록 쿼리에 대한 액세스 플랜을 생성하기 위해 프로그램 실행 동안에 호출된다. 동적 SQL 문장에 대한 액세스 플랜은 시스템 카탈로그에 저장되지 않는다. 임시적으로 메모리(전역 패키지 캐쉬)에 저장된다.


Explain 테이블

DB2는 사용자가 옵티마이저가 만든 결정들을 볼 수 있도록 액세스 플랜 정보를 저장하기 위해 Explain 테이블들을 사용한다. 이들 테이블들은 다음과 같다.


  • EXPLAIN_ARGUMENT - 각 개별적인 연산자(Operator)에 대한 유일한 특성들을 표현한다.
  • EXPLAIN_INSTANCE - 모든 Explain 정보에 대한 주요 제어 테이블. Explain 테이블에서의 데이 터의 각 행은 외부적으로 이 테이블의 유일한 행과 연결되어 있다. SQL 문장들의 소스에 대한 기 본 정보와 환경 정보는 이 테이블에 유지된다.
  • EXPLAIN_OBJECT - SQL 문장을 만족하기 위해 생성된 액세스 플랜에서 필요로 하는 데이터 오 브젝트들을 포함한다.
  • EXPLAIN_OPERATOR - SQL 문장을 만족하는 데 필요한 모든 연산자(Predicate)들을 포함한다.
  • EXPLAIN_PREDICATE -특정 연산자(Operator)에 어느 술어(Predicate)가 적용될지를 식별한다.
  • EXPLAIN_STATEMENT - 두가지 형식으로 SQL 문장의 텍스트를 포함한다. 사용자가 입력한 원 래 버전이 컴파일 과정의 결과인 재작성된 버전과 함께 저장된다.
  • EXPLAIN_STREAM - 이 테이블은 개별적인 연산자들과 데이터 오브젝트들 사이의 입력, 출력 데 이터 스트림을 표현한다. 데이터 오브젝트들 자체는 EXPLAIN_OBJECT 테이블에 표현된다. 데이 터 스트림에 포함된 조작자들은 EXPLAIN_OPERATOR 테이블에 표현된다.

Explain 테이블은 Explain 정보가 수집되기 전에 생성되어야 한다. sqllib 디렉토리의 misc 디렉토리에 위치한 EXPLAIN.DDL이라고 불리우는CLP 입력 파일은 Explain 테이블들의 정의를 포함한다. Explain 테이블들을 생성하기 위해 데이터베이스에 연결하여 다음의 명령어를 수행한다.

db2 -tvf EXPLAIN.DDL

또는 Explain 테이블들은 Visual Explain을 처음 사용할 때 생성된다.


Explain 데이터 수집

다양한 유형의 Explain 데이터가 수집될 수 있다. Explain 데이터 옵션들은 다음과 같다.


  • EXPLAIN - 액세스 플랜의 자세한 정보를 수집하고, Explain 테이블에 정보를 저장하지만, 스냅샷 정보는 저장되지 않는다.
  • EXPLAIN SNAPSHOT - SQL 쿼리와 관련된 정보의 현 내부 표현을 수집한다. 스냅샷 정보는 EXPLAIN_STATEMENT 테이블의 SNAPSHOT 컬럼에 저장된다.

Explain 테이블을 생성한 후, Explain 데이터를 수집한다. 모든 SQL 문장들이 Explain 데이터를 생성하지 않는다. Explain 데이터를 생성할 수 있는 SQL 문장들은 SELECT, SELECT INTO, UPDATE, INSERT, DELETE, VALUES, VALUES INTO이다.

SQL 문장의 갯수와 응용프로그램의 종류에 따라 다른 방법을 사용할 수 있다. 이들 방법들은 다음과 같다.


  • EXPLAIN 문장 - SQL 문장에 대한 Explain 데이터를 수집한다.
  • CURRENT EXPLAIN MODE 특수 레지스터 - 동적 SQL 문장에 대한 Explain 데이터를 수집한다.
  • CURRENT EXPLAIN SNAPSHOT 특수 레지스터 - 동적 SQL 문장에 대한 Explain 스냅샷 데이터 를 수집한다.
  • BIND 옵션 - 패키지내의 정적/동적 Embedded SQL 문장에 대한 Explain 데이터를 수집한다.

1) EXPLAIN 문장

EXPLAIN 문장은 단일 동적 SQL 문장에 대한 Explain 정보를 수집하고자 할 때 유용하다. EXPLAIN 문장은 명령행 처리기, 명령 센터, 응용프로그램 내에서 호출될 수 있다. EXPLAIN 문장이 Explain 테이블들에 저장하는 Explain 정보의 양을 제어할 수 있다. 기본으로는 일반적인 Explain 테이블 정보 뿐만 아니라 스냅샷 정보를 수집하는 것이다. 만약 이 방식을 수정하고자 한다면, 이것은 다음의 EXPLAIN 문장 옵션을 사용한다.


  • WITH SNAPSHOT - Explain 테이블내의 Explain과 Explain 스냅샷 데이터를 수집한다.
  • FOR SNAPSHOT - Explain 스냅샷 정보만을 수집한다.

기본 경우는 다른 Explain 옵션을 지정하지 않을 때 사용된다. 기본 경우는 Explain 데이터만을 수집하고, Explain 스냅샷 데이터는 수집하지 않는다.

EXPLAIN 문장을 발행하기 위해서는, 사용자는 Explain 테이블들에 INSERT 특권을 가져야만 한다. 또한 EXPLAIN 문장을 사용한 SQL 문장은 실행되지 않고, Explain 데이터만을 데이터만을 수집한다. Explain 테이블에 대한 모든 이용가능한 Explain 정보를 수집하는 예는 다음과 같다.

EXPLAIN ALL WITH SNAPSHOT FOR "SELECT * FROM candidate"

그림 2-1. EXPLAIN 문장

그림 2-1. EXPLAIN 문장

그림 2-1. EXPLAIN 문장


그림 2-1. EXPLAIN 문장

2) EXPLAIN 특수 레지스터

Explain 정보를 수집하기 위한 다른 방법은 Explain 특수 레지스터를 사용하는 것이다. DB2는 동적 SQL 문장에 대한 Explain 정보를 수집하기 위해 두가지 특수 레지스터를 사용한다. 이들 레지스터들은 상호작용으로 설정되거나 동적 Embedded SQL 프로그램내에서 사용된다. 특수 레지스터들의 값은 SET 문장을 사용하여 변경한다.

특수 레지스터는 다음과 같다.


  • CURRENT EXPLAIN MODE - Explain 데이터만을 생성하는데 사용된다. 스냅샷은 수행되지 않는다.
  • CURRENT EXPLAIN SNAPSHOT - Explain 스냅샷 데이터만을 수집하는데 사용된다.

다음의 문장들은 Explain 특수 레지스터의 값을 설정하기 위해 사용된다.


  • SET CURRENT EXPLAIN MODE 옵션
  • SET CURRENT EXPLAIN SNAPSHOT 옵션

Explain 레지스터 옵션들은 다음과 같다.


  • NO - 동적 SQL 문장들에 대해 Explain 정보를 수집하지 않는다.
  • YES - Explain 테이블 또는 스냅샷 정보가 SQL 문장을 수행하는 동안 생성되고, 결과를 리턴한다.
  • EXPLAIN - Explain 테이블 또는 스냅샷 정보가 동적 SQL 문장에 대해서 SQL 문장을 수행하지 않고 생성된다. SQL 문장을 수행하지 않고 Explain 정보를 얻기 위해서 이 옵션을 사용한다.

다음의 두가지 옵션들은 CURRENT EXPLAIN MODE 레지스터에만 적용된다. 이에 대한 설명은 마법사를 사용한 색인(Index Advisor)에서 하도록 한다.


  • RECOMMEND INDEXES
  • EVALUATE INDEXES

레지스터 값을 YES 또는 EXPLAIN으로 설정하면, 뒤이은 동적 SQL 문장들은 레지스터가 NO로 재설정될 때까지 Explain 데이터를 수집한다.

3) EXPLAIN BIND 옵션

두가지 Explain BIND 옵션(EXPLAIN과 EXPLSPAP)을 지정할 수 있다. EXPLSNAP 옵션은 Explain 스냅샷 정보를 수집한다. 만약 Visual Explain을 사용하여 액세스 플랜을 조회하고자 한다면, EXPLSNAP 옵션을 사용한다. EXPLAIN 옵션은 스냅샷 없이 Explain 정보만을 생성한다. Explain 스냅샷은 DRDA 응용프로그램 서버에 대해서는 수행될 수 없다.

그림 2-2. BIND 명령어에서 EXPLAIN 또는 EXPLSNAP 옵션 사용


그림 2-2. BIND 명령어에서 EXPLAIN 또는 EXPLSNAP 옵션 사용

BIND program.bnd EXPLSNAP ALL

위의 예에서, Explain 스냅샷 정보는 program.bnd 패키지내에 정의된 모든 정적 SQL 문장들에 대해 생성된다. ALL 옵션이 지정되었으므로, 패키지 실행동안에 발행되는 동적 SQL 문장들도 수행시(Run-time)에 Explain 스냅샷 정보가 함께 수집된다.

바인드 동안 Explain 정보를 수집하는 방법은 관리자가 패키지로부터 실행되는 정적 또는 동적 문장들의 액세스 플랜을 결정하기에는 유용하다. 또한 개별적인 동적 SQL 문장들에 대한 액세스 플랜 데이터를 조사하기 위해서 특수 레지스터 방법을 사용할 수 있다.

4) Explain 데이터를 수집, 분석하기 위한 Explain 보고서 툴 사용

Explain 데이터를 수집하는 또 다른 방법은 Explain 테이블이 아닌 보고서로 저장하는 것을 들 수 있다. 이 방법들은 dynexpln 툴과 db2expln 툴을 사용한다.

db2expln 툴은 시스템 카탈로그 테이블내에 저장된 패키지에서 정적 SQL 문장들에 선택된 액세스 플랜을 설명한다. dynexpln 툴은 동적 SQL 문장들에 대해 선택된 액세스 플랜을 설명한다. 먼저 문장들에 대한 정적 패키지를 생성하고, 그리고 나서 액세스 플랜을 설명하는 db2expln 툴을 사용한다.

두 개의 유틸리티 프로그램의 Explain 출력물은 읽을 수 있는 보고서 파일로 저장된다. Explain 보고서 툴은 액세스 플랜 정보를 수집하기 위한 빠르고 쉬운 방법으로 유용하다.


Explain 데이터 조사

Explain 데이터가 Explain 테이블에 저장되면, Visual Explain 또는 다른 Explain 툴을 사용하여 조회할 수 있다. Visual Explain을 사용하는 방법과 액세스 플랜 데이터를 분석하는 방법에 대해 살펴 보도록 한다.

1) Visual Explain

Visual Explain은 데이터베이스 관리자나 응용프로그램 개발자에게 옵티마이저가 결정하는 액세스 플랜을 조사할 수 있도록 하는 GUI 유틸리티이다. Visual Explain은 스냅샷 옵션을 이용하여 생성한 액세스 플랜만을 사용할 수 있다.

Visual Explain은 이미 생성한 Explain 스냅샷을 분석하거나 Explain 데이터와 Explain 동적 SQL 문장들을 수집하기 위해 사용될 수 있다. 만약 Explain 테이블이 Visual Explain을 시작할 때 생성되어 있지 않다면, 시작시에 생성된다. Visual Explain은 명령 센터 또는 제어 센터에서 호출할 수 있다.

제어 센터 인터페이스에서, Explain 스냅샷이 저장되는 데이터베이스에 오른쪽 클릭을 한다. Explain된 명령문 실행기록 표시라고 불리우는 옵션은 Explain 데이터를 수집하고 동적 SQL 문장의 그래픽 표현을 보여준다. 이것은 단일 SQL 문장을 Explain하기 위한 가장 쉬운 방법이다.

Explain된 명령문 실행기록 표시 창이 열리면, 모든 Explain된 문장들이 표시된다. 전체 비용과 SQL 문장이 보여진다.

그림 3-1. Explain된 명령문 실행기록 창


그림 3-1. Explain된 명령문 실행기록 창

액세스 플랜을 자세히 조사하기 위해서, Explain된 문장에 단순히 더블 클릭하거나 관심있는 항목을 선택한 후, 판넬 메뉴에서 명령문 -> 액세스 플랜 표시를 선택한다. 모든 Expalin 문장들이 Explain된 명령문 실행기록 표시에 보여지나, EXPLAIN SNAPSHOT 정보를 가진 Explain된 문장들만 Visual Explain을 사용하여 조사할 수 있다. Explain 된 명령문 실행기록 표시 창에서 나열된 Explain 스냅샷에 주석을 추가할 수 있다. 쿼리를 설명하는 주석을 추가하기 위해서 쿼리를 선택한 후, 명령문 -> 변경을 선택한다. Explain 스냅샷은 제거하고자 하는 엔트리를 선택한 후, 명령문 -> 제거를 선택하면, Explain 테이블에서 제거될 수 있다.

Visual Explain 출력물은 SQL 문장의 구성요소를 표현하는 계층적인 그래프를 보여준다. 각 쿼리의 부분은 그래픽 오브젝트로써 표현된다. 이들 오브젝트들은 노드라 한다. 노드에는 두가지 기본 유형이 있다.


  • OPERATOR 노드는 데이터의 그룹에서 수행되는 행위를 가리킨다.
  • OPERAND 노드는 Operator 행위가 발생하는 데이터베이스 오브젝트를 보여준다. Operand는 Operator에 따른 오브젝트이다. 이들 데이터베이스 오브젝트들은 대개 테이블과 색인들이다.

최적의 액세스 플랜을 결정하기 위해 DB2 옵티마이저가 사용할 수 있는 Operator는 많은데, Visual Explain에 의해 사용되는 몇몇의 Operator는 다음 그림 3-2와 같다.

그림 3-2. Visual Explain에 보여지는 Operator와 Operand


그림 3-2. Visual Explain에 보여지는 Operator와 Operand

이들 Operator는 데이터가 액세스하는 방법(IXSCAN, TBSCAN, RIDSCN, IXAND), 테이블이 내부적으로 조인하는 방법(MSJOIN, NLJOIN), 정렬이 필요하는지(SORT)와 같은 요소들을 가리킨다.

Visual Explain 그래픽 출력에서 보여지는 오브젝트들은 한 노드에서 다른 노드로 데이터의 흐름을 보이는 화살표에 의해 연결된다. 액세스 플랜의 마지막은 항상 RETURN Operator이다.

그림 3-3의 액세스 플랜은 단순한 SQL 문장이다 : SELECT * FROM DB2ADMIN. EMPLOYEE. 이 예에서? DB2ADMIN.EMPLOYEE 테이블이고, Operator는 테이블 스캔(TBSCAN)과 RETURN Operator를 포함한다.

SQL 문장에 대한 Explain 데이터를 수집하는 것은 DB2 옵티마이저가 결정한 액세스 플랜을 분석하기 위한 단 하나의 방법이다. 액세스 플랜 그래프에서 보여지듯이, 각 노드는 노드에서 더블 클릭을 하거나 노드 메뉴 항목에서 세부사항 표시 옵션을 선택하면, 자세한 정보를 볼 수 있다. 그림 3-3. Visual Explain : SQL 문장에 대한 그래픽 액세스 플랜

그림 3-3. Visual Explain : SQL 문장에 대한 그래픽 액세스 플랜


그림 3-3. Visual Explain : SQL 문장에 대한 그래픽 액세스 플랜

테이블 스캔 운영의 자세한 내용을 보기 위해서, TBSCAN Operator 노드를 선택한 후, 노드 메뉴 항목에서 세부사항 표시를 선택한다. 액세스 플랜에서 TBSCAN 운영에 대한 정보는 다음 그림 3-4와 같다.

그림 3-4. Visual Explain : 연산자(Operator) 세부사항


그림 3-4. Visual Explain : 연산자(Operator) 세부사항

이 창은 몇 개의 다른 섹션을 포함한다.


  • 누적 비용 - 시스템 카탈로그 테이블에 저장된 통계치를 사용하여 계산된 예측된 누적비용
  • 누적 등록 정보 - 쿼리를 만족하는 테이블, 컬럼 등에 대한 정보
  • 입력 인수 - 연산자의 행위에 영향을 미치는 입력 인수에 대한 정보

Operand에 대한 자세한 정보를 조사하는 것도 가능하다. Operand 노드를 선택한 후, 노드 메뉴 항목에서 통계 표시를 선택한다. 그림 3-5는 DB2ADMIN.EMPLOYEE 테이블에 대한 자세한 Operand 내용을 보여준다.


그림 3-5. Visual Explain : Operand에 대한 자세한 통계 정보

Operand 노드에 대한 자세한 정보는 테이블 공간 정보, 오브젝트의 컬럼 갯수, 행의 갯수를 포함한??스템 카탈로그 테이블에서 Explain과 현재의 통계치를 보여준다. 이들 통계치는 DB2 옵티마이저가 액세스 플랜을 결정하기 위해 사용한다. 그림 3-5에서는 DB2ADMIN.EMPLOYEE 테이블에 대해 수집된 통계값이대한 통계치를 가지고 있지 않을 때나 만약 테이블에 대한 통계치가 테이블의 행의 갯수(Cardinality)가 상대적으로 작다고 가리키면, 옵티마이저 자체가 테이블의 행의 갯수(Cardinality)를 계산하고자 한다. 옵티마이저는 테이블의 평균 컬럼 길이와 테이블이 사용하는 페이지수를 포함한 요소를 사용하여 이를 수행한다.

현재의 통계치는 좋은 액세스 플랜에서의 주요한 열쇠가 된다. 만약 DB2가 쿼리에 포함된 오브젝트들의 특성들을 알지 못한다면, 좋은 액세스 플랜을 생성하지 못할 수도 있다. 가장 최근의 통계치를 옵티마이저가 사용하려면, DB2 유틸리티를 사용해야만 한다. 이 유틸리티를 RUNSTATS라고 불리운다. 다음은 DB2ADMIN.EMPLOYEE 테이블에 대한 통계치를 수집하는 예이다.


RUNSTATS ON TABLE DB2ADMIN.EMPLOYEE
WITH DISTRIBUTION AND DETAILED INDEXES ALL

DB2ADMIN.EMPLOYEE 테이블에 대한 통계치는 시스템 카탈로그 테이블에 저장된다. RUNSTATS 유틸리티를 수행한 후, 데이터베이스에 대해 패키지를 리??다. 현재의 통계치에 대한 값이 변경되고, 생성된 액세스 플랜의 전체 비용도 변경된다. 그림 3-6은 갱신한 DB2ADMIN.EMPLOYEE 통계치가 변경되었슴을 보여준다.

그림 3-6. Visual Explain : RUNSTATS 수행후의 테이블 통계


그림 3-6. Visual Explain : RUNSTATS 수행후의 테이블 통계

동적 SQL 문장에 대한 액세스 플랜을 결정할 때, DB2 옵티마이저는 항상 현재의 통계치를 사용한다. 정적 SQL 문장에 대해서는, DB2는 BIND 시에 통계치를 사용한다. 통계치가 갱신되기 전에 컴파일되었던 정적 SQL 문장들에 대해 현재의 통계치를 사용하기 위해서는 패키지는 재생성되어야 한다. 이것은 REBIND 명령어를 사용하여 수행될 수 있다.


Explain을 사용할 때의 지침

Explain 데이터를 분석하는 방법은 다음과 같다.

색인이 사용되는가 ?

적절한 색인을 생성하는 것은 성능상에 현저한 이점을 가져다 준다. 색인의 사용은 조인 술어, 로컬 술어, GROUP BY 절, ORDER BY 절, Select 리스트에서 찾아볼 수 있다. 다 른 색인이 기존의 색인 대신 사용될 수 있는지 또는 색인을 사용하지 않는지를 평가하기 위해 Explain 유틸리티를 사용할 수 있다. 새로운 색인을 생성한 후, RUNSTATS 명령어를 사용하여 해당 색인에 대한 통계치를 수집하고 쿼리를 재컴파일한다. 경우에 따라 색인 스캔 대신 테이블 스캔이 사용될 수도 있다. 이 결과는 테이블 데이터의 클러스터링 변경에서 온다.

만약 이전에 사용된 색인이 낮은 클러스터 비율을 가졌다면,


  • 그 색인에 따라 데이터를 클러스터링하기 위해 테이블을 재구성(Reorg)한다.
  • 카탈로그 통계치를 갱신하기 위해 RUNSTATS 명령어를 사용한다.
  • 쿼리를 재컴파일한다. (바인드 또는 리바인드)
  • 테이블을 재구성한 것이 액세스 플랜에 영향을 미쳤는가를 결정하기 위해 Explain 결과를 재조사 한다.

응용프로그램에 대해 적절한 액세스 유형인가 ?

온라인 트랜잭션 프로세싱(OLTP) 쿼리

온라인 트랜잭션 프로세싱(OLTP) 쿼리
OLTP 응용프로그램은 키 컬럼에 대해 등식(Equality) 술어(Predicate)를 사용하여 한정된 몇 개의 행들만을 리턴하고자 하는 경향이 있기 때문에 Range Delimiting Predicate를 가지고 색인 스캔을 사용한다. 만약 OLTP 쿼리가 테이블 스캔을 사용한다면, 색인 스캔을 사용하지 않는 이유를 찾기 위해 Explain 데이터를 분석한다.

읽기 전용 쿼리

만약 사용자가 출력 데이터중 몇 개의 화면만을 본다면, 전체의 결과 집합이 계산될 필요는 없다. 이 경우, 사용자의 목적은 전체의 쿼리를 위한 자원 소비를 최소화하고자 하는 옵티마이저의 기본 운영 원칙과는 다르다. 예를 들어, Explain 결과에서 머지 스캔 조인과 정렬 연산자가 액세스 플랜에 사용된다면, 전체의 결과 집합은 행들이 응용프로그램에 리턴하기 전에 임시 테이블에 생성된다(Materialize). 이 경우 SELECT 문장에서 OPTIMIZE FOR 절을 사용함으로써 액세스 플랜의 변경을 시도한다. 이러한 방법으로 옵티마이저는 응용프로그램에 첫번째 행들을 리턴하기 전에 임시 테이블에 전체의 결과 집합을 생성하지 않는 액세스 플랜을 선택하고자 한다.


Index Advisor 툴

Index Advisor는 테이블에 색인을 디자인하는 데 도움을 제공하는 관리 툴이다. 이것은 다음의 상황에 유용하다.


  • 문제의 쿼리에 대해 최적의 색인들을 찾고자 할 때
  • 선택적으로 적용하는 자원 한계에 종속된 쿼리의 집합(워크 로드)에 대한 최적의 색인들을 찾고자 할 때
  • 색인을 생성하지 않고 워크 로드에서 색인을 테스트하고자 할 때

이 툴과 관련되어 워크 로드는 DB2가 주어진 시간에 처리해야 하는 SQL 문장들 (SELECT, INSERT, UPDATE, DELETE)의 집합이다. 워크 로드의 정보는 주어진 시간에서의 SQL 문장들의 유형과 빈도수와 관련되어 있다. Index Advisor는 색인을 추천하기 위해서 데이터베이스 정보와 함께 워크 로드 정보를 사용한다. 가상 색인은 현재의 데이터베이스 스키마에 존재하지 않는 색인이다.

Index Advisor 툴은 EXPLAIN 테이블의 확장인 두개의 테이블들을 사용한다.


ADVISE_WORKLOAD

이 테이블은 워크 로드를 설명한다. 테이블내의 각 행은 SQL 문장을 나타내고, 관련된 빈도수에 의해 설명된다. WORKLOAD_NAME이라 불리우는 테이블의 필드에는 각 워크 로드에 대한 식별자가 존재한다. 같은 워크 로드에 속하는 모든 SQL 문장들은 같은 WORKLOAD_NAME을 가져야 한다.


ADVISE_INDEX

이 테이블은 권장하는 색인들에 대한 정보를 저장한다. SQL 컴파일러, 색인 작성 마법사, db2advis 툴(Index Advisor), SQL 문장을 사용하여 매뉴얼 방식으로 정보가 이 테이블에 놓여진다.

CURRENT EXPLAIN MODE 특수 레지스터에 RECOMMEND INDEXES를 설정함으로써, EXPLAIN 함수를 호출할 때, ADVISE_INDEX 테이블이 생성된다.

CURRENT EXPLAIN MODE 특수 레지스터에 EVALUATE INDEXES를 설정하면, EXPLAIN 과정에서는 ADVISE_INDEX 테이블이 입력값으로 사용되어, 가상 색인 정의를 읽고 마치 실제 색인이 있는 것처럼 사용된다.

Index Advisor는 db2advis 유틸리티나 제어 센터에서 마법사를 사용한 색인을 선택함으로써 호출될 수 있다.