SQL संकलन / सेकंड एक अच्छा मीट्रिक है, लेकिन केवल बैच अनुरोध / सेकंड के साथ युग्मित होने पर । अपने आप से, प्रति सेकंड संकलन वास्तव में आपको बहुत कुछ नहीं बताता है।
आप 170 देख रहे हैं। यदि प्रति सेकंड बैच रीक केवल 200 (प्रभाव के लिए थोड़ा अतिरंजित) है, तो हाँ, आपको कारण की तह तक उतरने की आवश्यकता है (सबसे अधिक संभावना तदर्थ क्वेरी और एकल-उपयोग योजनाओं का अति प्रयोग)। लेकिन अगर आपके बैच प्रति सेकंड 5000 के बारे में माप रहे हैं, तो प्रति सेकंड 170 संकलन बिल्कुल भी खराब नहीं है। यह अंगूठे का एक सामान्य नियम है कि संकलन / सेकंड कुल बैच अनुरोध / सेकंड से 10% या कम होना चाहिए ।
यदि आप वास्तव में क्या कैश किया जा रहा है में ड्रिल करना चाहते हैं, तो निम्नलिखित डीएमवी का उपयोग करने वाले क्वेरी को चलाएं:
select
db_name(st.dbid) as database_name,
cp.bucketid,
cp.usecounts,
cp.size_in_bytes,
cp.objtype,
st.text
from sys.dm_exec_cached_plans cp
cross apply sys.dm_exec_sql_text(cp.plan_handle) st
सभी एकल-उपयोग योजनाओं (एक गणना) प्राप्त करने के लिए:
;with PlanCacheCte as
(
select
db_name(st.dbid) as database_name,
cp.bucketid,
cp.usecounts,
cp.size_in_bytes,
cp.objtype,
st.text
from sys.dm_exec_cached_plans cp
cross apply sys.dm_exec_sql_text(cp.plan_handle) st
)
select count(*)
from PlanCacheCte
where usecounts = 1
सभी कैश्ड प्लान की तुलना में आपके पास कितने सिंगल-यूज़ काउंट प्लान का अनुपात पाने के लिए:
declare @single_use_counts int, @multi_use_counts int
;with PlanCacheCte as
(
select
db_name(st.dbid) as database_name,
cp.bucketid,
cp.usecounts,
cp.size_in_bytes,
cp.objtype,
st.text
from sys.dm_exec_cached_plans cp
cross apply sys.dm_exec_sql_text(cp.plan_handle) st
where cp.cacheobjtype = 'Compiled Plan'
)
select @single_use_counts = count(*)
from PlanCacheCte
where usecounts = 1
;with PlanCacheCte as
(
select
db_name(st.dbid) as database_name,
cp.bucketid,
cp.usecounts,
cp.size_in_bytes,
cp.objtype,
st.text
from sys.dm_exec_cached_plans cp
cross apply sys.dm_exec_sql_text(cp.plan_handle) st
where cp.cacheobjtype = 'Compiled Plan'
)
select @multi_use_counts = count(*)
from PlanCacheCte
where usecounts > 1
select
@single_use_counts as single_use_counts,
@multi_use_counts as multi_use_counts,
@single_use_counts * 1.0 / (@single_use_counts + @multi_use_counts) * 100
as percent_single_use_counts
SQL सर्वर ट्रेस के माध्यम से कैप्चर किए गए ड्यूरेशन के लिए, यह रिकॉम्पाइल ईवेंट के लिए उपलब्ध नहीं है। यह अवधि या दर्द देखने के लिए इतना महत्वपूर्ण नहीं है कि योजना संकलन का कारण बन रहा है, क्योंकि मामला-दर-मामला स्थिति के लिए आप बहुत कुछ नहीं कर सकते हैं। समाधान योजना पुन: उपयोग (पैरामीटरकृत क्वेरी, संग्रहीत कार्यविधियाँ, आदि) के माध्यम से संकलन और पुनर्मिलन को सीमित करने का प्रयास करना है।