জিজ্ঞাসা স্টোর পরিকল্পনা জোর করে গৌণ উপর কোয়েরি প্রভাবিত করে না
প্রাথমিকের উপর কোনও পরিকল্পনা জোর করার জন্য ক্যোয়ারী স্টোর ব্যবহার করা অবশ্যই দেখে মনে হচ্ছে এটি মাধ্যমিকের উপর পরিকল্পনাটি জোর করে।
আমি একটি নন-প্রোড সার্ভারে একটি কোয়েরি চালানোর চেষ্টা করেছি এবং তারপরে কোয়েরি স্টোরটি ফ্লাশ করছি sp_query_store_flush_db
(যার জন্য দ্বিতীয়টি সেকেন্ডারিতে ডেটা সিঙ্ক করার জন্য প্রয়োজনীয় ছিল)। এখানে বামে গৌণটি রয়েছে ("কেবলমাত্র পঠনযোগ্য" হওয়ার বিষয়ে বৃত্তাকার সতর্কতা নোট করুন) এবং ডানদিকে প্রাথমিক:
এখন আমি ডানদিকে "ফোর্স প্ল্যান" ক্লিক করব, এবং তারপরে উভয় মতামত রিফ্রেশ করব:
সুতরাং অন্তত অন্তর্নিহিত কোয়েরি স্টোর টেবিলগুলিতে "জোর করে" চাপিয়ে দেওয়া হয়েছে। ওপিতে উদ্ধৃত নিবন্ধগুলি ব্যর্থ হয়েছে যে ব্যর্থতার পরে কোয়েরি জোর করে নিজের জায়গায় রাখা উচিত:
প্রশ্ন: প্রাথমিক প্রতিলিপি থেকে মাধ্যমিক প্রতিরূপে ডাটাবেস ফেইলওভারের সময় কিউডিএস কি ফোর্সড পরিকল্পনার তথ্য ধরে রাখবে?
উত্তর: হ্যাঁ, কিউডিএস জোরপূর্বক পরিকল্পনার তথ্য sys.query_store_plan টেবিলে সঞ্চয় করে, তাই ব্যর্থতার ক্ষেত্রে আপনি নতুন প্রাথমিকের সাথে একই আচরণ দেখতে পাবেন।
কিন্তু জোর করে এমন আচরণ কি বাস্তবে ঘটে? আমি এখন উভয় সার্ভারে একই ক্যোয়ারী চালাব। প্রাথমিক হিসাবে, প্রত্যাশিত হিসাবে, "ইউজপ্ল্যান" বৈশিষ্ট্যটি রয়েছে এক্সএমএল পরিকল্পনায়:
<QueryPlan DegreeOfParallelism="1" MemoryGrant="11096" CachedPlanSize="288" CompileTime="82"
CompileCPU="78" CompileMemory="2104" UsePlan="true">
এবং ইউআইতে:
সেকেন্ডারিতে (বিভিন্ন সার্ভারের নামটি নোট করুন), পরিকল্পনাটি বাধ্য করা হয়নি । এখানে একই পরিকল্পনা এক্সএমএল স্নিপেট:
<QueryPlan DegreeOfParallelism="1" MemoryGrant="11096" CachedPlanSize="288" CompileTime="32"
CompileCPU="28" CompileMemory="1656">
পরিকল্পনা গাইডগুলি গৌণ সম্পর্কিত প্রশ্নের উপর প্রভাব ফেলবে না
আমি এই কোডটি ব্যবহার করে প্রাথমিকের উপর একটি পরিকল্পনা গাইড তৈরি করেছি (নির্দোষদের সুরক্ষার জন্য সারণীর নাম পরিবর্তন করা হয়েছে):
EXEC sp_create_plan_guide
@name = 'plan-guide-test',
@stmt = N'SELECT TOP (1000) *
FROM dbo.TableName t
WHERE
NOT EXISTS
(
SELECT NULL
FROM dbo.OtherTable o
WHERE t.Id = o.TableName
);',
@type = N'SQL',
@module_or_batch = NULL,
@hints = N'OPTION (MAXDOP 1)';
বাস্তবায়ন পরিকল্পনার প্রমাণ হিসাবে পরিকল্পনার গাইডটি অবশ্যই প্রাথমিকের উপর কার্যকর ছিল:
<StmtSimple StatementCompId="1" StatementEstRows="1000" ... StatementType="SELECT"
PlanGuideDB="..._UAT" PlanGuideName="plan-guide-test" ...>
আমি এই পর্যায়ে নিশ্চিত করেছিলাম যে পরিকল্পনার গাইডটি মাধ্যমিকটিতে প্রতিলিপি করা হয়েছিল।
মাধ্যমিকটিতে একই ক্যোয়ারী চালানো, কার্যকরকরণ পরিকল্পনায় কোনও পরিকল্পনার গাইড দ্বারা বাধ্য হওয়ার সমস্ত লক্ষণ অনুপস্থিত:
<StmtSimple StatementCompId="1" StatementEstRows="1000" ... StatementType="SELECT"
QueryHash="0xECF8A24F126EE77A" QueryPlanHash="0x0E93CF7FEAC1B6EA"
RetrievedFromCache="true" SecurityPolicyApplied="false">