以下に示すように、多くのフォーラムや多くのブログでページが構成されていることを読み続けています。ページサイズ: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
-それはキンバリーメーカーTrippによってこの投稿にも、SQL Serverでこの問題が残って、2012年@SQLKiwiポイントと思わhttp://www.sqlskills.com/blogs/kimberly/a-simple-start-table-creation-best-practices /。