浅谈checkpoint与内存缓存
事务日志存在检查点checkpoint,把内存中脏数据库写入磁盘,以减少故障恢复的时间,在此之前有必要提下SQL Server内存到底存放了哪些数据?
SQL Server内存使用
对SQL Server数据库有一定了解的人一定知道,数据库为提高交互速度是将数据提取到内存缓冲区,然后客户端取内存的数据,内存中数据按用途分类具体可如下
(1)database cache
顾名思义,用于存放数据的缓冲区,用户修改某个数据时,SQL Server会修改内存中相应页面的数据,不会立即修改磁盘中数据,用户读取数据也是从内存中读取,若内存中未命中才从磁盘获取。对于内存中已经修改的数据,需要checkpoint或lazy write的时候集中处理。
因此最理想的情况,将磁盘中所有数据都存放在内存中,而不需要到磁盘中读取数据。只要后续通过checkpoint写入修改的数据即可。
(2)各类Consumer
SQL Server的其他组件需要通过内存完成任务,其中主要包括:connection,执行计划,编译、执行上下文,元数据等。
(3)其他(线程,第三方代码)
通过以上分类能了解到,内存缓冲区主要数据缓存和计划缓存。而checkpoint具体做了哪些事情呢?接下来便说说checkpoint的执行过程
checkpoint
go
select [current lsn],Operation,CONTEXT,[Transaction ID],[Log Record Length],[Previous LSN],[Minimum LSN] ,AllocUnitName,[Page ID],[Slot ID],[Begin Time],[End Time],[RowLog Contents 0],[RowLog Contents 1],[Log Record]
from fn_dblog(null,null)
where [current lsn]>'00000115:000001e2:0001'
1、在checkpoint 执行后,往日志中插入操作类型为LOP_BEGIN_CKPT的记录;在此日志中记录MinLSN,MinLSN可能为以下情况
• CheckPoint的开始LSN
• 还未结束的事务在日志的最小LSN
• 尚未传递给分发数据库的最早的复制事务起点的 LSN【镜像和复制分发】

2、往日志中插入操作类型为LOP_XACT_CKPT的记录。
下图为不存在活动事务的情况。

下图为存在活动事务,log Record记录活动事务LSN。

3、若数据库恢复模式为简单恢复模式,或者非完整/大容量恢复模式在为执行全备的情况下,将MinLSN之前的所有VLF设置为reusable。
4、把当前日志缓冲区的日志页写入磁盘,将数据库缓冲区的脏数据写入磁盘。
dbcc errorlog
go
dbcc traceon(3502,3504,-1)
go
checkpoint
go
xp_readerrorlog
从下图可以看出cleaned up 4 bufs ;注意:不管事务是否已经提交都要写入磁盘。

5、往日志中插入操作类型为LOP_END_CKPT的记录。

6、将checkpoint操作的开始LSN写入数据库的启动数据页。
以上具体各个步骤记录的详细内容需要分析LogRecord的记录lsn内容,此文暂不细说。
需要注意以上几点:
(1)checkpoint将脏页写入磁盘的时候,会先将日志写入磁盘。以保证数据永久性
(2)将脏页写入磁盘,是所有已经修改的数据,这里包括正在活动的事务
(3)不只是简单恢复模式在执行checkpoint的时候会导致日志重用,未做过完整备份的完整恢复模式和大容量日志恢复模式也会导致日志重用。(这是因为在为做完整备份之前,不用保证一条完整的日志序列)
(4)checkpoint 的主要作用是为了减短故障恢复时间,主要写入脏页数据操作为懒写入。
浅谈checkpoint与内存缓存的更多相关文章
- 浅谈Java的内存模型以及交互
本文的内存模型只写虚拟机内存模型,物理机的不予描述. Java内存模型 在Java中,虚拟机将运行时区域分成6中,如下图: 程序计数器:用来记录当前线程执行到哪一步操作.在多 ...
- 浅谈Linux的内存管理机制
转至:http://ixdba.blog.51cto.com/2895551/541355 一 物理内存和虚拟内存 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此, ...
- 浅谈CPU、内存、硬盘之间的关系
计算机,大家都知道的,就是我们日常用的电脑,不管台式的还是笔记本都是计算机.那么这个看着很复杂的机器由哪些组成的呢,今天就简单的来了解一下. 先放图: 图上展示的就是计算机的基本组成啦. 首先是输入设 ...
- 转:浅谈Linux的内存管理机制
一 物理内存和虚拟内存 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概 ...
- 浅谈浏览器http的缓存机制
针对浏览器的http缓存的分析也算是老生常谈了,每隔一段时间就会冒出一篇不错的文章,其原理也是各大公司面试时几乎必考的问题. 之所以还写一篇这样的文章,是因为近期都在搞新技术,想“回归”下基础,也希望 ...
- [转载]浅谈C/C++内存泄漏及其检测工具
http://dev.yesky.com/147/2356147_3.shtml 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如Sm ...
- 12.Object-C--浅谈OC的内存管理机制
昨天学习了OC的内存管理机制,今天想总结一下,所以接下来我要在这里bibi一下:OC的内存管理. 首先我要说的是,内存管理的作用范围. 内存管理的作用范围: 任何继承了NSObject的对象,对其他基 ...
- [转]浅谈C/C++内存泄露及其检测工具
转自:http://www.cnblogs.com/taoxu0903/archive/2007/10/27/939261.html 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问 ...
- 浅谈JVM与内存分配
一.程序内存分配 初始内存分配 当一个程序准备运行时,它首先向java虚拟机要内存,但是java虚拟机本身没有权限,它只能向操作系统申请内存,此时java虚拟机会拥有一个初始内存, 此处额外说明一下e ...
随机推荐
- Linux下动态库查找路径的问题
说到和动态库查找路径相关的问题,总体上可以分为两类: 第一类: 通过源代码编译程序时出现的找不到某个依赖包的问题,而如果此时你恰好已经按照它的要求确确实实.千真万确.天地良心地把依赖库给装好了, ...
- 数据结构作业——word(栈)
Description TonyY 是一个 word 小白,今天他对 word 中撤销和恢复功能特别感兴趣,玩耍了一个上午(mdzz~) ,现在他知道了它们的功能和快捷键:撤销:ctrl+z,可以撤销 ...
- 多播程序设计(基于UDP协议)
首先要搞清楚多播IP地址有哪些 D类IP地址就是多播地址,范围是224.0.0.0 ~ 239.255.255.255 其中又划分为以下类别 D类地址的划分 类别 地址范围 描述 局部链接地址(本地网 ...
- 利用 Django REST framework 编写 RESTful API
利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...
- nodejs fs module
fs.watchFile(filename[, options], listener)# Added in: v0.1.31 filename <String> | <Buffer& ...
- PHP责任链设计模式
<?php //责任链设计模式 /** * 每个对象,储存着对自己上级的引用, * 如果自己处理不了,交给上一级. */ class board{ protected $power=1; pro ...
- Runner站立会议02
开会时间:21.10~21.30 地点:二教103 今天做了什么:学习五大布局的使用方法 明天准备做什么:学习数据的存储 遇到的困难:知识点太多,信心受挫 站立会议图: 燃尽图:
- Java数据结构——队列
//================================================= // File Name : Queue_demo //-------------------- ...
- Java 9.10习题
<1>设计4个线程对象,两个线程执行减操作,两个线程执行加操作 //================================================= // File Na ...
- json跨域
很有意思的两种连接 ,效果相同. 不同之处: aehyok({"result":"我是远程js带来的数据"}); <script type="t ...