SQL सर्वर क्वेरी स्टोर - एक 'तदर्थ' प्रश्न क्या माना जाता है?


10

मैं SQL सर्वर क्वेरी स्टोर में एक गहरा गोता लगा रहा हूं और मैं अक्सर 'ad-hoc' प्रश्नों के संदर्भ देखता हूं। हालाँकि, मैंने यह नहीं देखा कि क्वेरी स्टोर क्या होने के लिए एक तदर्थ क्वेरी निर्धारित करता है। मैंने उन स्थानों को देखा है जहां इसे मापदंडों के बिना एक क्वेरी होने का अनुमान लगाया जा सकता है या केवल एक समय में निष्पादित क्वेरी हो सकती है। क्या इसके लिए एक औपचारिक परिभाषा मौजूद है? मैं सामान्य रूप में मतलब नहीं है। मेरा मतलब है कि यह क्वेरी स्टोर से संबंधित है।

एक उदाहरण के रूप में, यह पृष्ठ क्वेरी स्टोर से तदर्थ प्रश्नों को हटाने का एक उदाहरण दिखाता है, लेकिन ऐसा लगता है कि इसका उपयोग करने वाले मानदंड सिर्फ एक का निष्पादन गणना है। यह एक तदर्थ क्वेरी की एक विषम परिभाषा प्रतीत होती है। BTW, यदि आप पृष्ठ पर जाते हैं, तो 'ऐड-हॉक क्वेरीज़ हटाएं' खोजें।


इस प्रश्न को देखें। stackoverflow.com/questions/2460954/what-is-ad-hoc-query
SqlWorldWide

@SqlWorldWide - मैंने अपना प्रश्न पुनः लिख लिया है। मैं सामान्य रूप में मतलब नहीं है। मेरा मतलब है कि यह क्वेरी स्टोर से संबंधित है।
रैंडी मिंदर

आपके क्वेरी स्टोर को कैसे कॉन्फ़िगर किया गया है - सभी या ऑटो?
परिजन शाह

@ किन - यह
रैंडी

जवाबों:


8

थोड़ी खोज के बाद, मैं इस प्रश्न का उत्तर देने के लिए Microsoft के दस्तावेज़ से एक ठोस और संतोषजनक स्रोत नहीं खोज पाया। वहाँ adhoc / ad-hoc / ad hoc के कई अच्छे तृतीय-पक्ष विवरण और परिभाषाएँ हैं, लेकिन इस प्रश्न की विशिष्टता के लिए मुझे लगता है कि स्रोत के करीब एक आदर्श है।

इस एसओ पोस्ट की तरह पिछली जेनेरिक (लेकिन अभी भी सटीक) परिभाषाओं को आगे बढ़ाते हुए (धन्यवाद SqlWorldWide), अगर हम देखते हैं कि प्रलेखन विषय पर क्या कहता है, तो यह उस बात से सहमत है जो आपने उल्लिखित परिभाषा के आधार पर निष्पादित के बारे में बताई है। , मुझे लगता है कि हम इसे तथ्य के रूप में ले सकते हैं।

तदर्थ वर्कफ़्लोज़ के लिए अनुकूलन पर लेख कहता है,

जब यह विकल्प 1 पर सेट होता है, तो डेटाबेस इंजन एक छोटे संकलित योजना स्टब को संग्रहीत करता है जब पूर्ण संकलित योजना के बजाय पहली बार एक बैच संकलित किया जाता है। यह मेमोरी के दबाव को राहत देने में मदद करता है ताकि प्लान कैश को संकलित योजनाओं से भरा नहीं हो सके। संकलित योजना स्टब से डेटाबेस इंजन को यह पहचानने की अनुमति मिलती है कि यह तदर्थ बैच पहले संकलित किया गया है, लेकिन केवल एक संकलित योजना स्टब को संग्रहीत किया गया है, इसलिए जब इस बैच को फिर से संकलित (संकलित या निष्पादित) किया जाता है, तो डेटाबेस इंजन बैच को संकलित करता है ... और पूर्ण संकलित योजना को कैश में जोड़ता है।

तो यह प्रतीत होता है कि तदर्थ क्वेरी सर्वर कॉन्फ़िगरेशन विकल्प भी एकल निष्पादन की परिभाषा को तदर्थ की परिभाषा के रूप में उपयोग करता है। यदि क्वेरी निष्पादित होती रहती है और उसी योजना को उत्पन्न करती है तो इसे अब ऐसा नहीं माना जाएगा।

क्वेरी स्टोर के लिए सर्वोत्तम प्रथाओं पर लेख भी इसके साथ संरेखित करता है,

Sys.query_store_query में प्रविष्टियों की कुल संख्या के साथ अलग-अलग query_hash मानों की संख्या की तुलना करें। यदि अनुपात 1 के करीब है तो आपका तदर्थ कार्यभार अलग-अलग प्रश्न उत्पन्न करता है।

यह, निश्चित रूप से, उन प्रश्नों के लिए है जो पहले से ही संग्रहीत प्रक्रियाओं, पैरामीटराइज़्ड आदि के रूप में उपयोग नहीं किए जाते हैं, क्योंकि उन्हें पहचाना और उचित रूप से बल्ले से ठीक किया जा सकता है।

तो इन सब के आधार पर हम कह सकते हैं कि यदि किसी प्रश्न को तदर्थ माना जाता है:

  • यह पैरामीटर नहीं है
  • यह प्रोग्रामेटिक रूप से डेटाबेस में संग्रहीत नहीं है (संग्रहित प्रोक्योर, फंक्शन, ट्रिगर इत्यादि)
  • एक ही क्वेरी को केवल एक बार निष्पादित किया जाता है या एक ही क्वेरी को कई बार निष्पादित किया जाता है, लेकिन प्रत्येक बाद के निष्पादन के लिए एक अलग क्वेरी प्लान बनाता है।

4

तदर्थ प्रश्नों के लिए, DMV में object_id कॉलम sys.query_store_query0 होगा, जैसा कि sys.query_store_query प्रलेखन में कहा गया है :

object_id :

डेटाबेस ऑब्जेक्ट की आईडी जो क्वेरी (संग्रहीत कार्यविधि, ट्रिगर, CLR UDF / UDAgg, आदि) का हिस्सा है। 0 यदि क्वेरी को डेटाबेस ऑब्जेक्ट (तदर्थ क्वेरी) के भाग के रूप में निष्पादित नहीं किया गया है।

आप उस मूल्य के आधार पर तदर्थ प्रश्नों की पहचान कर सकते हैं, भले ही यह स्पष्ट रूप से नहीं कहा गया है कि "यह तदर्थ प्रश्नों की परिभाषा है "। :)


0

शब्द तदर्थ का उपयोग उन प्रश्नों को संदर्भित करने के लिए किया जाता है जिन्हें केवल एक बार निष्पादित किया गया है। यह डेटाबेस सेटिंग के लिए उपयोग की जाने वाली परिभाषा के अनुरूप है "एड-हॉक वर्कलोड के लिए ऑप्टिमाइज़ करें"।

आप जिस लिंक का संदर्भ देते हैं, वह ऐड-हॉक क्वेरी को डिलीट करता है, जिसमें यह विशिष्ट परिभाषा शामिल है "एड-हॉक क्वेरी हटाएं: यह उन क्वेरी को हटा देता है जिन्हें केवल एक बार निष्पादित किया गया था और जो 24 घंटे से अधिक पुरानी हैं।"


0

तदर्थ से sys.dm_exec_cached_plans DMV के objtypedocs.microsoft.com में स्तंभ।

एडहॉक: तदर्थ क्वेरी। दूरस्थ प्रक्रिया कॉल के बजाय ऑस्क् या sqlcmd का उपयोग करके भाषा की घटनाओं के रूप में प्रस्तुत Transact-SQL को संदर्भित करता है।

इस कॉलम का एक उपयोग कई योजनाओं के साथ क्वेरी के मामले में यह देखने के लिए है कि क्या एकाधिक योजनाएं होती हैं Adhoc

    SELECT  DISTINCT 
        QCP.objtype
        ,MultipleQ.PlanCount
        ,qStat.query_hash
        ,sText.text AS QueryText
FROM ( 
        SELECT query_hash,
               COUNT(query_hash) AS PlanCount
        FROM sys.dm_exec_query_stats
        GROUP BY query_hash
    ) AS MultipleQ
INNER JOIN sys.dm_exec_query_stats qStat ON MultipleQ.query_hash = qStat.query_hash
INNER JOIN sys.dm_exec_cached_plans  QCP
    ON QCP.plan_handle = qStat.plan_handle
CROSS APPLY sys.dm_exec_sql_text(qStat.sql_handle) AS sText
CROSS APPLY sys.dm_exec_query_plan(qStat.plan_handle) AS qp
WHERE PlanCount > 1
ORDER BY MultipleQ.PlanCount DESC

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