翻译日志缓存(The log cache)

日志缓存(The log cache)

节译自:Microsoft SQL Server 2012 Internals P177(译注:本节是2012版本新增)

     就像数据页在写入磁盘之前会先写入数据缓存(data cache)一样,SQL Server会在物理写入磁盘之前先缓存日志记录。64位系统中,日志缓存最多包含128个项;32位系统中,则最多包含32个项。每个项含有一个缓冲器(buffer)用来存储日志记录——在它们作为一整个块(block)写入磁盘之前。虽然块的大小从512字节至60KB,但是因为缓冲器(Buffer)能容纳的最大的潜在块,所以缓冲器(buffer)总是60KB。实际分配的缓冲器数目(译注:即不是所有的项都被用到)根据实际的工作负荷和日志磁盘的性能来决定。当日志缓冲器(buffer)被写入到磁盘后,SQL Server会重新使用这个缓冲器。如果写入过程占用时间较长,那么就需要分配更多的缓冲器(buffer);如果写入过程很快完成,那么就只需要很少的缓冲器(buffer)就够了。由于一次日志写入最多可以是4M大小,所以如果你的的工作会产生大的日志块,那么你就比产生小日志块的工作需要较少的缓冲器(buffer)了。

    SQL Server 2012引进了一种新的结构用来管理缓存日志块——日志池(the log pool)。日志池是一个根据块ID(block id)和数据库ID (database id)进行散列计算的散列表(hash table)。日志池允许SQL Server为各种不同技术存取日志记录集(sets of log records)。比如,复制代理(replication agents)需要存取已复制事务的日志集、镜像(mirroring)和复制管理器(replica manager)需要存取事务日志来进行镜像和复制,等等。如果你检索DMV列表,你会发现7个DMV涉及到日志池。尽管实际已缓存日志块有一个全局散列表,但是因为每个数据库管理它自己的日志,所以元数据(metadata)指向了日志池管理器——该管理器管理它们自己的日志记录和一个它们数据库的空的日志buffer的空池。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。