SQL Server を継承しましたが、テーブルのパーティショニングの問題を発見しました。よくわからない理由で、既存のテーブル パーティションに新しいパーティションを追加できません。
環境:
SQL Server 2005 Enterprise、データベースのサイズは約 400 GB、RAM は 4 GB、32 ビット システムのみ。
分割されたテーブルの詳細:
*テーブルは、複数のディスク ボリューム上の 13 個のファイル グループに分割されています。
*パーティション関数は、datetime 値である 12 の境界点を持つ RANGE LEFT です。
※境界点は日付四半期構造(例:2009-12-31 23:59:59、2010-03-31 23:59:59、2010-06-30 23:59:59)で構成されています。
*日時の値はパーティション キーです。
*データは現在の日付に基づいてテーブルに毎日挿入されますが、関数の最後の境界点は「2010-06-30 23:59:59」であるため、最後のファイル グループのみがデータを受け取ります。
*テーブルには、テーブルと整列されたクラスター化インデックスと、3 つの非一意の非クラスター化インデックスがあります (2 つは整列され、1 つは完全に異なるファイル グループに存在します)。
*現在のテーブル ボリュームの詳細:
データ容量: 75GB+
インデックス容量: 50GB+
行数: 2 億以上
問題:
現在、最後のファイル グループ/パーティションには最大の日付境界ポイントがないため、日付「2010-06-30 23:59:59」以降のすべてのデータがこのパーティションに挿入されているか、まだ挿入されています。幸いなことに、トランザクション データの量はかなり少ないですが、2 年間で最終的なパーティションは 22 GB という驚異的なサイズにまで成長しました。この既存のパーティションからデータを分割または削除したくありません。ただし、新しいファイル グループを追加し、既存のパーティション関数を変更して、将来のすべてのデータが新しいファイル グループに挿入されるようにしたいと考えています。新しい将来の日付を境界点として追加して、その日付以降に挿入されたすべてのデータが新しいファイル グループ/パーティションに移動するようにしたいと考えています。
使用した方法:
ALTER DATABASE 関数 - SUCCESSを使用して新しいファイル グループ/ファイルを追加しました。
新しく作成されたファイル グループが 'NEXT USED' に割り当てられるようにパーティション スキームを変更しました - SUCCESS。--パーティションスキームを変更するために使用されるスクリプト--
ALTER PARTITION SCHEME [partition_scheme_name] NEXT USED (new_filegroup_name);
Partition Function を変更して、新しい境界点 - FAILを追加しました。
--関数に新しい境界点を追加するために使用されるスクリプト--
ALTER PARTITION FUNCTION partition_function_name() SPLIT RANGE ('2012-10-01 23:59:59) GO
エラー:
SPLIT RANGE 手法を使用して既存のパーティションに新しい境界点を追加すると、データベース トランザクション ログがいっぱいになったため失敗しました (18GB に制限されています)。これには 2 つの理由で驚きました - 1): SPLIT RANGE の使用はメタデータ関数のみだと思っていました (間違っている場合は修正してください) 2): 私の新しい境界点は日付としてテーブルにまだ存在しません値なので、データの移動はないと想定しました。
私がこれまでに試したこと:
*テストサーバーを使用してこの方法を正常にテストしましたが、データセットははるかに小さくなりました.
*次に、本番データベースの完全なコピーをテスト システムに復元しました。無制限に大きくなる 2 つ目のデータベース ログ ファイルを追加し、パーティション関数を再度変更しようとしました。元のデータベースのトランザクション ログは予想どおりいっぱいになりましたが、セカンダリ データベースのトランザクション ログは 60 GB に増加しました。さらに、tempdb は 14 GB に増加しました。別のエラーが原因でプロセス全体が再び中止されたときに、新しいファイル グループのサイズが増加し始めました。今回は以下のエラーでした。
('一意のインデックス'Index_name' を持つオブジェクト'table_name' に重複キー行を挿入できません)。
ここで私を完全に困惑させる2つのことがあります:
1): テストのエラーで言及されているインデックスは、クラスター化されていない非一意のインデックスです。重複エラーが発生するのはなぜですか?
2): さらに言えば、新しい最大境界点として新しい datetime 値を追加していますが、この値はまだテーブルに存在しません。なぜデータ移動があるのでしょうか???
前述のように、はるかに小さなデータセットを使用してこの方法をテストしたところ、完全に機能しました。本番データセットで機能しない理由がわかりません。ここで非常に明白な何かが欠けていますか? どんなアドバイスでも大歓迎です。お時間をいただきありがとうございます。