슬롯 배열 및 총 페이지 크기


13

많은 포럼과 많은 블로그에서 페이지가 아래와 같이 구성되어 있음을 계속 읽습니다. 페이지 크기 : 16 x 512B = 8192B 페이지 헤더 : = 96B 최대 행 _ 행 : = 8060B

(8192-96-8060) B = 36B로 남습니다.

좋습니다, 이것은 논리적이고 정확합니다. 내가 가진 질문은 이것입니다. 왜 많은 사람들이 나머지 36B가 슬롯 배열을 위해 예약되어 있다고 말합니까?

분명히 슬롯 배열은 페이지에서 행당 2B를 제공합니다. 따라서 2B만큼 작고 1472B만큼 클 수 있습니다.

2B : 1 행 * 2B = 2B

1472B : 8096B = n * 9B (오버 헤드가있는 최소 행 크기 ... 단일 TINYINT 열 생각) + n * 2B (행당 슬롯 배열 비용) => 8096 = 11n => n = 8096/11 = 736.

736 * 2B = 1472B입니다.

14B 버전 태그로 인해 20 세가되었습니다.

USE master ;
GO

CREATE DATABASE test ;
GO

USE test ;
GO

ALTER DATABASE test
    SET ALLOW_SNAPSHOT_ISOLATION ON ;
GO

ALTER DATABASE test
    SET READ_COMMITTED_SNAPSHOT ON ;
GO

DROP TABLE tbl ;
GO

CREATE TABLE tbl
(
      i CHAR(8000) DEFAULT(REPLICATE('a',8000))
    , j CHAR(53)   DEFAULT(REPLICATE('a',53))
) ;

INSERT INTO tbl 
    DEFAULT VALUES ;
GO

DBCC IND (test,tbl,-1) ;
GO
DBCC TRACEON(3604) ;
GO
DBCC PAGE(test,1,272,3) ;
GO

또 다른 예. 49에서 50으로 이동하면 VARCHAR (MAX)가 LOB_DATA로 이동합니다.

DROP TABLE tbl ;
GO

CREATE TABLE tbl
(
      i VARCHAR(MAX) DEFAULT(REPLICATE('a',8000))
    , j CHAR(49)   DEFAULT(REPLICATE('a',49))
) ;

sp_tableoption N'tbl', 'large value types out of row', 'OFF' ;
GO

INSERT INTO tbl 
    DEFAULT VALUES ;
GO

DBCC IND (test,tbl,-1) ;
GO
DBCC TRACEON(3604) ;
GO
DBCC PAGE(test,1,272,3) ;
GO

- 그것은 그 킴벌리 트립에 의해이 게시물에 대한도 SQL 서버 2012 @SQLKiwi 점에서이 문제 남아 나타납니다 http://www.sqlskills.com/blogs/kimberly/a-simple-start-table-creation-best-practices / .


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Paul White 9

답변:


8

정렬 실행과 같은 내부 목적으로 페이지가 사용되는 경우 최대 행 크기는 8094 바이트 입니다. 데이터 페이지의 경우 내부 행 오버 헤드를 포함하여 행 내 최대 크기는 8060 바이트 입니다.

특정 엔진 기능을 사용중인 경우 내부 행 오버 헤드가 크게 확장 될 수 있습니다. 예를 들어 스파 스 열을 사용 하면 사용자가 액세스 할 수있는 데이터 크기가 8019 바이트로 줄어 듭니다.

내가 SQL Server 2012까지 알고있는 외부 행 오버 헤드의 유일한 예는 버전이 지정된 행에 필요한 14 바이트 입니다. 이 외부 오버 헤드는 단일 행의 최대 공간 사용량을 8074 바이트로 늘리고 단일 슬롯 배열 항목의 경우 2 바이트를 더하여 총 8076 바이트를 만듭니다. 이것은 여전히 ​​8096 제한 (8192 페이지 크기-96 바이트 고정 헤더)보다 20 바이트 짧습니다.

가장 그럴듯한 설명은 원래 8060 바이트 제한은 14 행 버전 구현에 사용 된 미래의 확장을위한 34 바이트를 떠났다는 것이다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.