Sql-Server

為什麼查詢會從查詢儲存中刪除?

  • May 8, 2020

我有時會看到查詢從查詢儲存中刪除。但我不知道為什麼。查詢儲存磁碟空間未滿,查詢距離過時查詢門檻值還很遠。

我的經驗是,我知道已執行的查詢沒有在查詢儲存中執行的歷史記錄。

我將執行此查詢以獲取 query_id:

SELECT   t.query_sql_text, q.query_id, object_name(q.object_id) AS parent_object, q.query_text_id, q.count_compiles
   FROM sys.query_store_query_text t JOIN sys.query_store_query q ON t.query_text_id = q.query_text_id 
WHERE  t.query_sql_text LIKE  N'%part_of_query%'

然後我在“跟踪查詢”中使用 query_id。

但是,有時,如果我在當天晚些時候想要查看此查詢並再次執行上述查詢,我會得到一個新的 query_id,並且沒有舊 query_id 的踪跡。這甚至會影響“總資源消耗”。如果新的 query_id 是在 11:00 創建的並且消耗了大量資源,那麼在 11:00 看起來資源使用量會突然增加。

我經常看到的查詢涉及到一個臨時表,這意味著有一個batch_sql_handle 與query_id 一起儲存。我知道 database_id 是其中的一部分,並且 Always On AG 上的故障轉移會導致類似的情況。參考:https : //milossql.wordpress.com/2019/10/21/dude-wheres-my-forced-plan-part-1/ 我一直在嘗試查找有關 batch_sql_handle 基於什麼以及如何自動清理工作正常,但沒有找到任何對我有幫助的東西。

基於大小的清理模式設置為自動

在設置了查看查詢儲存清理的擴展事件會話後,我在一個事件中看到了我的 query_id:query_store_size_retention_query_deleted

所以我的查詢被丟棄以避免受到大小限制。flush_interval_settings 設置為 1 分鐘,這可能是造成這種情況的原因。

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