web-dev-qa-db-ja.com

MSSQLデータベースのパフォーマンスを最適化する方法は?

私はデータベースが最大280のテーブルを持ち、合計データサイズが約1,5GBのdbaです。データベースを調整して、パフォーマンスを向上させたいと思います。

SQLデータベースのパフォーマンスを維持するために何をしますか?インデックス、統計、デフラグをどのくらいいじっていますか?

最大のパフォーマンスキラー/改善点は何ですか?また、最適化する場所を見つけるためにどのようにトラブルシューティングしますか?

編集:これはサードパーティのCRMシステムのデータベースなので、コードを制御できません。彼らは(賢明な場所に)たくさんのインデックスを追加しましたが、サーバーの速度を維持する方法を知りたいです。

私は毎晩走ります

EXEC sp_MSforeachtable "dbcc dbreindex('?', '', 90)"

メンテナンスプランを使用して、インデックスを再構築し、(できれば)統計を更新します。同じプランで「データベースの縮小タスク」も実行されます。

他にどのような夜間/毎週のメンテナンスタスク、または1回限りの最適化を実行できますか?

編集2:

集めたヒント:

  • 「データベースの縮小タスク」を実行しないでください
  • 「自動縮小」プロパティをオフにします
  • "EXEC sp_MSforeachtable" dbcc dbreindex( '?'、 ''、90) "を実行します
  • 次に、「EXEC sp_updatestats」を実行します
6
Frode Lillerud

メンテナンス計画の「データベースの縮小」部分を削除する必要があります。 「データベースの縮小」はインデックスを断片化します! here は、Paul S. Randalによるブログ投稿で、これについて詳しく説明しています。

次の方法で統計を再構築できます。

EXEC sp_updatestats

データベースのインデックスを再作成した後は、常に統計を更新してください。 here は、このベストプラクティスを説明するColinStasiukによるブログ投稿です。

10
quentin

インデックスを作成するだけで、桁違いにパフォーマンスが向上しました(実際にはあまりいじっていません)

明らかな(適切なハードウェア、インデックス作成、およびデフラグ)を処理した後、パフォーマンスの最良のソースは、独自のコードを調べることです。

8
Dani

SQLサーバーがSQLの提供以外に何も実行していないこと、ファイル共有、Webサーバーがないことを確認してください。そのサイズのデータ​​ベースにはパフォーマンスの問題はないはずです。プロファイラーを実行すると、遅い場所に焦点を合わせるのに役立ちます。

データベースが常に自動拡張されないように、十分なスペースを事前に割り当ててください。

5
SqlACID

メインデータベースファイルをログファイルとは異なる物理ディスクに貼り付けます。つまり、.MDFファイルと.LDFファイルを分離します。

2
Nathan DeWitt

sql2005のsp2を使用している場合は、パフォーマンスダッシュボードレポートプラグインをインストールできます(おそらくすでにdbaであるため)。サーバーを再起動した後、パフォーマンスモニターで役立つインデックスを確認します。パフォーマンスモニターは豊富な情報を提供します。時間が経つにつれて、私はそれが多くのものに蓄積することを発見しました(しかしそれは私がfogbugzのようなデータベース設定を持っているためかもしれません...私は同じサーバー上にすべて同じ構造の多くのクライアントデータベースを持っています... sqlサーバーこれらのそれぞれに必要なインデックスを個別に扱い、レポート内の実質的に重複するエントリの束につながります)。とにかく、私は欠落しているインデックスレポートを見て、結果としてインデックスを追加/変更することに多くの時間を費やしています。

よろしく、ドン

2
Don Dickinson

すべてのハードウェアの修正は申し訳ありませんが、使用することをお勧めします。

64ビットWindows 2008大量のメモリ(16 GBくらいか、お勧めしますが、現時点では安価です)15krpm SCSI/SASディスクのミラーリングされたペア上のデータ、理想的にはXeon 55xxシリーズのチップのペア。

これはすべて明らかにコストがかかりますが、パフォーマンスが大幅に向上することを保証します。DBを改善することはできますが、これには時間がかかり(もちろんコストもかかります)、高速化が保証されるわけではありません。

1
Chopper3

SQL ManagementStudioでsql /ストアドプロシージャをテスト実行します。それらを実行するときは、[実行プランの表示]と[クライアント統計]をオンにします。実行時間の大部分を占めるテーブルスキャンまたはその他のステップを探します。 SQL 2008を実行している場合は、コードの実行を高速化するインデックスが提案されます。

1
Chris Porter