スロット配列と総ページサイズ


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

-それはキンバリーメーカーTrippによってこの投稿にも、SQL Serverでこの問題が残って、2012年@SQLKiwiポイントと思わhttp://www.sqlskills.com/blogs/kimberly/a-simple-start-table-creation-best-practices /


コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
ポールホワイト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.