如何防止 table 锁定多个用户同时写入和读取 table?

How to prevent table locking with multiple users writing and reading from table at the same time?

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

我希望多个用户能够同时从同一 table 中 write/delete 行。我知道我可以将会话设置为能够在使用 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 写入数据时进行读取。

问题:

也就是说我可以同时拥有来自同一个 table 的多个用户 write/delete 吗?

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

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

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