当前位置: 首页 > news >正文

干货分享:SQLSERVER使用裸设备

这种设备少了操作系统这一层,I/O效率更高。不少数据库都能通过使用裸设备作为存储介质来提高I/O效率。

因为使用裸设备避免了再经过操作系统这一层,数据直接从Disk到数据库进行传输,所以使用裸设备对于读写频繁的数据库应用来说,可以极大地提高数据库系统的性能。

当然,这是以磁盘的 I/O 非常大,磁盘I/O已经成为系统瓶颈的情况下才成立。

如果磁盘读写确实非常频繁,以至于磁盘读写成为系统瓶颈的情况成立,那么采用裸设备确实可以大大提高性能

在宋沄剑的文章里《SQL Server数据库损坏、检测以及简单的修复办法》

在这个过程中,数据脏页由内存写入持久化的IO子系统,在此期间,按照IO子系统的不同,数据可能经过这几层:

Windows(写数据一定调用的是WINDOWS API)
Windows底层的中间层(杀毒软件,磁盘加密系统)

RAID控制器(IO子系统做了RAID)
磁盘或SSD等持久化存储器

其实如果使用了裸设备,数据是不需要经过I/O子系统的,直接写入到文件中


根据MSDN说一下裸设备在SQLSERVER的限制

Using Raw Partitions

SQLSERVER2000支持数据库创建在使用raw格式的分区。raw格式分区是一种没有格式化的文件系统,就像FAT文件系统和NTFS文件系统。

在某些情况下,数据库创建在raw格式的分区能产生重要的性能提升相对于NTFS或FAT文件系统。

然而,大多数情况下,还是建议使用NTFS或FAT分区来存放数据库文件

当你把数据库创建在raw分区下的时候,你不能指定数据库数据文件的物理名字;你只能够指定数据库数据文件要存放的那个磁盘的驱动器号

如果你使用Windows2000服务器版,你可以挂载一个使用raw文件格式的驱动器。当你在一个空文件夹挂载一个本地驱动器的时候,

Windows2000会分配一个磁盘路径,这样会比只分配一个驱动器号好。

挂载驱动器不受26个盘符的限制(分区超过26个就不能再建立分区了),因此,你可以使用不受数量限制的raw分区。

下面有几个限制是需要考虑的,当使用raw分区的时候

(1)每一个raw分区只能有一个数据库数据文件。

(2)标准的文件操作,例如:复制文件,移动文件,删除文件都不能在raw分区使用

(3)放在raw分区的数据库文件都不能直接使用备份软件备份,例如Acronis.True.Image.Echo.Enterprise.Server这些都不能用

但是SQLSERVER的完整数据库备份、差异备份、日志备份,这些SQLSERVER的备份功能是可以正常使用的

(4)存放在raw分区上的数据文件都不能自动增长的。最好在创建数据库文件的时候就指定数据库文件的大小为raw分区的大小

或者当数据库数据文件大小不够再进数据的时候手动设置数据文件或日志文件的大小

CREATE DATABASE [test] ON PRIMARY ( NAME = N'test', FILENAME = N'f:',SIZE = 9024MB )
ALTER DATABASE [sss] MODIFY FILE(name=SSS_Data,size=2048)
ALTER DATABASE [sss] MODIFY FILE(name=SSS_Log,size=2048)

(5)一些文件系统服务,例如坏块替换,磁盘整理是不能用的,对于raw分区


实验

实验环境:Windows2003 ;SQLSERVER2008R2

实际上,在Windows下裸设备实质就是没有格式化的分区

先在虚拟机添加一个硬盘,大小是10GB

进行初始化

初始化之后不能格式化

新建一个简单卷,记得不要格式化,分配一个盘符号就可以了

F盘是打不开的

--------------------------------------------------------------------------------------------------------------

创建数据库

CREATE DATABASE [test] ON PRIMARY ( NAME = N'test', FILENAME = N'F:',SIZE = 9024MB ) LOG ON ( NAME = N'test_log', FILENAME = N'E:\test_log.ldf' ,SIZE = 2048000KB , FILEGROWTH = 10%) GO

创建数据库的时候要注意

(1)每一个raw分区只能有一个数据库数据文件。
(4)存放在raw分区上的数据文件都不能自动增长的。最好在创建数据库文件的时候就指定数据库文件的大小为raw分区的大小

如果你指定了物理路径,那么就会报错

消息 5133,级别 16,状态 1,第 3 行 对文件 "F:\test.mdf" 的目录查找失败,出现操作系统错误 1005(此卷不包含可识别的文件系统。 请确定所有请求的文件系统驱动程序已加载,且此卷未损坏。)。 消息 1802,级别 16,状态 1,第 3 行 CREATE DATABASE 失败。无法创建列出的某些文件名。请查看相关错误。


测试

新建测试表

--建测试表 USE test GO CREATE TABLE testperf ( id INT IDENTITY(1, 1) PRIMARY KEY , NAME NVARCHAR(200) , timeon DATETIME )

插入测试

--插入数据 INSERT INTO testperf SELECT '你好',GETDATE()

查询测试

--查询数据 SELECT * FROM testperf

http://www.cnnetsun.cn/news/3133206.html

相关文章:

  • 数据库同步中间件:PanguSync
  • 【学习记录】Week10(三):Tcache 溢出与扩展利用——单链表劫持与高版本绕过
  • Qwable-9B模型实战教程:用GGUF格式在本地部署高性能AI代码助手
  • Numactl项目中CPU亲和性设置失效问题分析
  • 非标设备运动控制:直线模组与直线电机核心技术解析
  • 模拟人工智能(Simulated Artificial Intelligence, SAI):一种工程化认知架构的理论范式
  • Exercises Dataset多平台适配:响应式设计与跨平台开发完整指南
  • 计算机毕业设计之基于用户行为的个性化推荐机票推荐系统
  • TVA:具身智能的动力引擎与能力底座(系列)
  • d3-annotation常见问题解答:从安装到部署的全方位解决方案
  • Windmill React UI组件最佳实践:10个提升用户体验的实用技巧
  • WebdriverIO v9多窗口自动化测试:解决切换后getUrl失效的完整方案
  • 新能源汽车热管理系统核心零部件及工作原理详解
  • 嵌入式系统按键管理:74HC32与PIC24FV16KA301高效方案
  • cann/mat-chem-sim-pred PID窗口残差诊断算法
  • Jina Reader终极指南:7个高效技巧让LLM输入质量翻倍
  • 秒懂Flink:Flink分区策略与数据倾斜解决方案
  • Agent Skills技能性能分析:使用Profiling工具优化技能执行
  • AI测试新范式:从算法崇拜到工程融合的实战驯化指南
  • OpenBatteryInformation:基于Arduino的BMS修复工具技术实现方案
  • IpaDownloadTool常见问题:解决IPA提取失败的7种方法
  • Node.js原生模块编译的终极指南:掌握node-gyp构建工具
  • 探索Moonshine Voice:如何在边缘设备上实现5倍于Whisper的实时语音识别性能
  • 如何永久保存微信聊天记录:终极免费工具完全指南
  • Bosca Ceoil Blue完整教程:从零开始制作专业级音乐
  • JoyAI-Image-Edit-Plus模型细节大公开:京东自研技术如何引领多模态编辑新潮流
  • BepInEx游戏插件框架:5分钟快速安装与终极配置指南
  • 从源码构建AzaharPlus:完整开发者指南助你定制专属模拟器
  • 从零开始:5个关键环节掌握yuzu Switch模拟器配置,让电脑变身游戏主机
  • Lucky:一款全能型软硬路由神器,轻松搞定公网访问与智能家居控制