在數據庫的備份過程當中有不少參數,前幾日發現公司的備份數據庫job運行的很慢,就去研究了一下,發如今備份程序中都沒有啓用壓縮,加上壓縮之後有發現效率提升了很多,本篇就幾個壓縮相關的參數來看一下備份數據庫的過程當中如何提升備份的效率。數據庫
爲了更好地瞭解數據庫備份,咱們首先要知道代碼以及參數的含義。安全
普通代碼:服務器
BACKUP DATABASE ‘備份數據庫名稱’ TO DISK = '地址+bak文件名稱' ;
加快備份進度的幾個關鍵參數:性能
1.BUFFERCOUNT--指定用於備份操做的 I/O 緩衝區總數。能夠指定任何正整數測試
2.MAXTRANSFERSIZE--指定要在 SQL Server 和備份介質之間使用的最大傳輸單位。可能的值是 64 KB的倍數,最大 4 MB。spa
3.COMPRESSION--壓縮備份選項。code
4.CHECKSUM--驗證數據選項。blog
5.啓用多個備份集。內存
這四個中CHECKSUM是用來保證數據安全的這裏咱們不作討論,因爲通常備份也不會用到多個備份集,這裏咱們主要討論前三個帶來的影響,固然對於數據量級比較大的能夠採用多備份集,尤爲不一樣磁盤的備份集將會大大提升效率。get
首先是常規沒有壓縮的狀況下的備份如圖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配合服務器的性能就能大幅提升備份效率。優勢是顯而易見的對於備份時間,備份文件大小都有提升。