AlwaysOn 可用性數據庫的統計資訊
您能否幫助我理解為什麼 SQL Server 需要在 tempdb 中維護屬於 Always On 可用性組的 DB 的統計資訊?
主副本中發生的“一切”不是都複製到輔助副本嗎?如果是這樣,主節點中發生的統計數據更改將被複製到輔助節點,不是嗎?
主副本中發生的“一切”不是複製到輔助副本嗎?
是的,在主副本上創建的統計資訊將復製到輔助副本。
輔助是主數據庫的嚴格副本(副本)。因此,統計資訊是在與只讀數據庫連結的 tempdb 中創建的。
SQL 伺服器將在 tempdb 中維護只讀輔助數據庫的統計資訊。您的次要工作負載(只讀)將不同於主要工作負載(主要是寫入(更多)和讀取)。
來自:AlwaysOn:ReadOnly 數據庫統計數據的挑戰
在主副本上創建的任何統計資訊都會自動在輔助副本上可用,但是您將在輔助副本上執行的查詢很可能與您在主副本上執行的查詢非常不同。因此,在輔助副本上執行查詢時,統計資訊可能會失去或可能過時。
為了克服可能由於缺少或過時的統計資訊而導致的性能問題,SQL Server 團隊在 TempDB 中提出了臨時統計資訊。請參閱:在 Readable Secondary 上提供最新統計資訊
主副本中發生的“一切”不是複製到輔助副本嗎?如果是這樣,主節點中發生的統計數據更改將被複製到輔助節點,不是嗎?
你是對的。
您能否幫助我理解為什麼 SQL Server 需要維護屬於 tempdb 中 Always On 可用性組的 DB 的統計資訊?
當存在可讀的輔助副本時,這確實發揮了作用。可讀的次要副本上可能有不同於主要副本的工作負載,並且可以從列和索引的不同統計資訊中受益。這就是 TempDB 中的臨時統計數據發揮作用的地方(因為數據庫是
$$ for all outside purposes $$只讀)。 這些統計數據實際上只是為了支持在可讀輔助節點上區分工作負載,而無需在主節點上顯式創建它們並讓它們流過。
如果不使用可讀的輔助副本,這些副本對您將毫無用處,甚至不會被創建。