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

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

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

我们知道,在正常的数据库操作中,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.mzph.cn/news/71655.shtml

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

相关文章

使用Caffeine实现帖子的缓存来优化网站的运行速度

导入依赖 <!-- https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine --><dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>3.1.7</version>…

PyCharm下载安装

PyCharm下载链接 点击下载PyCharm Community Edition社区版&#xff08;PyCharm Professional专业版需要收费&#xff0c;但可以免费试用 30 天&#xff0c;也可以找到激活方式&#xff1b;而社区版是完全免费的&#xff0c;初学者学习 Python建议使用社区版&#xff0c;不会有…

Kafka的文件存储与稀疏索引机制

![在这里插入图片描述](https://img-blog.csdnimg.cn/dde7fc866d214985baaa87300a472578.png)这些是存储在分区(分区才是实际的存储)文件中的. seg是逻辑概念 而实际由log存储的. index是偏移量索引而timeindex是时间戳索引 log就是seg 找数据就是先找log 再从log去找

MYSQL 高级SQL语句

1、按关键字排序&#xff1a; order by 语句用来实现 &#xff0c;前面可以使用where字句使查询结果进一步过滤 asc 是按照升序排序 &#xff0c; 默认的 desc 是按照降序排序 order by的语法结构 例&#xff1a;select name,score from ku order by score desc; 表示将数…

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

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

链路追踪Skywalking快速入门

目录 1 Skywalking概述1.1 微服务系统监控三要素1.2 什么是链路追踪1.2.1 链路追踪1.2.2 OpenTracing1、数据模型&#xff1a;2、核心接口语义 1.3 常见APM系统1.4 Skywalking介绍1、SkyWalking 核心功能&#xff1a;2、SkyWalking 特点&#xff1a;3、Skywalking架构图&#x…

直播平台源码开发搭建APP的DASH协议:流媒体技术其中一环

在直播平台源码APP中&#xff0c;有着许许多多、多种多样的功能&#xff0c;比如短视频功能&#xff0c;帮助我们去获取信息&#xff0c;看到全世界用户身边发生的事情或是他们的生活&#xff1b;又比如直播功能&#xff0c;为用户提供了实时的娱乐享受&#xff0c;还让一些用户…

EVA: Visual Representation Fantasies from BAAI

本文做个简单总结&#xff0c;博主不是做自监督领域的&#xff0c;如果错误&#xff0c;欢迎指正。 链接 Code&#xff1a; Official&#xff1a;baaivision/EVA MMpretrain&#xff1a;open-mmlab/mmpretrain/tree/main/configs/eva02 Paper&#xff1a; EVA01&#xff1a;…

deepfm内容理解

对于CTR问题&#xff0c;被证明的最有效的提升任务表现的策略是特征组合(Feature Interaction)&#xff1b; 两个问题&#xff1a; 如何更好地学习特征组合&#xff0c;进而更加精确地描述数据的特点&#xff1b; 如何更高效的学习特征组合。 DNN局限 &#xff1a;当我们使…

vue-别名路径联想提示的配置

在根路径下&#xff0c;新建 jsconfig.json 文件&#xff0c;即可 在输入 自动联想到src目录。 代码如下&#xff1a; // 别名路径联想提示&#xff1a;输入自动联想 {"compilerOptions":{"baseUrl":"./","paths": {"/*":[…

【AI理论学习】语言模型:从Word Embedding到ELMo

语言模型&#xff1a;从Word Embedding到ELMo ELMo原理Bi-LM总结参考资料 本文主要介绍一种建立在LSTM基础上的ELMo预训练模型。2013年的Word2Vec及2014年的GloVe的工作中&#xff0c;每个词对应一个vector&#xff0c;对于多义词无能为力。ELMo的工作对于此&#xff0c;提出了…

ChartJS使用-环境搭建(vue)

1、介绍 Chartjs简约不简单的JavaScript的图表库。官网https://chart.nodejs.cn/ Chart.js 带有内置的 TypeScript 类型&#xff0c;并与所有流行的 JavaScript 框架 兼容&#xff0c;包括 React 、Vue 、Svelte 和 Angular 。 你可以直接使用 Chart.js 或利用维护良好的封装程…

使用Python 创建 AI Voice Cover

这篇文章提供了使用Python文本到语音库和音频处理库逐步创建歌曲的指南。我们一起为机器赋予声音 —— 使用Python制作AI生成的声音。 介绍 您是否曾经想过&#xff0c;如果您最喜欢的歌曲由机器人演唱会是什么样子&#xff1f;随着人工智能和语音合成的最新进展&#xff0c;现…

什么是原生IP?原生IP与住宅IP有何区别?

相信许多做跨境的都会接触到IP代理&#xff0c;比如电商平台、社媒平台、收款平台等等&#xff0c;都会检测IP。那也会经常听到一些词汇&#xff1a;原生IP、住宅IP&#xff0c;这两者之间有什么区别呢&#xff1f;什么业务需要用到呢&#xff1f;接下来带大家具体了解一下。 什…

时序预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测

时序预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测…

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

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

深度解读智能媒体服务的重组和进化

统一“顶设”的智能媒体服务。 邹娟&#xff5c;演讲者 大家好&#xff0c;首先欢迎各位来到LVS的阿里云专场&#xff0c;我是来自阿里云视频云的邹娟。我本次分享的主题为《从规模化到全智能&#xff1a;智能媒体服务的重组与进化》。 本次分享分为以上四部分&#xff0c;一是…

Web安全研究(四)

No Honor Among Thieves: A Large-Scale Analysis of Malicious Web Shells Stony Brook University Ruhr-University Bochum Web shell作为恶意脚本&#xff0c;攻击者将其上传到被攻陷的Web服务器&#xff0c;以远程执行任意命令、维护其访问权限并提升其特权。尽管在实践中它…

Kafka3.0.0版本——消费者(独立消费者消费某一个主题中某个分区数据案例__订阅分区)

目录 一、独立消费者消费某一个主题中某个分区数据案例1.1、案例需求1.2、案例代码1.3、测试 一、独立消费者消费某一个主题中某个分区数据案例 1.1、案例需求 创建一个独立消费者&#xff0c;消费firstTopic主题 0 号分区的数据&#xff0c;所下图所示&#xff1a; 1.2、案…

TCP/IP基础

前言&#xff1a; TCP/IP协议是计算机网络领域中最基本的协议之一&#xff0c;它被广泛应用于互联网和局域网中&#xff0c;实现了不同类型、不同厂家、运行不同操作系统的计算机之间的相互通信。本文将介绍TCP/IP协议栈的层次结构、各层功能以及数据封装过程&#xff0c;帮助您…