홈 > 교육 > 도서출판
제목 실행 계획으로 배우는 고성능 데이터베이스 튜닝
작성자 관리자
작성일자 2011-11-21

 

 

 

 

2005년에 출간한 '오라클 실전 튜닝'의 후속 버전으로, SQL 튜닝의 모든 것을 이야기한다. 튜닝은 하기도 어렵지만 배우기도 어려운 분야다. 튜닝의 주된 목적이 장황하고도 쓸데없이 펼쳐져 있어서 소용없는 부분을 줄이거나 아예 없애서 최적화를 해야 하는 것으로 일관되기 때문이다. 이 책은 튜닝의 섬세한 특징을 짚고 넘어가고자, 튜닝 관련 주요 주제로 80가지를 뽑았고, 각 주제를 그룹핑했고, 다시 80가지 주제 하나 하나를 자세히 설명했다.

튜닝의 이론과 실기와 노하우까지 압축해서 세세하게 설명한 이 책은 1장과 2장에서는 SQL 분석에 필요한 기초 지식을 이야기한다. 3장부터 7장까지는 다중 테이블에서 데이터를 효과적으로 추출하기 위한 각종 비기(秘技)를 소개한다. 튜닝에 대한 노하우를 수록하였으며, VLDB에서 이루어질 수 있는 모든 튜닝 기법을 체득할 수 있도록 하였다.

 

 

저자: 권순용

 

현재, 데이터베이스 전문 컨설팅 업체인 (주)엑시엄 정보시스템의 대표이사로 있다. 그 전에 SK C&C에서 DBA, 튜닝, 모델링 업무를 담당하면서 다양한 민간 및 공공 프로젝트에서 핵심적인 역할을 맡아서 진행했다. DBS 컨설팅 동호회(cafe.daum.net/oracity)를 운영하고 있으며, 활발한 저술 활동도 병행해 왔다. 이전에 출간한 책으로는 Inside SQL(2008, Maso Interactive), 초보자를 위한 오라클 10g(2006, 정보문화사), Perfect! 오라클 실전 튜닝(2005, 정보문화사)이 있다. 이외에 마이크로소프트웨어와 경영과 컴퓨터에서 DB 컬럼도 기고하고 있다. 비팬(bpan.com)에서 튜닝 관련 교육도 진행하고 있다.

 

 

Chapter 1. 실행 계획의 분석은 SQL 최적화의 기본이다.

SQL을 작성할 때마다 실행 계획을 분석하자.
테이블 관련 실행 계획은 단순하다.
인덱스 범위 스캔과 유일 스캔의 실행 계획을 이해해라.
인덱스 AND-EQUALS 실행 계획을 이해해라.
인덱스 전체 스캔의 실행 계획을 이해해라.
인덱스 생략 스캔과 인덱스 MIN/MAX 스캔의 실행 계획을 이해해라.
인덱스 조인도 인덱스 스캔이다.
정렬 관련 실행 계획은 성능을 저하시킬 수 있다.
IN 연산자에 의한 실행 계획을 이해하라.
집합 연산자의 실행 계획을 분석하라.
VIEW 실행 계획을 분석하라.
STOPKEY 실행 계획은 우선 순위가 가장 높다.
파티션 실행 계획을 이해하자.
실행 계획에서 REMOTE 실행 계획을 분석하자.
데이터 연결에 대한 실행 계획을 확인하자.
복합 실행 계획을 정확히 해석하자.
힌트로 실행 계획을 제어하자.
힌트는 주의해서 사용해야 한다.
실행 계획을 확인하는 방법은 간단하다.

Chapter 2. 대용량 테이블에서 많은 데이터와 적은 데이터 엑세스하기

인덱스의 사용이 항상 성능 향상을 보장하는가?
어떤 SQL이 인덱스를 이용하면 안 되는가?
랜덤 엑세스의 증가는 성능을 저하시킨다.
단일 블록 I/O는 랜덤 엑세스와 함께 발생한다.
인덱스에 의한 성능 저하를 이해해라.
인덱스에 유연성을 불어 넣어라.
결합 컬럼 인덱스를 구성하는 컬럼의 순서를 반드시 준수해라.
많은 데이터에 엑세스하는 SQL은 테이블 전체 스캔을 이용해라.
대용량 테이블의 전체 스캔의 성능 향상은 병렬 프로세싱에 달려 있다.

Chapter 3. 조인은 필수 불가결하다.

데이터의 연결은 조인이 책임진다.
중첩 루프 조인은 조인의 시작이자 끝이다.
향상된 중첩 루프 조인을 이해하자.
단순 중첩 루프 조인의 성능을 100배 향상시키자.
단순 중첩 루프 조인의 성능을 고려한 테이블 조인 순서를 결정하자.
복잡한 중첩 루프 조인의 성능도 향상시킬 수 있다.
복잡한 중첩 루프 조인 사용 시 SQL 작성에 신중해야 한다.
중첩 루프 조인에서 데이터의 증감을 확인해라.
함수 기반 인덱스로 중첩 루프 조인을 최적화하자.
중첩 루프 조인의 실행 계획을 제어하자.
해쉬 조인은 대용량 데이터의 연결을 해결하기 위한 조인 방법이다.
단순 해쉬 조인의 성능을 100배 향상시키자.
복잡한 해쉬 조인의 성능도 향상시킬 수 있다.
해쉬 조인에서는 병렬 프로세싱을 고려해라.
해쉬 조인의 실행 계획을 제어하자.
소트 머지 조인의 사용을 자제해라.
카테시안 조인을 이해하자.
의도적인 카테시안 조인은 성능을 향상시킨다.
조인 방식의 선택은 프로젝트의 성공을 좌우하는 요소가 된다.
다중 조인 방식을 이용하여 성능을 향상시켜라.
조인의 응답 속도를 향상시키는 요소를 이해해라.

Chapter 4. 인라인 뷰는 반드시 사용된다.

인라인 뷰는 왜 사용하는가?
인라인 뷰는 뷰이다.
인라인 뷰는 사용 방법에 따라 최적화될 수 있다.
인라인 뷰의 SQL은 우리도 모르게 변경된다.
인라인 뷰의 병합에는 법칙이 있다.
병합 불가능 인라인 뷰의 응답 속도를 최적화하자.
병합 가능 인라인 뷰의 응답 속도를 최적화하자.
인라인 뷰를 효과적으로 사용하여 전체 SQL의 성능을 향상시키자.
인라인 뷰에서 인덱스 선정과 랜덤 엑세스를 제거하자.
서브쿼리 팩토링을 이해하자.
서브쿼리 팩토링을 이용하여 SQL을 효율적으로 작성하자.

Chapter 5. 스칼라 서브쿼리도 조인이다.

스칼라 서브쿼리는 대부분 모르고 사용한다.
스칼라 서브쿼리는 조인이다.
스칼라 서브쿼리는 함수다.
스칼라 서브쿼리는 반드시 반복 수행된다.
스칼라 서브쿼리의 사용 및 위치에 따라 100배 빠르게 사용하자.

Chapter 6. 서브쿼리를 효과적으로 사용하자.

서브쿼리는 성능을 악화시키지 않는다.
서브쿼리는 조인이다.
서브쿼리의 성능을 향상시키자.
서브쿼리의 실행 계획을 제어하자.
세미 조인과 필터 조인 등을 이용하여 EXISTS 서브쿼리를 최적화하자.
복합 서브쿼리를 최적화하자.

Chapter 7. 순환 전개를 효과적으로 사용하면 개발은 쉬워진다.

순환 관계란 무엇인가?
순환 관계를 이용하지 않는 경우와 순환 관계를 이용하는 경우를 비교해보자.
순환 전개의 사용 문법을 이해하라.
순환 전개의 실행 계획을 정확히 분석하고 최적화해라.
일반 조인과 순환 전개를 동시에 사용하는 SQL을 최적화하자.
기타 조인과 순환 전개를 동시에 사용하는 SQL을 분석해 보자.
순환 관계를 이용하여 전화번호부를 작성하라.
순환 관계를 이용하여 게시판의 답글을 해결하자.
순환 관계와 SYS_CONNECT_BY_PATH를 같이 이용하자.

 

 

 

이 책은 저자인 권순용 대표가 2005년에 출간한 ‘오라클 실전 튜닝’의 후속 버전이다. 저자가 지난 13년 동안 진행한 프로젝트, 책 쓰기, 잡지 기고, 강의 등과 같은 모든 활동은 오로지 대용량 데이터베이스의 튜닝과만 관련이 있다. 마치 튜닝밖에 할 줄 모르는 사람처럼...

튜닝은 하기도 어렵지만 배우기도 어려운 분야다. 튜닝의 주된 목적이 장황하고도 쓸데없이 펼쳐져 있어서 소용없는 부분을 줄이거나 아예 없애서 최적화를 해야 하는 것으로 일관되기 때문이다. 처음에 만든 사람은 필요해서 만들었는데 그것을 줄이거나 없애야 하는 작업이 그냥 생각해도 쉬운 일은 아닌 것처럼 보인다. 그래서 책을 어떻게 구성해야 할지 기획자 입장에서는 난감한 부분이었다. 초급이면서 SQL 튜닝에 대해 의욕이 있는 독자와 중급이면서 고급 전문가로 올라가야 하는 독자들의 지식에 대한 욕구를 어떻게 충족시켜야 주어야 할지 고민스러웠다.

이 책에는 글이 많다. 그림이 많으면 글을 쓰는 사람은 편하다. 그러나 그림보다는 글이 많다. 그 이유는 그림으로 표현하기에는 튜닝이라는 주제가 너무 섬세하기 때문이다. 건드려야 할 부분이 많기 때문이다. 저자와 출판사는 튜닝의 이러한 특징을 짚고 넘어가야 했다. 그래서 튜닝 관련 주요 주제로 80가지를 뽑았고, 각 주제를 그룹핑했고, 다시 80가지 주제 하나 하나를 자세히 설명했다.

이 책은 실습서가 아니다. 튜닝은 한 번 읽고 따라하면 이해하고 체득할 수 있는 분야가 아니다. 왜냐하면 개념과 알고리즘이 포함되어 있기 때문이다. 하나의 개념이나 알고리즘이 복잡하지는 않다. 다만, 이들 개념과 알고리즘이 다양하게 얽혀 있기 때문에 어렵다. 튜닝 전문가가 되는 방법에 정답은 없다. 이 책을 최소한 두 번 이상 읽어보기를 권장한다. 두 번 읽었으면 네 번 생각하기 바란다. 그리고 그 만큼 연습해 보기 바란다. 튜닝 전문가로 한 발 올라서는 과정 중에 이 책은 든든하고도 자상한 동반자가 될 것이다.

VLDB 튜너나 모델러에게 있어 SQL 최적화에 대한 자신만의 체계를 수립하는 일은 최종 목표이자 계속 가꾸어 나가야 할 대상이기도 하다. 즉, 꿈이면서도 현실 속에서 놓칠 수 없는 보물단지(!)다. 이 책은 SQL 튜닝의 모든 것을 이야기한다. 이론과 실기와 노하우까지 압축해서 세세하게 설명한다. 1장과 2장에서는 SQL 분석에 필요한 기초 지식을 이야기한다. 3장부터 7장까지는 다중 테이블에서 데이터를 효과적으로 추출하기 위한 각종 비기(秘技)를 소개한다. 소개 수준이 아니라 저자의 노하우를 전수한다고 보는 것이 맞을 것이다. 이 책을 통해서 VLDB에서 이루어질 수 있는 모든 튜닝 기법을 체득할 수 있을 것이다.

1장. 실행 계획의 분석은 SQL 최적화의 기본이다.
실행 계획이란 SQL이 수행되는 절차다. SQL의 성능이 실행 계획에 의해 좌우된다고 해도 과언이 아닐 것이다. 그렇다면 실행 계획을 어떻게 분석해야 할 것인가? SQL의 실행 계획을 이해하기 위해서는 데이터베이스에 대해 많은 지식이 있어야 한다. 1장에서는 실행 계획을 이해하고 분석하는 방법에 대해 살펴본다. 실행 계획의 분석이야말로 SQL을 최적화하기 위한 첫 단계라는 점을 명심하기 바란다.

2장. 대용량 테이블에서 많은 데이터와 적은 데이터 엑세스하기
시대가 흐르면서 데이터베이스는 대용량 데이터베이스로 변하게 되었다. 데이터베이스가 대용량으로 변하면서 시스템에도 많은 변화가 일어났다. 그 중 하나가 대용량 테이블의 탄생이다. 대용량 테이블의 탄생은 SQL 최적화에 많은 어려움을 가져다 주었다. 대용량 데이터에서 많은 데이터에 엑세스할 수도 있고 적은 데이터에 엑세스하는 경우도 발생한다. 이러한 경우에 어떻게 데이터에 엑세스해야 하는가? 이 장에서는 대용량 테이블의 데이터에 효율적으로 엑세스하는 방법을 설명한다.

3장. 조인은 필수 불가결하다.
조인을 사용하지 않고는 프로그램을 개발할 수 없는 시대다. 이 말은 무엇을 의미하는가? 조인을 이해하지 않고서는 최적의 성능을 보장하는 프로그램을 개발할 수 없다는 것이다. 프로그램 개발에서 중요한 조인을 그 동안 등한시해왔던 것이 사실이다. 조인의 역할이 단지 테이블을 연결해서 원하는 데이터를 추출하는 것이 전부라고 생각하는 경우가 많다. 조인의 수행 방식이 변화무쌍한 것에 대해 이해하지 못한다면 이와 같이 생각할 수밖에 없다. 이제는 프로그램 개발의 필수 요소인 조인의 최적화에 집중해야 할 것이다. 이 장에서는 조인의 기본 개념과 다양한 예제를 통해 조인을 어떻게 수행해야 하는지 심도 있게 분석한다.

4장. 인라인 뷰는 반드시 사용된다.
프로그램 개발 프로젝트를 수행하다 보면 많은 부분에서 인라인 뷰를 사용한다. 대부분의 경우 데이터에 대해 절차적인 처리를 수행하기 때문에 반복된 인라인 뷰를 사용할 때가 많다. 절차적인 인라인 뷰의 사용은 동일 데이터에 대한 반복 엑세스를 증가시키므로 잘못하면 엄청난 성능 저하를 발생시킨다. 인라인 뷰는 사용하기에 편리하며, 올바르게 사용한다면 성능 향상을 기대할 수 있는 아키텍쳐다. 하지만 인라인 뷰의 내부 아키텍쳐를 이해하지 못하고 사용한다면 반드시 성능 저하에 직면한다. 또한 과도한 인라인 뷰의 사용은 SQL의 해석을 어렵게 만들기 때문에 SQL 최적화도 어렵게 만든다. 이 장에서는 인라인 뷰의 효과적인 사용 방법을 심도 깊게 살펴본다.

5장. 스칼라 서브쿼리도 조인이다.
스칼라 서브쿼리라고 이야기하면 많은 사람들이 생소해한다. 많은 곳에서 스칼라 서브쿼리를 이용하고 있음에도 불구하고 스칼라 서브쿼리라는 용어를 모르는 사람이 많다. 중요한 것은 스칼라 서브쿼리 또한 조인의 하나라는 것이다. 그렇기 때문에 앞서 언급한 조인의 특성을 모두 상속받는다. 스칼라 서브쿼리를 아무런 고려 없이 사용하는 경우도 많다. 하지만 스칼라 서브쿼리는 조인이기 때문에 항상 성능에 주의해야 한다. 이 장에서는 스칼라 서브쿼리의 특징과 실무에서 스칼라 서브쿼리를 어떻게 사용해야 성능을 보장받을 수 있는지를 설명한다.

6장. 서브쿼리를 효과적으로 사용하자.
어떤 프로젝트에서는 성능 저하를 막기 위해 서브쿼리를 사용하지 못하게 하는 경우도 있다. 과연 서브쿼리는 성능을 저하시키므로 사용하면 안 되는 것인가? 이는 서브쿼리를 정확히 이해하지 못하기 때문이 아닐까? 서브쿼리를 사용하지 못한다면 조인이나 스칼라 서브쿼리도 사용해서는 안 될 것이다. 왜냐하면 모든 SQL이 유사한 방식으로 수행되기 때문이다. 이제는 서브쿼리를 효과적으로 사용해야 할 때다. 이 장을 통해 서브쿼리의 정확한 수행 방식을 이해하고 서브쿼리의 최적화 방법을 살펴보자.

7장. 순환 전개를 효과적으로 사용하면 개발은 쉬워진다.
일부 업무에서 순환 전개를 효과적으로 쳀용할 수 있다. 하지만 많은 경우에 순환 전개의 수행 방법을 이해하지 못하기 때문에 성능 정하가 발생하거나 순환 전개를 전혀 몰라 사용을 하지 못하는 경우를 많이 보았다. 순환 전개는 일부 어플리케이션에서 사용이 가능하다. 그렇기 때문에 정확히 이해한다면 프로그램을 개발할 경우 많은 도움을 받을 수 있을 것이다. 이 장에서는 순환 전개에 대해 정확히 이해할 수 있도록 많은 예제를 통해 순환 관계의 비밀을 파헤쳐 본다.

 
서울특별시 강남구 역삼로 112, 6층 (역삼동, 밀브리지홀 빌딩)    전화: 070) 8264-9889  팩스: 02) 6499-9889
Copyright (C) 2011. (주) 엑시엄 정보시스템 All Rights Reserved.