Sql-Server
為什麼查詢會從查詢儲存中刪除?
我有時會看到查詢從查詢儲存中刪除。但我不知道為什麼。查詢儲存磁碟空間未滿,查詢距離過時查詢門檻值還很遠。
我的經驗是,我知道已執行的查詢沒有在查詢儲存中執行的歷史記錄。
我將執行此查詢以獲取 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 分鐘,這可能是造成這種情況的原因。