インデックスの再編成または再構築を心配しているDBAは、データの損失を引き起こす可能性がありますか?


14

インデックスの断片化が95%を超えるデータベースがあります。最善のこととして、インデックスの再構築はこれまでになく少ない再編成で行われたことがわかります。年間で。

(公平のために、これらのテーブルでは自動更新された統計が有効になっているようです。また、公平のために、彼はバックアップ(1日ごとの完全ログと1時間ごとのログ)に熱心です。

私が尋ねると、DBAはインデックスの再構築または再編成に消極的だと言いました。私が理由を尋ねたとき、彼はそれを実際に表現できませんでした。最終的に彼は、潜在的なデータ損失を心配していると言いました。たとえば、Great Plains Dynamicsの会計アプリケーションでデータベースの1つが使用されており、彼はそれについて非常に心配しているようでした。

私はDBAではありませんが、私が読んだことから、彼の不安は...私には理解するのが難しいようです。

次に何をすべきかわかりません。私はどのように進むべきか提案しますか?


そのデータベースが24時間365日大打撃を受け、オフラインになると世界が終わらない限り、そのような動作の言い訳はありません。私は毎週12,000以上のデータベースで再編成と統計のスクリプトを書き直しました。16年間で、コントローラが不良で破損したのは1つだけです。
Brain2000

回答:


22

データベースインデックスを再構築しても、データが失われることはありません。ただし、再構築中のインデックスは通常、再構築が完了するまで使用できないため、パフォーマンスが大幅に低下する可能性があります。そのため、影響を受けるシステムがアイドル状態の営業時間外に行う必要があります。

パラノイアはDBAにとって良いことです-データの損失を心配している場合は、バックアップの適切なテストを実行します(別のシステムに復元し、データがすべて揃っていることを確認します)。それでも心配な場合は、インデックスを再構築する前に完全バックアップを実行することをお勧めします。


11
Paranoiaの+1は良いDBA特性です
ジョエルCoel

私は健康的なパラノイアを完全に理解し、感謝しています。2回測定し、1回切ります。私が混乱しているのは、これは警告ではなく理解の欠如についてのようです。そして、「慎重に試してみる方法を決めよう」ではなく、「そうではない」ということです。(たとえば)データのコピーを使用してテストEC2インスタンスをスプールし、インデックスを再編成し、時間を調整し、結果テーブルの行をデルタして、データが破損していないことを確認できます。そのような計画は注意を払うだろう...怠慢とは対照的に?
グレッグヘンダーショット

1
インデックスの再編成は常にオンラインであり(デフラグ中はすべてのインデックスが利用可能)、インデックスの再構築もオンラインで行えることを思い出してください(インデックスにWITH (ONLINE=ON)BLOB列が含まれていない限り)
Remus Rusanu

@Greg Yeah、「あまりにも断片化されたインデックスに触れないでください。パフォーマンスが低下している可能性があります」という考え方は、私からも地獄を混乱させます- REINDEXインデックスの内容が大きく変わるテーブルの「予防保守」私の経験では一般的です(インデックスの大部分が静的である場合はそれほど
重要ではありませ

@Remusの良いヒント-これはパフォーマンスへの影響を軽減します(ディスクI / Oが高いままになるため、速度が低下しますが、少なくともインデックスを使用するものは、順次スキャンに頼らずにそれを使用できます) )
voretaq7

6

インデックスの再構築またはデフラグによるデータ損失のリスクはありません。


すでにある程度のデータ破損がある場合、またはハードウェアに障害がある場合を除きます。しかし、どちらの場合でも、インデックスの断片化は心配する必要はありません。
-db2

しかし、それはインデックスの再構築による破損ではなく、他の何らかの問題による破損です。
mrdenny

4

インデックスの再編成は、SQLサーバーからの時間と労力が少ないため、平日のタイプのインスタンスで実行できます。あなたが言っていることが本当なら、今までにないインデックスを再編成しても、サーバーに大きな影響を与える可能性があります。インデックスの再構築は、削除されて再構築されるため、SQLサーバーからかなりの労力がかかります。平日の夜間に再構築を行うことは、サーバーがインデックスでビジーであり、それを使用するユーザーにサービスを提供しないというリスクに見合うだけの価値はありません。

私はvoretaq7に同意します。もし彼がインデックスの操作を心配しているなら、最初に開発サーバーまたはテストサーバーで試してみて、反応を確認してください。


別のアプローチとして、明示的DROP INDEXに再作成することもありCREATE INDEXます-SQL Serverについてはよくわかりませんが、PostgreSQLを再構築(REINDEX)するよりも、インデックスを吹き飛ばしてゼロから開始する方がよい場合があることを知っています。
voretaq7

SQL Serverでは、削除と再作成は不要です。
ジャスティンディアリング

@ジャスティンあなたが正しいと確信しています(実際、Sybaseの時代から、再インデックス付けの動作は事実上ドロップ/作成なので、Postgresのようなインデックスロックの奇妙さはありません)
-voretaq7

インデックスの再編成には時間がかかりません。どちらが長くかかるかは、インデックスの断片化の量によって異なります。
mrdenny
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.