sql - 在使用表时更新表中的数据而不锁定表的最佳方法是什么?

标签 sql sql-server sql-server-2005 view truncate

我在 SQL Server 2005 数据库中有一个经常使用的表。它有我们现有产品的可用性信息。我们每小时都会从仓库获取更新,在过去的几年里,我们一直在运行一个例程来截断表并更新信息。这只需要几秒钟,而且到目前为止还不是问题。现在有更多的人使用我们的系统来查询此信息,因此我们看到由于阻塞进程而导致大量超时。

...所以...

我们研究了我们的选择,并提出了一个缓解问题的想法。

  1. 我们有两张 table 。表 A(事件)和表 B(非事件)。
  2. 我们将创建一个指向事件表(表 A)的 View 。
  3. 所有需要此表信息的事物(4 个对象)现在都必须通过 View 。
  4. 每小时例程将截断非事件表,使用最新信息更新它,然后更新 View 以指向非事件表,使其成为事件表。
  5. 此例程将确定哪个表处于事件状态,并基本上在它们之间切换 View 。

这有什么问题吗?在查询中切换 View 会导致问题吗?这可以吗?

感谢您的专业知识。

额外信息

  • 该例程是一个 SSIS 包,它执行许多步骤并最终截断/更新相关表

  • 阻塞进程是查询此表的另外两个存储过程。

最佳答案

您是否考虑过使用snapshot isolation 。它将允许您为您的 SSIS 内容开始一个大的事务,并且仍然从表中读取。

这个解决方案看起来比切换表干净得多。

关于sql - 在使用表时更新表中的数据而不锁定表的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/888338/

相关文章:

SQL 到 HQL 'start with' 和 'Connect by Prior'

具有并发读取和写入的 Mysql 查询性能

sql - 在sql中优先向债权人分享现金

c# - SQL Server 批量复制插入百万条记录很慢

sql - 使用 try-catch block 在 Sql-Server 中删除表

sql - Teradata SQL:PDCR 表连接::有人可以解释一下行数差异吗

c# - 数据库层缓存、触发器和失效

sql-server - 一张表中有多个父子树。从节点值中选择每棵树

sql-server-2005 - SQL Server 动态 ORDER BY 混合数据类型 : is this a good idea?

sql - SQL错误: A RETURN statement with a return value cannot be used in this context