Sql-Server

針對快照的查詢性能不可預測

  • November 24, 2017

我有一個基本的報告解決方案,我們有一組每天導出到 CSV 文件的視圖。出於多種原因,我們不會針對事務數據庫執行報告,而是針對我們臨時創建的快照執行報告,然後在報告完成後將其刪除。

這些報告非常簡單,在開發機器上執行良好,即使有數百萬行。

在我們的測試環境中,性能無處不在,有時需要幾秒鐘(與開發相同),但通常需要一分鐘以上。我已經執行了一些腳本來嘗試找出原因,但問題始終是等待類型的PAGEIOLATCH_SH.

此時的磁碟 IO 較低(2-5mb/sec),CPU 約為 5%,不需要發生其他查詢即可發生問題,並且與伺服器記憶體相比,數據庫很小(2gb)( 32GB)。報告在同一台機器上執行,但寫入不同的物理磁碟。

數據庫位於 Always On 可用性組這一事實是否可能會導致問題?將快照放在與主伺服器不同的磁碟上會有所幫助嗎?

任何有關問題可能是什麼或如何調查的指示將不勝感激!

實際的問題是碎片化——我們的索引非常碎片化。由於索引已經修復,問題完全消失了!

PAGEIOLATCH_SH 表示等待讀取數據庫頁面。創建數據庫快照時,沒有任何數據庫頁面在記憶體中,您必須從磁碟中獲取它們。

這些時間的磁碟 IO 很低(2-5mb/秒),

查詢計劃可能會驅動小的隨機 IO,並且 2-5mb/sec 是您的磁碟所能提供的全部。

將快照放在與主伺服器不同的磁碟上會有所幫助嗎?

數據庫快照是目標數據庫的 NTFS 寫入時複製快照。數據庫及其快照之間只有一份未更改的頁面共享。如果您使用備份/恢復而不是數據庫快照,那麼您可以將其放在不同的磁碟上。

引用自:https://dba.stackexchange.com/questions/191588