পঠনযোগ্য দ্বিতীয় স্তরের উপর জোরপূর্বক পরিকল্পনা


14

যদি কোনও পরিকল্পনার কোনও প্রাপ্যতা গ্রুপে প্রাথমিকের উপর চাপ দেওয়া হয়, তবে এটি সেকেন্ডারিতে চালিত কোয়েরিতে প্রয়োগ করা হয়?

আমি এমন জবাব খুঁজছি যা জোর করে পরিকল্পনার জন্য উভয় সম্ভাবনা কভার করে:

আমি নিম্নলিখিতটি পড়েছি যা পরামর্শ দেয় যে কিউএস জোরপূর্বক পরিকল্পনাগুলি কার্যকর হয় না, তবে ডকুমেন্টেশনে প্রামাণিক কিছু, বা পরিকল্পনাগুলি গাইড সম্পর্কে কিছুই খুঁজে পাচ্ছি না।

উপস্থিতি হবে ফোর্সিং অকাট্য প্রমাণ Use Planবা PlanGuideNameএবং PlanGuideDBসেকেন্ডারি সঞ্চালনের পরিকল্পনার বৈশিষ্ট্য।

উত্তর:


18

জিজ্ঞাসা স্টোর পরিকল্পনা জোর করে গৌণ উপর কোয়েরি প্রভাবিত করে না

প্রাথমিকের উপর কোনও পরিকল্পনা জোর করার জন্য ক্যোয়ারী স্টোর ব্যবহার করা অবশ্যই দেখে মনে হচ্ছে এটি মাধ্যমিকের উপর পরিকল্পনাটি জোর করে।

আমি একটি নন-প্রোড সার্ভারে একটি কোয়েরি চালানোর চেষ্টা করেছি এবং তারপরে কোয়েরি স্টোরটি ফ্লাশ করছি 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">

অনুপস্থিত পরিকল্পনার গাইড বৈশিষ্ট্য সহ এক্সএমএলে এক্সিকিউশন পরিকল্পনার স্ক্রিনশট

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.