sqlian 제 7차 세미나 자료 - cuvix.co.kr server에 대한 기본적인 이해 sql server에...
TRANSCRIPT
![Page 2: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/2.jpg)
이 주제를 이해하는데 필요한 지식 SQL Server에 대한 기본적인 이해
SQL Server에 대한 전반적인 지식
Level
100 ~ 300
![Page 3: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/3.jpg)
강사 소개
강동운(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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/4.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/5.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/6.jpg)
Page
SQL Server Page 의 구조
![Page 7: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/7.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/8.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/9.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/10.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/11.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/12.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/13.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/14.jpg)
Page(Offset)
행의 시작 위치(2 Bytes) 정렬을 관리하기 위해 사용
Sample picture
![Page 15: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/15.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/16.jpg)
Page(Offset)
...
![Page 17: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/17.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/18.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/19.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/20.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/21.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/22.jpg)
Extent 할당
Mixed Extent
Uniform Extent
...
![Page 23: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/23.jpg)
Extent
DEMO
![Page 24: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/24.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/25.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/26.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/27.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/28.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/29.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/30.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/31.jpg)
Index Scan 방식
Clustered
Index
Index Ordered Scan
![Page 32: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/32.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/33.jpg)
Index Scan
DEMO
![Page 34: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/34.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/35.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/36.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/37.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/38.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/39.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/40.jpg)
1-1. 데이터 행의 구조
고정 컬럼 총 사이즈 + 4
A ghost forwarded
고정 컬럼 데이타
가변 컬럼 수
가변 컬럼의 끝나는 바이트
가변 컬럼의 데이타
데이터 행의 구조
![Page 41: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/41.jpg)
1-1. 데이터 행의 구조 인덱스 행의 구조
X
X
![Page 42: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/42.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/43.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/44.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/45.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/46.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/47.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/48.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/49.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/50.jpg)
1-1. 데이터 행의 구조 행 구조를 통해 추론
추가 컬럼을 테이블 중간에 끼어 넣는 것 불가능!(테이블 새로 작성)
NULL 허용 컬럼은 바로 추가가 가능
기본 값이 있는 컬럼을 추가할 경우 모든 행 update
![Page 51: SQLian 제 7차 세미나 자료 - cuvix.co.kr Server에 대한 기본적인 이해 SQL Server에 대한 전반적인 지식 Level 100 ~ 300 . ... DBCC TRACEON(3604) GO --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/51.jpg)
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 --// 고정컬럼](https://reader034.vdocuments.net/reader034/viewer/2022042520/5b00ef787f8b9af1148d6a8f/html5/thumbnails/52.jpg)
감사합니다.