52
SQLian 7세미나 자료 SQL Server Data Architecture 작성자: 강동운([email protected] ) 발표일: 2012.05.29

SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Embed Size (px)

Citation preview

Page 1: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

SQLian 제 7차 세미나 자료

SQL Server Data Architecture

작성자: 강동운([email protected])

발표일: 2012.05.29

Page 2: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

이 주제를 이해하는데 필요한 지식 SQL Server에 대한 기본적인 이해

SQL Server에 대한 전반적인 지식

Level

100 ~ 300

Page 3: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

강사 소개

강동운(Software Engineer)

Electronic Arts FIFA Online 3

Email: [email protected]

Blog: http://eastluck.tistory.com

Facebook: http://www.facebook.com/eastluck

주요 업무 및 활동

- SQL Server MVP 2012

- SQLer.com 닉네임 이스트럭(강동운)

- SQLer Vision 스터디 리더

- SQL World NULL 스터디 맴버

- 쿼리 튜닝 및 작성 전문가

Page 4: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Contents Page

DBCC Page, IND

Page(Offset)

Extent

- Mixed Extent

- Uniform Extent

IAM(Index Allocation Map)

Index Scan 방식

- Index Ordered Scan

- Allocation Ordered Scan

데이터 행의 구조

Page 5: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Page

SQL Server I/O의 기본단위 8k(8,192 bytes)

1) Page Header(96 bytes)

2) Data

3) Row Offset array

Page 6: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Page

SQL Server Page 의 구조

Page 7: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

DBCC Page

DBCC TRACEON(3604)

페이지에 저장된 내부

DBCC PAGE

(디비명,파일번호,페이지번호, 옵션)

옵션(기본: Buffer Header, Page Header)

0: 기본

1: 기본 + 페이지 + 행 구분 가능, 행 오프셋

2: 기본 + 페이지 전체, 행 오프셋

3: 1번 값 + data

Page 8: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

DBCC IND

Undocumented Command

Allocated Pages List

DBCC IND(디비명,테이블명,옵션)

옵션

0: Heap or Clustered Leaf Level

1: Clustered index

2 ~ 254: Non Clustered index

-1: 전체

-2: All IAM

Page 9: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

DBCC IND create table dbo.Employee ( EmployeeID int not null , LastName NVARCHAR(20) , FirstName NVARCHAR(20) , HireDate DATETIME ) GO INSERT INTO dbo.Employee SELECT EmployeeID,LastName,FirstName,HireDate FROM Northwind.dbo.Employees GO --// 9 rows --// Create NonClustered Index(Non-Unique) CREATE INDEX NC_Employee_LastName ON Employee(LastName) WITH(FILLFACTOR = 1, PAD_INDEX=ON) GO

Page 10: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

DBCC IND DBCC IND(eastluck,Employee,2) --//NonClustered Index

Page 11: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

DBCC IND DBCC IND(‘eastluck’,’Employee’,0) --//Heap

Page 12: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

DBCC IND

195(IAM)

(NC)

200(Root)

197(Non Leaf)

199(Non Leaf)

194(Leaf)

196(Leaf)

198(Leaf)

174: IAM

(Heap)

110(Leaf)

(Heap)

Page 13: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

DBCC IND DBCC IND(‘eastluck’,’Employee’,-1) --//ALL

Page 14: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Page(Offset)

행의 시작 위치(2 Bytes) 정렬을 관리하기 위해 사용

Sample picture

Page 15: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Page(Offset)

Q. Clustered Index 정말 물리적으로 정렬이 되어 있을까?

□ True □ False V

Page 16: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Page(Offset)

...

Page 17: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Page(Offset)

idx: 1 idx: 2 idx: 19 idx: 20

Row Offset Array로 Data 순서를 관리한다.

Page 18: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Extent

순차적인 8개 페이지의 집합

0~7, 8~15, 16~23 …

Extent의 시작 페이지 % 8 = 0

Mixed Extent(혼합 Extent)

Uniform Extent(균일 Extent)

Page 19: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Extent(Mixed Extent)

80 pages 81 pages 82 pages 83 pages 84 pages 85 pages 86 pages 87 pages

■ Character Table Clustered Index ■ MissionLog Table Clustered Index ■ Item Table Non-Clustered Index ■ CharacterState Table Non-Clustered Index ■ Quest Table Heap IAM ■ Inventory Table Heap

Page 20: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Extent(Uniform Extent)

88 pages 89 pages 90 pages 91 pages 92 pages 93 pages 94 pages 95 pages

■ Character Table Clustered Index

Page 21: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Extent 할당

처음 8개의 페이지까지는 Mixed Extent 할당

그 후 데이터는 Uniform Extent 할당.

예외) 인덱스 조각 모음

SELECT INTO

T1118 옵션 등 ..

DBCC EXTENTINFO(디비명, 테이블명, indexid)

Page 22: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Extent 할당

Mixed Extent

Uniform Extent

...

Page 23: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Extent

DEMO

Page 24: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Extent Example

Mixed 1

1

10

Mixed 2

Root

Page

Mixed 3

20

30

Mixed 4

40

50

Mixed 5

60

70

Mixed 6

80

90

Mixed 7

100

110

Mixed 8

120

130

Uniform

140

150

Uniform

160

170

Uniform

180

190

Uniform

200

210

5

Uniform

10

INSERT

Page 25: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Extent Example

Mixed 1

1

5

Mixed 2

Root

Page

Mixed 3

20

30

Mixed 4

40

50

Mixed 5

60

70

Mixed 6

80

90

Mixed 7

100

110

Mixed 8

120

130

Uniform

140

150

Uniform

160

170

Uniform

180

190

Uniform

200

210

DELETE

1000

2000

INSERT

Uniform

10

Page 26: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

IAM

Index Allocation Map

Heap 또는 Index에 할당 된 Mixed

Extent, Uniform Extent의 정보를

가지고 있음.

1개의 IAM은 4G 의 데이터를 관리

Page 27: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

IAM 구조

1:176

Single Page Allocation @0x3632C08E

Slot 0 = (1:174) Slot 1 = (1:41) ...

Extent Alloc Status Slot 1 @0x3632C0C2

(1:0) -(1:168) = NOT ALLOCATED

(1:176) -(1:184) = ALLOCATED

(1:192) -(1:256) = NOT ALLOCATED

(1:264) -(1:288) = ALLOCATED

(1:296) -(1:328) = NOT ALLOCATED

(1:336) -(1:22624)= ALLOCATED

...

Pointer to

first

1:47120

Pointer to

first IAM

1:26610

1:26610

1:177 1:178 1:179 1:180 1:181 1:182 1:183

1:174

1:41

1:73

1:80

1:89

1:109

1:114

1:120

1:184 1:185 1:186 1:187 1:188 1:189 1:190 1:191

1:264 1:265 1:266 1:267 1:268 1:269 1:270 1:271

orderid custid empid shipperid orderdate filler

------- ----------- ----- --------- --------- ------

343505 C0000004736 167 C 20040516 a

347736 C0000014160 146 G 20040523 a

386520 C0000019321 300 I 20040622 a

...

416891 C0000004708 135 I 20040901 a

440317 C0000019120 81 E 20041005 a

717441 C0000001686 271 I 20051114 a

Page 28: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

IAM INTERNAL EXAMPLE DBCC TRACEON(3604) DBCC page(eastluck,1,201,3) --//IAM

IAM: Single Page Allocations @0x000000001069C08E Slot 0 = (1:200) Slot 1 = (1:194) Slot 2 = (1:195) Slot 3 = (1:196) Slot 4 = (1:197) Slot 5 = (1:198) Slot 6 = (1:199) Slot 7 = (1:208) IAM: Extent Alloc Status Slot 1 @0x000000001069C0C2 (1:0) - (1:288) = NOT ALLOCATED (1:296) - (1:304) = ALLOCATED (1:312) - (1:5144) = NOT ALLOCATED

Mixed Extent

Uniform Extent

Page 29: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

IAM

Header

Data

약 8,xxx bytes

Offset

IAM Page

1 bytes

1 0 1 1 1 0 1 1

8 bits 1 B I t

1 Uniform Extent

8 pages

About 64,000 Extents(8,000 bytes=> 64,000 bit)

About 51x,xxx Pages

About 4,1xx,xxx,xxx bytes

+ 8개의 Mixed Extent (파일번호 + 페이지번호)

Page 30: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Index Scan 방식

Index Ordered Scan

Allocation Ordered Scan

- 64 pages 초과(65 부터..)

- read-only or readuncommitted

- 실행계획 ordered 연산자 false

Page 31: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Index Scan 방식

Clustered

Index

Index Ordered Scan

Page 32: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Allocation Ordered Scan

Index Scan 방식

IAMPointer to

first IAM

Clustered

Index

Page 33: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Index Scan

DEMO

Page 34: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Root Page Split Use northwind GO DROP INDEX dbo.Employee.NC_Employee_LastName GO --//9개의 행을 가지고 있음 ALTER TABLE dbo.Employee ALTER COLUMN LastName CHAR(850) GO CREATE INDEX NC_Employee_LastName ON Employee(LastName) WITH(FILLFACTOR = 100, PAD_INDEX=ON) GO

DBCC IND(eastluck,Employee,2) --//197 is both root and leaf page.

Page 35: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Root Page Split DBCC TRACEON(3604) DBCC PAGE(eastluck,1,197,3) WITH TABLERESULTS

INSERT INTO dbo.Employee SELECT 10,’Full’,’TEST’,GETDATE())

Page 36: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Root Page Split DBCC IND(eastluck,Employee,2)

197: Left Leaf(default Root) 200: Root 201: Right Leaf

Page 37: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Root Page Split(SQL 2005) DBCC PAGE(eastluck,1,200,3) WITH TABLERESULTS

DBCC PAGE(eastluck,1,197,3) WITH TABLERESULTS

DBCC PAGE(eastluck,1,201,3) WITH TABLERESULTS

Page 38: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Root Page Split(SQL 2005 이상)

195: IAM

200(Root)

197(Non Leaf)

201(Non Leaf)

197(Root and Leaf)

SPLIT

Page 39: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

Root Page Split(SQL 2000)

195: IAM

197(Root)

200(Non Leaf)

201(Non Leaf)

197(Root and Leaf)

SPLIT

Page 40: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

1-1. 데이터 행의 구조

고정 컬럼 총 사이즈 + 4

A ghost forwarded

고정 컬럼 데이타

가변 컬럼 수

가변 컬럼의 끝나는 바이트

가변 컬럼의 데이타

데이터 행의 구조

Page 41: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

1-1. 데이터 행의 구조 인덱스 행의 구조

X

X

Page 42: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

1-1. 데이터 행의 구조 데이터 행의 구조(Status A)

Record Attributes

1 0 1 1 1 0 1 1

4 bits

Record Type

4 bits

Bit 0: SQL2008에서는 항상 0 Bit 1 ~ 3: 0: a primary key record(0000) 1(2): a forwarded record(0010) 2(4): a forwarding stub(0100) 3(6): an index record(0110) 4(8): a blob fragment or row-overflow data(1000) 5(A): a ghost index record(1010) 6(C): a ghost data record(1100) 7(E): a ghost version record(1110)

Page 43: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

1-1. 데이터 행의 구조 데이터 행의 구조(Status A)

Bit 4: Null Bitmap 존재 여부. Bit 5: row에variable-length 컬럼이 존재하는지 여부 Bit 6: row에 버전 정보를 포함하는지 여부 (Database가 ALLOW_SNAPSHOT_ISOLATION, READ_COMMITTED_SNAPSHOT 옵션이 ON으로 설정되어야만 1로 나타난다.) Bit 7: 2008에서 사용하지 않는다.

Record Attributes

1 0 1 1 1 0 1 1

4 bits

Record Type

4 bits

Page 44: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

1-1. 데이터 행의 구조

Status Bits A 예제

데이터 행의 구조(Status A)

30: 0011 0000

Record Attributes = NULL_BITMAP VARIABLE_COLUMNS Record Type = PRIMARY_RECORD

3C: 0011 1100

Record Attributes = NULL_BITMAP VARIABLE_COLUMNS Record Type = GHOST_DATA_RECORD

10: 0001 0000

Record Attributes = NULL_BITMAP Record Type = PRIMARY_RECORD

70: 0111 0000

Record Attributes = NULL_BITMAP VARIABLE_COLUMNS VERSIONING_INFO Record Type = PRIMARY_RECORD

Page 45: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

1-1. 데이터 행의 구조 데이터 행의 구조(가변컬럼)

IF OBJECT_ID(‘Varchar_Dupes','U') IS NOT NULL DROP TABLE Varchar_Dupes GO CREATE TABLE dbo.Varchar_Dupes ( Col1 VARCHAR(5) NOT NULL , Col2 INT NOT NULL , Col3 INT NOT NULL , Col4 VARCHAR(3) NULL , Col5 VARCHAR(6) NOT NULL , Col6 VARCHAR(5) ) GO DBCC TRACEON(3604) GO --// 고정컬럼 총 사이즈는 INT(8)

Page 46: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

1-1. 데이터 행의 구조 데이터 행의 구조(가변컬럼)

INSERT INTO Varchar_Dupes(Col1,Col2,Col3,Col4, Col5, Col6) VALUES('ABCDE',123, -123,'AAA',NULL,'DDD')

DBCC IND(eastluck,Varchar_Dupes,0) DBCC PAGE(eastluck,1,200,1) 0000000000000000: 30000c00 7b000000 85ffffff 06001004 0000000000000010: 001e0021 00210024 00414243 44454141 0000000000000020: 41444444

30: Status A Record Attributes = NULL_BITMAP VARIABLE_COLUMNS Record Type = PRIMARY_RECORD

00: Status B

Page 47: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

1-1. 데이터 행의 구조 데이터 행의 구조(가변컬럼) 0000000000000000: 30000c00 7b000000 85ffffff 06001004 0000000000000010: 001e0021 00210024 00414243 44454141 0000000000000020: 41444444

0C00: 고정 컬럼 총 사이즈(INT+INT = 8) + 4 = 12 => C

7b000000: 123의 16진수 값

123 = 16*7 + 11

85ffffff: -123의 16진수 값

7b : 0000 … 0000 0111 1011

7b(1의 보수): 1111 … 1111 1000 0100

7b(2의 보수): 1111 … 1111 1000 0101 => 85

0600: 총 컬럼의 수(6개)

10: 0001 0000 (5번째 컬럼이 NULL)

Page 48: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

1-1. 데이터 행의 구조 데이터 행의 구조(가변컬럼) 0000000000000000: 30000c00 7b000000 85ffffff 06001004 0000000000000010: 001e0021 00210024 00414243 44454141 0000000000000020: 41444444

0400: 가변길이 컬럼의 수(총 4개) = Col1, Col4, Col5, Col6

1e00: 30(1번째 가변 길이 컬럼이 끝나는 바이트) = ‘ABCDE’

2100: 33(2번째 가변길이 컬럼이 끝나는 바이트) = ‘AAA’

2100: 33(3번째 가변길이 컬럼이 끝나는 바이트) = NULL

2400: 36(4번째 가변길이 컬럼이 끝나는 바이트) = ‘DDD’

Page 49: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

1-1. 데이터 행의 구조 데이터 행의 구조(가변컬럼) 0000000000000000: 30000c00 7b000000 85ffffff 06001004 0000000000000010: 001e0021 00210024 00414243 44454141 0000000000000020: 41444444

4142434445: Col1의 값(‘ABCDE’) ASCII 값

414141: Col4의 값(‘AAA’) ASCII 값

444444: Col6의 값(‘DDD’) ASCII 값

45는 30번째 바이트에서 끝난다.

Col5의 NULL 값은 저장되지 않는다

Page 50: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

1-1. 데이터 행의 구조 행 구조를 통해 추론

추가 컬럼을 테이블 중간에 끼어 넣는 것 불가능!(테이블 새로 작성)

NULL 허용 컬럼은 바로 추가가 가능

기본 값이 있는 컬럼을 추가할 경우 모든 행 update

Page 51: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

SUMMARY

Page(Header, Data, Offset)

Extent(Mixed, Uniform Extent)

IAM은 Mixed, Uniform Extent를 관리

DBCC IND, PAGE

Root 페이지 SPLIT 시 새로운 페이지할당

SQL Server 2005 이상

SQL Server 행 구조

Page 52: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼

감사합니다.