为了更好地平衡成本和性能,我试图更好地理解SQL server是如何进行日志缓冲和刷新的。我知道,除非您使用delayed durability,否则事务的日志条目将在提交时一直刷新到磁盘。然而,我真正好奇的是,还有什么会让我脸红。例如,如果日志磁盘已经忙着为以前的事务刷新条目(因此还不能刷新当前事务),那么其他事务的条目也会同时刷新到磁盘,还是每个事务的条目会被顺序刷新。鉴于在大多数情况下,实际刷新到磁盘是最耗时的操作,而且对于日志记录操作,刷新的时间只受刷新大小的影响最小(至少对于许多小型事务的频繁情况而言),因此对于日志处理器来说,对管道刷新进行流水线刷新似乎是一个很好的优化,因为在进行一次刷新时,等待刷新的任何提交事务的条目都会聚集在一起,而不是一次刷新一次。这将提高吞吐量,但对第一个事务的延迟影响很小(甚至可能提高平均延迟)。是否有人知道在Server中是否进行了这样的优化?如果它是在一个特定的版本中制作的,您能识别该版本以及在哪里找到该信息吗?
发布于 2017-02-22 00:17:03
然而,我真正好奇的是,还有什么会让我脸红。
任何低于当前请求刷新的LSN的日志也将被刷新。日志记录按顺序放入日志缓冲区,并将所有事务序列化到该数据库的日志缓冲区。注意,单个日志记录不被刷新,它们被放入日志块中,日志块被刷新。
是否有人知道在Server中是否进行了这样的优化?
它被称为组提交,如果它能够更多地聚在一起以获得更好的整体性能(粗略地说),它就会将正常提交延迟几毫秒。我相信它是在2008年增加的。
https://dba.stackexchange.com/questions/165092
复制相似问题