河端善博 ブログ / SQL Server / PASSJ

SQL Server, .NET, PASSJ

  PASSJブログ :: ホーム :: 連絡をする :: RSS  :: ATOM :: Login
  939 投稿数 :: 112 ストーリー :: 1472 コメント :: 595 トラックバック

ニュース

Windows Live Alerts
My Yahoo!に追加
Add to Google dotnetnuke.jp
NPOPLUS.JP
MVP
PASSJ

記事のカテゴリ

過去の記事

カテゴリ

イメージギャラリ

.TEXT

INETA コミュニティ

MOM2005

MSMVP

PASSJ

SQL コミュニティ

セキュリティ TIPS

セキュリティのキホン

テスト

ブログ翻訳

多言語対応

.TEXT

INETA コミュニティ

MOM2005

MSMVP

PASSJ

SQL コミュニティ

セキュリティ TIPS

セキュリティのキホン

テスト

ブログ翻訳

多言語対応

SQL Server 2008 のわかりやすい特徴の一つが、圧縮機能。

今回の Nov CTP 5 では、バックアップの圧縮機能が提供されました。
バックアップの圧縮機能は、これまでも市販のツールで提供されていたので、わかりやすいですね。

データ圧縮は, 次回 CTP 6 待ち

そうなんです、データ圧縮機能は、次回に持ち越しです。
CTP 6 がいつになるかわかりませんので、マイクロソフトの方々のブログから拾ってみました。

【データ圧縮 (予定 ?) 】

  • ROW / 行単位の圧縮
  • PAGE / ページ単位の圧縮

まず、この圧縮は、ZIP, LZH などの圧縮とは異なります。
できるかぎり、無駄なスペース、重複を省こうというコンセプトのようです。

では、データ圧縮をみます。
圧縮の種類は、2種類です。

ROW/ 行単位での圧縮では、行内の無駄なスペースを削減します。
わかりやすい例として、char(8000) の列に 'a' と入っている場合を考えます。
char は、固定長のデータ型ですので、8000 バイトのスペースを消費します。
つまり、8000 - 1 = 7999 バイトは無駄にスペースが入っています。
ROW 圧縮では、この 7999 バイトの部分を埋めてしまいます。
まるで、char なのに、varchar のように扱うわけですね。
同様に int データ型の列に 10 と入っている場合は、4バイトのうち無駄なバイトを削減するようです。
SQL Server 2005 SP2 で提供された VarDecimal の考えの拡張ですね。

次に PAGE / ページ単位の圧縮です。
ページの場合は、データ内に同じ値が繰り返し出現する場合に、値を一回だけ保存します。
たとえば、'Osaka' という値が、10000 行に入っているとします。
この場合、'Osaka' という値をひとつだけ、保存し、レコードの値としては、値へのポインタに変換します。
大福帳タイプのテーブルや、スタースキーマのデータウェアハウスなどでは、大幅なデータの圧縮ができそう。

ご興味のある方は、Sunil さん、EUAN さん、ブログをご参照ください。

【ブログ】

ちなみに、このデータ圧縮。実際にどんな動きをするのか、いろいろ検証したいですね。

【検証したいポイント】

  • update table1 set a = 'Tokyo' というように 'Osaka' から 'Tokyo' へすべての列の値を変更したら、変更は一か所だけでいいはずですが、どうなるんだろうか。
  • update table1 set a = 100000 というように、値が 1 の列をすべて 10000 に変更したら、ページスプリットの山 ?
  • リプリケーションや、ミラーリングでのトラフィックも削減される ?
  • バックアップしたデータやログも小さい ?
  • リストアは速くなる ?
  • メモリ上のキャッシュはどうなる ?
  • CPU 負荷はどこまで高い ?
  • tempdb のパフォーマンス改善になる ?

【データベースを圧縮する意味】

また、ブログでは、圧縮する意味はあるのか ? について検討もしていました。
1TB の ハードディスクが、4万円ぐらいで購入できるのにと。
もちろん、効果はありますよね。
SAS のドライブは、ぜんぜん高価ですし、SAN にすると、とっても高い。
iSCSI のドライブを利用するのであれば、少しでも、ネットワーク負荷を下げたい。

さてさて、Nov CTP 5 はリリースされたので、CTP 6 がもっと楽しみに。

 

投稿日時 : 2007年11月28日 18:34

コメントを追加

# re: SQL Server 2008 のデータ圧縮機能 ! は、今回の CTP に間に合わず 2007/11/29 2:32 あきこ
先月Oracle11gのリリースのイベントでお話を聞いてきたんですが、次期SQL Serverも、データ圧縮が目玉の一つなんですね!
(圧縮できるので、ストレージにかけるコストを抑えることができる、というのもアピールしてました)
読み書きのスピードもファイルシステムに書くのとあまり変わりなくなっているんでしょうか。

「PAGE / ページ単位の圧縮」の点では、似たようなお話があって、バイナリデータは全く同じものなら実体は1つだけ格納し、あとはポインタを使うことで圧縮(というか節約?)を図るということでした。

同じような機能があるのだったら、開発環境/クライアントと相性の良いDBを選びたくなります。(という点では、SQL Serverかな)

# re: SQL Server 2008 のデータ圧縮機能 ! は、今回の CTP に間に合わず 2007/11/29 9:33 河端善博
あきこさん:
 コメントありがとうございます。
 Oracle 11g 情報ありがとうございます。
 同じデータをポインタを使うのは PAGE 圧縮ですね。
 「読み書きのスピードもファイルシステムに書く」というのは、よくわかりませんでした。
 なお、列に WORD,EXCEL,画像,動画 などの大きなデータを保存する場合に向けて、FILESTREAM という機能が提供されています。


コメント

タイトル:
名前:
Url:
コメント: