質問

私ためのキューにアクセスは複数の注文プロセッサを通して保存されている。各プロセッサーのパスにユニークなIDでのロックに使用され、次の20注文を独自に利用します。の保存の手順を繰り返しこれらの記録のためのプロセッサとして対応すべきます。

る場合がありま 複数のプロセッサで取得するのと同じ'OrderTable記録 その時点か同時に作動します。この結果として誤りがスローされ、後の工程です。

私の次の行為をすることで各プロセッサを掴んで利用可能なすべての注文だけでラウンドロビンのプロセッサーがつくろうと思いましただけでこのコードはスレッドに対して安全ることのできるプロセッサを鷲掴みにし記録できます。

で明示的に-うんてレース条件やかに解決できる問題です。

BEGIN TRAN
    UPDATE  OrderTable WITH ( ROWLOCK )
    SET     ProcessorID = @PROCID
    WHERE   OrderID IN ( SELECT TOP ( 20 )
                                        OrderID
                                FROM    OrderTable WITH ( ROWLOCK )
                                WHERE   ProcessorID = 0)
COMMIT TRAN


SELECT  OrderID, ProcessorID, etc...
FROM    OrderTable
WHERE   ProcessorID = @PROCID
役に立ちましたか?

解決

編集:

インターネットで調べるメンバーの件数をご確認ください答え: "データ処理キューにSQLサーバREADPASTとUPDLOCK".もし読みやす事ができます。

原作:

ご利用の場合はREADPASTヒントをロックされている行プロセスが設定されています。ま使用ROWLOCKうにすることは避けるべきだからロックが激化.る必要がありまUPDLOCKしました。

で処理1錠20行の過程は2次の20プロセス3か行41-60、など

更新も可能で書くことはできません:

UPDATE TOP (20)
    foo
SET
    ProcessorID = @PROCID
FROM
    OrderTable foo WITH (ROWLOCK, READPAST, UPDLOCK)
WHERE
    ProcessorID = 0

リフレッシュ,2011

ここでしていくことができるからで優雅に出力条項が必要な場合は、選択データを変更。

他のヒント

利用できるサービスいすぎ。も利用できるsp_getapplockにserializeへのアクセス行が削除されレースの条件

"支援の並行処理による自作ロック(Mutexs SQL)" http://sqlblogcasts.com/blogs/tonyrogerson/archive/2006/06/30/855.aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top