SQL Server误区30日谈-Day15-CheckPoint只会将已提交的事务写入磁盘

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:
   本系列文章是我在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL Tuesday #11: Misconceptions about.... EVERYTHING!!,经过我们团队的翻译和整理发布在AgileSharp上。希望对大家有所帮助。

 

误区 #15:CheckPoint只会将已提交的事务写入磁盘

错误

    这个误区是由于太多人对日志和恢复系统缺少全面的了解而存在已久。CheckPoint会将自上次CheckPoint以来所有在内存中改变的页写回磁盘(译者注:也就是脏页),或是在上一个CheckPoint读入内存的脏页写入磁盘。无论事务是否已经提交,其所影响的页都会在Checkpoint时写回磁盘。但对于TempDB来说例外,因为TempDB的Checkpoint的事件周期中并不包含将脏页写回磁盘的步骤。

    如果你想了解更多,请阅读下面文章:

Technet 杂志文章:Understanding Logging and Recovery in SQL Server

博文: How do checkpoints work and what gets logged

博文: What does checkpoint do for tempdb?

 

    你可以使用如下两个跟踪标记查看CheckPoint是如何工作的。

3502: 当CheckPoint开始和结束时,将相关信息写入错误日志

3504: 将CheckPoint时写回磁盘的页的信息写入错误日志

 

    为了使用这个跟踪标记,你必须针对所有线程开启,否则你将会在错误日志中什么都看不到。使用DBCC TRACEON (3502, 3504, -1) 针对所有线程开启这两个追踪标记。

    下面的代码可以证明Checkpoint会将未提交的脏页写回磁盘,跟随下面的步骤。

CREATE DATABASE CheckpointTest; 
GO 
USE CheckpointTest; 
GO 

CREATE TABLE t1 (c1 INT IDENTITY, c2 CHAR (8000) DEFAULT 'a'); 
CREATE 
CLUSTERED INDEX t1c1 on t1 (c1); 
GO


SET NOCOUNT ON; 
GO


CHECKPOINT; 
GO


DBCC TRACEON (3502, 3504, -1); 
GO


 

    下面那个事务会产生10MB的脏页,紧接着进行CheckPoint

BEGIN TRAN; 
GO 
INSERT INTO t1 DEFAULT VALUES; 
GO 1280


CHECKPOINT; 
GO


 

    日志如你所见:

    2012-10-17_092031

 

    我们可以清楚的看出,在事务没有提交的情况下,脏页依然会被写入磁盘。

分类: SQL Server DBA误区


本文转自CareySon博客园博客,原文链接http://www.cnblogs.com/CareySon/archive/2012/12/24/2831217.html,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
4天前
|
SQL 存储 数据库连接
LabVIEW与SQL Server 2919 Express通讯
LabVIEW与SQL Server 2919 Express通讯
|
5天前
|
SQL Windows
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
13 4
|
6天前
|
SQL 数据可视化 Oracle
这篇文章教会你:从 SQL Server 移植到 DM(上)
这篇文章教会你:从 SQL Server 移植到 DM(上)
|
6天前
|
SQL 关系型数据库 数据库
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通
|
6天前
|
SQL 存储 网络协议
SQL Server详细使用教程
SQL Server详细使用教程
30 2
|
6天前
|
SQL 存储 数据库连接
C#SQL Server数据库基本操作(增、删、改、查)
C#SQL Server数据库基本操作(增、删、改、查)
7 0
|
6天前
|
SQL 存储 小程序
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
数据库数据恢复环境: 5块硬盘组建一组RAID5阵列,划分LUN供windows系统服务器使用。windows系统服务器内运行了Sql Server数据库,存储空间在操作系统层面划分了三个逻辑分区。 数据库故障: 数据库文件丢失,主要涉及3个数据库,数千张表。数据库文件丢失原因未知,不能确定丢失的数据库文件的存放位置。数据库文件丢失后,服务器仍处于开机状态,所幸未写入大量数据。
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
|
7天前
|
SQL 存储 关系型数据库
SQL Server详细使用教程及常见问题解决
SQL Server详细使用教程及常见问题解决
|
8天前
|
SQL 安全 数据库
SQL Server 备份和还原
SQL Server 备份和还原
|
8天前
|
SQL 存储 安全
SQL Server 权限管理
SQL Server 权限管理