はじめに: SQLServer2005SP2 では、vardecimal 関数を使用すると、元の固定長 10 進数データをデータ ファイルに可変長形式で保存できるようになり、データ ウェアハウスのスペースを節約できると言われています。これに基づいてデータ圧縮機能が強化されました。
SQL Server のデータ圧縮機能は、SQL Server 2005 で初めて開始されました。vardecim と呼ばれる新しい記憶形式がエンタープライズ エディションと開発エディションに追加されました。この機能は、10 進数フィールドと数値フィールドに影響を与える可能性があります。データベース内のテーブルに 10 進数および数値タイプのデータが含まれている場合、ユーザーは vardecim 格納形式を使用してデータベースのサイズを削減できます。節約できるスペースの量は、データベースに含まれる 10 進数または数値データ列の数、データの分布、およびテーブルのサイズによって異なることに注意してください。
データ圧縮を使用する
SQL Server 2008 のもう 1 つの新機能であるデータ圧縮機能です。この機能を使用すると、データ テーブル、インデックス、パーティションのサブセットのサイズを削減できます。しかし、なぜ SQL Server 2005 に以前から存在していたこの機能が新世代バージョンのシステムで改善される必要があるのでしょうか? ストレージ コストが継続的に低下している市場環境において、データ圧縮テクノロジは企業にどのようなメリットをもたらすのでしょうか?
ストレージ コストは企業が注目する重要な要素ではなくなりましたが、これは、データベース サイズが企業運営の効率に影響を与えないという意味ではありません。データベース サイズはストレージ コストに影響するだけでなく、管理にも大きく関係しているからです。コストとパフォーマンスの問題。
まず、データベースをバックアップする必要があるため、データベースのサイズが大きくなるとバックアップ時間が長くなり、バックアップ ハードウェアのコストも増加します。それはデータベースの保守コストです。パフォーマンスの点では、SQL Server がディスクをスキャンしてデータを読み取るとき、データ ページ単位でデータを読み取ります。そのため、データ ページに含まれるデータ行が多いほど、SQL Server は 1 つのデータ ページ IO で取得するデータが多くなります。より多くの値を設定すると、パフォーマンスの向上にもつながります。
SQL Server2005SP2 の vardecim 形式の圧縮データと比較して、SQLServer2008 によって現在リリースされているテスト データは、新しいデータ圧縮テクノロジを使用してより高いストレージ率を実現し、企業による災害復旧のためのストレージ領域の増加と相まって、これらすべてが SQLServer2008 の利点です。この新機能。
ページ 2: 2 つの圧縮モード
データ圧縮の実際の利点を理解すると、データ圧縮の助けにより、ストレージ コストが削減され、クエリのパフォーマンスが向上し、I/O が削減され、バッファリングのクリック率が向上するという概念の浸透を感じることができます。この機能はアプリケーション プロセスにおいて依然として非常に効果的であることがわかります。SQL Server 2008 には、行圧縮とページ圧縮という 2 つのアプリケーション方法があります。これらの 2 つのデータ圧縮タイプを簡単に比較します。
データ圧縮ウィザードでの圧縮タイプの選択
行圧縮。行圧縮では、固定長型を可変長の記憶域型として格納できます。たとえば、可変長ストレージ形式で格納された char(100) 列は、ストレージ量によって定義されたデータのみを使用します。保存される「SQLServer2008」では、圧縮後に 100 文字すべてを保存するのではなく、15 文字だけを保存する必要があるため、ストレージ領域の 85% が節約されます。これは、SQLServer2005ServicePack2 で提供されている vardecimal ストレージ形式のアイデアを拡張したものです。この圧縮モードでは、すべてのデータ型の NULL 値と 0 値がバイトを占有しないように最適化されることにも注意してください。
SQLServer2008 データ圧縮はこの機能を拡張しますが、整数、文字、浮動小数点を含むすべての固定長データ型が処理されます。データは固定サイズのバイトではなく、必要最小限のバイトで保存されるようになりました。これは、行圧縮を有効にするだけで実行できます。ただし、行圧縮では XML、BLOB、および MAX データ型を処理できません。
ページ圧縮モード。この圧縮機能は行圧縮に基づいて構築されており、同じイベント バイトをページに 1 回だけ保存することで、保存される冗長データを最小限に抑えます。テーブルとインデックスは、行圧縮に加えて、プレフィックス圧縮とディクショナリ圧縮も使用して圧縮されます。
データ圧縮によりテーブルまたはインデックス メトリクスのサイズが削減されます。最初に圧縮後のスペース節約量を評価することをお勧めします。各ページは個別に圧縮され、接頭辞と辞書もページ内に保存されます。ページはストレージ割り当ての最小単位であるため、半分のページを 4 分の 1 ページに圧縮することは意味がありません。したがって、圧縮プロセスは、ページのコンテンツがほぼいっぱいになったときにのみ開始されます。
行圧縮とページ圧縮を使用すると、CPU 使用率は増加しますが、I/O 使用率とメモリ フットプリントは減少するため、パフォーマンスのトレードオフも発生します。ただし、すべての圧縮オプションは SQLServer2008 Enterprise Edition 専用のオプションになる可能性があります。
ページ 3: データ圧縮の使用方法
付録 (データ圧縮の使用方法):
(1) 行圧縮を有効にする
指定したテーブルで行圧縮を有効にしたい場合は、次のステートメントを実行できます。
CREATE TABLE Alpha(col1 int,col2 char(1000))
WITH (DATA_COMPRESSION = ROW)
(2) ページ圧縮を有効にする
指定したパーティションで圧縮を有効にしたい場合は、次のステートメントを実行できます。
CREATE TABLE Alpha_Partition(col1 int,col2 char(1000))
ONPartitionScheme(列 1)
と
(データ圧縮 = ページオン)
パーティション(1-3)
(3)圧縮を変更する
圧縮を使用するように既存のインデックスを変更する場合は、次のステートメントを実行します。
ALTER INDEX Collndx ON Alpha REBUILD
WITH (DATA_C0MPRESSION=PAGE)
ALTER INDEX Collndx ON Alpha REBUILD
パーティション=2
WITH (DATA_COMPRESSION=ページ)
SQL Server 2008 の圧縮オプションは、テーブルまたはインデックスの作成時にオプションを使用して設定できます。次に例を示します。
CREATE TABLE TestTable (col1 int,col2varchar(200))WITH(DATA_COMPRESSION = ROW);
パーティションの圧縮オプションを変更する必要がある場合は、次のステートメントを使用できます。
ALTER TABLE TestTable REBUILD PARTITION = 1 WITH(DATACOMPRESSION=PAGE);
パーティション テーブルのパーティションごとに異なる圧縮オプションを設定する必要がある場合は、次のステートメントを使用できます: (SQLServer2008 では、パーティションごとに異なる圧縮オプションを使用できます。データ ウェアハウスのファクト テーブルはデータ ウェアハウス アプリケーションにとって非常に重要です。通常、1 つまたは複数のホット パーティションがあり、これらのパーティション内のデータを更新する必要があることがよくあります。データ圧縮によってこれらのパーティションのデータ更新に追加の処理負荷がかかるのを避けるために、これらのパーティションの圧縮オプションをオフにすることができます。
CREATE TABLE PartitionedTable (col1 int、col2varchar(200))
オン PS1 (col1)
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(1),
DATA_COMPRESSION = パーティション上のページ(2 ~ 4));
インデックスの圧縮オプションを設定している場合は、次のものを使用できます。
CREATE INDEX IX_TestTable_Col1 ONTestTable(Col1)WITH(DATA_COMPRESSION = ROW);
インデックスの圧縮オプションを変更したい場合は、以下を使用できます。
ALTER INDEX IX_TestTable_Col1 ONTestTableREBUILDWITH(DATA_COMPRESSION = ROW);