1

我有一个我为一个小组编写的程序,该小组在每个用户的每个会话中不断向我们的 SQL 服务器写入、读取和删除。我不需要担心正在写入或删除的内容,因为一个人正在写入/删除的所有数据都不会被另一个人需要。每个用户写入由唯一 ID 分隔,所有查询都基于该唯一 ID。

我希望能够同时由多个用户从同一个表中写入/删除行。我知道我可以将会话设置为能够在使用SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED.

问题:

也就是说,我可以让多个用户同时从同一个表中写入/删除吗?

目前,如果这不可能,我唯一的想法是设置工具以写入每个用户会话的临时表。但我认为这不是每天数百次不断创建和删除临时表的有效选择。

4

1 回答 1

2

是的,您可以使这种多租户方法正常工作。

  1. 确保所有索引的前导列是UserId这样一个用户的查询永远不需要扫描属于不同用户的行。
  2. 确保所有查询都有一个相等谓词UserId并验证执行计划以确保它们正在寻找它。
  3. 确保不使用可序列化的隔离级别,因为这可能会导致影响相邻用户的范围锁。
  4. 确保未对所有索引禁用行锁定并将 DML 操作限制为 <= 5,000 行(以防止锁定升级)
  5. 考虑为您的阅读查询使用已提交的读取快照隔离
于 2019-12-30T18:15:50.003 回答