乾貨分享:SQLSERVER使用裸設備

乾貨分享:SQLSERVER使用裸設備

這篇文章也適合ORACLE DBA和MYSQL DBA 閱讀html

裸設備適用於Linux和Windowssql

在ORACLE和MYSQL裏也是支持裸設備的!!數據庫

 

介紹windows

你們看到這個標題必定是一頭霧水吧,裸設備??裸體的設備??太邪惡了o(∩_∩)o 服務器

裸設備:有人叫raw disk,也有人叫raw device運維

百度一下:ide

http://baike.baidu.com/link?url=ran4ytgFFrsCmAywsOLa0uQczn8rxsEwWXF5WjdTNLx3Sv9Ng2Y1ScJsLT8k7CO7G1gOsiuq3EILSVhbYsgsSasqlserver

裸設備(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,第 3CREATE 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/秒)。
View Code

 


總結

由於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 

相關文章
相關標籤/搜索