【数据库事务日志碎片原理分析与方案】-分析篇

news2024/9/23 5:30:05

前言:说都数据库的事务日志,可以说我们是再熟悉不过的了。一般而言,我们都没有必 要去关心事务日志中的虚拟日志文件的个数。这里提到的“虚拟日志文件”的概念,我们 后面会进行专门的讲述。很多的时候,我们在建立数据库的时候,都采用了它的默认配置, 即:将日志的增长方式设定为“自动增长”,这样会直接导致一个后果就是“文件碎片”, 从而直接导致整个数据库的性能严重下降。那么,如何避免这种情况?如何识别碎片问题? 如何解决问题?这就是我们本篇文章要讲述的内容了。

首先,我们来看看什么是“虚拟日志文件”。

我们知道,在正常的数据库操作中,SQL Server 会以顺序的方式去写日志文件,记录 DLL
和 DML 的操作的详细信息。每一个日志记录都有一个与之相关的逻辑序列号(LSN)。这 些 LSN 处于不断增长的状态,这就是说 LSN2 的日志记录所代表的操作在 LSN1 之后进行。 并且最近添加的日志记录的 LSN 号码最大。

在 SQL Server 内部,SQL Server 将日志文件的空间划分为很多不同的“块”,也称之为 “虚拟日志文件”(VLF)。看看到下面的一个图:

SQL Server 首先将会把事务的详细信息记录到第一个可用的 VLF 中,此时也就是写到 VLF1 中。并且,在写的过程中,日志记录是按照顺序写入的,也就是说首先会写满 VLF1,然 后写 VLF2,以此类推。如果最后全部的 VLF 都写满了之后,日志会循环写入,也就说, 日志会再在写入 VLF1 中,将 VLF1 中之前的日志记录覆盖,当然,这个写入是有条件的, 即:只有在 VLF1 是可重用的情况下才能写入。

到这里,大家可能会有很多的问题,其中一个就是:如何知道 VLF1 现在是否可被重用。 先不急,接着看。

为了使得大家对日志的写入有一个更好的理解,我们通过下面的一个图来说明:

上面的图描述了一个简单的场景:一个事务 T1,T3 已经提交,而 T2,T4 处于运行状态, 并且在 LSN10 的地方执行一个 CheckPoint 操作。

现在我们的有 4 个 VLF 文件,每一个 VLF 中都包含了 4 个事物日志记录。这些日志记录包 含了四个事务的详细信息。在图中,LSN1 表明这个事务 T1 开始的点,LSN2 记录 T1 事务 执行的一个 Update 操作的详细信息,LSN3 记录了 T1 事务执行了 Commit 操作,LSN4, 又是另外一个事务 T2 开始的点,以此类推。

注意:完全可以存在一个事务的日志记录跨越多个 VLF,道理很简单,大家自己想想。

从上面的图中可以看出,现在存在 2 个活动的事务(T2,T4)。而 LSN4 是最先活动事务 T2 的开始点。

在图中还有一个所谓的 MinLSN,就是最先开始的一条活动的日志记录。执行 CheckPoint 的地方是 MaxLSN,就是活动日志最后的点,因为后面还没有写入新的日志记录。其实所 谓的活动日志,主要是因为这些日志有可能被用来执行回滚操作。

在这里朋友们可能就要问了:在上图中,T3 中的事务不是已经提交了吗,应该不属于活动 日志啊?

确实,原本应该是这样的,但是在 T3 之后,又开始了 T4,而且还没有提交,从而使得 T3 处于没有提交的事务 T2 和 T4 之间,导致这一连串的都成为“活动的“。我们再把问题 延伸一下:如果在 LSN10 后面又开始了新的事务,而且 T2 事务还没有提交,那么会导致 活动日志的范围变得更大。所以希望这里大家可以明白我的意思。

包含有活动日志的 VLF 就是处于活动的状态,图中的 VLF1-3 都是活动的,如果 VLF 是活 动的,那么就不能被重用。什么意思呢?

我们现在试想一下:如果 T2 事务一直提交,而新的事务不断的在开启,那么最后的结果 就是 VLF1-4 中都包含活动日志,使得所以的 VLF 都是活动的,如果 VLF4 已经空间写完, 此时数据库发现它不能循环的写入,即不能再从 VLF1 开始写,因为 VLF1 是活动的,这个 时候,数据库就分配新的空间,分配新的 VLF,然后再写入。试想,如果总是这样,那么, 势必会导致文件碎片。所以这也是为什么避免事务运行时间过长的原因之一。

为了加深大家的理解,我们看到下面的一个图:

在上图中,此时活动日志包含在 VLF4 中,而 VLF1-3 都是非活动的 ,所以如果日志不断写 入导致 VFL4 写满,此时日志会再次写入 VLF1,然后是 VLF2,以此类推! 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/986543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android开发重大新闻,安卓手机将不能无视风险安装APP

工信部发文要求所有的APP必须在2024年前完成入网备案。否则它将不再支持网络接入,简单来说这一个决定可以说是封杀了所有的盗版色情擦边APP;之后这些软件将无法再联网使用这么说安卓也终于迎来了绿色上网自由。 用户的利与弊 备案要求会让手机上的“流氓…

大数据课程L2——网站流量项目的算法分析数据处理

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解网站流量项目的算法分析; ⚪ 了解网站流量项目的数据处理; 一、项目的算法分析 1. 概述 网站流量统计是改进网站服务的重要手段之一,通过获取用户在网站的行为,可以分析出哪些内…

【办公类-19-03】办公中的思考——Python批量制作word单元格照片和文字(小照片系列)

背景需求: 工会老师求助:如何在word里面插入4*8的框 我一听,这又是要手动反复黏贴“文本框”“照片”“文字”的节奏哦 我问:你要做几个人?超过20个,我写个程序批量插图 工会老师:大约十几个人…

2023最新pytorch安装教程,简单易懂,面向初学者(Anaconda+GPU)

一、前言 目前是2023.1.27,鉴于本人安装过程中踩得坑,安装之前我先给即将安装pytorch的各位提个醒,有以下几点需要注意 1.判断自己电脑是否有GPU 注意这点很重要,本教程面向有NVIDA显卡的电脑,如果你的电脑没有GPU或者使用AMD显…

2020年09月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程(1~8级)全部真题・点这里 第1题:循环数 若一个n位的数字串满足下述条件,则称其是循环数(cyclic):将这个数字串视为整数(可能带有前导0),并用任意一个 …

Simulink|用于光伏系统最大功率点跟踪(MPPT)的极值寻道控制(ESC)【采用极值寻道控制算法求解非线性函数的最大/最小点】

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

YOLO目标检测——火焰烟雾数据集+已标注VOC和YOLO格式标签下载分享

实际项目应用:火灾预警系统、智能监控系统、工业安全管理、森林火灾监测以及城市规划和消防设计等应用场景中具有广泛的应用潜力,可以提高火灾检测的准确性和效率,保障人员和财产的安全。数据集说明:YOLO火焰目标检测数据集&#…

超图聚类论文阅读2:Last-step算法

超图聚类论文阅读2:Last-step算法 《使用超图模块化的社区检测算法》 《Community Detection Algorithm Using Hypergraph Modularity》 COMPLEX NETWORKS 2021, SCI 3区 具体实现源码见HyperNetX库 工作:提出了一种用于超图的社区检测算法。该算法的主要…

蓝牙技术|ESL蓝牙电子价签将成为智能市场新的增长点

蓝牙技术联盟(Bluetooth Special Interest Group, SIG)发布年度报告《2023年蓝牙市场最新资讯》,揭示蓝牙技术的最新发展趋势,及其在各个应用市场中不断扩大的影响力。报告提供了低功耗音频(LE Audio)和Aur…

数字图像处理-形态学图像处理

形态学图像处理 一、基础知识1.1 什么是形态学操作 二、腐蚀与膨胀2.1 腐蚀2.2 膨胀 三、开操作与闭操作3.1 开操作3.2 闭操作3.3 实验对比 四、一些基本的形态学算法4.1边界提取4.2空洞填充4.3 凸壳 一、基础知识 1.1 什么是形态学操作 数字图像处理中的形态学操作是一组用于…

PY32F003F18串口printf功能

1、PY32F003F18复用功能总结: //GPIOxGPIOA,PinGPIO_PIN_0,alternateGPIO_AF9_USART2,则将PA0引脚复用为USART2_TX //GPIOxGPIOA,PinGPIO_PIN_0,alternateGPIO_AF10_SPI1,则将PA0引脚复用为SPI1_MISO //GPIOxGPIOA,PinGPIO_PIN_1,alternateGPIO_AF0_SPI1,则将PA1引…

容器编排学习(六)服务管理与用户权限管理

一 service管理 1 概述 容器化带来的问题 自动调度:在 Pod 创建之前,用户无法预知 Pod 所在的节点,以及 Pod的IP 地址一个已经存在的 Pod 在运行过程中,如果出现故障,Pod也会在新的节点使用新的IP 进行部署应用程…

安达发APS|APS智能排程软件的核心优势

APS软件是一种实时、具有约束能力的排产计划软件,能够对所有资源进行同步优化。它能够模拟生产中的物料、机器设备、人员、供应、客户需求、运输等影响计划的因素,不论是长期的或短期的计划,都具有优化、对比和可执行性。 APS软件采用基于内…

蓝桥杯官网填空题(土地测量)

题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 造成高房价的原因有许多,比如土地出让价格。既然地价高,土地的面积必须仔细计算。遗憾的是,有些地块的形状不规则,比…

echarts条形图实现颜色渐变

eCharts——柱状图中的柱体颜色渐变_echarts 柱状图渐变_小美同学的博客-CSDN博客 【Echarts】柱状图渐变两种实现方式_echarts柱状图渐变_芳草萋萋鹦鹉洲哦的博客-CSDN博客

C++中的stack和queue

文章目录 1. stack的介绍和使用1.1 stack的介绍1.2 stack的使用 2. queue的介绍和使用2.1 queue的介绍2.2 queue的使用 3 priority_queue的介绍和使用3.1 priority_queue的介绍3.2 priority_queue的使用 4. 容器适配器4.1 什么是适配器4.2 STL标准库中stack和queue的底层结构4.…

Vue3学习(仅为了记录,参考意义不大)

一.Vue3介绍 1.Vue3的优势 2.使用create-vue创建vue3项目 vue-cli是创建vue2.0的脚手架工具,create-vue是创建vue3的脚手架工具,create-vue构建速度非常快 3.vue3项目目录和关键文件 二.Vue3组合式API 1.setup选项 setup语法糖: 总结…

fastjson漏洞批量检测工具

JsonExp 简介 版本:1.3.5 1. 根据现有payload,检测目标是否存在fastjson或jackson漏洞(工具仅用于检测漏洞)2. 若存在漏洞,可根据对应payload进行后渗透利用3. 若出现新的漏洞时,可将最新的payload新增至…

湖北初级(助理)、中级、高级(副高)工程类职称申报条件和业绩要求有哪些?

湖北初级、中级、副高职称申报学历条件和业绩要求是什么?有哪些要求?以下来自于官方解答: 副高职称学历要求: 中级职称学历要求: 助理(初级)职称学历要求: 现在评职称,主…

十七、MySQL约束演示

1、约束定义 (1)概念 约束,顾名思义,时作用域表中字段上的规则,用于限制存储在表中的数据,主要用于保证数据库中数据的正确、有效性和完整性。 (2)各种约束分类 1、非空约束(限制…