背景
在數據庫的備份過程中有很多參數,前幾日發現公司的備份數據庫job運行的很慢,就去研究了一下,發現在備份程序中都沒有啟用壓縮,加上壓縮以后有發現效率提高了不少,本篇就幾個壓縮相關的參數來看一下備份數據庫的過程中如何提高備份的效率。
代碼實現
為了更好地了解數據庫備份,我們首先要知道代碼以及參數的含義。
普通代碼:
BACKUP DATABASE ‘備份數據庫名稱’ TO DISK = '地址+bak文件名稱' ;
加快備份進度的幾個關鍵參數:
1.BUFFERCOUNT--指定用於備份操作的 I/O 緩沖區總數。可以指定任何正整數
2.MAXTRANSFERSIZE--指定要在 SQL Server 和備份介質之間使用的最大傳輸單位。可能的值是 64 KB的倍數,最大 4 MB。
3.COMPRESSION--壓縮備份選項。
4.CHECKSUM--驗證數據選項。
5.啟用多個備份集。
這四個中CHECKSUM是用來保證數據安全的這里我們不做討論,由於一般備份也不會用到多個備份集,這里我們主要討論前三個帶來的影響,當然對於數據量級比較大的可以采用多備份集,尤其不同磁盤的備份集將會大大提高效率。
具體對比:
首先是常規沒有壓縮的情況下的備份如圖1:
圖1
數據頁數282295,總共花費了32.147秒。接下來我們看一下當加了壓縮等參數后的表現。
增加壓縮參數的情況如圖2:
圖2
頁數接近,花費的時間是19.524秒,單位備份速度大幅提升到112.957/s。
添加了COMPRESSION、MAXTRANSFERSIZE、BUFFERCOUNT三個參數的:
圖3
這個就快了不少,花費了17.6秒,寫入速度為125.228M/s。
適當縮小MAXTRANSFERSIZE、BUFFERCOUNT,如圖4:
圖4
如圖所示,縮小MAXTRANSFERSIZE、BUFFERCOUNT后相應的寫入速度略微下降。時間也略微提高。
大幅提升BUFFERCOUNT的數值,能夠提升寫入速度。
圖5
緩沖區使用的總計空間由下面公式確定:buffercount*maxtransfersize,這里需要知道該公式結果不能大於分配內存,所以要注意服務器的最大內存以免內存溢出。
除了以上幾個條件,我也做了幾個相關的其他條件的修改來適應不同的備份數據,例如數據驗證CHECKSUM等都會增大備份數據的時間。
注意:
1> 通過壓縮前后文件的大小對比可知道到壓縮比率。
2> 對已啟用壓縮的數據庫進行壓縮備份,CPU消耗會變得更高
壓縮主要因素包括:
1.數據類型。字符數據的壓縮率要高於其他類型的數據。
2.數據重復的比例越高壓縮越好,類似於數據庫壓縮(頁壓縮)。
通常,如果某頁包含多個行,而其中的某個字段包含相同的值,則該值可獲得較大的壓縮。相反,對於包含隨機數據或者每頁只有一個很大的行的數據庫,壓縮備份的大小幾乎與未壓縮的備份相同。
總結:
不難發現,以上主要測試三個數據,在合理外圍內越大越能提高效率。同時經過研究還發現,備份壓縮后,還原的效率也會提高。
COMPRESSION、MAXTRANSFERSIZE、BUFFERCOUNT配合服務器的性能就能大幅提高備份效率。優點是顯而易見的對於備份時間,備份文件大小都有提高。