【问题标题】:Why do updates inside of a SQL transaction still need disk IO?为什么 SQL 事务内部的更新仍然需要磁盘 IO?
【发布时间】:2010-04-07 19:32:48
【问题描述】:

在 SQL Profiler 中,您可以看到通过主键对表进行非常简单的更新每次大约需要 10-30 毫秒。大约每 10 次更新时,写入列显示 1,在所有其他更新中,它显示 0。这一定意味着大约每 10 个更新语句仍然需要磁盘 IO。我不知道这是为什么。在事务提交之前将所有 IO 排队不是更有效吗?

【问题讨论】:

标签: sql sql-server tsql sql-server-2008 transactions


【解决方案1】:

一旦您更新了一个大小为 10 000 000 条记录的表,您希望将这些内存更新存储在哪里?

您希望在哪里存储事务日志。

虽然 RAM 看起来很丰富,但我们不能假设它是无穷无尽的......

【讨论】:

    【解决方案2】:

    此外,即使有无限的 RAM,等待 I/O 直到事务结束也可能不是最佳计划,因为这样事务就需要等待所有 I/O 操作完成。

    否则实际上需要为长时间运行的事务写入磁盘(但以不破坏原子性的方式)。

    【讨论】:

    • 为什么不缓冲几兆字节而不是只缓冲 10 次写入?
    • 10 次写入很可能只有几兆字节。我不知道 MS SQL Server 缓冲的详细信息,但通常缓冲限制是en.wikipedia.org/wiki/ACID 合规性的结果。
    【解决方案3】:

    这是交易记录

    【讨论】:

      猜你喜欢
      • 2021-11-28
      • 1970-01-01
      • 2015-08-15
      • 2014-06-19
      • 1970-01-01
      • 2023-03-16
      • 2020-06-05
      • 1970-01-01
      相关资源
      最近更新 更多