टी-एसक्यूएल से सेलेक्ट आउटपुट को छिपाएं


13

मैं क्वेरी निष्पादन समय प्राप्त करने की कोशिश कर रहा हूं, लेकिन मैं क्वेरी आउटपुट को छुपाना चाहता हूं। मैं बस बीता हुआ समय चाहता हूं - कोई आउटपुट नहीं।

उदाहरण

DECLARE @Start datetime
DECLARE @End datetime

SELECT @StartTimeWA=GETDATE() 

SELECT 
       [id] 
      ,[database_id]
      ,[proc_name]
      ,[exec_t] from
  [DB].[dbo].[STAT] 

SELECT @End=GETDATE()

SELECT DATEDIFF(MS,@Start,@End) AS [Duration]

फिलहाल, मुझे क्वेरी आउटपुट मिलता है और सबसे नीचे मेरी अवधि होती है, जो केवल वही चीज है जो मैं चाहता हूं कि जितना आउटपुट जाता है। मैं ऐसा करने में सक्षम नहीं था और सोच रहा था कि क्या किसी और को भी इसी तरह की समस्याएँ आई हैं? यह कुछ ऐसा है जो मैं टी-एसक्यूएल प्रबंधन स्टूडियो या ऐसा कुछ भी नहीं करना चाहता हूं।

मैं उस समय का मॉनीटर करने की कोशिश कर रहा हूं, जो चयन स्टेटमेंट को चलाने और सर्वर पर वापस रिपोर्ट करने के लिए लेता है। मेरे पास एक बाह्य मॉनिटर सर्वर है जो हर मिनट चलेगा और समय वापस लेगा (इसमें ली गई अवधि) जिसे मैं समय-समय पर ट्रेंड / बेसलाइन के लिए उपयोग करूंगा। जैसा कि वर्तमान क्वेरी सेलेक्ट किए गए परिणाम और मेरी अवधि इसे समाप्त कर देती है, और मेरा मॉनिटर सर्वर भ्रमित हो जाता है। मुझे केवल अवधि कॉलम चाहिए था। मैं आवेषण के लिए भी ऐसा कर रहा हूं, जो सीधा होगा क्योंकि इसे चयन करने की आवश्यकता नहीं होगी।

मैं यह पूरी तरह से T-SQL में करने की कोशिश कर रहा हूँ । मैं DMVs का उपयोग नहीं करना चाहता क्योंकि जब मैं कोई क्वेरी चलाता हूं (स्नैपशॉट) प्राप्त करना चाहता हूं और जांचता हूं कि क्या यह समय के साथ बदलता है जब सर्वर लोड के विभिन्न स्तरों से गुजरता है तो यह मुझे एक अच्छा विचार देगा। क्या क्वेरी निष्पादन समय बदलता है।

जवाबों:


28

ऐसा करने के लिए कई अलग-अलग तरीके हैं।

मैं आमतौर पर किसी #tempतालिका में डालने की सलाह नहीं देता , क्योंकि कोई भी टेम्पर्ड लोड या ऑटोग्रॉथ परिणामों को प्रभावित कर सकता है, और मैं निश्चित रूप से एक @tableचर का उपयोग करने की सलाह नहीं देता हूं , क्योंकि उन लोगों के लिए सीरियल को मजबूर किया जाता है (कोई समानांतर योजना का उपयोग नहीं किया जा सकता है), जो वास्तविक क्वेरी बार बदल सकते हैं।

परिवर्तनशील असाइनमेंट

आप एक चर घोषित कर सकते हैं और इस तरह से अपने कॉलम असाइन कर सकते हैं:

DECLARE @Start datetime
DECLARE @End datetime
DECLARE @blob_eater SQL_VARIANT;

SELECT @StartTimeWA=GETDATE() 

SELECT 
       @blob_eater = [id] 
      ,@blob_eater = [database_id]
      ,@blob_eater = [proc_name]
      ,@blob_eater = [exec_t] from
  [DB].[dbo].[STAT] 

SELECT @End=GETDATE()

SELECT DATEDIFF(MS,@Start,@End) AS [Duration]

हालांकि ऐसा करने से कुछ पैरामीटर एम्बेडिंग अनुकूलन को रोका जा सकता है। देखें पैरामीटर सूँघने, एम्बेडिंग, और RECOMPILE विकल्प के तहत "एक एम्बेडिंग प्रतिबंध"।

ध्यान दें कि यह विधि निहितार्थ रूपांतरणों के बारे में योजना चेतावनी को ट्रिगर कर सकती है, लेकिन वे उस तरह के नहीं हैं जिनके बारे में आपको चिंता करने की ज़रूरत है। इस प्रश्नोत्तर को पृष्ठभूमि के लिए देखें: क्या इस चेतावनी को ट्रिगर करता है: अभिव्यक्ति योजना में रूपांतरण को प्रभावित कर सकता है "कार्डिनिटी ईस्टिमेट" क्वेरी योजना विकल्प में

SSMS में

आप क्वेरी परिणामों को छोड़ने के लिए सेटिंग्स बदल सकते हैं।

पागल

एसक्यूएल क्वेरी तनाव

SQL क्वेरी तनाव एक खुला स्रोत उपकरण है जो आपको लोड का अनुकरण करने के लिए SQL सर्वर के खिलाफ क्वेरी को चलाने की अनुमति देता है। जब वे चलाए जाते हैं तो कोई क्वेरी परिणाम आवेदन पर नहीं लौटाए जाते।

आप इस पर कुछ निर्देश यहां पढ़ सकते हैं ।

ओस्ट्रेस (आरएमएल उपयोगिताएँ)

ओस्ट्रेस एक ऐसा ही टूल है, जो Microsoft द्वारा प्रकाशित किया गया है, जो क्लाइंट को परिणाम वापस नहीं करता है, जब तक आप इसे करने के लिए नहीं चुनते हैं।

मैंने यहाँ इसके बारे में कुछ लिखा है

प्लान एक्सप्लोरर

SentryOne का प्लान एक्सप्लोरर SQL सर्वर निष्पादन योजनाओं और गतिरोधों को देखने के लिए एक मुफ्त विकल्प है।

आप SQL क्लाइंट को कुछ हद तक क्वेरी करने के लिए एक ग्राहक के रूप में भी इसका उपयोग कर सकते हैं:

पागल

इससे परिणाम भी खारिज हो जाएंगे।

पागल

उम्मीद है की यह मदद करेगा!


0

आप SET STATISTICS TIME ONअपने बाह्य मॉनिटर सर्वर पर अपने निगरानी ऐप का उपयोग करके अपनी क्वेरी को निष्पादित कर सकते हैं और आउटपुट संदेश पर कब्जा कर सकते हैं।

.Net के साथ आउटपुट संदेश को कैप्चर करने का एक तरीका AdaTheDev द्वारा इस स्टैक ओवरफ्लो उत्तर में बताया गया है :

आप कनेक्शन पर InfoMessage ईवेंट में इवेंट हैंडलर जोड़कर ऐसा कर सकते हैं ।

myConnection.InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage);

void myConnection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
    myStringBuilderDefinedAsClassVariable.AppendLine(e.Message);
}

0

क्या आप अपने @End को वापस करने के लिए प्रारंभिक चयन का उपयोग नहीं कर सकते थे?

सेलेक्ट करें @blob_eater = [id], @ blob_eater = [database_id], @ blob_eater = [proc_name], @ blob_eater = [exec_t] [DB] से [dbo]। [STAT]।

@ अंत का चयन करें = प्राप्त करें ()

हो जाता है

@ अंत का चयन करें = GETDATE () से [DB]। [Dbo]। [STAT]

चर में केवल अंतिम मान संग्रहीत किया जाएगा।

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