【问题标题】:Does longer transaction to a database impact other database?对数据库的较长事务是否会影响其他数据库?
【发布时间】:2015-07-28 14:06:48
【问题描述】:

我有一个基本问题,但无法在网上找到准确的信息。

我打开了一个数据库事务(SQL Server)并进行了多次插入、更新、删除等;整个过程大约需要5个小时才能完成(由于数据量大;假设这是有效的)。

以上所有都发生在事务的范围内。这个较长的事务是否会调用同一服务器上的其他数据库等待或以任何方式干扰它们?我的理解是,这只会影响对相关数据库的调用,而不影响同一实例下的其他数据库。

PS:事务是从 C# 端发起的(即using TransactionScope

【问题讨论】:

  • 如果您进行 5 个小时的繁重操作,它肯定会对数据库之间共享的所有资源产生影响,例如 CPU、内存和可能的磁盘,具体取决于您的设置。此外,事务日志会因此变得非常庞大。
  • 有一次,我尝试在单个事务中插入 600+ 百万行,由于它的 Ram 使用率,CPU 使用率非常高,甚至将磁盘上的可用空间从大约 200 GB 降至几 MB然后它在几个小时后未能给出“没有空间分配”的消息。由于此事务,对其他数据库的查询通常需要几秒钟;跑了很长时间。所以,我想我可以有把握地说,如果你的事务足够大,它会影响对同一实例下其他数据库的调用。
  • 感谢 JamesZ、AbhayChauhan 的投入。

标签: sql-server transactions sql-server-2012 transactionscope sqltransaction


【解决方案1】:

首先... 5 个小时的交易活动时间太多了...您可以验证是否有可能以更少的时间处理进行更多交易...您可能会影响其他数据库的性能,因为在同一台服务器,您向它们进行查询...请记住,在旧版本的 MSSQL RAM 消耗是一个问题,并且此 RAM 没有自动释放... 如果这个过程是由一种编程语言制作的,你可以这样做.. 在其他情况下,你可以在 Jobs 中安排一些东西定期制作,而不仅仅是一次和 5 个小时......

希望这能解决您的疑问!

【讨论】:

  • 感谢您的意见;我知道 5 小时太长了。但我正在尝试帮助一个已经开发的系统。退出 txn 并使用快照隔离是可能的,但是系统已经开发了这么多,此时提出更改可能不是一个好主意(如果根本不可能运行更长的 txns,那么我们可能会放弃这种方法并和别的东西一起去)。也不能将它们拆分为许多较小的 txn,因为我们希望在出现任何错误时回滚整个 txn。 PS:Txn 是由 C# 制作的(不是从 SQL Server 发起的)
猜你喜欢
  • 2020-12-13
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多