SQL Server 2008でバックアップからインデックスを除外する方法


19

夜間のフル(および定期的な差分)バックアップは、主にテーブルのインデックスの量が原因で非常に大きくなっています。バックアップサイズの約半分がインデックスで構成されています。

バックアップには単純復旧モデルを使用しています。

どのような方法は使用して、そこにあるFileGroupsために、またはいくつかの他のファイルの分割方法除外バックアップからインデックスを?

これをフルテキストカタログにも拡張できると便利です。

回答:


15

完全復旧モードに切り替えると、ファイルグループを使用してこれを行うことができますが、実際には非常に不器用です。データをプライマリファイルグループに残し、インデックスを別の(既定ではない、それがキー)ファイルグループに配置します。

次に、バックアップをずらして、毎晩プライマリのファイルグループバックアップを行い、X分ごとにトランザクションログバックアップを行います。

災害が発生すると、プライマリファイルグループを単独で復元します。データは突然オンラインになりますが、インデックスはそうではありません。ただし、通常の状態に戻すには、そのデータを新しいクリーンなデータベースにエクスポートし、そこからインデックスを追加する必要があります。すべてのファイルグループを復元せずにデータベースを完全にオンラインにすることはできず、「他のファイルグループはもう必要ない」と言うことはできません。

この仕組みの詳細については、ファイルグループの復元に関するビデオチュートリアルをご覧ください


Hehe、私は非クラスター化インデックスを独自のファイルグループに移動しました。Simple Recoveryモデルは私を完全に妨害した。インデックスは実際にデータよりも大きかった-それは私をいかさました!まあ、おそらくいくつかのサードパーティが魔法の弾丸のヒントヒントをリリースするでしょう:)
ジャロッド・ディクソン

1
そして多分、ちょうど多分、あなたはそれのために無料のライセンスを取得します。;-)
ブレントオザー

5

正直なところ、他の人がここで提起する他の問題を克服したとしても、あなたは本当にこれをしたくありません。

緊急時にバックアップを復元する場合、インデックスが再構築されるのを待ちたくないので、そうするまでひどいパフォーマンスに苦しむことになります。

インデックスなしでバックアップを復元したいという状況は考えられないので、すべての場合、本当に同時にバックアップしたいと思うでしょう。

この問題に対する他の解決策を探す必要があるでしょう。

-アダム


1
IMO、非常に推定「あなたは再構築するインデックスを待ちたくない」
ジェフ・アトウッド

2
はい。ただし、ここで一般化することに留意してください。私は、インデックスをバックアップして再構築を避ける方が良い状況よりも、インデックスを捨てて再構築する方が良い状況が多いと確信していません。言い換えれば、一般的には1つのケースの方が適切であり、特定の状況でそれが必要でない限り、バックアップする側でエラーが発生する必要があります。そうは言っても、すべての状況は異なります。SOインデックスを再構築するのにかかる時間と、完了するまでサイトのパフォーマンスがどれだけ低下するかを知りたい(再構築中にアップすると仮定)。
アダムデイビス

長期アーカイブのバックアップは、私がこの質問に導いた特定のユースケースです。プロジェクトは完了しており、データベースをオンラインにしたくないが、必要以上に大きなバックアップファイルでネットワークドライブを乱雑にする必要もない。インデックスの定義を失いたくありませんが、これを再度復元する必要が生じた場合、インデックスの再構築を気にしません。
-richardtallent

3

これはサポートされていないように聞こえます。このバグレポート情報から

これには多くの関心が寄せられているため、舞台裏で何が起こっているのか、この機能を実装することの意味についてもう少し詳しく説明します。一部の種類のインデックスページは、個別の割り当て単位に分離されますが、他の種類はデータページと混在しています。現在、割り当てビットマップのみを参照してエクステントが割り当てられているかどうかを確認する場合、各割り当てユニットに格納されている内容を解釈する必要があります。さらに、データをコピーするデータファイルの線形スキャンを実行することはできなくなり、ファイル内をスキップすることになります。このデータ構造の解釈はすべて、バックアップを大幅に遅くします。バックアップの穴に対処するために修正しなければならない構造がたくさんあるため、復元はさらに興味深いものになります。それ以外の場合、バックアップされていないページを指す割り当てマップがあり、そのためゴミなどがあります。したがって、これを実装すると、保存するデータが少なくなり、時間がかかり、多くの時間がかかります長く復元します。考慮すべきもう1つの側面は、これを適切に行うには大量のエンジニアリング努力が必要になるということです。それは表面的な問題ではありませんが、見たいと思う他の機能が構築されないことを意味すると考えてください。


これはフルテキストインデックスの問題ではないでしょうか?それらはかなり大きい傾向があります。
マイケルテーパー

1

クレイジーなアイデアかもしれませんが、ここに行きます。

  1. 多くのスペースを占有する非クラスター化インデックスを削除する
  2. バックアップする
  3. 削除したインデックスを再作成します

もちろん、データベースで1日のダウンタイムが許容されている場合にのみ、実際にこれを行うことができます。

また、SQL Serverはこれらをヒープに変換するのに多くの時間を浪費するため、クラスター化インデックスを削除しないでください。

余分なディスク容量を購入することは、まだ簡単な解決策のように思えますか?

圧縮バックアップを行うことを検討しましたか?これは2008年の新機能であり、オプションになる可能性があります。


はい、バックアップの圧縮をオンにしましたが、組み込みの圧縮はそれほど優れていません。実際には、週の終わりに圧縮されていないバックアップを取得し、開発者がダウンさせるために7zipで圧縮します。サイズは約1/3ですが、実行には時間がかかります。
ジャロッドディクソン

DBのダウンタイムに関しては、serverfault.comstackoverflow.comの両方を可能な限り稼働させずに生きていけるでしょうか?私はその考えに身震いします:)
ジャロッドディクソン

私はそれを自分でテストしていませんが、同じくらい疑っています。あまり設定可能ではありません。圧縮をオプションとしてまだ検討している場合は、SQL Lightspeed(高価ですが素晴らしいですが、価格は非常に交渉可能です)とRedGateのSQLバックアップを見てください。非常に構成可能な優れた結果
ニックカバディアス2009年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.