这篇文章也适合ORACLE DBA和MYSQL DBA 阅读
裸设备适用于Linux和Windows
在ORACLE和MYSQL里也是支持裸设备的!!
介绍
大家看到这个标题一定是一头雾水吧,裸设备??裸体的设备??太邪恶了o(∩_∩)o
裸设备:有人叫raw disk,也有人叫raw device
百度一下:
http://baike.baidu.com/link?url=ran4ytgFFrsCmAywsOLa0uQczn8rxsEwWXF5WjdTNLx3Sv9Ng2Y1ScJsLT8k7CO7G1gOsiuq3EILSVhbYsgsSa
裸设备(raw device),也叫裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备。
它由应用程序负责对它进行读写操作。不经过文件系统的缓冲。
它是不被操作系统直接管理的设备。
这种设备少了操作系统这一层,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的备份功能是可以正常使用的