আমাদের কার্য সম্পাদনের প্রবণতাগুলি নিরীক্ষণ করার জন্য এবং অনুকূলিতকরণের প্রয়োজনীয় ক্ষেত্রগুলি সনাক্ত করতে একটি টেবিলে আমি ব্যয়বহুল চলমান অনুসন্ধানগুলির একটি লগ রাখছি।
তবে, এটি এমন পর্যায়ে এসে গেছে যেখানে ক্যোয়ারী পরিকল্পনাগুলি খুব বেশি জায়গা নিচ্ছে (যেমন আমরা প্রতিটি প্রশ্নের বিপরীতে পুরো পরিকল্পনাটি সংরক্ষণ করি) oring
আমি কোয়েরিপ্ল্যানহ্যাশ এবং কোয়েরিপ্ল্যানটি অন্য টেবিলে সরিয়ে দিয়ে বিদ্যমান ডেটাগুলিকে সাধারণ করার চেষ্টা করছি।
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.
সমস্যাটি হ'ল ক্যোয়ারী প্ল্যান হ্যাশগুলি ইতিমধ্যে বাইনারি ফর্ম্যাটে রয়েছে, তবে এক্সএমএল ক্যোয়ারী প্ল্যানে যেমন ভোরচার হিসাবে সংরক্ষণ করা হয়েছে যেমন eg
0x9473FBCCBC01AFE
এবং কনভার্ট থেকে বিনারি একটি সম্পূর্ণ আলাদা মান দেয়
0x3078393437334642434342433031414645
আমি এক্সকিউয়েরিতে মান সংজ্ঞাটি বাইনারিতে নির্বাচন করার চেষ্টা করেছি, কিন্তু তারপরে এটি কোনও মান দেয় নি no
আমি কীভাবে এক্স এর চেয়ে 0x9473FBCCBC01AFEএক্সএমএল ক্যোয়ারী পরিকল্পনা থেকে এর মানটি বের করব ?VARBINARYVARCHAR
,1আমি যা মিস করছিলাম। আমার প্রত্যাশার চেয়ে এটাই সহজ ছিল! ধন্যবাদ!