私はデータベースが最大280のテーブルを持ち、合計データサイズが約1,5GBのdbaです。データベースを調整して、パフォーマンスを向上させたいと思います。
SQLデータベースのパフォーマンスを維持するために何をしますか?インデックス、統計、デフラグをどのくらいいじっていますか?
最大のパフォーマンスキラー/改善点は何ですか?また、最適化する場所を見つけるためにどのようにトラブルシューティングしますか?
編集:これはサードパーティのCRMシステムのデータベースなので、コードを制御できません。彼らは(賢明な場所に)たくさんのインデックスを追加しましたが、サーバーの速度を維持する方法を知りたいです。
私は毎晩走ります
EXEC sp_MSforeachtable "dbcc dbreindex('?', '', 90)"
メンテナンスプランを使用して、インデックスを再構築し、(できれば)統計を更新します。同じプランで「データベースの縮小タスク」も実行されます。
他にどのような夜間/毎週のメンテナンスタスク、または1回限りの最適化を実行できますか?
編集2:
集めたヒント:
インデックスを作成するだけで、桁違いにパフォーマンスが向上しました(実際にはあまりいじっていません)
明らかな(適切なハードウェア、インデックス作成、およびデフラグ)を処理した後、パフォーマンスの最良のソースは、独自のコードを調べることです。
SQLサーバーがSQLの提供以外に何も実行していないこと、ファイル共有、Webサーバーがないことを確認してください。そのサイズのデータベースにはパフォーマンスの問題はないはずです。プロファイラーを実行すると、遅い場所に焦点を合わせるのに役立ちます。
データベースが常に自動拡張されないように、十分なスペースを事前に割り当ててください。
メインデータベースファイルをログファイルとは異なる物理ディスクに貼り付けます。つまり、.MDF
ファイルと.LDF
ファイルを分離します。
sql2005のsp2を使用している場合は、パフォーマンスダッシュボードレポートプラグインをインストールできます(おそらくすでにdbaであるため)。サーバーを再起動した後、パフォーマンスモニターで役立つインデックスを確認します。パフォーマンスモニターは豊富な情報を提供します。時間が経つにつれて、私はそれが多くのものに蓄積することを発見しました(しかしそれは私がfogbugzのようなデータベース設定を持っているためかもしれません...私は同じサーバー上にすべて同じ構造の多くのクライアントデータベースを持っています... sqlサーバーこれらのそれぞれに必要なインデックスを個別に扱い、レポート内の実質的に重複するエントリの束につながります)。とにかく、私は欠落しているインデックスレポートを見て、結果としてインデックスを追加/変更することに多くの時間を費やしています。
よろしく、ドン
すべてのハードウェアの修正は申し訳ありませんが、使用することをお勧めします。
64ビットWindows 2008大量のメモリ(16 GBくらいか、お勧めしますが、現時点では安価です)15krpm SCSI/SASディスクのミラーリングされたペア上のデータ、理想的にはXeon 55xxシリーズのチップのペア。
これはすべて明らかにコストがかかりますが、パフォーマンスが大幅に向上することを保証します。DBを改善することはできますが、これには時間がかかり(もちろんコストもかかります)、高速化が保証されるわけではありません。
SQL ManagementStudioでsql /ストアドプロシージャをテスト実行します。それらを実行するときは、[実行プランの表示]と[クライアント統計]をオンにします。実行時間の大部分を占めるテーブルスキャンまたはその他のステップを探します。 SQL 2008を実行している場合は、コードの実行を高速化するインデックスが提案されます。