热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

SQLSERVER事务日志

谈到事务日志就不得不谈下检查点Checkpoint,简称CKP.事务日志和检查点都是为了数据库的快速恢复而存在的。我们需要知道检查点是干什么的,它和事务日志有什么关系。CKP是干什么的?总所周知,数据的更改并没有直接写入mdfndf数据文件中,而是写入了b

谈到事务日志就不得不谈下检查点 Checkpoint ,简称 CKP. 事务日志和检查点都是为了数据库的快速恢复而存在的。我们需要知道检查点是干什么的,它和事务日志有什么关系。 CKP是干什么的? 总所周知,数据的更改并没有直接写入mdf/ndf 数据文件中,而是写入了b

  谈到事务日志就不得不谈下检查点 Checkpoint ,简称 CKP. 事务日志和检查点都是为了数据库的快速恢复而存在的。我们需要知道检查点是干什么的,它和事务日志有什么关系。

  CKP是干什么的?

  总所周知,数据的更改并没有直接写入mdf/ndf 数据文件中,而是写入了buffer pool中; 当CKP被触发后,检查点将“全部”脏数据页从当前数据库的buffer pool刷新到数据文件上。所谓的脏数据,是那些被更改的 data page ,在内存中却没有写入磁盘。全部脏数据包括已提交的数据更改和未提交的数据更改。刷新到数据文件是指将数据更改的后镜像copy写入数据文件,对数据的更改会保留一个前镜像和一个后镜像,好比我们修改文章,先保存原文作为前镜像,而后将修改后的文章作为后镜像。同时CKP也会flush cached log 到日志文件中 点击打开链接 .我更愿意将CKP看作是一个闹钟,我们可以对它按照一个规则定时,然后提醒SQL的部件data writer / log writer去干活。

  总之,大多数情况下,什么时候数据更改写入数据文件,是由CKP决定的。

  CKP什么时候被触发

  备份数据库 (全备,差异备份,日志备份)

  checkpoint命令

  关闭数据库

  Alter database命令

  自动的检查点触发 (SQL依据recovery interval 服务器配置选项建议的时间上限触发检查点 或者日志已满 70%触发检查点)

  间接检查点 (SQL 2012 新特性 ,详情参与点击打开链接)

  CKP, Lazywriter, Eagerwriter的区别

  总所周知这三个SQL的process都会将脏数据写入数据文件,但是它们的目的和触发条件完全不同

  CKP的使用目的是为了在SQL intance停止后(例如断电),快速的instance recovery。它是一个时间点的标记,标记了数据库恢复的起始点。在这个起始点,所有的脏数据copy都写入了磁盘(它不会释放内存空间),从而在以后的恢复过程中节省时间。

  Lazy writer是为了更好的利用buffer pool。 它会定期检查data cache,按照LRU算法,将长期未使用到的dirty page 写入磁盘, 清除dirty page释放内存空间。

  Eager writer 是为BCP等批量插入而存在的。该进程会写入与无日志记录的操作(例如大容量插入和选择插入)相关联的脏数据页。该进程允许以并行方式创建和写入新页。也就是说,调用操作不必等待整个操作完成,即可将页写入磁盘 (摘于msdn点击打开链接 )。这样可以保证Buffer Pool有足够的空间完成批量操作。

  CKP和事务日志有什么关系呢?

  与其说是与事务日志的关系,不如说是与事务日志序列号(Log Sequence Number, 简称LSN)的关系,,在我以后的blog会对LSN做阐述。

  检查点触发有一个起始时间点,这个时间点会被记录在事务日志里,获得一个CKP起始时间点LSN。当完成脏数据写后,CKP同样在日志文件里记录一个结束时间点的LSN。检查点还会记录一个最小恢复LSN (minLSN), minLSN必须存在检查点记录里才能成功进行回滚(roll back / undo), minLSN告诉了SQL Server 可以回滚的最远时间点。至于minLSN是什么,SQL如何定义minLSN,SQL server如何使用它,在我以后的blog做阐述)这里只要记住CKP会纪录这个minLSN,它很对undo很重要。

推荐阅读
  • 为了评估精心优化的模型与策略在实际环境中的表现,Google对其实验框架进行了全面升级,旨在实现更高效、更精准和更快速的在线测试。新的框架支持更多的实验场景,提供更好的数据洞察,并显著缩短了实验周期,从而加速产品迭代和优化过程。 ... [详细]
  • 在数据库事务处理中,InnoDB 存储引擎提供了多种隔离级别,其中 READ COMMITTED 和 REPEATABLE READ 是两个常用的选项。本文详细对比了这两种隔离级别的特点和差异,不仅从理论角度分析了它们对“脏读”和“幻读”的处理方式,还结合实际应用场景探讨了它们在并发控制和性能表现上的不同。特别关注了行锁机制在不同隔离级别下的行为,为开发者选择合适的隔离级别提供了参考。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 本文深入探讨了 MySQL 中 `ANALYZE TABLE` 和 `SHOW CREATE TABLE` 的语法规则及其应用。`ANALYZE TABLE` 语句用于分析并存储表的关键字分布情况,以优化查询性能。该操作在执行过程中会获取表的读锁,确保数据的一致性。而 `SHOW CREATE TABLE` 则用于显示创建表时的详细语句,包括表结构、索引和存储引擎等信息,有助于数据库管理和维护。通过这些命令,DBA 可以更好地理解和优化数据库性能。 ... [详细]
  • 在数据库设计中,谨慎使用外键至关重要。本文探讨了九个关键原因,包括数据完整性的维护、性能优化、系统复杂性的管理、数据迁移的灵活性以及对外部系统的依赖性控制。通过深入分析这些因素,可以帮助开发人员和架构师做出更明智的设计决策,确保数据库系统的高效与稳定。 ... [详细]
  • MySQL 数据备份与恢复的常见方法及其实践经验总结。物理备份涉及直接复制数据库文件,适用于大规模数据库环境,但无法在异构系统(如 Windows)中恢复。逻辑备份则侧重于导出建表语句和数据插入语句,便于跨平台迁移和部分数据恢复。此外,本文还探讨了增量备份、全量备份以及使用工具如 mysqldump 和 Percona XtraBackup 的具体应用场景和优缺点。 ... [详细]
  • vtkGlyph3D 是一种强大的符号化可视化工具,能够将三维数据集中的每个点用预定义的几何图形(如球体或箭头)进行表示。该工具不仅支持自定义符号的方向和缩放比例,还能够在复杂的数据场中突出显示关键特征,从而提高数据的可解释性和可视化效果。通过这种方式,用户可以更直观地理解和分析三维数据集中的重要信息。 ... [详细]
  • 本文提出了一种高效的数据结构与算法,旨在解决超大整数(超出常规 `long` 类型范围)的加法运算问题。通过引入自定义的数据结构,该方法能够有效地存储和处理任意大小的整数,并在保证计算精度的同时,显著提升运算效率。实验结果表明,该方法在处理大规模数据时表现出色,具有较高的实用价值。 ... [详细]
  • 本文详细介绍了Java编程中的几种重要技巧,包括冒泡排序和选择排序这两种基础的数组排序算法。冒泡排序通过多次遍历数组,将较大的元素逐步移动到数组末尾;而选择排序则在每次遍历中选择最小的元素并将其放置在正确的位置。此外,文章还探讨了二分查找算法,该算法适用于已排序的数组,能够高效地进行查找操作。同时,文中还介绍了Java中的`Arrays`类及其常用方法,以及如何进行进制转换和装箱与拆箱操作,提供了丰富的示例和注意事项,帮助读者深入理解这些核心概念。 ... [详细]
  • 本文详细解析了九度编程平台上的斐波那契数列高效算法挑战(题目编号:1387)。该挑战要求在1秒的时间限制和32兆的内存限制下,设计出高效的斐波那契数列计算方法。通过多种算法的对比和性能分析,本文提供了优化方案,帮助参赛者在限定资源条件下实现高效计算。 ... [详细]
  • 本文深入解析了计算力扣平台上汉明距离问题的官方解法,并通过优化算法提高了计算效率。具体而言,我们详细探讨了如何利用位运算技巧来高效计算数组中所有数对之间的汉明距离,从而在时间和空间复杂度上实现了显著改进。通过实例代码演示,使读者能够更直观地理解这一优化方法。 ... [详细]
  • Go 项目中数据库配置文件的优化与应用 ... [详细]
  • 在使用 iframe 嵌入外部页面时,经常会遇到页面加载不同步的问题。当嵌入的页面响应较慢时,这种异步加载会导致用户体验不佳。本文介绍了如何通过监听 iframe 加载完成的事件来解决这一问题,并提出了针对双滚动条问题的有效解决方案,以提升整体的用户体验和页面加载效率。 ... [详细]
  • Python爬虫入门:深入解析HTTP协议与Requests库的应用
    Python爬虫入门:深入解析HTTP协议与Requests库的应用 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
author-avatar
x洗不掉的思念
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有