SQLSERVER事务日志LSN到底是什么?
一:背景 1. 讲故事
大家都知道数据库应用程序 它天生需要围绕着数据文件打转,诸如包含数据的 .mdf,事务日志的 .ldf,很多时候深入了解这两类文件的合成原理,差不多对数据库就能理解一半了,关于 .mdf 的合成前面的文章已经有所介绍,这篇我们来聊一下 .ldf 的一些内部知识,比如 LSN。二:对 LSN 的理解 1. 什么是 LSN
如果大家玩过 SQLSERVER 的发布订阅或者 AlwaysOn 或多或少都见过 LSN,比如下面的格式: 00000030:00018090:0002 ,这一串编号到底是什么意思呢?本质上指示的是 .ldf 文件的某一个物理位置上的偏移,画个图大概如下:
从图中可以看到其实是由 虚拟文件号:日志段起始扇区编号:槽号编号 三部分组成,要了解这三部分就需要明白 .ldf 文件是如何进行逻辑划分的,画个简图如下:
通过上面的图很容易就能明白其中的逻辑关系,事务日志文件被划分成了多个 虚拟文件,虚拟文件又划分成了多个 日志段,日志段又划分成了多个 扇区,日志段中日志记录位置存储在 槽号 中,有了这些理论基础,接下来用一个案例来加深大家的理解吧。2. 一个案例演示
新建一个 MyLSN 数据库,再创建一个 test 表,插入 3w 条记录,sql如下:
CREATE DATABASE MyLSN
GO
USE MyLSN
GO
CREATE TABLE test(a INT IDENTITY, b CHAR(10) DEFAULT "aaaaaaaaaa")
SET NOCOUNT ON
INSERT INTO test (b) DEFAULT VALUES
GO 30000
SET NOCOUNT OFF
接下来通过 fn_dblog 来查询和 dbo.test 表相关的事务日志记录。
SELECT [Current LSN],
Operation,
Context,
AllocUnitName,
[RowLog Contents 0],
[Log Record],
[Log Record Length]
FROM fn_dblog(, )
WHERE AllocUnitName LIKE "%test%";
从图中可以看到这是一个 INSERT 的事务日志记录,这里就拿编号 00000030:00000db0:0002 去定位 .ldf 中的物理偏移位置吧,要想获取物理偏移就要知道下面偏移值才可以。0x30 虚拟文件号的偏移值是多少 ?
要想知道这个信息,可以用 DBCC loginfo 命令,查看 FSeqNo下的 StartOffset 偏移值即可,即 0n48 对应的 4071424 ,截图如下:0xdb0 扇区号的偏移是多少?
大家都知道磁盘的扇区是 512byte,sqlserver 为了更好的写入磁盘,也用了 512byte 这个粒度,所以偏移值就是 512 * 0xdb0。
综合上面就能定位到日志段的物理偏移值为:
lkd> ?0n4071424 + (0n3504*0n512)
Evaluate expression: 5865472 = 00000000`00598000
接下来用 WinHex 来定位 MyLSN_log.ldf 文件偏移 00598000 的位置,定位之前先将数据库离线。 ALTER DATABASE MyLSN SET OFFLINE
前面的 0x0003 表示该日志段只有 3 条记录,后面的 0x019E 表示该日志段的大小为 414byte,接下来就是槽号了,槽号位置的物理偏移计算规则如下:
lkd> ? 00598000 + 019E - 1
Evaluate expression: 5865885 = 00000000`0059819d
从图中可以看到,slot2 的偏移值为 00C8,即物理偏移值为 005980c8 。
lkd> ? 00598000 + 00C8
Evaluate expression: 5865672 = 00000000`005980c8
从上面框出的内容可以轻松的看到,事务日志中记录了 Insert 的 aaaaaaaaaa 值,太棒了,起始就是 fn_dblog 查出来的 Log Record 值。三:总结
对 LSN 有一个深度的理解,对各种数据库事务日志暴涨的故障分析都会有一个很好的理论基础,后面我们再聊这些话题。
END
工作中的你,是否曾遇到 ...
1. sql语句性能差
2. 数据库损坏
3. 数据库CPU暴涨
4. 数据库死锁
等急需解决的事件,全公司都指望着你能解决... 危难时刻才能展现你的技术价值,作为专注于.NET高级调试的技术博主,欢迎微信搜索: 一线码农聊技术,免费协助你分析,希望我能将你的踩坑经验分享给更多的人。
股票开始筑底的时候有什么特征?筑底有三个特征一遇到利空,该跌不跌,说明负面的逻辑已经释放的很充分了,该走的人,都走了。剩下的就是坚定的看好公司的人,愿意跟公司一起成长的投资者。即便偶尔有几个在里边做短线的散户,
韩信以多打少战胜项羽,为什么有人说韩信军事才能比项羽强?楚汉争霸之际,出现了两位军事天才,他们就是项羽和韩信,但是他们两的战争风格却完全不一样。韩信是谋战派代表,他所进行的每一场战争都是以计谋取胜项羽是兵形势的代表,他所打赢的战争都是采
中国男足水平是不是下降很多?历史上国足最好成绩是什么?上届没有下降,本土教练高洪波,公认好教练。洋教里皮接手公认最棒的。没有出线。李铁上任时,我们都会想到有一天会被骂下去。因为最终输球难免的。与澳大利亚刚刚有个好开端。让他延续下去吧!
李铁下课了,只是中国足球失败的缩影。中国足球还有救吗?中国足球在现行的体制下是没有希望的,必须打破现在的体系,重新架构足球生态,让专业人士干,去行政化,完善青训体系,广泛开展校园足球,娃娃足球,择优录取,这样中国足球才会越来越好,不能
为什么高控盘庄家不能随意拉升股价?很多投资者以为一只股票庄家控盘力度越大,甚至如果达到高控盘肯定对于庄家有利,而且盘面可以完全自控,想拉升随时都可以拉升也不会有抛盘。曾经做过做过机构操盘手我还是可以给大致说下的,控
现在还有多少人是用移动8元套餐的,怎么样?我的移动卡用了16年,由原来的最低消费88元套餐改成了8元套餐,主卡也由移动卡转到了电信卡。这个移动卡号是五年前改成8元套餐的。说起移动,让人又爱又恨。爱的是信号稳定通话质量好,恨
你对中医六不治,九不治,十不治的看法是什么?扁鹊的六不治非常好一骄傲任性依仗权势,骄横跋扈蛮不讲理的人不治这种人需要病来医性,只有病魔能让其改变。二贪图钱财,不顾性命舍命不舍财,不注重养生的人病不治身体是本钱,有再多的钱无福
如何防止产后,哺乳后胸部松弛下垂?您好!女性生产孩子,除了时间和精力方面的付出,身材上的付出也不得不让我们苦恼。产后,也许你会苦恼难以瘦下去的肚子脸上的小雀斑胸部的变化,甚至还有私密处的健康问题,如漏尿xing生活
我国级别最高的央企是哪个?我国级别最高的企业当然是国家控股的正部级央企了,能成为正部级央企的必定少之又少,且门槛高,经营范围涉及到关键国计民生领域,一个企业富可敌国,社会地位和经济实力在国内企业中都屈指可数
企业职工辞职,25年工龄,有补偿吗?太可惜了,25年工龄啊,绝对的元老级员工了,为什么要自己辞职呢?要知道你自己辞职是没有任何补偿的。而且你干了25年了,很可能离退休也不远了,在这个时候辞职,且不说补偿的问题,就拿退
苹果手机能否用得到五六年?15年的6P,32G的内存,去年换了一次其它品牌的商务电池,丝毫没有影响到正常使用。按照苹果公司发布的最新系统每次照常升级,到现在重来没有出现卡顿的现象。目前,里面存有1500张左