私が使用しているアプリケーションのデータベース構造を見ていると、同じSQL Serverインスタンスで3つの異なるデータベースを使用していることがわかりました。
最初のものには、ほとんど変更されないメインデータが含まれています。
2つ目は、トラフィックとボリュームが多いイベントログを含み、最後の1つは古いイベントログのアーカイブデータベースです。
データベースが同じインスタンスで実行されており、データベースファイルが同じディスクに配置されているため、この構造の利点は何だろうと思いました。したがって、これによるパフォーマンスの向上は期待できません。
多分私は何かを見落としていて、誰かが私が考えていなかった利点を私に指摘することができると思いました。
更新:
メンテナンスとセキュリティに関していくつかの良い点がありました。しかし、私はまだパフォーマンスの改善を得ることが可能かどうか疑問に思っています。
より一般的な質問は次のとおりです。1つのテーブルのパフォーマンスが同じデータベース内の他の大きなテーブルの影響を受けますか(フラグメンテーションまたはその他の理由により)、またはそれらの影響はおそらく無視できますか?.
ソリューションを設計した開発者/アーキテクトに質問してください。彼らだけが本当に知ることができます。いくつかの理由が考えられます。
データベースが異なる時間に追加された可能性があります。最初にメインデータベース、次にイベント用のデータベースが必要で、最後に古いデータを保存する場所を決定しました。環境によっては、既存のデータベースに多数の新しいテーブルを追加するよりも、新しいデータベースを作成する方が簡単な場合があります。私は時々本番データのバックアップを取り、読み取り専用アーカイブとしてオンラインにして、現在のデータベースからすべての古いデータを削除するシステムに取り組んできました-したがって、同時にいくつかの古いデータベースを利用できます。
将来の使用:多分彼らはシステムが最終的に異なるサーバー(または多分その高トラフィックデータベースのためのより高速なディスク)に分割される必要があると考えました。
実際には、上記のすべて、一部、またはまったくない可能性があります...
ここには2つの異なる質問があり、個別に回答します。
Q:1つのテーブルのパフォーマンスが同じデータベース内の他の大きなテーブルの影響を受ける可能性はありますか?
はい、挿入/更新/削除中です。 SQL Serverには、データベースごとに1つのログファイルしかありません。挿入/更新/削除すると、データがログファイルに書き込まれるまでトランザクションは完了しません。
2つのテーブルがあるとします。
これらのテーブルが両方とも同じデータベース内にあり、ドキュメントの作成中にも注文しようとすると、注文トランザクションのパフォーマンスが低下する可能性があります。
さて、これは極端な例ですが、一般的に、これが重要度が低く、値が大きく、幅が狭いレコードテーブルを、それほど重要ではなく、値が大きく、幅が広いレコードテーブルとは別のデータベースに格納することをお勧めします。ただし、両方のテーブルのセットをまったく同じ時点に復元する必要がある場合、またはサーバー間でそれらを一緒にフェイルオーバーする必要がある場合は、同じデータベース内にある必要があります。 SQL Serverは、AlwaysOn可用性グループなどのフェイルオーバー時のデータベース間のトランザクションの一貫性を保証しません。
Q:変化の速いデータ、変化の遅いデータ、変化のないデータがある場合、それらを異なるデータベースに分離する必要がありますか?
はい、いくつかの理由により: