マルチテナントアプリケーションでは、TenantIdカラムのテーブルがあります。このテーブルは、CONTEXT_INFO
に格納されたTenantIdを使用して、単一のテナントに属する行を選択するビューを使用してのみアクセスされます。このビューが特定のテナント(つまり、同じTenantIdを持つ行のみをロックする)に対して返すトランザクションのみをトランザクションに持たせる方法はありますか?SQLトランザクションは指定されたビューからのみローをロックできます
挿入/更新/削除されるデータがTenantId列に異なる値を持つデータと決して衝突しないと確信したら、テーブル全体をロックするとパフォーマンスが低下します。
WHERE
節を使用していくつかのテーブル行を制限する他のビューにも同じパターンが適用されます。
なぜ、行をロックしたいのですか? – gbn
すべてのテナントにそれぞれ1つではなく共有テーブルがある理由はありますか?とにかくビューを使用している場合、単一の共有テーブルを持つ理由は何ですか? – JNK
申し訳ありません、もっと説明する: すべてのロックは、トランザクション内でない限り、ビューの期間中のみ保持されます。しかし、選択は通常トランザクション内にはありません... – gbn