SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

DBCC PAGE でみる Unicode 圧縮 (行圧縮)

leave a comment

SQL Server 2008 R2 では Unicode 圧縮という機能が追加されました。
この機能を使用すると可変長の列 (nvarchar) に対して行圧縮を設定した場合でも、行サイズを減少することが可能となります。

今回の投稿では DBCC PAGE を使用して、Unicode 圧縮の動作を確認してみたいと思います。

■圧縮前後のテーブルのサイズを確認


以下のテーブルを作成し、同一のデータを INSERT してテーブルのサイズを比較してみます。
image

SET NOCOUNT ON
GO
INSERT INTO 圧縮前 VALUES (NEWID())
GO 100000

INSERT INTO 圧縮後 SELECT * FROM 圧縮前

 

SSMS の標準レポートでサイズを確認してみます。
image

レコード数は同一なのですが、データサイズに差が出ていることが確認できますね。
固定長のレコードを行圧縮した場合は行データの後ろのスペースが圧縮されるため行サイズが減少します。
可変長データの場合はデフォルトで後ろのスペースは削除された状態でデータが登録されますが、Unicode データの場合はさらに特殊な圧縮が行われます。

 

■DBCC ページでみる Unicode 圧縮 (行圧縮)


Unicode 圧縮前後を DBCC PAGE で確認をしてみたいと思います。

行圧縮前の Unicode の nvarchar データは以下のように格納されています。
image

Unicode 文字列の場合 2 バイトで一文字が格納されますので半角の場合も 1 バイトでなく 2 バイト使用されます。

それでは、行圧縮をしたデータを見てみます。
image

同じデータを格納したものを表示しているのですが、Record size に差が出ています。

実際に格納されたデータを確認すると、Unicode 圧縮することで半角文字が 1 バイトで格納されているのが確認できますね。

これが、Unicode の可変長の列に対して行圧縮を行ったことによるサイズの減少の効果になります。
Unicode の可変長に対して行圧縮をしても効果があるのが確認できますね。

実際にどのようにデータが格納されているか確認するときには DBCC PAGE を使うと便利です♪

Written by masayuki.ozawa

8月 7th, 2011 at 9:54 pm

Posted in SQL Server

Tagged with

Leave a Reply

*