浅谈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 ...
随机推荐
- glibc resolv/res_send.c getaddrinfo() buffer stack smash when dealing malformation big DNS Response Package
catalogue . 漏洞简述 . 调试环境搭建 . 漏洞利用 . 漏洞分析 . 缓解修复方案 1. 漏洞简述 0x1: 函数调用顺序 getaddrinfo (getaddrinfo.c) -&g ...
- dedecms /member/edit_baseinfo.php SQL Injection Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 会员模块中存在的SQL注入 Relevant Link: http:// ...
- 通过Minimal版的iso安装CentOS7之后升级Desktop
重新安装了CentOS7,但是使用的是Minimal的iso镜像安装的,所以安装之后只有文本界面,这里记录一下重新安装图形界面的过程. 连接网络 通过文本界面登陆后是没有连接网络的,所以需要修改配置连 ...
- [JavaEE]Get请求URI中带的中文参数在服务端乱码问题的解决方法
在Get请求中,如果请求参数中带有中文,如 http://localhost:8080/DinnerParty/shop/search?query=多伦多, 在服务端拿到的是乱码. 这是因为客户端提交 ...
- 旅图beta版 asp.net web api 单元测试
旅图 beta版 asp.net web api 单元测试 测试接口:http://120.27.7.115:1010/Help 测试目的 对每个接口单元进行测试,保证每个接口的可靠性. 单元描述 注 ...
- http+mysql结合keepalived做热备
preface 公司要求http+mysql+redis+二次开发的ldap要求做高可用,所以此处写写keepalived在这种 环境下的高可用.keepalived这个软件我就不啰嗦了,众所周知,基 ...
- POJ 1330 Nearest Common Ancestors (最近公共祖先LCA + 详解博客)
LCA问题的tarjan解法模板 LCA问题 详细 1.二叉搜索树上找两个节点LCA public int query(Node t, Node u, Node v) { int left = u.v ...
- 关于input/textarea提交内容空格回车转换问题,以及ng-model去除空格问题
input/textarea提交内容空格回车转换问题 /*my-enter-bind.js*/ /*回车换行显示转义*/ 'use strict'; angular.module('app') .di ...
- VMWare12虚拟CentOS7共享文件的过程
环境: 宿主机:Win10企业版,虚拟机:VMware pro12.5,虚拟OS:CentOS7.0 过程: VMware菜单:虚拟机->设置->选项,选中宿主机要共享的磁盘或目录,点击确 ...
- jquery控制滚动条改变上面固定(fixed)导航条或者搜索框的属性
<script type="text/javascript"> $(document).ready(function(){ $(window).scroll( func ...