首页 > 极客资料 博客日记
SQL Server 中的 NUL 设备/NIL设备
2024-09-14 09:30:04极客资料围观20次
SQL Server 中的 NUL 设备/NIL设备
在 SQL Server 中,有一个特殊的设备叫做 NUL(注意,不是 NULL),它类似于文件系统中的“黑洞”。NUL 设备类似于 Linux 系统中的 /dev/null,所有写入到 NUL 的数据都会被直接丢弃。
我们可以利用这个特性,在不需要实际生成备份文件的情况下进行测试或模拟备份操作。
完整备份的常规操作
通常情况下,我们对某个数据库进行完整备份时,可以使用以下最简单的 SQL 语句:
BACKUP DATABASE AdventureWorks2012 TO DISK = N'AdventureWorks2012.BAK'
执行后,SQL Server 会显示备份的结果
已为数据库 'AdventureWorks2012',文件 'AdventureWorks2012' (位于文件 1 上)处理了 24328 页。 已为数据库 'AdventureWorks2012',文件 'AdventureWorks2012_log' (位于文件 1 上)处理了 2 页。 BACKUP DATABASE 成功处理了 24330 页,花费 4.103 秒(46.326 MB/秒)。
备份文件将存储在实例的默认备份路径中。可以通过以下 SQL 查询来确认该路径:
DECLARE @BackupDest VARCHAR(200) EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'BackupDirectory', @BackupDest OUTPUT; SELECT @BackupDest;
使用 NUL 设备进行备份
如果不想实际生成备份文件,但需要测试备份操作或了解备份时间等,可以将备份数据写入 NUL 设备。
SQL Server 支持两种方式将备份写入 NUL 设备:使用 NUL 或 NUL:。
BACKUP DATABASE AdventureWorks2012 TO DISK = N'NUL' GO BACKUP DATABASE AdventureWorks2012 TO DISK = N'NUL:' GO
执行后,SQL Server 同样会显示备份的结果
已为数据库 'AdventureWorks2012',文件 'AdventureWorks2012' (位于文件 1 上)处理了 24328 页。 已为数据库 'AdventureWorks2012',文件 'AdventureWorks2012_log' (位于文件 1 上)处理了 2 页。 BACKUP DATABASE 成功处理了 24330 页,花费 1.499 秒(126.803 MB/秒)。
NUL 设备还可以通过备份判断磁盘的读吞吐量,即使你备份至多个NUL设备。备份至NUL设备主要是读取数据,写数据并没有写入具体的磁盘中。
BACKUP DATABASE AdventureWorks2012 TO DISK = N'NUL',DISK = N'NUL',DISK = N'NUL',DISK = N'NUL' ,DISK = N'NUL'
总结
备份至 NUL 设备的主要用途包括:
1、备份吞吐量验证:NUL 设备可以用来测试数据库的读 IOPS 性能,帮助验证备份时的读写吞吐量。
2、没有日志备份导致磁盘满:如果日志文件长期未备份而变得非常大导致磁盘空间不足,可以通过将日志备份写入 NUL 设备来快速释放日志空间,之后再进行日志文件收缩或者设置简单模式收缩文件。
3、在高可用配置:特别是 SQL Server2016或者以上版本, AlwaysOn AG 场景中,使用 automatic seeding 功能配置可用性数据库前需要备份,可将数据库备份至NUL设备后再初始化同步。
4、COPY_ONLY 备份:在不希望中断备份链(不truncate日志文件里的日志)但需要在生产环境中进行测试时,可以使用 COPY_ONLY 参数来创建临时备份,避免对生产环境的备份链产生影响。
需要注意的是,备份至 NUL 设备时的读操作对性能的影响与实际备份相似,因此在生产环境中进行测试时,仍需谨慎评估其影响。
参考文章
https://www.modb.pro/db/452106
https://blog.csdn.net/lnotime/article/details/104847946
https://cloud.tencent.com.cn/developer/information/%E6%AD%A3%E5%9C%A8%E8%BF%98%E5%8E%9F%E6%95%B0%E6%8D%AE%E5%BA%93SQL%20Server%20-%E6%95%B0%E6%8D%AE%E4%B8%BAnull%E4%B8%8D%E8%83%BD%E5%AF%B9null%E5%80%BC%E8%B0%83%E7%94%A8%E6%AD%A4%E6%96%B9%E6%B3%95%E6%88%96%E5%B1%9E%E6%80%A7
本文版权归作者所有,未经作者同意不得转载。
标签:
相关文章
最新发布
- Nuxt.js 应用中的 prerender:routes 事件钩子详解
- 【问题解决】Tomcat由低于8版本升级到高版本使用Tomcat自带连接池报错无法找到表空间的问题
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit
- 六、Spring Boot集成Spring Security之前后分离认证流程最佳方案
- 《JVM第7课》堆区
- .NET 8 高性能跨平台图像处理库 ImageSharp
- 还在为慢速数据传输苦恼?Linux 零拷贝技术来帮你!
- 刚毕业,去做边缘业务,还有救吗?
- 如何避免 HttpClient 丢失请求头:通过 HttpRequestMessage 解决并优化
- 让性能提升56%的Vue3.5响应式重构之“版本计数”