มีวิธีที่ฉันสามารถตรวจสอบว่าแผนเพิ่งสร้างขึ้นสำหรับแบบสอบถามเฉพาะหรือพบในแคชแผน?
มีวิธีที่ฉันสามารถตรวจสอบว่าแผนเพิ่งสร้างขึ้นสำหรับแบบสอบถามเฉพาะหรือพบในแคชแผน?
คำตอบ:
SQL Server 2012 มีตัวบ่งชี้ในแผนเอง RetrievedFromCache
ซึ่งอาจเป็น "จริง" หรือ "เท็จ"
ดูเหมือนจะเป็นคุณสมบัติที่คุณต้องการ
นี่คือตัวอย่าง (บรรทัดสุดท้ายแสดงคุณสมบัติ):
<StmtSimple StatementCompId="1" StatementEstRows="1" StatementId="1"
StatementOptmLevel="FULL" StatementOptmEarlyAbortReason="GoodEnoughPlanFound"
StatementSubTreeCost="0.0508992" StatementText="SELECT COUNT(*)

FROM sys.tables" StatementType="SELECT"
QueryHash="0x9A4B63A948B30EA0" QueryPlanHash="0xF357CAE882D5B15D"
RetrievedFromCache="true">
น่าเสียดายที่ฉันไม่เห็นอะไรที่คล้ายกันในแผนที่สร้างขึ้นโดย SQL Server 2008 R2
ใน SQL Server 2008 R2 คุณสามารถใช้sys.dm_exec_query_stats
ระบบ DMV เพื่อตรวจสอบcreation_time
คอลัมน์สำหรับแผนที่มีquery_hash
ค่าเท่ากัน แฮ็สอบถามได้จากส่วนหัวของ XML แผน (ดูตัวอย่างด้านบน) แบบสอบถามนี้จะส่งคืนแถวเกี่ยวกับแผนดังกล่าวข้างต้น:
SELECT *
FROM sys.dm_exec_query_stats qs
WHERE qs.query_hash = 0x9A4B63A948B30EA0;