अक्सर, हमें SQL सर्वर इंस्टेंस को चलाने के संबंध में सिस्टम आँकड़े एकत्र करने की आवश्यकता होती है, जैसे कि SQL सर्वर इंस्टेंस के प्रारंभ होने के बाद से प्रयास किए गए कुल कनेक्शन की संख्या, या SQL सर्वर द्वारा सक्रिय संचालन में बिताया गया समय, आदि। Microsoft हमारे लिए एक अलग सेट लेकर आया है। सिस्टम से संबंधित आँकड़ों को पुनः प्राप्त करने के लिए सिस्टम कार्य करता है। आज, मैं उपयोग के मामलों के साथ ऐसे सिस्टम सांख्यिकीय कार्यों की व्याख्या करने जा रहा हूं।
एसक्यूएल में सिस्टम सांख्यिकीय कार्य
सिस्टम सांख्यिकीय फ़ंक्शन एक प्रकार का स्केलर फ़ंक्शन है जो आउटपुट में एकल मान लौटाता है। यह सिस्टम के बारे में सांख्यिकीय जानकारी प्रदान करता है। एक आवश्यक नोट यह है कि इस श्रेणी के अंतर्गत आने वाले सभी फ़ंक्शन आपके द्वारा निष्पादित किए जाने पर समान आउटपुट नहीं लौटाएंगे। प्रत्येक निष्पादन के लिए, आपको एक अलग परिणाम मिलता है। इसलिए सिस्टम सांख्यिकीय कार्य गैर-नियतात्मक हैं।
SQL सर्वर में सिस्टम से संबंधित आँकड़े लौटाने वाले कई इन-बिल्ट सिस्टम सांख्यिकीय कार्य हैं। नीचे दी गई सूची है:
- @@CONNECTIONS
- @@PACK_RECEIVED
- @@CPU_BUSY
- @@PACK_SENT
- @@TIMETICKS
- @@IDLE
- @@TOTAL_ERRORS
- @@IO_BUSY
- @@TOTAL_READ
- fn_virtualfilestats
- @@PACKET_ERRORS
- @@TOTAL_WRITE
अब, आइए उनके बारे में गहराई से जानें।
@@CPU_BUSY और @@TIMETICKS सिस्टम फ़ंक्शंस को समझना
@@CPU_BUSY महत्वपूर्ण है जब हमें यह समझने की आवश्यकता है कि सीपीयू ने मिलीसेकंड में कितना समय एसक्यूएल सर्वर संचालन पर काम करने में बिताया है। SQL सर्वर के अंतिम पुनरारंभ के बाद से हर बार जब आप इसे चलाते हैं तो इस फ़ंक्शन का परिणाम वृद्धिशील होता है। इसका मतलब है कि प्रत्येक रन के लिए हमें आउटपुट में वृद्धिशील मूल्य मिलता है। उदाहरण देखें:
--Execute below T-SQL to get how busy your CPU is
SELECT @@CPU_BUSY
आउटपुट:
यह एक एकल संख्यात्मक मान देता है जिसका अर्थ है कि सीपीयू ने पिछले SQL सर्वर सेवा के पुनरारंभ होने के बाद से SQL सर्वर लेनदेन चलाने पर 641 मिलीसेकंड खर्च किए हैं।अब, एक साधारण सेलेक्ट स्टेटमेंट को निष्पादित करते हैं। आउटपुट वृद्धिशील है या नहीं, यह सत्यापित करने के लिए मैं उपरोक्त टी-एसक्यूएल स्टेटमेंट को फिर से चलाऊंगा।
--Fetch top 1000 rows for a table
SELECT TOP (1000) [BusinessEntityID]
,[PersonType]
,[NameStyle]
,[Title]
,[FirstName]
,[MiddleName]
,[LastName]
,[Suffix]
,[EmailPromotion]
,[AdditionalContactInfo]
,[Demographics]
,[rowguid]
,[ModifiedDate]
FROM [AdventureWorks2019].[Person].[Person]
आउटपुट:
चलो चुनें @@CPU_BUSY फिर से इसका आउटपुट देखने के लिए:
यहां, हम पहले स्क्रीनशॉट में दिए गए 641 मिलीसेकंड मान की तुलना में 653 मिलीसेकंड का वृद्धिशील मान देख सकते हैं। इसलिए, हमने पुष्टि की है कि ये सिस्टम फ़ंक्शन एकल वृद्धिशील मान लौटाते हैं।
अब, गहरा गोता लगाएँ। हम यह जाँचने जा रहे हैं कि @@CPU_BUSY . का उपयोग कैसे करें हमारी आवश्यकताओं के लिए विभिन्न परिदृश्यों में।
जैसा कि ऊपर बताया गया है, @@CPU_BUSY सिस्टम फ़ंक्शन मिलीसेकंड में आउटपुट देता है . यदि आप इसका आउटपुट माइक्रोसेकंड . में प्राप्त करना चाहते हैं , आपको @@TIMETICKS . का उपयोग करने की आवश्यकता है @@CPU_BUSY T-SQL कथन चलाते समय कार्य करें (नीचे दिए गए आदेश देखें)।
@@TIMETICKS माइक्रोसेकंड की संख्या देता है प्रति टिक ।
टिक एक प्रकार का शेड्यूलिंग इवेंट है जो शेड्यूलर को चलाने का कारण बनता है। प्रति टिक समय की मात्रा कंप्यूटर पर निर्भर मूल्य है जिसे नीचे दिए गए टी-एसक्यूएल स्टेटमेंट को चलाकर प्राप्त किया जा सकता है:
--Get @@TIMETICKS output
SELECT @@TIMETICKS
यहाँ इसका आउटपुट है:
माइक्रोसेकंड और सेकंड में आउटपुट प्राप्त करने के लिए हम दोनों कार्यों का एक साथ उपयोग करेंगे:
--Get @@CPU_BUSY output in Microseconds & seconds
SELECT @@CPU_BUSY*@@TIMETICKS As [CPU Busy Microseconds]
Go
SELECT @@CPU_BUSY*@@TIMETICKS/1000000 As [CPU Busy Seconds]
Go
दोनों T-SQL कथनों को निष्पादित करने के बाद, हम आउटपुट देख सकते हैं:
नोट:यदि आपको @CPU_BUSY आउटपुट फ्लोट डेटा प्रकार में प्राप्त करने की आवश्यकता है , आप नीचे दिए गए कथनों के सेट को चलाकर भी इसे पूरा कर सकते हैं:
--Get @@CPU_BUSY output in Microseconds & seconds with float data type
SELECT @@CPU_BUSY*CAST (@@TIMETICKS As float) As [CPU Busy Microseconds],
@@CPU_BUSY*CAST (@@TIMETICKS As float)/1000000 As [CPU Busy Seconds]
Go
आउटपुट:
आगे बढ़ें और अपनी व्यावसायिक आवश्यकता के अनुसार @@CPU_BUSY और @@TIMETICK सिस्टम फ़ंक्शंस का उपयोग करें।
@@IO_BUSY सिस्टम फंक्शन को समझना
जैसा कि इसके नाम से पता चलता है, यह सिस्टम फ़ंक्शन मिलीसेकंड में कुल समय देता है जो SQL सर्वर ने SQL सर्वर के अंतिम पुनरारंभ के बाद से IO संचालन (इनपुट \ आउटपुट संचालन) करने में खर्च किया है। हर बार जब आप इसे चलाते हैं तो इस सिस्टम फ़ंक्शन का आउटपुट भी वृद्धिशील होता है।
नीचे दिए गए T-SQL स्टेटमेंट को रन करें:
--Get total time SQL Server has taken in IO operations since its last restart
SELECT @@IO_BUSY
नीचे दी गई इमेज में आउटपुट 194 मिलीसेकंड है।
हम माइक्रोसेकंड में मान प्राप्त करने के लिए @@TIMETICKS सिस्टम फ़ंक्शन का भी उपयोग कर सकते हैं:
--Get total time SQL Server has taken in IO operations since its last restart
SELECT @@IO_BUSY*@@TIMETICKS AS [IO Microseconds]
GO
SELECT @@IO_BUSY*@@TIMETICKS/1000000 AS [IO Seconds]
यहाँ उपरोक्त T-SQL स्टेटमेंट का आउटपुट दिया गया है:
यदि आप @@TIMETICKS सिस्टम फ़ंक्शन का उपयोग करके मान को माइक्रोसेकंड में परिवर्तित करते समय अंकगणितीय अतिप्रवाह से बचना चाहते हैं, तो इसके आउटपुट को फ्लोट डेटा प्रकार में प्राप्त करने के लिए नीचे दिए गए कमांड को चलाएँ जैसा कि हमने पहले @@CPU_BUSY फ़ंक्शन के लिए किया है:
--Get total time SQL Server has taken in IO operations since its last restart
SELECT @@IO_BUSY*CAST (@@TIMETICKS As float) AS [IO Microseconds]
GO
SELECT @@IO_BUSY*CAST (@@TIMETICKS As float)/1000000 AS [IO Seconds]
Go
@@IDLE सिस्टम फ़ंक्शन को समझना
यह सिस्टम फ़ंक्शन अंतिम पुनरारंभ के बाद से SQL सर्वर निष्क्रिय स्थिति के लिए मिलीसेकंड में समय देता है। निम्न आदेश चलाएँ:
--Get total time SQL Server was idle
SELECT @@IDLE
यहाँ आउटपुट है:
आप वर्तमान समय और SQL सर्वर के पुनरारंभ होने के समय के बीच उनका मान प्राप्त करने के लिए उपरोक्त सभी सिस्टम फ़ंक्शंस के साथ GETDATE() फ़ंक्शन का भी उपयोग कर सकते हैं। यदि आप इस मान को माइक्रोसेकंड में प्राप्त करना चाहते हैं, तो @@TIMETICKS फ़ंक्शन का उपयोग करें जैसा कि @@CPU_BUSY और @@IO_BUSY फ़ंक्शन के लिए दिखाया गया है।
नीचे दिया गया टी-एसक्यूएल कथन पिछले उदाहरणों के समान ही है। यह फ्लोट डेटा प्रकार में सेकंड और माइक्रोसेकंड की संख्या लौटाता है।
--Get total time SQL Server was idle
SELECT @@IDLE* CAST(@@TIMETICKS AS Float) As [IO Microseconds]
GO
SELECT @@IDLE*CAST(@@TIMETICKS AS Float)/1000000 AS [IO Seconds]
Go
आउटपुट:
@@PACK_SENT, @@PACK_RECEIVED, और @@PACKET_ERRORS को समझना
ये सिस्टम सांख्यिकीय कार्य नेटवर्क पैकेट से संबंधित हैं। वे नेटवर्क पैकेट पर जानकारी का विश्लेषण करने में अत्यंत उपयोगी हैं।
- @@PACK_SENT - अंतिम पुनरारंभ के बाद से SQL सर्वर द्वारा नेटवर्क पर लिखे गए आउटपुट पैकेट की संख्या लौटाता है।
- @@PACK_RECEIVED - अंतिम पुनरारंभ के बाद से SQL सर्वर द्वारा नेटवर्क से पढ़े गए इनपुट पैकेट की संख्या प्रदर्शित करता है।
- @@PACKET_ERRORS - पिछले पुनरारंभ के बाद से SQL सर्वर कनेक्शन पर हुई नेटवर्क पैकेट त्रुटियों की संख्या प्रदर्शित करता है।
SQL सर्वर द्वारा पढ़ने या लिखे जाने के लिए इनपुट और आउटपुट पैकेट की संख्या प्राप्त करने के लिए हम नीचे दिए गए T-SQL स्टेटमेंट का उपयोग कर सकते हैं।
--Get the number of packets received or sent
SELECT @@PACK_SENT AS [Packets Sent]
GO
SELECT @@PACK_RECEIVED AS [Packets RECIEVED]
GO
इन पैकेटों के बारे में विवरण आउटपुट में हैं:
आप @@PACKET_ERRORS . भी चला सकते हैं इसी तरह पैकेट त्रुटियों की कुल संख्या प्राप्त करने के लिए:
--Get number of packets Errors
SELECT @@PACKET_ERRORS
@@TOTAL_READ, @@TOTAL_WRITE और @@TOTAL_ERRORS को समझना
डिस्क से संबंधित सिस्टम सांख्यिकीय कार्यों को डिस्क रीड, डिस्क राइट और डिस्क राइट त्रुटियों की संख्या प्राप्त होती है जो SQL सर्वर ने की है।
- @@TOTAL_READ - अंतिम पुनरारंभ के बाद से SQL सर्वर द्वारा पढ़ी गई डिस्क की संख्या प्रदर्शित करता है।
- @@TOTAL_WRITE - अंतिम पुनरारंभ के बाद से SQL सर्वर द्वारा डिस्क लिखने की संख्या प्रदर्शित करता है।
- @@TOTAL_ERRORS - अंतिम पुनरारंभ के बाद से SQL सर्वर द्वारा डिस्क लिखने की त्रुटियों की संख्या प्रदर्शित करता है। याद रखें, गैर-घातक लेखन त्रुटियां इस फ़ंक्शन द्वारा कैप्चर नहीं की जाती हैं - उन्हें सिस्टम द्वारा ही नियंत्रित किया जाता है।
मैंने उन सभी के आउटपुट को एक शॉट में प्रदर्शित करने के लिए सभी 3 सिस्टम फ़ंक्शंस को एक T-SQL स्टेटमेंट में क्लब किया है:
--Get Disk related statistics
SELECT @@TOTAL_READ AS [Reads],
@@TOTAL_WRITE AS [Writes],
@@TOTAL_ERRORS As [Disk Errors]
नीचे आप डिस्क के पढ़ने, लिखने और लिखने की त्रुटियों की संख्या देख सकते हैं:
@@CONNECTIONS सिस्टम फ़ंक्शन को समझना
यह सिस्टम फ़ंक्शन SQL सर्वर के अंतिम पुनरारंभ के बाद से उनकी सफलता के बावजूद SQL सर्वर से कनेक्ट करने के प्रयासों की कुल संख्या प्रदर्शित करता है। नीचे दिए गए T-SQL स्टेटमेंट को रन करें:
--Get the number of attempted connections
SELECT @@CONNECTIONS AS [Total Connections]
नीचे दिए गए आउटपुट से पता चलता है कि इस SQL सर्वर इंस्टेंस के लिए प्रयास किए गए कनेक्शन की कुल संख्या 3130 है। इसका मतलब यह नहीं है कि सभी 3130 प्रयास सफल रहे।
एक T-SQL स्टेटमेंट में सभी सिस्टम सांख्यिकीय कार्य
हम इन सभी सिस्टम फ़ंक्शंस को एक T-SQL स्टेटमेंट में जोड़ सकते हैं और प्रत्येक सिस्टम स्टैटिस्टिक्स वैल्यू के लिए सिंगल आउटपुट प्राप्त कर सकते हैं। मैंने प्रत्येक सिस्टम फ़ंक्शन को अलग-अलग समझाया है क्योंकि ये आपकी कार्य आवश्यकताओं और आवश्यकताओं के लिए बहुत उपयोगी हो सकते हैं।
सभी वर्णित सिस्टम आँकड़ों का आउटपुट एक ही बार में प्राप्त करने के लिए नीचे दी गई T-SQL स्क्रिप्ट चलाएँ:
--Get system statistics
SELECT @@CPU_BUSY*CAST (@@TIMETICKS As float) As [CPU Busy Microseconds],
@@CPU_BUSY*CAST (@@TIMETICKS As float)/1000000 As [CPU Busy Seconds],
@@IO_BUSY*CAST (@@TIMETICKS As float) AS [IO Microseconds],
@@IO_BUSY*CAST (@@TIMETICKS As float)/1000000 AS [IO Seconds],
@@IDLE* CAST(@@TIMETICKS AS Float) As [IO Microseconds],
@@IDLE*CAST(@@TIMETICKS AS Float)/1000000 AS [IO Seconds],
@@PACK_SENT AS [Packets Sent],
@@PACK_RECEIVED AS [Packets RECIEVED],
@@TOTAL_READ AS [Reads],
@@TOTAL_WRITE AS [Writes],
@@TOTAL_ERRORS As [Disk Errors],
@@CONNECTIONS AS [Total Connections]
यहाँ उपरोक्त स्क्रिप्ट का आउटपुट है जो एक आउटपुट में सभी आँकड़ों से संबंधित जानकारी दिखाता है:
SQL सर्वर सांख्यिकी प्राप्त करने के लिए संग्रहीत कार्यविधि का उपयोग करना
एक समर्पित Microsoft सिस्टम संग्रहीत कार्यविधि भी है जो हमें सिस्टम आँकड़ों के समान दृश्य देखने की अनुमति देती है . इस संग्रहीत कार्यविधि का नाम sp_monitor है . यह प्रत्येक SQL सर्वर आँकड़ों के उपयोग और मूल्यों को ट्रैक करने के लिए उत्कृष्ट है क्योंकि अंतिम बार उसी संग्रहीत प्रक्रिया द्वारा चलाया जाता है
नोट:इस संग्रहीत कार्यविधि को निष्पादित करने के लिए आपके पास sysadmin भूमिका होनी चाहिए।
मैंने sp_monitor . को क्रियान्वित किया है संग्रहीत प्रक्रिया - देखें कि इसका आउट एक विशिष्ट रूप में दिख रहा है जैसे value(value)-value% या मान(मान). हम cpu_busy . देख सकते हैं आउटपुट 20(19)-0% के रूप में दिखा रहा है। अब, आप सोच सकते हैं कि हम इस आउटपुट को कैसे पढ़ सकते हैं। नीचे दी गई तालिका को पढ़ें और समझें - यह दोनों प्रकार के आउटपुट के लिए स्पष्टीकरण प्रस्तुत करता है:
सिस्टम पैरामीटर | आउटपुट | व्याख्या |
Cpu_व्यस्त | 20(19)-0% | CPU SQL सर्वर के अंतिम बार शुरू होने के बाद से 20 सेकंड व्यस्त था\restartedCPU 19 सेकंड व्यस्त था क्योंकि sp_monitor कुल समय का अंतिम रन0% था क्योंकि sp_monitor अंतिम रन था। |
पैकेट_प्राप्त | 1467(1428) | SQL सर्वर को पिछली बार शुरू होने के बाद से 1467 पैकेट प्राप्त हुए हैं\restartedSQL सर्वर को 1428 पैकेट प्राप्त हुए हैं क्योंकि पिछली बार sp_monitor निष्पादित किया गया था। |
निष्कर्ष
अब आप देख सकते हैं कि अपने SQL सर्वर इंस्टेंस के लिए सिस्टम से संबंधित आंकड़े कैसे प्राप्त करें। सिस्टम कार्य करता है और संग्रहीत कार्यविधि sp_monitor बहुत ही कुशल और सुविधाजनक होगा। आगे बढ़ो और इन टी-एसक्यूएल कोड का उपयोग अपने विकास कार्य में या सिस्टम विश्लेषण गतिविधियों के लिए करें।
कृपया इस लेख को अपने पसंदीदा सामाजिक नेटवर्क पर साझा करें। और अगर आप इस जानकारी पर चर्चा करना चाहते हैं और अपनी राय और सुझाव साझा करना चाहते हैं, तो टिप्पणी अनुभाग में आपका स्वागत है।