SQLサーバーでのスケールアウトに問題があります。これは主にいくつかの理由によるものです:1)不十分に設計されたデータ構造、2)重労働およびビジネス/処理ロジックはすべてT-SQLで実行されます。これは、サーバーで分析を実行するために雇ったRedmondのMicrosoftSQL担当者によって検証されました。私たちは文字通り、コマンドタイムアウトを継続的に増やすことで問題を解決しています。これはばかげており、長期的な解決策としては適切ではありません。それ以来、次の戦略と一連のフェーズをまとめました。
フェーズ1:出血を止めるために、問題にハードウェア/ソフトウェアを投げます。
これには、キャッシングサーバーなどのいくつかの異なるものが含まれますが、ここで皆さんに質問したいのは、特に、新しいSQLサーバーでの双方向トランザクションレプリケーションの実装に関連しています。これを実装するための2つのユースケースがあります。
この新しいSQL「処理ボックス」で長時間実行(およびテーブル/行のロック)SELECTを実行し、それらをキャッシュレイヤーにスローして、UIにキャッシュから読み取らせることを考えていました。これらのSELECTはレポートを生成し、Web上に結果を返します。
ほとんどのビジネスロジックはSQLです。処理ロジックを実行するSELECT、INSERT、UPDATE、およびDELETEに対して実行中のクエリがいくつかあります。最終結果は、処理が完了した後(多くのカーソル)、実際にはINSERT、UPDATE、およびDELETEでいっぱいになります。これら2つのサーバー間の負荷を分散することが考えられます。
いくつか質問があります:
これらは、双方向のトランザクションレプリケーションの優れたユースケースですか?
このソリューションが「正しく機能」し、競合について心配する必要がないことを確認する必要があります。このソリューション内で競合が発生するのはどこですか?衝突を防ぐためにIDシードの増分をリセットすることに関するいくつかの記事を読みましたが、これは理にかなっていますが、UPDATE / DELETEまたは競合が発生する可能性のあるその他の場所をどのように処理しますか?
他にどのような問題が発生する可能性があり、注意する必要がありますか?
この問題に対するより良い解決策はありますか?
フェーズ2:ロジックを.NETに書き直し、SQLストアドプロシージャを最適化して、セットベースの操作のみを実行するようにします。
これには明らかにしばらく時間がかかります。そのため、ユーザーが経験している苦痛を止めるために実行できるいくつかの準備手順があるかどうかを確認したかったのです。
ありがとう。