1

私のテスト環境では、4GBの本番データベースのコピーで、データの約20%をアーカイブし、SSMSから縮小して、最大空き容量が20%であることを示しました。

その結果、2.7GBのデータベースが恐ろしいパフォーマンスを発揮しました。特定のクエリは、本番環境で約0.5秒、現在テスト中の約11秒です。テストでクエリの全文部分を削除すると、実行時間は約2秒になります。

実際の実行計画は、本番とテストで同じです。

すべてのインデックスとフルテキストインデックスを再構築しました。パフォーマンスはほぼ同じです。複製以降、テストデータベースの実際のコンテンツは変更されていません。

私が犯人を探す場所についての考えはありますか(キーボードのすぐ後ろ以外に?:)

編集:わかりました。プロセスを3回繰り返しましたが、毎回同じ結果になりました...ただし、非アクティブなレコードをアーカイブするとすぐに、シュリンクを実行する前にパフォーマンスが低下します。アーカイブの0秒前、18秒後。いくつかのインデックスを再構築した後、7秒戻​​ってください。アーカイブプロセス:

  1. 新しい「アーカイブ」DBを作成します
  2. 削除する3種類のキーを識別し、それらをテーブル変数に格納します
  3. 20個のテーブルからこれらの3つのキーの「アーカイブ」DBへの選択を実行します
  4. これらの3つのキーの20個の「ライブ」テーブルから行を削除しました。

それでおしまい。アーカイブ後、実行プランを見ると、最初の操作であるクラスター化インデックススキャンに40%の時間が費やされています。

これを削除して、SQLサイトに質問を言い換えて再投稿します。

再配置された質問:https ://dba.stackexchange.com/questions/22337/option-force-order-improves-performance-until-rows-are-deleted

4

1 に答える 1

0

質問が誤解を招くため、数日以内にこれを削除しますが、誰かが結果に興味がある場合に備えて、ここで解決しました:

https://dba.stackexchange.com/questions/22337/option-force-order-improves-performance-until-rows-are-deleted

縮小が原因ではなく、縮小によってデータが断片化する可能性があるためだと思いました。本当の問題は、行を削除すると、データ形状の悪い統計サンプルが取得されることでした。その結果、クエリアナライザは不正なプランを返しました。計画では約900行をスキャンすると考えていましたが、代わりに52,000,000を超える行をスキャンしました。

すべての助けをありがとう!

于 2012-08-13T21:01:43.860 に答える