簡體   English   中英

當分區中的數據差異很大時,每個分區的統計信息可以防止參數嗅探問題嗎?

[英]Can Stats per partition prevent parameter sniffing problem when data varies by wide margin in partitions?

目前我們有一個數據倉庫,它保存來自多個租戶的數據。 SQL 服務器的版本為 2019。所有租戶數據庫的架構相同,所有租戶的數據都合並到數據倉庫中。 數據在租戶基礎上在數據倉庫中進行分區。 由於租戶之間的數據差異很大,因此新儀表板存在參數嗅探問題。 一些租戶的數據少於 10000 行,一些租戶的數據高達 500 萬行。 因此,如果執行計划是基於較小的租戶構建的,則儀表板性能對大租戶不利。

互聯網上的建議是要求使用重新編譯提示或優化提示等。但我對這個參數嗅探的基礎有疑問。 由於統計信息由 SQL 服務器在分區級別維護,此統計信息是否不用於查看構建的計划是否適合新的運行時值? 在執行之前,是否曾經比較基於編譯時間和運行時間構建的計划的統計信息,以查看它們是否有效以及相關的計划是否有效?

好心提醒。

  1. 在查詢文本中嵌入分區號或 TenantID 鍵

參數用於您想要共享、重用的查詢計划時。 硬編碼導致查詢計划變化的標准是這里的基本正確答案。

即使“我們盡可能避免在代碼中使用動態 SQL”,您也應該在此處例外。

  1. 使用選項重新編譯

如果您最終沒有在查詢優化上花費太多時間,這幾乎是一樣的好。 或者

  1. 將注釋添加到因租戶或租戶大小而異的查詢中,以獲取分區計划緩存。 這對於將查詢與生成它們的代碼路徑相關聯也很有用。 例如
/* Dashboard: Sales Overview
   Visual: Total Sales
   TenantID: 12345    */   
select sum(Sales) TotalSales
from T
where TenantId = @tenantId

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM