SQL Server中的Recovery Interval
其实有很多朋友都问到过Recovery Interval,有问这个是干吗的,有问怎么调节这个值,所以今天写一篇小Blog,一劳永逸。
众所周知,SQL Server依靠Log来保证性能和数据持久性两不耽搁。那么我们来看一看SQL Server是如何处理我们的数据修改请求的。
首先我们的客户端将数据修改指令递交到SQL Server,SQL Server就会通过一系列的过程把数据从物理磁盘上读取到内存中。
数据被读取到内存中后,SQL Server会在内存中修改数据。当然大家就会想到,修改完了是不是要立即写回到磁盘上呢?如果写回去,那么势必会影响性能,如果不写,那么万一系统崩溃了修改就会丢失,这一切就像我们在用WORD写文档一样。
SQL Server没有采用这两种笨办法,SQL Server知道大多数情况下,大多数数据被访问后一段时间内都会再次被访问,因此SQL Server决定将数据保留在内存中。不过,如果这个时候系统崩溃了怎么办,又或者系统掉电了怎么办呢?SQL Server采用了一种变通的办法,它将修改操作写到了另外一个文件中去,这个文件叫做日志。
那么SQL Server就像这样,我们每修改一个数据,SQL Server都会把这个数据写到日志文件中去。如果系统崩溃了,SQL Server只要从这个日志文件中就可以知道我们执行了哪些操作,我们只要把这些操作再做一遍就可以恢复数据了。
好像我们没有讲到Recovery Interval么。
是的,就要来了。虽然上面说的办法不错,不过那些修改过的数据不能一直放在内存中。除了内存是有限的之外,还有一个重要的原因,那就是SQL Server不能仅仅依赖日志来保证数据的一致性。
SQL Server通常都会运行数个月之久而不重新启动,这可不像我们用的笔记本。那么如果它运行了三个月后突然崩溃了,天哪!难道我们要把三个月的操作重新做一遍?!当然不能这样,Recovery Interval会控制这一切!
Recovery Interval会告诉SQL Server,如果要通过日志里面的操作进行恢复不能超过多少时间。那么SQL Server就会看好这一切,当它发现日志里面的新的操作需要超过Recovery Interval的时间进行恢复的时候,SQL Server就像强制将内存那些被修改过的数据写回到磁盘里面去。
这样我们就不用重新执行那三个月的操作了,通常都是短短的5分钟,因为默认Recovery Interval是5分钟。
那么我们怎么调节这个值呢?
Recovery Interval的值越长,那么也就意味着万一我们的系统崩溃了,我们就需要更长的时间进行恢复,不过也就以为那些被修改过的数据可以在内存中停留更长的时间,也就意味着我们可以写磁盘写的更少一些。
相反,如果Recovery Interval的值约短,那么也就意味着万一我们的系统崩溃了,我们就需要恢复的时间就更短,另外一方面也就意味着我们可以写磁盘写的更频繁一些。
下面的示例将系统恢复间歇设为 3 分钟。
USE master0
EXEC sp_configure 'recovery interval', '3'
RECONFIGURE WITH OVERRIDE
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?