पठनीय सेकंडरी पर मजबूर योजनाएं


14

यदि किसी उपलब्धता समूह में प्राथमिक पर एक योजना को मजबूर किया जाता है, तो क्या यह द्वितीयक पर चलने वाले प्रश्नों पर लागू होता है?

मैं उन जवाबों की तलाश में हूं जो योजना के लिए दोनों संभावनाओं को कवर करते हैं:

मैंने निम्नलिखित पढ़ा है कि क्यूएस मजबूर योजनाओं का सुझाव नहीं दिया जाता है, लेकिन प्रलेखन में कुछ भी नहीं मिल सकता है, या योजना गाइड के बारे में कुछ भी नहीं पता है।

की उपस्थिति होगा मजबूर कर के निर्णायक सबूत Use Planया PlanGuideNameऔर PlanGuideDBके माध्यमिक निष्पादन योजना में गुण।

जवाबों:


18

क्वेरी स्टोर योजना मजबूर करने से माध्यमिक पर प्रश्न प्रभावित नहीं होते हैं

प्राथमिक पर एक योजना को लागू करने के लिए क्वेरी स्टोर का उपयोग करना निश्चित रूप से ऐसा लगता है कि यह माध्यमिक पर योजना को मजबूर करता है।

मैंने एक गैर-ठेस सर्वर पर एक क्वेरी चलाने की कोशिश की, और फिर क्वेरी स्टोर को फ्लश करने के साथ sp_query_store_flush_db(जो कि माध्यमिक में डेटा को सिंक करने के लिए आवश्यक था)। यहां बाईं ओर माध्यमिक है ("केवल पढ़ने के लिए" के बारे में परिकल्पित चेतावनी पर ध्यान दें), और दाईं ओर प्राथमिक:

क्वेरी स्टोर UI का स्क्रीनशॉट

अब मैं दाईं ओर "Force Plan" पर क्लिक करूंगा, और फिर दोनों दृश्य ताज़ा करूंगा:

क्वेरी स्टोर UI का स्क्रीनशॉट दोनों मजबूर योजनाएं दिखा रहा है

तो "मजबूर" कम से कम अंतर्निहित क्वेरी स्टोर तालिकाओं में किया जाता है। यह समझ में आता है, यह देखते हुए कि ओपी में उद्धृत लेख इस बात को स्पष्ट करते हैं कि फेलओवर के बाद क्वेरी की बाध्यता को यथावत रहना चाहिए:

प्रश्न: क्या QDS प्राथमिक प्रतिकृति से द्वितीयक प्रतिकृति तक डेटाबेस विफलता का पता लगा सकते हैं?

उत्तर: हाँ, QDS sys.query_store_plan तालिका में योजना संबंधी जानकारी संग्रहीत करता है, इसलिए विफलता के मामले में आपको नए प्राथमिक पर समान व्यवहार दिखाई देता रहेगा।

लेकिन क्या जबरदस्ती का व्यवहार वास्तव में होता है? अब मैं दोनों सर्वर पर एक ही क्वेरी चलाऊंगा। उम्मीद के मुताबिक प्राथमिक, "UsePlan" विशेषता एक्सएमएल योजना में है:

<QueryPlan DegreeOfParallelism="1" MemoryGrant="11096" CachedPlanSize="288" CompileTime="82"
           CompileCPU="78" CompileMemory="2104" UsePlan="true">

और UI में:

SSMS में निष्पादन योजना का स्क्रीनशॉट "उपयोग योजना" विशेषता दिखा रहा है

द्वितीयक पर (विभिन्न सर्वर नाम पर ध्यान दें), योजना को मजबूर नहीं किया गया था । यहाँ एक ही योजना XML स्निपेट है:

<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">

XML में लापता योजना गाइड विशेषताओं के साथ निष्पादन योजना का स्क्रीनशॉट

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.