1

sql_serverの内部動作について詳しく知りたいです。

私の問題は、マルチユーザーデータベースを作成しようとしているのに、同時実行データの問題を実験していることです。

例として:

  1. UserAはアプリケーションを開き、コミットせずにtableA内の何かを変更します。
  2. UserBもアプリケーションを開き、tableAも読み取ろうとします。
  3. userAがコミットするまでUserBはブロックされます

私の質問は次のとおりです。

  1. どうすればそれを解決できますか?
  2. userBに古い情報を提供して、その情報が古いことを知らせる方法はありませんか?
4

2 に答える 2

0

アプリケーションを開き、コミットせずにtableAの何かを変更します

これを行うアプリケーションを作成しないでください。アプリケーションは、ユーザーアクションの期間中ロックを保持するべきではありません。フォームを編集してもデータはロックされません。OptimisticConcurencyについてお読みください。

それでもアプリケーションはときどきブロックされます。最善のアプローチは、行ベースのバージョニング、別名をデプロイすることです。スナップショットアイソレーション。行のバージョン管理ベースの分離レベルについてを参照してください。

于 2012-07-25T11:09:12.313 に答える
0

userAがコミットするまでUserBはブロックされます

これは、最近のDBMSには当てはまりません。それらのほぼすべてが何らかのMVCCを実装しているため、ライターはリーダーをブロックし、リーダーはライターをブロックしません。

私が間違っていなければ、これはMicrosoft SQL Serverのデフォルトの動作です(2012年でも)が、より高い同時実行性を可能にするように変更できます

于 2012-07-25T11:12:41.767 に答える