MARS(複数のアクティブな結果セット)のデメリット?


83

MARS(複数のアクティブな結果セット)の欠点を知っている人はいますか?カーソルがMARSよりも便利な場合のように、MARSの使用を避けるべき理由を誰かが知っていますか。

回答:


61

明らかに少なくとも2つの既知の(潜在的な)欠点があります(この(1)チームブログから):

  1. 明らかに、これは、MARS対応の設計に対して実行するように設計されていないレガシーシステムに潜在的な問題を引き起こす可能性があります- 「MARS以外の世界で実行するように最適化された既存のコードは、MARSで変更せずに実行すると、わずかなパフォーマンスの低下を示す可能性があります」

  2. 「MARSを使用すると、複数のマルチステートメントバッチをサーバーに送信できます。サーバーはそのようなバッチの実行をインターリーブします。つまり、バッチがたとえばSETまたはUSEステートメントを介してサーバーの状態を変更したり、TSQLトランザクション管理ステートメント(BEGIN TRAN、COMMIT、ROLLBACK)を使用したりすると、ユーザーとサーバーの両方が混乱する可能性があります。あなたの実際の意図が何であるかについて。」

MARS対応の設計はまだ試していませんが、現在のプロジェクトで試すことに非常に近づいています。競合する(場合によっては依存する)クエリ操作にわずかな問題があります(アクティブなレコードセットが実行しているのと同じデータベースから構成データを遅延ロードするなど)。

詳細については、MSDNサイト(2)を参照してください。

[(1) http://blogs.msdn.com/sqlnativeclient/archive/2006/09/27/774290.aspx ]
[(2)http://msdn.microsoft.com/en-us/library/ms131686.aspx ]


3
@RobSの優れたソリューションを適用する前に、まずこの記事を読んで、次のソリューションではこの問題を解決できないことを確認します:devproconnections.com/development/…またはDB呼び出しの最後に.ToList()を追加します。私の問題を解決しました。ところで、素晴らしいアドバイスをくれたRobSに感謝します、MARSは将来役立つでしょう。:)
テルマト2014

6
  • 一度に1つの接続を行うよりも、わずかに多くのサーバーリソースが必要です。
  • SQL Server2005以降を実行している必要があります。したがって、これはレガシー(ack!)環境で問題になる可能性があります。

SqlTransactionを問題なく使用できます。
Mladen Prajdic 2008

17
「少し多いサーバーリソース」はいくらですか?メモリまたはCPUの観点から見積もりを出すことができますか?これに興味があるのは、主に、リソースがサーバーのコストに比例するAzure環境にいるためです。
Mathias Lykkegaard Lorenzen 2014

1
@MathiasLykkegaardLorenzen質問に対する答えを見つけたことがありますか?
シンジャイ2018年

4

何に応じて?本当の不利な点はありません。

トランザクションのセーブポイントはサポートしていません。しかし、私はこれを不利だとは思いません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.