SQL TUNER for PostgreSQL (기본원리편)

SQL TUNER for PostgreSQL (기본원리편)

$39.00
Description
SQL 성능 문제는 ‘요령’이 아니라 ‘원리’ 싸움입니다.
이 책은 당장 써먹을 수 있는 단편적인 팁 모음이 아닙니다. 만약 SQL 성능 문제에 대한 즉각적인 해법만을 찾는다면 이 책은 적합하지 않습니다.
이 책은 SQL 튜닝의 기본 원리를 심도 있게 다룹니다. 원리를 중심에 두고, 그 원리가 실제로 어떻게 작동하는지 예제와 실행계획, 충실한 설명과 그림을 통해 하나씩 검증하듯 정리했습니다. 원리를 정확히 이해하고 경험을 쌓아가면, 실무에서 어떤 형태의 성능 문제를 만나더라도 스스로 원인을 찾고 해법을 도출할 수 있습니다.
또한 이 책에서 다루는 기본 원리는 PostgreSQL에만 국한되지 않습니다. DBMS가 달라져도 성능을 좌우하는 핵심 메커니즘은 본질적으로 유사하므로, 이 책에서 익힌 사고방식과 접근법은 다른 환경에서도 그대로 적용할 수 있습니다
저자

유일환

서경대학교에서컴퓨터공학을전공하고,2001년부터개발자로커리어를시작했다.2005년부터2017년까지는중국삼성전자판매법인에서DA(DataArchitecture)업무를맡아,판매·유통·데이터분석등다양한영역의데이터베이스를설계하고수많은배치프로그램과핵심SQL을개발·튜닝했다.2018년부터는국내여러기업에서다양한DBMS의SQL튜닝과데이터아키텍처관련프로젝트를수행하고있다.이전저서로는〈SQLBOOSTER〉와〈평생필요한데이터분석〉,〈SQLSTARTER〉가있으며대한민국이데이터강국이되기를바라는마음으로,지금도꾸준히기술을전파하고있다

목차

CHAPTER01성능을위한기본지식
1-1.SQL튜닝이란
1-1-1.SQL튜닝사례
1-2.실습환경구성하기
1-2-1.ERD
1-2-2.실습환경구성하기
1-3.SQL튜닝의주요요소
1-3-1.Index
1-3-2.비효율SQL변경
1-3-3.힌트사용
1-3-4.SQL성능에영향을주는기타요소
1-4.SQL처리과정
1-4-1.Parsing
1-4-2.Optimization
1-4-3.Execution
1-4-4.Fetch
1-5.옵티마이저와실행계획
1-5-1.옵티마이저
1-5-2.실행계획
1-5-3.옵티마이저와SQL튜닝
1-5-4.비용기반옵티마이저
1-5-5.옵티마이저가말하길,나도힘들다.
1-6.통계
1-6-1.테이블통계(pg_class)
1-6-2.컬럼통계(pg_stats)
1-6-3.통계는언제만들어지는가?
1-7.I/O
1-7-1.I/O
1-7-2.블록
1-7-3.데이터블록과인덱스블록
1-7-4.메모리vs.디스크
1-7-5.메모리I/Ovs.디스크I/O
1-7-6.SharedBuffer

CHAPTER02실행계획
2-1.실행계획
2-1-1.EXPLAIN
2-1-2.오퍼레이션
2-1-3.실행계획트리
2-1-4.ChildFirst
2-1-5.힌트의기본사용법
2-2.EXPLAIN옵션
2-2-1.EXPLAINANALYZE
2-2-2.추가옵션
2-2-3.BUFFERS
2-2-4.actualtime해석

CHAPTER03인덱스
3-1.인덱스개념잡기
3-1-1.인덱스란?
3-1-2.SeqScan
3-1-3.인덱스로SeqScan비효율개선하기
3-1-4.인덱스개념잡기
3-2.테이블과인덱스구조
3-2-1.테이블구조
3-2-2.인덱스구조
3-2-3.트리구조의데이터탐색
3-2-4.인덱스구조는어떻게만들어지는가?
3-2-5.인덱스의실제크기
3-2-6.인덱스높이와균형
3-3.테이블에서데이터를찾아내는방법
3-3-1.테이블전체를스캔해찾기
3-3-2.인덱스를활용해찾기
3-3-3.레코드의물리적주소를활용해찾기
3-3-4.방법에따른실제I/O검증해보기
3-4.인덱스스캔심화
3-4-1.인덱스시각화
3-4-2.인덱스스캔3단계
3-4-3.인덱스처리조건과테이블처리조건
3-4-4.테이블접근이없는인덱스스캔
3-4-5.테이블접근과성능
3-4-6.어떤인덱스를사용할까?
3-4-7.인덱스분류

CHAPTER04PostgreSQL의인덱스스캔
4-1.IndexScan
4-1-1.동등조건
4-1-2.범위조건
4-1-3.Filter와RowsRemovedbyFilter
4-2.IndexOnlyScan
4-2-1.IndexOnlyScan
4-2-2.IndexOnlyScanvs.IndexScan
4-2-3.IndexOnlyScan의HeapFetches
4-3.BitmapScan
4-3-1.BitmapIndexScan&BitmapHeapScan
4-3-2.BitmapScanvs.IndexScan
4-4.IndexFullScan
4-4-1.IndexFullScan
4-4-2.IndexFullScanvs.IndexOnlyScan

CHAPTER05인덱스와성능
5-1.어느컬럼에인덱스를만들것인가?
5-1-1.ord_st
5-1-2.shop_id
5-1-3.pkup_dtm
5-1-4.어느컬럼에인덱스를만들것인가?
5-2.복합인덱스
5-2-1.단일인덱스vs.복합인덱스
5-2-2.복합인덱스
5-2-3.복합인덱스컬럼순서와리프블록
5-2-4.복합인덱스검색키결정규칙
5-2-5.IndexFilter
5-2-6.복합인덱스의선두조건누락
5-2-7.복합인덱스설계하기
5-3.생각보다까다로운인덱스
5-3-1.검색키와스톱키가없는SQL
5-3-2.주의가필요한날짜컬럼
5-3-3.언제까지인덱스를사용할것인가?
5-3-4.너무많은인덱스의위험성
5-3-5.중복된인덱스
5-3-6.PreparedStatements와GenericPlan
5-3-7.LIKE패턴과인덱스
5-4.특별한인덱스기법
5-4-1.커버링인덱스
5-4-2.부분인덱스
5-4-3.CLUSTER
5-4-4.BitmapScan의효율성
5-4-5.Function-basedindex
5-4-6.BitmapAnd
5-4-7.IndexSkipScan

CHAPTER06정렬과집계
6-1.정렬부하
6-1-1.externalmerge
6-1-2.workmem과quicksort
6-2.정렬과인덱스
6-2-1.NoSort
6-2-2.BackwardScan
6-2-3.LIMITn
6-2-4.Sort제거를위한인덱스
6-2-5.Sort제거보다WHERE절에집중
6-2-6.IncrementalSort
6-2-7.ORDERBY를빼먹지말자.
6-2-8.정렬을피할수없다.
6-3.집계
6-3-1.GroupAggregate와HashAggregate
6-3-2.GROUPBY컬럼최소화
6-3-3.LIMITMIN/MAX
6-3-4.변형된컬럼의MIN/MAX
6-3-5.LIMITMIN/MAX를위한인덱스

CHAPTER07조인의내부처리방식
7-1.NL조인이해하기
7-1-1.조인의내부처리방식
7-1-2.NL조인
7-1-3.드라이빙과드리븐
7-1-4.NL조인의실행계획
7-2.머지조인이해하기
7-2-1.머지조인
7-2-2.머지조인의실행계획
7-3.해시조인이해하기
7-3-1.해시조인
7-3-2.빌드입력과프로브입력
7-3-3.해시조인의실행계획
7-4.조인힌트
7-4-1.조인알고리즘과데이터집합의역할
7-4-2.조인힌트사용법
7-4-3.Leading힌트
7-4-4.여러테이블의조인힌트

CHAPTER08조인과성능
8-1.NL조인과성능
8-1-1.NL조인의비효율
8-1-2.드리븐테이블의인덱스
8-1-3.드리븐테이블의필터조건
8-1-4.드라이빙테이블의인덱스
8-1-5.드라이빙집합선택
8-1-6.드리븐테이블의인덱스컬럼순서
8-1-7.무조건작은집합을드라이빙할것인가?
8-1-8.여러테이블의NL조인
8-1-9.조인조건의IndexCond확인
8-1-10.NL조인의인덱스전략
8-2.머지조인과성능
8-2-1.머지조인의비효율
8-2-2.머지조인을위한인덱스
8-2-3.머지조인의한계
8-3.해시조인과성능
8-3-1.대용량조인에탁월한해시조인
8-3-2.해시조인을위한인덱스
8-3-3.빌드입력선택
8-3-4.프로브입력최적화
8-3-5.테이블원래크기만으로조인방식을결정하면안된다.
8-3-6.해시조인은동등조인조건이필수
8-3-7.조인컬럼에인덱스가없다면해시조인
8-4.조인과성능
8-4-1.인덱스힌트만으로조인알고리즘선택하기
8-4-2.상황에따른인덱스선택
8-4-3.코드명조회-스칼라서브쿼리vs.조인
8-4-4.조인횟수를줄이자
8-4-5.조인을추가하자
8-4-6.조인튜닝전략

CHAPTER09트랜잭션과모니터링
9-1.트랜잭션
9-1-1.트랜잭션
9-1-2.오토커밋과명시적트랜잭션
9-1-3.xid
9-1-4.LOCK
9-2.트랜잭션테스트와모니터링
9-2-1.테스트준비
9-2-2.pg_locks
9-2-3.대기(wait)상태
9-2-4.pg_stat_activity
9-2-5.사라진500원
9-2-6.SELECTFORUPDATE
9-2-7.CREATEINDEXCONCURRENTLY

CHAPTER10VACUUM
10-1.VACUUM을왜하는가?
10-1-1.DeadTuple
10-1-2.Freeze
10-2.VACUUM
10-2-1.Autovacuum
10-2-2.수동VACUUM
10-3.VACUUM과성능
10-3-1.UPDATE와용량변화
10-3-2.VACUUM과성능
10-3-3.데드튜플최소화전략
10-3-4.배치와데드튜플
10-3-5.매뉴얼커밋과베큠

출판사 서평

〈SQLTUNERforPostgreSQL기본원리편〉은SQL성능문제를‘빠른처방’이아니라‘확실한이해’로해결하도록이끄는책입니다.단순히방법을나열하지않고,성능이흔들리는지점을기본부터정리한뒤예제와실행결과,그림을통해독자가직접확인하며따라오게구성했습니다.인덱스,실행계획해석,조인부하,트랜잭션대기,VACUUM까지실무에서반복되는핵심주제를다루고있습니다.
이원고에서특히인상적인점은저자의집필태도입니다.저자는‘그럴듯하지만틀린설명’을가장경계하며,문장하나가오해를만들지않는지,예제가과장되거나빈틈이없는지,설명의순서가독자의사고흐름과맞는지까지끝까지점검했습니다.같은내용을여러번다시풀어쓰고,표현을깎고,예제를재검증하는과정이누적되며,이책은‘알려주는책’이아니라검증가능한기준을남기는책이되었습니다.
결과적으로이책은특정기법을외우게하기보다,성능문제를마주했을때무엇을먼저확인하고,무엇을의심하며,어떤선택을피해야하는지를스스로정리할수있게합니다.제대로배우고,오래써먹을수있는SQL성능의기본기를찾는독자에게가장현실적인안내서가될것입니다.