連載
» 2006年12月21日 00時00分 公開

データパーティショニングで巨大DBも楽々管理SQL Server 2005を使いこなそう(11)(3/3 ページ)

[石橋潤一,株式会社システムインテグレータ]
前のページへ 1|2|3       

データパーティショニングを利用したスライディングウィンドウ

 分析やレポートのために大量のデータをテーブルに保存する場合、スライディングウィンドウと呼ばれる手法を用いることがあります。データを1つのテーブルに保存し続けると、データ件数が膨大になりメンテナンスやパフォーマンスに支障をきたすことがあります。このような状況を避けるために、利用するのがスライディングウィンドウです。

 大量のデータが保存されたテーブルであっても、利用するデータはその一部であることが多くあります。そこで、利用形式に合わせてデータ範囲を想定し、その範囲内のデータをテーブルに納めることによってデータの件数を抑える手法がスライディングウィンドウです。主に過去1年分のデータを利用するような場合であれば、過去1年分のデータをテーブルに納め、1カ月経過するごとにデータの入れ替えを行う、というような形です。このように「窓枠」をずらすように、テーブルに保存する値範囲を指定していくことから、このような名称が使われています。

図3 スライディングウィンドウ 図3 スライディングウィンドウ
テーブルに格納するデータ範囲を一定とすることで、テーブルのメンテナンス性やパフォーマンスを維持する。

 データパーティショニングを利用することにより、このスライディングウィンドウを簡単に、かつ高速に実施できます。パーティション化されたテーブルは、データの格納先となるパーティション情報をメタデータとして保持しています。このメタデータを書き換えることにより、物理的なデータの移動を発生させずにデータの格納内容を変更できます。

SWITCH句によるパーティションの切り替え

 スライディングウィンドウを行うためには、同じ定義かつ同じ分割列を利用してパーティション化されたテーブルが必要となります。また、移動元、移動先のパーティションはそれぞれ同じファイルグループに存在している必要があります。今回は保存用テーブルとしてSALES_ARCHIVEを用意しました。

CREATE PARTITION FUNCTION testPF_ACV (datetime)
AS RANGE LEFT FOR VALUES ('2004/12/1','2005/1/1','2005/2/1');
CREATE PARTITION SCHEME testPS_ACV
AS PARTITION testPF_ACV
TO (FG3,FG3,FG1,FG1);
CREATE TABLE [dbo].[SALES_ACV] (
  [SALES_NO] [numeric](10, 0) IDENTITY (1, 1) NOT NULL ,
  [SALES_DATE] [datetime] NULL ,
  [CUST_NAME] [varchar] (100) COLLATE Japanese_CI_AS NULL ,
  [SALES_AMOUNT] [numeric](10, 0) NULL 
) ON testPS_ACV(SALES_DATE);
リスト4 保存用テーブルの作成

 リスト4の保存用テーブルに対し、パーティション番号2(2005年1月分約8万件)を移動させる場合、リスト5のようなクエリになります。

ALTER TABLE [dbo].[SALES]   --移動元
  SWITCH PARTITION 1
TO [dbo].[SALES_ACV]        --移動先
  PARTITION 3; 
リスト5 SWITCH句によるパーティションの切り替え
移動元と移動先のファイルグループが一致する必要がある点に注意すること。

 このクエリの実行はまさに一瞬で完了します。これはデータの物理的な移動が発生せず、メタデータの書き換えのみが行われているからです。DELETEやINSERTを駆使した物理的なデータ移動に比べ、劇的といえるほど実行時間に差が出ます。SWITCH句を利用したパーティションの移動は、データパーティショニングを利用する一番のメリットといえるでしょう。

 パーティションのSWITCHによってSALESテーブルのパーティション1は空となりました。このパーティションをマージするにはリスト6のクエリを実行します。

ALTER PARTITION FUNCTION testPF() 
  MERGE RANGE ('2005/2/1');
リスト6 空になったパーティションをマージする

 リスト6のコードの実行によって、パーティションのデータ範囲は2005年2月から2006年1月までとなりました。

 マージ処理とは逆に新たにパーティションを追加する場合は、リスト7のクエリを実行します。データを保存するファイルグループを指定し、続いてパーティションのデータ範囲を指定します。

ALTER PARTITION SCHEME testPS NEXT
  USED [FG1];
GO
ALTER PARTITION FUNCTION testPF() 
  SPLIT RANGE ('2006/2/1');
GO 
リスト7 新たなパーティションを追加

 このように、パーティションの切り替え(SWITCH)とマージ、追加を行うことで、スライディングウィンドウ処理を容易に、かつ高速に実行できます。

まとめ

 データパーティショニング機能がEnterprise Editionに搭載されていることから分かるように、この機能は大量のデータ件数を扱う大規模データベースに適した機能です。

 このような巨大なデータベースでは、メンテナンス1つを行うにも多くの時間と労力が必要となります。データパーティショニングを利用することによって、このようなメンテナンスに必要となるコストを大きく削減できるはずです。データの利用状況に合わせてパーティションの設計を行い、この機能を活用してください。

連載の終わりに

 SQL Server 2005に関する新機能を取り上げるためにスタートした本連載は、今回で最終回になりました。SQL CLRやデータベースミラーリングなど、SQL Server 2005の目玉となる機能を取り上げてきましたが、うまく情報をお伝えすることができたでしょうか。

 5年ぶりのバージョンアップとなったSQL Server 2005には、ここで取り上げた以外にも、まだまだ多数の新機能が存在します。リリースからほぼ1年が経た現在、新機能の解説から実運用のノウハウまで、さまざまな情報を集めることができる状況になってきました。この機会にぜひ、SQL Server 2005の評価を進めてください。

 長い間ご愛読いただき、本当にありがとうございました!(連載完)

著者紹介

石橋潤一

株式会社システムインテグレータ勤務。Web+DBの業務アプリをメインに開発に携わる。@IT連載記事「SQL Server 2005 CTPレビュー」執筆のほか、著書に『DBマガジン別冊 SQL Server 2005徹底活用ガイド』(翔泳社刊/共著)、『ASP.NET+SQL Server ゼロからはじめるWebアプリケーション』(ソフトバンクパブリッシング刊/共著)。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。