none
SQL SERVER 2008 date型フィールドでデータパーティション後、データ圧縮するとSQLエンジンの挙動がおかしくなる RRS feed

  • 質問

  • 以下の手順でデータパーティションとデータ圧縮の組み合わせを行うと、挙動がおかしくなります。

    1.
    date型フィールドでデータパーティションを行うように宣言する。
    2. レコードを追加する。
    3. パーティションの圧縮を有効にする。
    4. データをselectする。←
    抽出した全レコードのdate型フィールドの値が不正な値でselectされる。
    5. 試しに特定のレコードを更新しようとすると重大なエラーが発生。(*1)

    (*1) 現在のコマンドで重大なエラーが発生しました。結果は破棄しなければなりません。


    お伺いしたい点は以下です。
    1.
    int型やdatetime型でデータパーティションとデータ圧縮を行ったところ、問題なく動いているようでした。
        date型で上記のようなエラーを回避するにはどのようにしたらよいでしょうか。

    どうぞ宜しくお願いいたします。

    検証に使用したスクリプトはこちら

     --パーティション関数作成
    create partition function pFunc1(date)
    as range right for
    values ('2006/01/01', '2007/01/01', '2008/01/01')

    --パーティション構成作成
    create partition scheme pScheme1
    as partition pFunc1
    to ( [primary], [primary], [primary], [primary] )

    --テーブル作成
    drop table tstP
    create table tstP
    (
     id int identity(1,1) not null,
     col1 date
    ) on pScheme1( col1 )

    --テストデータを追加
    insert into tstP
    values
    ('2005/10/15'),
    ('2006/01/01'),
    ('2006/05/22'),
    ('2007/01/01'),
    ('2007/12/31'),
    ('2008/01/01')

    --投入したレコードを確認
    select $partition.pfunc1(col1), * from tstP

    --データ圧縮を有効化
    alter table tstP rebuild partition = 1 with ( data_compression = ROW )

    --圧縮後のレコードを確認
    select $partition.pfunc1(col1), * from tstP

    --試しにUpdate ※重大なエラー発生
    --update tstP set col1 = '2008/09/01' where id = 1
    2008年9月16日 7:02

回答

すべての返信

  • kssol さん、はじめまして。

    評価版を使って提示された検証スクリプトを実行し同じエラーが発生することを確認しました。

    そこで

     

    alter table tstP rebuild partition = 1 with ( data_compression = ROW )

     

    alter table tstP rebuild partition = all with ( data_compression = ROW )

    に変更したろころ正常に動作しました。

     

    int型やdatetime型の場合とdate型で挙動が違う原因は分かりません。パーティションで圧縮属性を統一しなけらばいけないという説明も見当たらなかったので正解かどうかは分からないのですが一度ご確認ください。

    2008年9月20日 13:27
  • やっちん さん、はじめまして。
    評価版での検証再現報告、ありがとうございます。
    こちらの環境はWindowsServer2008EEでSqlServer2008EE ( 10.0.1600.22 RTM ) になります。

    ご報告ありがとうございます。確認いたしました。
    やっちんさんのおっしゃられるように、全パーティションに対して一律にデータ圧縮を指示する分には問題ないことが分かりました。

    どうやら、date型でのレンジパーティションと一部のパーティションに対してのデータ圧縮機能の組み合わせを行うと、問題があるみたいですね。
    パッチ待ちになりそうな感じがします。
    業務において利用する場合は、レンジパーティションにdate型を使わないようにするか、もしくはデータ圧縮を行わないようにするように気をつけます。


    2008年9月24日 5:59
  •  米田です。

     

     SQL Server 2008のCU1で改善されているようです。

    詳しくはこちら

    http://support.microsoft.com/kb/956717/en-us
    Cumulative update package 1 for SQL Server 2008
    http://support.microsoft.com/kb/957810/

    2008年9月24日 13:10
  • 米田さん、はじめまして。

    パッチ適用後、検証環境にて確認しました。
    表題の不具合は確かに改善されています。

    問題の切り分けと対応方法が確立でき、とても助かりました。
    この度はありがとうございました。

    失礼いたします。

    2008年9月25日 7:47