干货分享:SQLSERVER使用裸设备

这篇文章也适合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的备份功能是可以正常使用的

(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

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

新建一个数据库进行对比

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

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

建测试表

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

插入测试

查询测试

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


使用裸设备的数据库备份

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

使用下面的备份语句

BACKUP DATABASE [test] TO  DISK = N'E:\test_fullbackup2014-4-10.bak' WITH NOFORMAT, NOINIT,
NAME = N'test-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM
GO

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

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

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

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

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

RESTORE DATABASE  [test]
FROM DISK = N'E:\test_fullbackup2014-4-10.bak' WITH FILE = 1,
NOUNLOAD, STATS = 10
GO
已处理百分之 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/秒)。

总结

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

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

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

相关文章:

Faster way to read the raw data on disk/drive

Read raw data from Hard disk

MS SQL 2005 或者2008 支持裸设备吗?

ORACLE下使用raw disk

对写操作频繁的数据ORACLE使用裸设备来提高I/O

什么叫做裸设备

两个机器通过裸设备映射RDM共享的仲裁盘,msdtc盘还有数据盘

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

干货分享:SQLSERVER使用裸设备的更多相关文章

  1. iOS - GitHub干货分享(APP引导页的高度集成 - DHGuidePageHUD - ②)

    距上一篇博客"APP引导页的高度集成 - DHGuidePageHUD - ①"的发布有一段时间了, 后来又在SDK中补充了一些新的内容进去但是一直没来得及跟大家分享, 今天来跟大 ...

  2. iOS - GitHub干货分享(APP引导页的高度集成 - DHGuidePageHUD - ①)

    好长时间没更新博客, 是时候来一波干货分享了;APP引导页话不多说每一个APP都会用到,分量不重但是不可缺少,不论是APP的首次安装还是版本的更新,首先展现给用户眼前的也就只有它了吧,当然这里讲的不是 ...

  3. 【干货分享】Google 的设计准则,素材和资源

    在谷歌,他们说, “专注于用户,所有其它的就会水到渠成 ”.他们遵循设计原则,寻求建立让用户惊喜的用户体验.谷歌一直挑战自己,为他们的用户创造一种视觉语言,综合优秀设计的经典原则和创新.谷歌设计规范是 ...

  4. 【干货分享】Node.js 中文资料导航

    这篇文章与大家分享一批高质量的的 Node.js 中文资料.Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的, 易于扩展的网络应用 Node ...

  5. 裸设备和Oracle问答20例

    导读裸设备,也叫裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备.裸设备可以绑定一个分区,也可以绑定一个磁盘.本文收集裸设备和Oracle问答20例. 1.什么叫 ...

  6. Linux平台块设备到字符设备(裸设备)的三种映射方式(转载)

    在Linux平台oracle rac的组建过程中,如果使用ASM+RAW的存储方式的话,由于asm不支持块设备,支持持字符访问设备,所以需要配置将Block Device Drive转变成Charac ...

  7. 【测试】RAC搭建(裸设备)

    环境描述:   节点一 节点二 主机名 rac1 rac2 IP 192.168.10.11 192.168.10.12 IP-VIP 192.168.10.111 192.168.10.112 IP ...

  8. Linux平台下:块设备、裸设备、ASMlib、Udev相关关系

    对磁盘设备(裸分区)的访问方式分为两种:1.字符方式访问(裸设备):2.块方式访问 Solaris平台 : 在Solaris平台下,系统同时提供对磁盘设备的字符.块方式访问.每个磁盘有两个设备文件名: ...

  9. Linux UDEV和为MySQL InnoDB共享表空间配置裸设备

    ⑴ UDEV 基础         udev 可管理保存在/dev 目录下的文件.文件只有在接入相应设备后才会生成.设备被拔出后自动删除     它还允许用户添加规则.以便修改/dev中默认的名称和权 ...

随机推荐

  1. 从中间件的历史来看移动App开发的未来

    在移动开发领域我们发现一个很奇怪的现象:普通菜鸟新手经过3个月的培训就可以拿到 8K 甚至上万的工作:在北京稍微有点工作经验的 iOS 开发,就要求 2 万一个月的工资.不知道大家是否想过:移动应用开 ...

  2. ASP.NET Core应用中如何记录和查看日志

    日志记录不仅对于我们开发的应用,还是对于ASP.NET Core框架功能都是一项非常重要的功能特性.我们知道ASP.NET Core使用的是一个极具扩展性的日志系统,该系统由Logger.Logger ...

  3. .net Elasticsearch 学习入门笔记

    一. es安装相关1.elasticsearch安装  运行http://localhost:9200/2.head插件3.bigdesk插件安装(安装细节百度:windows elasticsear ...

  4. 如果你也会C#,那不妨了解下F#(7):面向对象编程之继承、接口和泛型

    前言 面向对象三大基本特性:封装.继承.多态.上一篇中介绍了类的定义,下面就了解下F#中继承和多态的使用吧.

  5. Hadoop学习之旅二:HDFS

    本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...

  6. AutoMapper的介绍与使用(一)

    软件环境 vs2015 asp.net mvc 5 .NET Framework 4.5.2 AutoMapper 5.2.0.0 AutoMapper安装 新建asp.net mvc 项目 Auto ...

  7. PAT甲级 1001. A+B Format (20)

    题目原文: Calculate a + b and output the sum in standard format -- that is, the digits must be separated ...

  8. 烂泥:redis3.2.3安装与配置

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 前一段时间写过一篇codis集群的文章,写那篇文章主要是因为当时的项目不支持redis自 ...

  9. Linux 权限设置chmod

    Linux中设置权限,一般用chmod命令 1.介绍 权限设置chmod 功能:改变权限命令.常用参数: 1=x(执行权execute) 2=w(写权write) 4=r(读权Read) setuid ...

  10. 我的MYSQL学习心得(十五) 日志

    我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...