mysql使用裸设备_干货分享:SQLSERVER使用裸设备

本文介绍了裸设备的概念,强调其在数据库系统如SQLSERVER、ORACLE和MYSQL中提高I/O效率的作用。裸设备绕过操作系统,直接进行数据传输,减少性能损耗。文章通过实例演示了SQLSERVER2008R2在Windows2003环境下如何创建、使用和备份使用裸设备的数据库,同时提醒使用裸设备需要注意的限制和维护问题。
摘要由CSDN通过智能技术生成

干货分享:SQLSERVER使用裸设备

这篇文章也适合ORACLE DBA和MYSQL DBA 阅读

裸设备适用于Linux和Windows

在ORACLE和MYSQL里也是支持裸设备的!!

介绍

大家看到这个标题一定是一头雾水吧,裸设备??裸体的设备??太邪恶了o(∩_∩)o

裸设备:有人叫raw disk,也有人叫raw device

百度一下:

裸设备(raw device),也叫裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备。

它由应用程序负责对它进行读写操作。不经过文件系统的缓冲。

它是不被操作系统直接管理的设备。

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

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

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

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

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

Windows(写数据一定调用的是WINDOWS API)

Windows底层的中间层(杀毒软件,磁盘加密系统)

RAID控制器(IO子系统做了RAID)

磁盘或SSD等持久化存储器

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

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

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

319c1fe6d8812205e3518be5e8b6c609.png

进行初始化

初始化之后不能格式化

662e47be4b4bdf8982ec005066ef88a4.png

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

dd406e159f76499672711a64254be98f.png

40c6c91d60129341903b13cf5e1183c8.png

22add061b8d3e952519ae85e06e0065f.png

645ce5868d2f0dcfdf5a163b240dd59f.png

fe7fdaac2def792f38e367e96393bd7c.png

F盘是打不开的

979cd41ce0418eeb50930909cce58e47.png

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

创建数据库

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分区的大小

4696023f9f9cb493536f6e5c71146a8f.png

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

消息 5133,级别 16,状态 1,第 3行

对文件 "F:\test.mdf" 的目录查找失败,出现操作系统错误1005(此卷不包含可识别的文件系统。 请确定所有请求的文件系统驱动程序已加载,且此卷未损坏。)。

消息1802,级别 16,状态 1,第 3行CREATE DATABASE 失败。无法创建列出的某些文件名。请查看相关错误。

705f2aba1783fe6e1ed3f43b29b9e414.png

测试

新建测试表

--建测试表

USEtestGO

CREATE TABLEtestperf

(

idINT IDENTITY(1, 1)PRIMARY KEY,

NAMENVARCHAR(200) ,

timeonDATETIME)

插入测试

--插入数据

INSERT INTOtestperfSELECT '你好',GETDATE()

c4f1e6ff39defe192dccb11075c58011.png

查询测试

--查询数据

SELECT * FROM testperf

c468701633c9b577ac76c3d7b9478dc9.png

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

新建一个数据库进行对比

下面这个数据库是建在E盘,分区格式是NTFS

444df3488fe28c3d82b51fd9c1213fef.png

CREATE DATABASE [testa]

ON PRIMARY( NAME= N'testa', FILENAME = N'E:\testa.Mdf',SIZE =9024MB )LOG ON( NAME= N'testa_log', FILENAME = N'E:\testa_log.ldf' ,SIZE = 2048000KB , FILEGROWTH = 10%)GO

建测试表

--建测试表

USEtestaGO

CREATE TABLEtestperf

(

idINT IDENTITY(1, 1)PRIMARY KEY,

NAMENVARCHAR(200) ,

timeonDATETIME)

插入测试

6b1bf1c3f4f7dc56449dcd0c88222f0d.png

查询测试

f9649208861a62c3c27eff4b8b13e981.png

结论:可以看出使用裸设备速度上会比有文件系统的快一些,当然数据量比较少,测试机器配置不是很给力,上面的测试结果也只作为参考!!

使用裸设备的数据库备份

使用裸设备的数据库是可以正常备份的

使用下面的备份语句

BACKUP DATABASE [test] TO DISK = N'E:\test_fullbackup2014-4-10.bak' WITHNOFORMAT, NOINIT,

NAME= N'test-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUMGO

当然你也可以使用图形界面来备份数据库

数据库还原,当你使用图形界面来还原数据库的时候,你会发现还原不了数据库,报错

83f1a07022e1fcbbe1834ac0521f62ae.png

将数据库文件还原为窗口那里一般会显示将数据库中相应的数据文件还原到的物理路径,但是因为裸设备是没有物理路径的

那么是不是使用裸设备的数据库就不能还原呢???

实际上,要还原数据库只能使用SQL语句来还原,而不能使用图形界面

RESTORE DATABASE [test]

FROM DISK = N'E:\test_fullbackup2014-4-10.bak' WITH FILE = 1,

NOUNLOAD, STATS= 10

GO

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

已处理百分之 13。

已处理百分之22。

已处理百分之31。

已处理百分之40。

已处理百分之54。

已处理百分之63。

已处理百分之72。

已处理百分之81。

已处理百分之90。

已处理百分之100。

已为数据库'test',文件 'test' (位于文件 1 上)处理了 176页。

已为数据库'test',文件 'test_log' (位于文件 1 上)处理了 2页。RESTORE DATABASE 成功处理了 178 页,花费 37.497 秒(0.037 MB/秒)。

View Code

总结

因为raw分区是不能够打开的,所以运维团队需要监控住在裸设备上的数据库数据文件是否不够空间,以免发生数据插入失败的情况

d1032ed9efde62b128adb63587942527.png

这篇文章简单介绍了一下裸设备,以及数据库使用裸设备带来的性能提升的简单测试

最后说一句:无论是使用文件系统也好,裸设备也好,珍爱生命,记得备份!

相关文章:

如有不对的地方,欢迎大家拍砖o(∩_∩)o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值