2009-04-03 9 views
7

データベースアーキテクチャは、それぞれが同じデータベース構造のインスタンスを持つ2つのSql Server 2005サーバー(すべての読み取り用とすべての書き込み用)で構成されています。トランザクションレプリケーションを使用して、読み取ったデータベースを最新の状態に保ちます。トランザクションレプリケーションで1秒未満の遅延を得ることは可能ですか?

2台のサーバは非常に高性能であり(書き込みサーバには32GBのRAMが搭載されています)、ファイバネットワークで接続されています。

このアーキテクチャを決定すると、読み込みサーバーに複製されるデータのレイテンシは数ミリ秒のオーダーになると考えられました(明らかに負荷にもよる)。実際には、最も単純な場合でさえ約2〜5秒のレイテンシが見られますが、それは不満足です。最も単純なケースでは、書き込みDB上の単一のテーブル内の単一の行の単一の値を更新し、読み取りデータベース内の新しい値を監視するのにかかる時間を確認することを意味します。

1秒未満のレイテンシを達成するには、どのような要素を検討する必要がありますか?これは達成可能ですか?

また、異なるモードの複製を検討する必要がありますか?データとログファイルの場所のベストプラクティスは何ですか?

編集アドバイスや洞察力のためのすべての

おかげで - 私たちはを経験している潜伏期間が正常であると信じています。私たちはdbホスティング会社が待ち時間を予想するのは間違っていました!

我々はthis MSDN article(見出しの下に「スケーリングデータベース」)の底部付近に記載された技術を使用している、と我々はこの警告を適切に処理することができなかったと思います:

、このような専門的な作成の結果をデータベースは待ち時間である:書き込みは今読者のデータベースに配布するのに時間がかかるだろう。しかし、レイテンシに対処できれば、スケーリングの可能性は大きいです。

データ項目が「揮発性」であると見なされたときに、書き込みデータベースからの読み取りを強制するキャッシング・メカニズムの変更を実装します。

答えて

2

いいえ高速ハードウェアであっても、SQL Serverのトランザクションレプリケーションで1分の1秒の遅延時間を達成する可能性は非常に低いです。

1〜5秒の遅延を得ることができれば、うまくいきます。 hereから

:トランザクションレプリケーションを使用して

、それは出版社の後ろの数 秒に加入者のための可能な です。 の待ち時間がほんの数秒である場合、 サブスクライバは レポートサーバーとして簡単に使用でき、 ユーザークエリとレポートを パブリッシャからサブスクライバにオフロードすることができます。

カスタマーテーブルをこの セクションの後半に示します。サブスクライバーは、 秒後にパブリッシャーの後になりました。 の方が印象的であっても、 の60%が2秒の待ち時間を持っていました 以下です。時間は、レコードが挿入されたときに から、または が実際にサブスクリプションの データベースに書き込まれるまで、パブリッシャで更新された から測定されます。

+0

ええ、私はあまりにもその記事を読むだろう:( –

1

私はそれが間違いないと言います。

私は見ます:

  • 2つのサーバー間のあなたのネットワーク
    ランピングコマンドを、あらゆる問題
    がある場合は、サーバが隣接している場合は、< 1ミリ秒を持っている必要があります参照してください。これは、ネットワークトラフィック(ボリューム)可能性があり
    サーバー上の
  • ボトルネックの1ギガバイト/秒のために設定されていないネットワークカードのような

    いくつかのクエリにいくつかの分析を行うと、あなたがどうかを確認
  • アンチウイルスやその他のもの
  • 読み取りデータベース上のいずれかの選択が書き込みをブロックしているかどうかを確認してください。
    (nolock)を追加し、分析している1つまたは2つのクエリに違いがあるかどうかを確認します。

複雑なシステムがあり、問題がある場合は、どのコンポーネントが問題であるかを特定して修正する必要があります。

実行する必要があるレポート/選択が最新である必要がある場合は、トランザクションレプリケーションがおそらく最適です。彼らはあなたがログの出荷を見ることができない場合、それはそれぞれのインポートといくつかのダウンタイムを追加しますが。

データ/ログファイルの場合、パフォーマンスが最大になるように、それらが別のドライブにあることを確認してください。

+0

pingが罰金(<1ms)であるにもかかわらず、ネットワークトラフィックは非常に低く、私はテストで1つのテーブルに非常に単純な更新を試みています。 –

+0

そう、おそらくネットワークではないでしょう。あなたはあなたの更新を行っている間に選択を実行していますか?それはロックの問題である可能性が高いです。 – Bravax

+0

@answered Apr 3 at 8:38 Bravax:トランザクションレプリケーションで1秒未満の潜伏期間を記述する記事を引用できますか? –

1

トランザクションレプリケーションについて覚えておきたいことは、1つの更新で、その変更が発生するために複数の操作が必要になることです。

最初にソーステーブルを更新します。 次に、ログリーダーは変更を確認し、変更を配布データベースに書き込みます。 次に、ディストリビューションエージェントはディストリビューションデータベース内の新しいエントリを確認し、その変更を読み取り、正しいストアドプロシージャをサブスクライバ上で実行してローを更新します。

2台のサーバーで文の実行時間を監視すると、数ミリ秒で実行されていることがわかります。しかし、ログリーダーと配布代理店があなたを殺すようなことをするのを待っているのは、遅れ時間です。

サブ秒の処理時間が本当に必要な場合は、独自の処理エンジンを作成して、あるサーバーから別のサーバーに移動するデータを処理する方法を検討したいと思うでしょう。このようにSQL Service Brokerを使用してSQL Server固有のものであり、サードパーティ製のコードを記述する必要はありません。

関連する問題