SQL 서버의 구조

SQL 서버의 구조

$19.00
Description
SQL 개발과 운용 업무의 효율화, 트러블슈팅에 도움!
스테디셀러 「그림으로 이해하는 SQL 서버의 내부 구조」(2009년 3월 2일 출간)를 오랜만에 전면 개정한 책이다. 전작을 토대로 현재의 SQL 서버 아키텍처를 따라 배우고자 설명과 그림 전체를 전면 수정했을 뿐 아니라 칼럼스토어/인메모리형 오브젝트, Paas/Iaas 각종 클라우드 데이터 플랫폼의 해설 등을 추가하여 물리적 구조와 내부 동작으로 이해함으로써 SQL서버의 기술적 특성을 충분히 활용할 수 있게 되어 현장에서의 데이터베이스 개발 및 운용업무의 효율화나 트러블슈팅에 도움이 되도록 했다. 저자의 SQL서버 지원 업무 경험도 그대로 살려 집필되어 SQL서버의 실천적 팁이나 노하우집으로도 활용할 수 있다.

본문은 크게 5가지 테마, 즉 ‘외부 컴포넌트의 이해’, ‘다양한 데이터의 구조’, ‘내부 컴포넌트의 이해’, ‘운용의 안정화’, ‘향후의 전망’으로 구분되어 있다. 책에서는 저자가 서문에서 밝힌 대로 SQL 서버의 편리한 사용법(가령 바로 사용할 수 있는 쿼리 샘플 등)은 소개하지 않았다. 대신 SQL 서버의 기본 아키텍처를 체계적으로 소개하고 각종 내부 기능의 특성과 동작을 하나하나 알기 쉽게 소개하는 데 더 집중했다. 트러블의 본질을 이해할 수 있으면 눈에 보이는 증상에 휘둘리지 않고 정확한 대처를 강구할 수 있다는 저자의 의도를 잘 읽을 수 있다.
저자

히라야마오사무

신입사원으로취직한회사에서처음으로범용기로가동하는Db2의데이터베이스관리자를한것을계기로데이터베이스와첫인연을맺는다.이후사이베이스에서SQL서버(현SAPAdaptiveServerEnterprise)의기술지원업무를거쳐일본마이크로소프트에입사한다.SQL서버지원팀에서는모든장애대응을담당하고이후SQL서버개발팀으로이동해서SQL서버의품질을높이기위한다양한대응활동을경험한다.현재는마이크로소프트가제공하는클라우드상의다양한데이터플랫폼서비스지원업무를하고있다.

목차

들어가며
이책에대해

【제1장】CPU리소스의최적화

1.1멀티스레드프로그래밍
1.1.1문맥교환

1.2윈도우스케줄러와SQL서버
1.2.1윈도스케줄러가인식할수없는대기상태

1.3SQL서버내의스케줄러
1.3.1SQLOS스케줄러란?
1.3.2SQLOS스케줄러를구성하는컴포넌트
-스케줄러
-작업자
-작업자스레드풀
-러너블큐(RunnableQueue)
-워크리퀘스트큐(WorkRequestQueue)
-I/O리퀘스트리스트(I/ORequestList)
-웨이터리스트(WaiterList)
1.3.3스케줄러의동작
1.3.4SQLOS스케줄러가사용하는기술

1.4SQLOS스케줄러를모니터링한다
1.4.1동적관리뷰의참조
-runnable_tasks_count
-current_workers_count
-work_queue_count

1.5제1장정리

【제2장】디스크I/O조작의이해

2.1SQL서버가관리하는데이터베이스의실체
2.1.1데이터파일(확장자.mdf,.ndf)
2.1.2트랜잭션로그파일(확장자.ldf)

2.2데이터베이스파일액세스패턴
2.2.1데이터파일
-온라인트랜잭션처리(OLTP)시스템의경우
-데이터웨어하우스(DWH)의경우
2.2.2트랜잭션로그파일

2.3SQL서버가수행하는I/O의특징적동작
2.3.1미리읽기(Read-Ahead)
2.3.2체크포인트(checkpoint)
2.3.3집중기록(EagerWrite)
2.3.4지연기록(LazyWrite)

2.4SQL서버가사용하는I/O용API
2.4.1데이터파일및트랜잭션로그파일의오픈
-CreaterFile함수

2.4.2데이터파일및트랜잭션로그파일에서읽어들이기
-ReadFileScatter함수
-ReadFile함수
2.4.3데이터파일및트랜잭션로그파일에기록
-WriteFileGather함수
-WriteFile함수

2.5디스크구성
2.5.1RAID0
2.5.2RAID1
2.5.3RAID5
2.5.4RAID10

2.6모니터링
2.6.1퍼포먼스모니터
-Avg.Disksec/Read카운터
-Avg.Disksec/Write카운터
2.6.2동적관리뷰의참조

2.7제2장정리

【제3장】메모리관리

3.1SQL서버와가상어드레스공간

3.2SQL서버와가상어드레스공간의관리
3.2.1가상어드레스와공간의관리
-Committed
-Reserved
-Free
3.2.2VirtualAlloc함수
3.2.3페이징

3.3물리메모리사이즈와SQL서버의메모리사용량

3.4NUMA
3.4.1SMP아키텍처의메모리와버스
-레이지라이터스레드
-I/O완료포트스레드
3.4.2소프트NUMA

3.5SQL서버프로세스내부의메모리관리방법
3.5.1메모리매니저
3.5.2워크스페이스의내부구조

3.6메모리의용도
3.6.1버퍼풀(버퍼캐시)
3.6.2플랜캐시
3.6.3쿼리워크스페이스
3.6.4최적화
3.6.5글로벌
3.6.6레이지라이터스레드
3.6.7체크포인트프로세스

3.7모니터링
3.7.1DBCC커맨드
-MemoryManager섹션
-Memorynodeld=X섹션
-MEMORYCLERK_XXXX,CACHESTORE_XXX,USERSTORE_XXX,
-OBJECTSTORE_XXX섹션
-ProcedureCache섹션
3.7.2퍼포먼스모니터
-시스템전체의메모리상황확인
-SQL서버내부의메모리사용상황확인
3.7.3동적관리뷰

3.8제3장정리

【제4장】데이터베이스구조의원리

4.1데이터파일
4.1.1페이지와익스텐트
4.1.2단일익스텐트와혼합익스텐트
4.1.3페이지의종류
4.1.4페이지의배치
-GAM(GlobalAllocationMap)
-SGAM(SharedGlobalAllocationMap)
-PFS(PageFreeSpace)
-IAM(IndexAllocationMap)

4.2트랜잭션로그파일
4.2.1가상로그파일

4.3데이터베이스파일내의액세스수법

4.4데이터베이스파일의관리
4.4.1원인불명의데이터베이스확장실패
4.4.2SQL서버2005이후개선된사항
-제로잉의회피
-디폴트설정의재검토
-이상적인설정

4.5데이터의효율적인저장방법
4.5.1NTFS파일압축의사용
4.5.2vardecimal형
4.5.3데이터압축
4.5.4백업압축

4.6제4장정리

【제5장】로우스토어(Rowstore)형테이블

5.1테이블과오브젝트ID

5.2페이지의분류

5.3인덱스페이지
5.3.1클러스터화인덱스와비클러스터화인덱스의차이
5.3.2인덱스페이지의내부구조
-헤더정보
-인덱스키행
-행오프셋배열

5.4데이터페이지
5.4.1데이터페이지의내부구조
-헤더정보
-데이터행
-행오프셋배열

5.5DBCCPAGE에의한페이지상세정보의확인
5.5.1준비
5.5.2테이블에사용되는페이지의확인
5.5.3페이지의확인
a.출력옵션:‘-1’또는‘0’
b.출력옵션:‘1’
c.출력옵션:‘2’
d.출력옵션:‘3’

5.6제5장정리

【제6장】칼럼스토어(Columnstore)형오브젝트(칼럼스터어인덱스)

6.1칼럼스토어인덱스도입배경

6.2아키텍처/구조
6.2.1행그룹
6.2.2열세그먼트

6.3칼럼스토어구조데이터압축의이점
6.3.1①데이터분할
6.3.2②인코드
-딕셔너리인코딩(DictionaryEncoding)
-밸류인코드(ValueEncoding)
6.3.3③데이터압축
-BitPacking
-RunLengthEncoding

6.4칼럼스토어인덱스의종류

6.5칼럼스토어인덱스의적용부분
6.5.1로우스토어인덱스와칼럼스토어인덱스의조합
①클러스터화칼럼스토어인덱스+비클러스터화인덱스
②클러스터화인덱스+비클러스터화칼럼스토어인덱스(+비클러스터화인덱스)
6.5.2어느쪽조합을선택하면좋을까
-베이스가되는데이터부분의사이즈
-칼럼스토어인덱스의메인타넌스
-퍼포먼스

6.6배치모드

6.7칼럼스토어인덱스의갱신
6.7.1INSERT동작
6.7.2DELETE동작
6.7.3UPDATE동작

6.8칼럼스토어인덱스의메인터넌스
6.8.1델타스토어
6.8.2삭제비트맵

6.9SQL서버의인덱스디자인모범사례
6.9.1정보시스템의기능
-온라인트랜잭션처리(OLTP)
-분석/리포팅처리
6.9.2HTAP(HybridTransaction/AnalyticalProcessing)

6.10제6장정리

【제7장】메모리최적화오브젝트(인메모리OLTP)

7.1인메모리OLTP의개요
7.1.1인메모리OLTP의특징
-항상모든데이터는메모리상에존재한다
-인덱스는메모리상에만존재한다
-락/래치를사용하지않는다
-컴파일된모듈의사용
-7.1.2인메모리OLTP의용도
-IoT
-TempTable
-ETL의중간테이블

7.2인메모리OLTP를구성하는컴포넌트
7.2.1메모리최적화테이블
7.2.2인덱스
-해시인덱스
-인메모리비클러스터화인덱스
7.2.3네이티브컴파일스토어드프로시저

7.3인메모리OLTP의데이터관리
7.3.1데이터의지속성
-SCHEMA_AND_DATA
-SCHEMA_ONLY
7.3.2메모리최적화테이블의데이터구조
7.3.3데이터의라이프사이클
-INSERT동작
-SELECT동작
-DELETE동작
-UPDATE동작
7.3.4가비지컬렉션
-가비지컬렉션메인스레드의동작
-메모리의해제
7.3.5디스크에보존하기위한오브젝트
-메모리최적화파일그룹
-데이터파일
-델타파일
-체크포인트파일페어
7.3.6디스크보존시의동작
-메모리최적화테이블의체크포인트
-자동체크포인트
-수동체크포인트
-체크포인트파일페어의병합(merge)
7.3.7사이징
-데이터사이즈

7.4인메모리OLTP사용시의유의사항
7.4.1가장먼저채용해야할인덱스
7.4.2메모리최적화테이블에서지원되지않는기능
7.4.3네이티브컴파일스토어드프로시저사용시의유의사항

7.5제7장정리

【제8장】릴레이셔널엔진의동작

8.1릴레이셔널엔진의구성

8.2쿼리의라이프사이클
①플랜캐시의확인
②파싱(Parsing)
③쿼리의파라미터화
④바인드
⑤최적화
⑥쿼리실행플랜생성(또는재이용)
⑦리소스확보
⑧실행
⑨쿼리실행플랜의등록

8.3쿼리옵티마이저
①Simplication
②Auto-CreateStats
③DeriveCardinality
④HeuristicJoinReorder
⑤ProjectNormalization
⑥TrivialPlan
⑦Exploration
⑧쿼리트리변환

8.4쿼리옵티마이저와쿼리실행플랜

8.5통계정보
8.5.1히스토그램(histogram)
8.5.2밀도(density)
-1/열이보관하는하나의행수
8.5.3기타

8.6통계정보가작성되는계기
8.6.1명시적으로작성
8.6.2자동작성프로퍼티설정에의한작성
8.6.3인덱스작성시에작성<

출판사 서평

■이책의테마5
●내부컴포넌트의이해(1):제1장부터제3장까지는SQL서버가처리를실행하기위해어떻게컴퓨터의리소스(프로세서,디스크I/O및메모리)를효율적으로관리하는지를설명한다.

●다양한데이터구조:제4장부터제7장까지의각장에서는SQL서버가관리하는다양한오브젝트(데이터베이스와테이블,인덱스등)의상세한구조를소개한다.이들에대한이해는적절한데이터베이스와오브젝트의배치같은논리설계와물리설계시의중요한지침이된다.

●내부컴포넌트의이해(2):제8장에서는앞의내용에서이해한SQL서버의동작과오브젝트구조를토대로SQL서버가어떻게테마를다루는지를알아본다.제9장에서는클라이언트와의커뮤니케이션에서빼놓을수없는네트워크관련특성을소개한다.

●운용의안정화:제10장에서는비즈니스의지속성에필수적인데이터베이스의백업과복원에대해살펴본다.또11장에서는전형적인트러블에대한대처방법과퍼포먼스튜닝을지원하는툴을소개한다.

●향후전망:제12장에서는향후전망으로멀티플랫폼전개와클라우드상의데이터베이스를소개한다.