当前位置: 首页 > news >正文

浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架

SQL Server中的事务日志无疑是SQL Server中最重要的部分之一。因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback)。从而还部分确保了事务的ACID属性.在SQL Server崩溃时,DBA还可以通过事务日志将数据恢复到指定的时间点。当SQL Server运转良好时,多了解一些事务日志的原理和概念显得并不是那么重要。但是,一旦SQL SERVER发生崩溃时,了解事务日志的原理和概念对于快速做出正确的决策来恢复数据显得尤为重要.本系列文章将会从事务日志的概念,原理,SQL Server如何使用日志来确保持久性属性等方面来谈SQL Server的事务日志.

事务日志的物理组织构架

事务日志仅仅是记录与其对应数据库上的事务行为和对数据库修改的日志文件.在你新建数据库时,伴随着数据库文件,会有一个默认以ldf为扩展名的事务日志文件. 当然,一个数据库也可以配有多个日志文件,但是在逻辑上,他们可以看成一个.

在SQL Server对于日志文件的管理,是将逻辑上一个ldf文件划分成多个逻辑上的虚拟日志文件(virtual log files,简称VLFs).以便于管理。用个类比方法来看,日志文件(ldf)好比一趟火车,每一节车厢都是一个虚拟日志文件(VLFs):

那为什么SQL Server要把日志文件划分出多个VLFS呢?因为SQL Server通过这种方式使得存储引擎管理事务日志更加有效.并且对于日志空间的重复利用也会更加高效。使用VLF作为收缩数据库的最小单位比使用ldf文件作为最小单位无疑是更加高效的.

VLFS的个数和大小无法通过配置进行设定,而是由SQL Server进行管理.当Create或Alter数据库时,SQL Server通过ldf文件的大小来决定VLFS的大小和数量。在日志文件增长时,SQL Server也会重新规划VLFS的数量.

注意:根据这个原理不难看书,如果设置日志文件的增量过小,则会产生过多的VLFS,也就是日志文件碎片,过多的日志文件碎片会拖累SQL Server性能.

SQL Server创建数据库时,根据日志文件(ldf)的大小,生成VLF的数量公式如下:

ldf文件的大小

VLF的数量

1M到64M

4

64M到1GB

8

大于1GB

16

下面我们来看一个例子:

创建数据库,指定日志大小为65M

通过DBCC,我们可以看到,对应的有8个VLFs:

再次创建数据库,指定日志初始大小为28M:

可以看到,对应的,VLF的数量变为4:

而对于日志文件的增长,SQL Server使用了和创建数据库时相同的公式,也就是每次增长比如为2M,则按照公式每次增长4个VLFs.

我们创建一个TestGrow数据库,指定日志文件为2M,此时有4个VLFS:

当我们增长2M时,这个2M则是按照公式,再次分配4个VLFs:

此时,这时能看到的VLFs数量应该为4+4=8个:

http://www.jsqmd.com/news/1122314/

相关文章:

  • STM32F070RB与MC6470 IMU的硬件协同与运动控制实践
  • 深度学习算法速查表:类型、应用与典型示例
  • 基于YOLOv12的香蕉成熟度自动识别系统开发
  • 生成式AI模型选型决策地图:显式与隐式密度模型深度解析
  • Mac Mouse Fix终极指南:让你的普通鼠标在macOS上超越苹果触控板体验
  • 国产大模型写代码实战指南:GLM、Kimi、Minimax、豆包四大引擎选型对比
  • 【JAVA毕设源码分享】基于springboot云山幼儿园管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • ColabFold终极指南:零基础快速预测蛋白质3D结构
  • Trilium中文版:解决知识管理三大痛点的开源笔记神器
  • C语言实现SM3国密算法:从原理到工程实践完整指南
  • 如何免费加速百度网盘下载:PDown下载器完整使用指南
  • DCT与小波变换结合的图像压缩技术实践
  • 多维数据聚合实战:从OLAP立方体到动态重切片
  • Spring Boot+Vue旅游分享小程序毕业设计:从通用模板到业务化改造实战
  • AI正在接管的五大开发岗位:内容生成、测试、数据清洗、DBA与DevOps
  • OAuth2.0与JWT实战:从授权原理到微服务安全架构落地
  • 告别链接失效!5分钟搭建网易云音乐永久解析服务
  • stltostp:专业STL到STEP格式转换的终极解决方案
  • 零代码AI智能体创建工具实战指南
  • 三层内网渗透实战:从Web突破到核心区提权全流程解析
  • UEFI安全监控与Peacock框架实战解析
  • 基于ResNet和PyTorch的花卉分类系统设计与实现
  • Android Studio 17升级后Java版本冲突解决指南:统一JDK与编译目标
  • 国产大模型API稳定性对比:GLM、MiniMax、Kimi的确定性工程实践
  • AI编程与办公自动化实战:从Codex到WorkBuddy的完整指南
  • 两相步进电机FOC矢量控制与SVPWM算法实现
  • 量子神经网络在引力波数据分析中的应用与实践
  • VisionPro ToolBlock高级脚本开发与工业视觉检测实践
  • Codex与Skills:构建本地化AI工作流,重塑科研与开发效率
  • 逻辑回归与数据预处理实战指南