SQLServerの2つ以上のインスタンスが同じMDF/LDFファイルを共有することはできません。各SQLサーバーには、独自のデータベースファイルへの排他的アクセスが必要です。したがって、この方法でSQLサーバーの負荷を分散することはできません。
これを処理するには、基本的に3つのオプションがあります。おそらくもっとたくさんありますが、これらは最も一般的に使用される3つです。
オプション1:マスタースレーブ
1つのオプションは、マスタースレーブシナリオで複数のSQLサーバーインスタンスを設定することです。1つのデータベースサーバーがマスターであり、それがすべてのデータと変更を書き込むデータベースです。スレーブはマスターと同期し、Webサーバーがスレーブを読み取り操作に使用できるようにします。ほとんどのWebサイトは通常、書き込むよりも多くのデータを読み取るため、これはデータベースのスループットを向上させるのに役立ちます。Webサイトのコードを変更して、読み取り操作と書き込み操作で別々のデータベースを使用できるようにする必要があります。スレーブはロードバランサーの背後にある可能性があるため、コードは1つの書き込みデータベースサーバーと1つの読み取りデータベースサーバーのみをサポートする必要があります。読み取るとき、ロードバランサーはすべてのスレーブに負荷を均等に分散します。
オプション2:シャーディング
このシナリオでは、データを複数のデータベースサーバーに分散します。簡単な例は、2つのデータベースサーバーに分散されたユーザーデータベースです。奇数のユーザーID(たとえば、1、3、5など)を持つすべてのユーザーはデータベースサーバー1に保存され、偶数のユーザーID(たとえば、2、4、6など)を持つすべてのユーザーはデータベースサーバー2に保存されます。平均して、各データベースサーバーの負荷が約半分になるという利点があります。これは、データベースサーバーを追加したり、独自のカスタムスキーマを使用してデータを分散したりできるため、拡張性も非常に高くなります。複数のデータベースサーバーをサポートするにはコードを変更する必要がありますが、優れた多層設計がある場合は、このモデルをサポートするために1つの層を変更する必要があります。
オプション3:SQLデータベースを使用しない
非SQLデータベースソリューションを使用します。これらは、NoSQLという一般的な名前でますます人気が高まっています。これは「SQLだけではない」という意味です。SQLをまったく使用すべきではないという意味ではありませんが、SQLをすべてに使用しないでください。問題の解決策となる可能性のあるSQLよりも長所(および短所)のあるデータベースシステムは他にもたくさんあります。良い読み物はブログ投稿です:次のNoSQLデータベースを選択するための35以上のユースケース。
選択するオプションは、アプリケーションとデータベースモデルによって異なります。両方のシナリオを同時に使用することもできます。たとえば、ユーザーデータベースのシャーディングと注文テーブルのマスタースレーブ(Webショップ内)。トランザクションサポートが必要な場合、または多くの結合操作がある場合は、どのシナリオを採用するかを決定する際に、これを考慮に入れる必要があります。データベースのスケーリングは非常に複雑なトピックであり、すべての問題に対する1つの解決策はありません。