若要清除 特定資料庫的 Plan Cache,在 SQL Server 2016 可以使用 ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE
執行此陳述式將會清除 目前資料庫中的 Plan Cache,這表示屬於該資料庫的 所有查詢 都將會需要重新編譯。
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE: Clear procedure cache for a particular database - 清除特定資料庫的 Plan Cache
01. 在資料庫 Northwind,執行 4 段 SQL 查詢。
-- 011_Ad hoc Query
02. 檢視 Plan Cache
- 確認有屬於資料庫 Northwind 的 Plan Cache
-- 012_ View Each cached query and execution plan
03. 檢視 Plan Cache
- 確認有屬於資料庫 Northwind 的 Plan Cache
04. 執行 ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE
- 清除資料庫 Northwind 的 Plan Cache
-- 021_Clears the procedure (plan) cache for a particular database
05. 檢視 Plan Cache
- 確認 沒有 資料庫 Northwind 的 Plan Cache
-- 022_ View Each cached query and execution plan
06. 檢視 Plan Cache
- 確認 沒有 資料庫 Northwind 的 Plan Cache
3-part name queries 不受影響
若是為 3 部分名稱(3-part name queries, DB.Schema.Object) 的查詢,ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE 採用確認 目前資料庫 為何者的方式來處理。
舉例來說:
- 在資料庫 master 中,執行 3-part name queries,橫跨到資料庫 Northwind 存取物件,但其 目前資料庫是 master。
- 若對資料庫 Northwind 執行 ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE,將清除目前資料庫是 Northwind 的 Plan Cache,而先前在資料庫 master 中的 3-part name queries,則不受到影響。
-- 031_3-part name queries(DB.Schema.Object)
-- 032_All_in_master_db
範例程式碼
20171123_DB_CLEAR PROCEDURE_CACHE
https://drive.google.com/drive/folders/1o8J4Xsxo1UC54PG8Mfu0e-kxGir0CC2A?usp=sharing
參考資料
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE
https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-scoped-configuration-transact-sql
DBCC FREEPROCCACHE - Remove the specific plan from the cache - 由 Plan Cache 中移除指定的 Execution Plan
http://sharedderrick.blogspot.tw/2017/11/dbcc-freeproccache-remove-specific-plan.html
沒有留言:
張貼留言