मैं अपनी क्वेरी योजनाओं के साथ-साथ, प्रदर्शन में रुझानों की निगरानी करने और उन क्षेत्रों की पहचान करने की अनुमति देने के लिए एक महंगी चल रही क्वेरी का एक लॉग रख रहा हूं, जिन्हें अनुकूलन की आवश्यकता है।
हालाँकि, यह उस बिंदु पर आ गया है जहाँ क्वेरी योजनाएँ बहुत अधिक स्थान ले रही हैं (जैसा कि हम प्रत्येक क्वेरी के विरुद्ध पूरी योजना बना रहे हैं)।
इसलिए मैं QueryPlanHash और QueryPlan को किसी अन्य तालिका से निकालकर मौजूदा डेटा को सामान्य करने का प्रयास कर रहा हूं।
CREATE TABLE QueryPlans
(
QueryPlanHash VARBINARY(25),
QueryPlan XML,
CONSTRAINT PK_QueryPlans PRIMARY KEY
(
QueryPlanHash
)
);
की परिभाषा के रूप में query_plan_hash
में sys.dm_exec_query_stats
एक द्विआधारी क्षेत्र (और मैं नियमित रूप से नए डेटा डालने हो जाएगा) है, मैं उपयोग कर रहा था VARBINARY
मेरी नई तालिका में डेटा प्रकार के लिए।
हालाँकि, नीचे सम्मिलित विफल रहता है ...
INSERT INTO QueryPlans
( QueryPlanHash, QueryPlan )
SELECT queryplanhash, queryplan
FROM
(
SELECT
p.value('(./@QueryPlanHash)[1]', 'varchar(20)') queryplanhash,
QueryPlan,
ROW_NUMBER() OVER (PARTITION BY p.value('(./@QueryPlanHash)[1]', 'varchar(20)') ORDER BY DateRecorded) rownum
FROM table
CROSS APPLY QueryPlan.nodes('/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple[@QueryPlanHash]') t(p)
) data
WHERE rownum = 1
.... त्रुटि के साथ
Implicit conversion from data type varchar to varbinary is not allowed. Use the CONVERT function to run this query.
समस्या यह है कि क्वेरी प्लान हैश पहले से ही द्विआधारी प्रारूप में हैं, हालांकि एक्सएमएल क्वेरी प्लान जैसे VARCHAR के रूप में संग्रहीत हैं
0x9473FBCCBC01AFE
और बायनेरी को परिवर्तित एक पूरी तरह से अलग मूल्य देता है
0x3078393437334642434342433031414645
मैंने द्विआधारी चयन में मूल्य परिभाषा को बाइनरी में बदलने की कोशिश की, लेकिन फिर इसे कोई मान नहीं लौटाया।
मैं 0x9473FBCCBC01AFE
एक VARBINARY
के बजाय एक XML क्वेरी योजना से मूल्य कैसे निकालूंगा VARCHAR
?
,1
मैं क्या याद कर रहा था। मैं उम्मीद कर रहा था की तुलना में आसान था! धन्यवाद!