0

これは、SQLサーバーのパフォーマンスを向上させるための試みにすぎません。

Sql Server2008Enterpriseエディションのインスタンスを持つ単一のWindowsServer2008サーバーがあります。SQL Serverのバイナリファイル、OSファイル、MDFファイル、LDFファイルはすべて1つのディスクにあります。

以前は、NLBを使用してIISの負荷分散を提供していました。2台のWindowsServer2008マシンがあり、2台のマシンの両方に同じWebサイトが構成され、Webサイトにデータを提供する別のマシンがありました。ユーザーは仮想IPアドレスにアクセスし、各ノードの現在の負荷に応じて、クラスターはトラフィックを分割します。

ここで、SQLServerトラフィックの負荷分散に同じことを試すことができるかどうかを知りたいと思います。計画しているのは次のとおりです。

  1. SQLサーバーの2つのインスタンスを2つの別々のマシンにインストールします。
  2. MDF、LDFファイルをSAN、RAID 5などの共有メディアに配置します。これらは2つのインスタンスの両方に表示され、MDFとLDFを2つのインスタンスの両方に接続します。
  3. 2つのノードからクラスターを作成し、アプリケーションにクラスターのIPアドレスへのアクセスを許可します。

この場合、IISと同様に、クラスターはトラフィックを2つのノードに分割し、単一のMDFとLDFにアクセスしているため、同期の問題は発生しないと思います。

私の質問は:

  1. これにより、SQLサーバーのパフォーマンスが実際に向上しますか?
  2. 他の影響はありますか(コードで多くのトランザクションを使用します)?
4

1 に答える 1

7

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つの解決策はありません。

于 2012-11-19T12:39:17.073 に答える