Database
 sql >> डेटाबेस >  >> RDS >> Database

Sys.dm_exec_requests की मूल बातें

SQL सर्वर में प्रदर्शन की निगरानी और समस्या निवारण एक विशाल विषय है। SQL सर्वर 2005 में, गतिशील प्रबंधन दृश्य, जिन्हें DMV के रूप में भी जाना जाता है, पेश किए गए हैं और SQL सर्वर प्रदर्शन समस्याओं के निदान के लिए एक आवश्यक सहायक उपकरण बन गए हैं। उसी समय, हम Azure SQL डेटाबेस के लिए गतिशील प्रबंधन दृश्यों का उपयोग कर सकते हैं। उनमें से कुछ SQL सर्वर ऑन-प्रिमाइसेस डेटाबेस से भिन्न हो सकते हैं लेकिन कार्य का तर्क अभी भी वही है। Microsoft के पास गतिशील प्रबंधन विचारों के बारे में बहुत अच्छे दस्तावेज़ हैं। केवल एक चीज, आपको गतिशील प्रबंधन विचारों के संस्करण और उत्पाद सत्यापन के बारे में सावधान रहने की आवश्यकता है। जैसे sys.dm_exec_request SQL Server 2008 और बाद के संस्करणों के लिए और Azure SQL डेटाबेस के लिए उपलब्ध है लेकिन sys.dm_db_wait_stats केवल Azure SQL डेटाबेस के लिए मान्य है।

इस पोस्ट में, हम sys.dm_exec_request की मूल बातें के बारे में बात करेंगे। sys.dm_exec_requests एक गतिशील प्रबंधन दृश्य है जो केवल वर्तमान में निष्पादित अनुरोध लौटाता है। इसका मतलब है कि जब आप sys.dm_exec_requests क्वेरी चलाते हैं, तो यह स्नैपशॉट अनुरोध करता है जो उस समय चल रहा होता है और इसमें कोई ऐतिहासिक डेटा शामिल नहीं होता है। इसलिए, रीयल-टाइम अनुरोधों की निगरानी के लिए यह दृश्य बहुत उपयोगी है। दूसरे शब्दों में, यह उत्तर देता है कि "अभी मेरे सर्वर में क्या चल रहा है?" इस दृश्य में बहुत सारे विवरण शामिल हैं लेकिन हम सबसे महत्वपूर्ण पर चर्चा करेंगे।

session_id :यह मान एक सत्र पहचान संख्या को परिभाषित करता है। SQL सर्वर में, सत्र आईडी जो 50 के बराबर या उससे कम हैं, पृष्ठभूमि प्रक्रिया के लिए समर्पित हैं।

प्रारंभ_समय :यह मान अनुरोध के प्रारंभ दिनांक और समय को परिभाषित करता है।

स्थिति :यह मान अनुरोध की स्थिति को परिभाषित करता है। उपलब्ध स्थितियां हैं:

  • पृष्ठभूमि
  • चल रहा है
  • चलाने योग्य
  • सो रही है
  • निलंबित
 sys.dm_exec_requests से DISTINCT स्थिति चुनें जहां session_id <>@@SPID

पृष्ठभूमि :यह स्थिति प्रकार पृष्ठभूमि प्रक्रियाओं को परिभाषित करता है। उनमें से कुछ आलसी राइटर, चेकपॉइंट और लॉग राइटर हैं।

 sys.dm_exec_requests से session_id, कमांड, os_thread_id का चयन करें क्योंकि r.task_address पर w के रूप में sys.dm_os_workers में शामिल हों =w.task_address sys.dm_os_threads को t.thread_address =w.thread_address द्वारा t के रूप में शामिल करें। session_id

चल रहा है :यह स्थिति प्रकार परिभाषित करता है कि अनुरोध CPU द्वारा संसाधित किया जा रहा है।

 sys.dm_exec_requests से * चुनें जहां status='running' और session_id <>@@SPID

चलाने योग्य :इस स्थिति प्रकार को केवल एक अनुरोध के रूप में परिभाषित किया जा सकता है जो चलने के लिए CPU कतार में प्रतीक्षा कर रहा है। यदि आप sys.dm_exec_requests में बहुत अधिक चलने योग्य प्रक्रिया का पता लगाते हैं, तो यह CPU दबाव का लक्षण हो सकता है। यह मीट्रिक इस CPU प्रदर्शन समस्या का निदान करने के लिए पर्याप्त नहीं है। इस कारण से, हमें इस मामले को और अधिक सबूतों के साथ समर्थन करने की आवश्यकता है। यह हमारे लिए अपने सिद्धांत को साबित करने के लिए महत्वपूर्ण है। Sys.dm_os_wait_stats डायनेमिक मैनेजमेंट व्यू में एक कॉलम शामिल होता है जो सिग्नल_वेट_टाइम_एमएस है। यह कॉलम मान CPU समस्या को निर्धारित करने में सहायक हो सकता है। निम्नलिखित क्वेरी हमें सिग्नलवेट का प्रतिशत दिखाती है। यदि इस मीट्रिक का उच्च मान है, तो संभवतः आप CPU प्रदर्शन समस्या का सामना कर रहे हैं। आप इस तरह से अपनी समीक्षा को गहरा कर सकते हैं।

---https://sqlserverperformance.wordpress.com/page/146/---ग्लेन बेरी का SQL सर्वर परफॉर्मेंस SELECT signal_wait_time_ms=SUM(signal_wait_time_ms) ,'%signal (cpu) Waits' =CAST(100.0 * SUM (Signal_wait_time_ms) / SUM (wait_time_ms) AS NUMERIC(20,2)) ,resource_wait_time_ms=SUM(wait_time_ms - signal_wait_time_ms) ,'%resource Waits'=CAST(100.0 * SUM(wait_time_ms - सिग्नल_टाइम_एमएस) NUM_wait_time(_wait_time(_wait_time) AS 20,2)) sys.dm_os_wait_stats से;

निलंबित :यह स्थिति प्रकार कुछ संसाधनों की प्रतीक्षा प्रक्रिया को परिभाषित करता है। यह I/O, LOCK, और LATCH आदि हो सकता है। जैसा कि ऊपर बताया गया है, हम sys.dm_os_wait_stats का उपयोग कर सकते हैं wait_time_ms. . का पता लगाने के लिए गतिशील प्रबंधन दृश्य

सो रही है :इसका मतलब है कि अनुरोध SQL सर्वर से जुड़ा है लेकिन वर्तमान में कोई आदेश नहीं चला रहा है।

आदेश :यह कॉलम एक प्रकार के कमांड को परिभाषित करता है जिसे निष्पादित किया जा रहा है। साथ ही, हम विशेष कमांड के लिए अतिरिक्त जानकारी प्राप्त कर सकते हैं जो एक पूर्णता अनुपात है। ऑनलाइन पुस्तकों के अनुसार, ये हैं;

सूचकांक को पुनर्गठित करें

वैकल्पिक डेटाबेस के साथ AUTO_SHRINK विकल्प

बैकअप डेटाबेस

डीबीसीसी चेकडीबी

डीबीसीसी चेकफाइलग्रुप

डीबीसीसी चेकटेबल

DBCC INDEXDEFRAG

डीबीसीसी श्रिंकडेटाबेस

डीबीसीसी श्रिंकफाइल

वसूली

डेटाबेस पुनर्स्थापित करें

रोलबैक

टीडीई एन्क्रिप्शन

डेमो :

  • मास्टर डेटाबेस कनेक्ट करें और किसी भी डेटाबेस के लिए बैकअप प्रारंभ करें।
    BACKUP DATABASE WideWorldImporters to DISK ='NUL'

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

निम्नलिखित क्वेरी निष्पादित करें:

कमांड चुनें,प्रतिशत_पूर्ण,*sys.dm_exec_requestsWHERE session_id <>@@SPIDऔर session_id>50 और कमांड='बैकअप डेटाबेस'

sql_handle :यह मान अनुरोध के SQL कथन को परिभाषित करता है। लेकिन यह मान बिटमैप प्रारूप में है। इस कारण से, हमें मान को अर्थपूर्ण टेक्स्ट में बदलने के लिए sys.dm_exec_sql_text तालिका-मूल्यवान फ़ंक्शन का उपयोग करने की आवश्यकता है।

सेशन_आईडी,कमांड, एसक्लटेक्स्ट.टेक्स्ट,डेटाबेस_आईडीफ्रॉम sys.dm_exec_requests reqCROSS APPLY sys.dm_exec_sql_text(req.sql_handle) को sqltxt के रूप में चुनें जहां session_id<>@@SPID और session_id>50

डेटाबेस_आईडी :यह मान परिभाषित करता है कि कौन सा डेटाबेस अनुरोध करता है। डेटाबेस नाम प्राप्त करने के लिए हम sys.databases के साथ इस क्षेत्र में शामिल हो सकते हैं।

 सेशन_आईडी, कमांड, sqltxt.text, db.name से sys.dm_exec_requests reqCROSS APPLY sys.dm_exec_sql_text(req.sql_handle) का चयन करें क्योंकि sqltxtinner sys.databases db पर AND db.database_id =req_database_id =req_database_id =req_database_id पर शामिल हों। session_id>50

प्रतीक्षा_प्रकार :यह मान अनुरोध के वर्तमान प्रतीक्षा प्रकार को परिभाषित करता है। यदि क्वेरी निष्पादन की अवधि अपेक्षा से अधिक समय लेती है, तो आप प्रतीक्षा प्रकार की क्वेरी की जांच और निर्धारण कर सकते हैं।

transaction_isolation_level :यह मान सबमिट की गई क्वेरी के लेन-देन के स्तर को परिभाषित करता है:

0=अनिर्दिष्ट

1=असंबद्ध पढ़ें

2=पढ़ें प्रतिबद्ध

3=दोहराने योग्य

4=क्रमबद्ध करने योग्य

5=स्नैपशॉट

सेशन_आईडी,कमांड, sqltxt.text,db.name,req.status,wait_type ,transaction_isolation_level,CASETransaction_isolation_levelचुनें जब 0 तब 'अनिर्दिष्ट' जब 1 फिर 'असंबद्ध' पढ़ें जब 2 फिर 'पढ़ें'जब तक 'फिर से लिखने योग्य' 4 तब 'सीरियलाइज़ करने योग्य' जब 5 फिर 'स्नैपशॉट'ENDAS आइसोलेशन_लेवल_नाम से sys.dm_exec_requests reqCROSS APPLY sys.dm_exec_sql_text(req.sql_handle) sqltxtinner के रूप में sys.databases db से जुड़ें और db.database_id =req.database_id =req.database_id पर sys.databases db से जुड़ें 50

blocking_session_id :यह सत्र की आईडी है जो अनुरोध को रोक रही है। यदि यह कॉलम NULL है, तो अनुरोध ने किसी भी सत्र को अवरुद्ध नहीं किया है।

डेमो :

  • एसक्यूएल सर्वर प्रबंधन स्टूडियो खोलें और निम्नलिखित क्वेरी निष्पादित करें। 'WHERE ID=1SELECT @@SPID ASblocking_session_id

एक नई क्वेरी विंडो खोलें और निम्न क्वेरी निष्पादित करें।

सेट ट्रांज़ेक्शन आइसोलेशन लेवल सीरियल करने योग्यBEGIN TRANUPDATE TestPerfomon SET Nm='3'WHERE ID=1

एक और नई क्वेरी विंडो खोलें और इस DMV क्वेरी को चलाएँ।

सेशन_आईडी,कमांड, sqltxt.text,db.name,req.status,wait_type ,transaction_isolation_level,CASETransaction_isolation_levelचुनें जब 0 तब 'अनिर्दिष्ट' जब 1 फिर 'असंबद्ध' पढ़ें जब 2 फिर 'पढ़ें'जब तक 'फिर से लिखने योग्य' 4 तब 'सीरियलाइज़ करने योग्य' जब 5 फिर 'स्नैपशॉट'ENDAS आइसोलेशन_लेवल_नाम, ब्लॉकिंग_सेशन_आईडीफ्रॉम sys.dm_exec_requests reqCROSS APPLY sys.dm_exec_sql_text(req.sql_handle) sqltxt के रूप में जहां session. session_id>50

इस प्रदर्शन के साथ, हमें पता चला कि दूसरी क्वेरी क्यों अवरुद्ध है और कौन सा सत्र अनुरोध अवरुद्ध है। जब आप sp_BlitzWho 65 चलाते हैं, तो आप ब्लॉक करने के विवरण और ब्लॉक किए गए सत्र विवरण का पता लगा सकते हैं।

sp_Blitzकौन 65

इस प्रदर्शन में, हमने अवरुद्ध और अवरुद्ध सत्रों का विवरण प्राप्त किया और साथ ही, हमें इन सत्रों के बारे में विवरण प्राप्त हुआ। यह एक बहुत ही बुनियादी प्रदर्शन है लेकिन यह दिखाता है कि इस मुद्दे को कैसे हल किया जा सकता है।

इस पोस्ट में, हमने sys.sys.dm_exec_requests के बारे में बात की। यह गतिशील प्रबंधन दृश्य हमें अनुरोध के वर्तमान चरण के दौरान स्नैपशॉट प्राप्त करने की सुविधा देता है। साथ ही, ये विवरण डेटा समस्या का पता लगाने की प्रक्रिया में हमारी सहायता या मार्गदर्शन कर सकते हैं।

संदर्भ

  • sys.dm_exec_requests (ट्रांजैक्ट-एसक्यूएल)
  • गतिशील प्रबंधन दृश्यों का उपयोग करके Azure SQL डेटाबेस की निगरानी करना
  • sys.dm_db_wait_stats (Azure SQL डेटाबेस)

उपयोगी टूल:

dbForge मॉनिटर - Microsoft SQL सर्वर प्रबंधन स्टूडियो के लिए ऐड-इन जो आपको SQL सर्वर के प्रदर्शन को ट्रैक और विश्लेषण करने की अनुमति देता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डीबी अनुप्रयोगों में डेटा मास्किंग

  2. एजेंट-आधारित बनाम एजेंट रहित निगरानी के बीच निर्णय करें

  3. एसक्यूएल में टीसीएल कमांड

  4. Ubuntu 18.04 पर नेक्स्टक्लाउड 15 कैसे स्थापित करें?

  5. Linux से Azure Key Vault के साथ सुरक्षित डेटा का उपयोग करना