分析やレポートのために大量のデータをテーブルに保存する場合、スライディングウィンドウと呼ばれる手法を用いることがあります。データを1つのテーブルに保存し続けると、データ件数が膨大になりメンテナンスやパフォーマンスに支障をきたすことがあります。このような状況を避けるために、利用するのがスライディングウィンドウです。
大量のデータが保存されたテーブルであっても、利用するデータはその一部であることが多くあります。そこで、利用形式に合わせてデータ範囲を想定し、その範囲内のデータをテーブルに納めることによってデータの件数を抑える手法がスライディングウィンドウです。主に過去1年分のデータを利用するような場合であれば、過去1年分のデータをテーブルに納め、1カ月経過するごとにデータの入れ替えを行う、というような形です。このように「窓枠」をずらすように、テーブルに保存する値範囲を指定していくことから、このような名称が使われています。
データパーティショニングを利用することにより、このスライディングウィンドウを簡単に、かつ高速に実施できます。パーティション化されたテーブルは、データの格納先となるパーティション情報をメタデータとして保持しています。このメタデータを書き換えることにより、物理的なデータの移動を発生させずにデータの格納内容を変更できます。
スライディングウィンドウを行うためには、同じ定義かつ同じ分割列を利用してパーティション化されたテーブルが必要となります。また、移動元、移動先のパーティションはそれぞれ同じファイルグループに存在している必要があります。今回は保存用テーブルとして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の保存用テーブルに対し、パーティション番号2(2005年1月分約8万件)を移動させる場合、リスト5のようなクエリになります。
ALTER TABLE [dbo].[SALES] --移動元 SWITCH PARTITION 1 TO [dbo].[SALES_ACV] --移動先 PARTITION 3;
このクエリの実行はまさに一瞬で完了します。これはデータの物理的な移動が発生せず、メタデータの書き換えのみが行われているからです。DELETEやINSERTを駆使した物理的なデータ移動に比べ、劇的といえるほど実行時間に差が出ます。SWITCH句を利用したパーティションの移動は、データパーティショニングを利用する一番のメリットといえるでしょう。
パーティションのSWITCHによってSALESテーブルのパーティション1は空となりました。このパーティションをマージするにはリスト6のクエリを実行します。
ALTER PARTITION FUNCTION testPF() MERGE RANGE ('2005/2/1');
リスト6のコードの実行によって、パーティションのデータ範囲は2005年2月から2006年1月までとなりました。
マージ処理とは逆に新たにパーティションを追加する場合は、リスト7のクエリを実行します。データを保存するファイルグループを指定し、続いてパーティションのデータ範囲を指定します。
ALTER PARTITION SCHEME testPS NEXT USED [FG1]; GO ALTER PARTITION FUNCTION testPF() SPLIT RANGE ('2006/2/1'); GO
このように、パーティションの切り替え(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アプリケーション』(ソフトバンクパブリッシング刊/共著)。
Copyright © ITmedia, Inc. All Rights Reserved.