1

SQL Server がどのようにスペースを割り当てて予約するかを理解しようとしています。

記事「テーブルの設計は SQL Server のパフォーマンスにどのように影響しますか?」の例を実行しました。[1]、記事[1.1]の結果を流用した結果[My 1.1]を受け取りました。
なんで?

あるケースでは余分なスペースが予約/割り当てられているのに ([1] のすべてのケース)、別の [My 1.1] ではそうでないのはなぜですか?
([1] では、どちらの場合も余分なスペースが予約されていることに注意してください。ただし、私のコンピューターではいずれかの場合のみ)

スペースはどのように割り当てられ、SQL Server によって予約されますか?
どうすればそれを制御/管理できますか?

[1] ======
テーブルの設計が SQL Server のパフォーマンスに与える影響は?
http://sqlserver-training.com/how-table-design-can-impact-your-sql-server-performance

【私の1.1
】以下の【1】から流用した私の結果

name                               rows  reserved  data     index_size  unused
---------------------------------- ----- --------- -------- ----------- ---------
Fixed_Lenght_Row_Table_Optimised   10000 40008 KB  40000 KB 8 KB        0 KB

[1.1] 上記の鉱山から [1] を流用した結果

name                               rows  reserved  data     index_size  unused
---------------------------------- ----- --------- -------- ----------- ---------
Fixed_Lenght_Row_Table_Optimised   10000 40072 KB  40000 KB 8 KB        64 KB

[1.2]
私の結果と一致する [1 ] の結果

name                                 rows  reserved  data     index_size  unused
----------------------------------   ----- --------- -------- ----------- ---------
Fixed_Lenght_Row_Table_Non_Optimised 10000 80072 KB  80000 KB 8 KB        64 KB
4

2 に答える 2

3

リンクの記事はせいぜい疑わしいです。使用するSQLServerのバージョン、および有効/無効になっているさまざまなオプションを指定しません。SQL Server 2005には、8Kの制限を超えた列用の行small-lobストレージがあり(テーブルとインデックスの編成を参照)、デフォルトの行内オプションと行外オプション(sp_tableoptionを参照)があり、多くの圧縮オプションがあります。 (行レベルページレベルUnicode)。

正確な情報については、 Planning and Architecture(Database Engine)から始まる公式の製品ドキュメントに固執します。よりわかりやすく読むには、 Microsoft SQL Server2008InternalsInsideMicrosoftSQL Server 2005:TheStorageEngineなどの定評のある本の1つを購入してください。

于 2010-09-23T19:26:32.390 に答える
3

それは理にかなっています: 64k の未使用スペースがあります。このように、予約済みスペースに小さな違いが見られることがよくあります

また、2番目のパラメーターを使用して、この方法でも実行します。違いはないかもしれません

EXEC [sp_spaceused][1] 'Fixed_Lenght_Row_Table_Non-Optimised', 'true'

そして、sp_spaceused から

大きなインデックスを削除または再構築する場合、または大きなテーブルを削除または切り捨てる場合、データベース エンジンは、トランザクションがコミットされるまで、実際のページの割り当て解除とそれに関連するロックを延期します。遅延ドロップ操作は、割り当てられたスペースをすぐには解放しません。したがって、大きなオブジェクトを削除または切り捨てた直後に sp_spaceused によって返される値は、実際に使用可能なディスク容量を反映していない場合があります。遅延割り当ての詳細については、大きなオブジェクトの削除と再構築を参照してください。

最後に、4000 バイト以上の行を持つテーブルはありますか? オーバーライドして最適化したい場合は、時期尚早だと思います...設計の実装を正しくするだけです(これらは別のステップです)

于 2010-09-23T19:44:44.327 に答える