แปดวิธีในการล้างแคชแผน
1. ลบองค์ประกอบทั้งหมดออกจากแคชแผนสำหรับอินสแตนซ์ทั้งหมด
DBCC FREEPROCCACHE;
ใช้สิ่งนี้เพื่อล้างแคชแผนอย่างรอบคอบ การทำให้แคชแผนว่างทำให้เกิดเช่นกระบวนงานที่เก็บไว้จะถูกคอมไพล์ใหม่แทนที่จะถูกนำมาใช้ซ้ำจากแคช ซึ่งอาจทำให้ประสิทธิภาพการสอบถามลดลงอย่างฉับพลันและชั่วคราว
2. ล้างแคชแผนสำหรับอินสแตนซ์ทั้งหมดและระงับข้อความเสร็จสมบูรณ์ปกติ
"การดำเนินการ DBCC เสร็จสมบูรณ์ถ้า DBCC พิมพ์ข้อความแสดงข้อผิดพลาดติดต่อผู้ดูแลระบบของคุณ"
DBCC FREEPROCCACHE WITH NO_INFOMSGS;
3. ล้างเฉพาะกิจและแคชแผนที่เตรียมไว้สำหรับอินสแตนซ์ทั้งหมด
DBCC FREESYSTEMCACHE ('SQL Plans');
4. ล้างแคชเฉพาะกิจและแผนแคชที่เตรียมไว้สำหรับพูลทรัพยากรหนึ่งชุด
DBCC FREESYSTEMCACHE ('SQL Plans', 'LimitedIOPool');
5. ล้างแคชแผนทั้งหมดสำหรับพูลทรัพยากรหนึ่งรายการ
DBCC FREEPROCCACHE ('LimitedIOPool');
6. ลบองค์ประกอบทั้งหมดออกจากแคชแผนสำหรับฐานข้อมูลเดียว (ไม่ทำงานใน SQL Azure)
-- Get DBID from one database name first
DECLARE @intDBID INT;
SET @intDBID = (SELECT [dbid]
FROM master.dbo.sysdatabases
WHERE name = N'AdventureWorks2014');
DBCC FLUSHPROCINDB (@intDBID);
7. ล้างแคชแผนสำหรับฐานข้อมูลปัจจุบัน
USE AdventureWorks2014;
GO
-- New in SQL Server 2016 and SQL Azure
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
8. ลบแผนแบบสอบถามหนึ่งรายการออกจากแคช
USE AdventureWorks2014;
GO
-- Run a stored procedure or query
EXEC dbo.uspGetEmployeeManagers 9;
-- Find the plan handle for that query
-- OPTION (RECOMPILE) keeps this query from going into the plan cache
SELECT cp.plan_handle, cp.objtype, cp.usecounts,
DB_NAME(st.dbid) AS [DatabaseName]
FROM sys.dm_exec_cached_plans AS cp CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE OBJECT_NAME (st.objectid)
LIKE N'%uspGetEmployeeManagers%' OPTION (RECOMPILE);
-- Remove the specific query plan from the cache using the plan handle from the above query
DBCC FREEPROCCACHE (0x050011007A2CC30E204991F30200000001000000000000000000000000000000000000000000000000000000);
ที่มา1 2 3