1. 程式人生 > >sql server 備份恢復效率

sql server 備份恢復效率

在服務器 效果 toolbar nbsp string index post conf creat

如何提高備份的速度呢?

其實這個問題和如何讓系統跑的更快是一樣的,要想系統跑的更快,無非就是:優化系統,或者就是更好更強大的服務器,特別是更多的cpu、更大的內存、更快的硬盤。

提高備份的速度也是一樣的,一般備份數據庫,不太可能是系統宕機,為什麽呢? 因為備份數據庫所使用的系統資源不會占用太多,所以,要想提高備份的速度,那麽只有允許備份使用更多的內存才行,通過下面的2個選項,給備份分配更多的資源,那麽備份速度就大大提高了。

數據傳輸選項

1、緩沖區使用的總計空間由下面公式確定:buffercount*maxtransfersize。

2、BUFFERCOUNT = { buffercount | @buffercount_variable }
指定用於備份操作的 I/O 緩沖區總數。 可以指定任何正整數;但是,較大的緩沖區數可能導致由於 Sqlservr.exe 進程中的虛擬地址空間不足而發生“內存不足”錯誤。

3、MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable }
指定要在 SQL Server 和備份介質之間使用的最大傳輸單元(字節)。 可能的值是 65536 字節 (64 KB) 的倍數,最多可到 4194304 字節 (4 MB)。

能不能再快呢?

其實在備份的時候,之所以慢,是和IO的性能相關的,由於IO是整個計算機體系中最慢的,所以才導致備份也慢,但如果我們能減少寫入磁盤的數據,不就可以提高性能了嘛,當然,在減少寫入數據的同時,需要通過消耗更多的CPU資源來進行壓縮,減小備份的數據大小。

compression選項:

指定對於此備份是否執行備份壓縮。
從 SQL Server 2008 R2 開始,SQL Server 2008 R2 Standard 和所有更高版本都支持備份壓縮。安裝時,默認行為是不進行備份壓縮。但此默認設置可通過設置 backup compression default 服務器配置選項進行更改。

默認情況下,壓縮備份時,將執行校驗和(也就是checksum選項)以檢測是否存在介質損壞情況。

在SQL SERVER 的參數可知,默認服務器是不啟用備份壓縮的。

?
1 2 3 4 5 select name, description, value_in_use
--是否啟用此參數 from sys.configurations where name =‘backup compression default‘

如果要啟用備份壓縮,可以運行如下的命令:

?
1 2 3 exec sp_configure ‘backup compression default‘,1 reconfigure go

還能再快嗎?

這次是運用IO的並行特性,也就是如果在服務器上有多個物理硬盤,那麽可以把一個備份文件條帶化,比如,有3個硬盤,那麽就把原來的備份文件,分成3份,分別存儲到3個硬盤上。

下面是實驗代碼

1、先建庫,建表,插入大量數據:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 use master go if DB_ID(‘db_test‘) is not null drop database db_test go CREATE DATABASE db_test ON ( NAME = db_test_DATA, FILENAME = ‘E:\db_test.mdf‘ ) LOG ON ( NAME = db_test_LOG, FILENAME = ‘E:\db_test.ldf‘ ) GO use db_test go select * Into test from sys.objects go insert into test select * from test go 20

2、普通的完整備份,耗時213秒:

?
1 2 3 4 5 6 7 8 backup database db_test to disk = ‘e:\db_test.bak‘ with format /* 已為數據庫 ‘db_test‘,文件 ‘db_test_DATA‘ (位於文件 1 上)處理了 356448 頁。 已為數據庫 ‘db_test‘,文件 ‘db_test_LOG‘ (位於文件 1 上)處理了 3 頁。 BACKUP DATABASE 成功處理了 356451 頁,花費 213.018 秒(13.072 MB/秒)。 */

3、增大了IO緩沖區的完整備份,耗時142秒:

?
1 2 3 4 5 6 7 8 9 10 backup database db_test to disk = ‘e:\db_test1.bak‘ with format, buffercount = 10, maxtransfersize = 4194304 /* 已為數據庫 ‘db_test‘,文件 ‘db_test_DATA‘ (位於文件 1 上)處理了 356448 頁。 已為數據庫 ‘db_test‘,文件 ‘db_test_LOG‘ (位於文件 1 上)處理了 1 頁。 BACKUP DATABASE 成功處理了 356449 頁,花費 142.101 秒(19.597 MB/秒)。 */

4、增大IO緩沖區、壓縮完整備份,耗時56秒:

?
1 2 3 4 5 6 7 8 9 10 11 backup database db_test to disk = ‘e:\db_test2.bak‘ with format, buffercount = 10, maxtransfersize = 4194304, compression /* 已為數據庫 ‘db_test‘,文件 ‘db_test_DATA‘ (位於文件 1 上)處理了 356448 頁。 已為數據庫 ‘db_test‘,文件 ‘db_test_LOG‘ (位於文件 1 上)處理了 1 頁。 BACKUP DATABASE 成功處理了 356449 頁,花費 56.089 秒(49.648 MB/秒)。 */

5、增大IO緩沖區、壓縮、條帶化完整備份,耗時55秒,由於是筆記本電腦,就一個硬盤,所以效果不明顯:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 backup database db_test to disk = ‘c:\db_test_stripping1.bak‘, disk = ‘d:\db_test_stripping2.bak‘, disk = ‘e:\db_test_stripping3.bak‘ with format, buffercount = 10, maxtransfersize = 4194304, compression /* 已為數據庫 ‘db_test‘,文件 ‘db_test_DATA‘ (位於文件 1 上)處理了 356448 頁。 已為數據庫 ‘db_test‘,文件 ‘db_test_LOG‘ (位於文件 1 上)處理了 1 頁。 BACKUP DATABASE 成功處理了 356449 頁,花費 55.060 秒(50.576 MB/秒)。 */

通過在我的普通筆記本電腦上做的這個實驗,我們可以看出明顯的差別,特別是使用了compression選項後,比最原始的完整備份,速度提高了4倍。那麽如果是服務器上,我想應該能提高更多。

sql server 備份恢復效率