2011年6月15日 星期三

資料庫管理員必學技巧 - 磁碟機寫入快取對資料庫系統的影響

        在許多人不斷的追求資料庫效能的提升,而對資料庫影響最大的莫過於磁碟I/O的效能,磁碟上的快取可以有效的提高I/O的效能,降少I/O之間的運作,但是這多人卻乎略了許多小地方,在資料庫中最重要的應該是四個基本原則 ACID (不可部分完成性、一致性、隔離性以及持久性),而目前大部份的資料庫系統都是使用「預寫式記錄」(Write-Ahead LoggingWAL) 通訊協定進行,而磁碟機快取通常要依賴電容器,而不是電池供電方案,所以當跳電造成系統關機時,可能造成資料的不完整或毀損,而在Windows上磁碟寫入快取預設是啟用的,所以在此特別介紹磁碟寫入快取的影響與如何進行磁碟快取的設定。

預寫式記錄 - Write-Ahead Logging 說明:
http://twpug.net/docs/postgresql-doc-8.0-zh_TW/wal.html

        在關閉之前先讓我們了解一下磁碟快取對於I/O的差異有多少,我使用二種方式進行測試,第一種是利用 SQL ServerStore Procedure 透過迴圈寫入表格並執行100,000次,每次約寫入30~50 byte,然後得到執行時間,而第二種的話,我就透過 硬碟測試軟體 - HD_SPEED測試,在切換磁碟寫入快取的兩種情況各執行3分鐘,有磁碟寫入快取的情況下,效能約皆在100~120MB左右,而沒有磁碟快取的測試下,在經過一分鐘以後,就會馬上從原本的每秒100MB左右,掉至每秒只剩下10MB左右,而且就一持維持爬不上來了。

第一種 (測試實測對資料庫的Insert影響效能):
    a. 啟用磁碟寫入快取(預設)
        32分38秒
    b.停用磁碟寫入快取
        33分43秒

第二種 (用磁碟效能測式軟體進行測試):
    a.啟用磁碟寫入快取(預設)時的測試結果:



    b.停用磁碟寫入快取時的測試結果:




        基於上述理由為了提高資料的完整性最好是關閉磁碟寫入快取,但是關閉寫入快取會讓磁碟的I/O效能降低,所以在下列三種情況下是可以維持寫入快取的啟用。

1、磁碟本身有獨立穩定完整的電源供應設備,如 Network Attached Storage 等。
2、資料本身對於完整性較不重視,如單獨放置 tempdb 的磁碟等。
3、在電源設備上提供更完整的備援,如不斷電系統(UPS)等。


以下說明如何進行磁碟寫入快取的設定:
PS:在Windows 7的測試下可以不用重開機即可啟用。






總結:針對以上的測試,其實磁碟寫入快取在使用上,關閉後對效能還是有一定的影響,但為了資料的完整性,中間的取捨,只好靠各位DBA的智慧與努力了。


參考網址:http://support.microsoft.com/kb/234656/zh-tw

關鍵字:Disk CacheSQL ServerWrite-Ahead Logging、磁碟寫入快取

沒有留言:

張貼留言