为什么SQL事务内部的更新仍然需要磁盘IO?

为什么SQL事务内部的更新仍然需要磁盘IO?,sql,sql-server,tsql,sql-server-2008,transactions,Sql,Sql Server,Tsql,Sql Server 2008,Transactions,在SQL Profiler中,您可以看到通过主键对表进行的非常简单的更新每次大约需要10-30毫秒。大约每10次更新,写入列显示1,其他所有更新显示0。这一定意味着大约每10条update语句仍然需要磁盘IO。我想知道这是为什么。在事务提交之前将所有IO排队不是更有效吗?一旦更新了一个大小的表,比如10000条记录,您希望将这些内存更新存储在哪里 您希望将事务日志存储在何处 尽管RAM看起来很丰富,但我们不能假设它是无止境的…此外,即使使用无止境的RAM,使用I/O等待事务结束也可能不是最佳计划

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

一旦更新了一个大小的表,比如10000条记录,您希望将这些内存更新存储在哪里

您希望将事务日志存储在何处


尽管RAM看起来很丰富,但我们不能假设它是无止境的…

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


否则,实际上需要为长时间运行的事务写入磁盘(但这样做不会破坏原子性)。

这是事务日志,它会在一定程度上排队等待所有I/O请求。当检查点出现时,脏页会成批写出。为什么不缓冲几兆字节而不是只有10次写入?10次写入很可能是几兆字节。我不知道MS SQL Server缓冲的详细信息,但通常对缓冲的限制是法规遵从性的结果。