1

私は、ユーザーごとのセッションごとにSQLサーバーに対して常に書き込み、読み取り、および削除を行うグループ用に作成したプログラムを持っています。個人によって書き込まれたり削除されたりしているすべてのデータが別の人に必要とされることはないため、何が書き込まれたり削除されたりするかについて心配する必要はありません。各ユーザーの書き込みは一意の ID で区切られ、すべてのクエリはその一意の ID に基づいています。

複数のユーザーが同時に同じテーブルから行を書き込み/削除できるようにしたい。を使用してデータの書き込み中にセッションを読み取れるように設定できることはわかっていますSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

質問:

つまり、複数のユーザーが同時に同じテーブルに書き込み/削除することはできますか?

これが不可能な場合の現在の私の唯一の考えは、ユーザーセッションごとに一時テーブルに書き込むようにツールを設定することです。しかし、1日に何百回も一時テーブルを常に作成および削除するのは効率的なオプションではないと思います。

4

1 に答える 1

2

はい、このマルチテナント アプローチを正常に機能させることができます。

  1. UserIdあるユーザーのクエリが別のユーザーに属する行をスキャンする必要がないように、すべてのインデックスの先頭の列を確認してください。
  2. すべてのクエリに等価述語があることUserIdを確認し、実行計画を検証して、それをシークしていることを確認します。
  3. 隣接するユーザーに影響を与える範囲ロックを取得する可能性があるため、シリアライズ可能な分離レベルを使用しないようにしてください。
  4. すべてのインデックスで行ロックが無効になっていないことを確認し、DML 操作を 5,000 行以下に制限します (ロックのエスカレーションを防ぐため)。
  5. 読み取りクエリに read commit スナップショット分離を使用することを検討してください
于 2019-12-30T18:15:50.003 に答える