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

SQL सर्वर TempDB मॉनिटरिंग डायनेमिक मैनेजमेंट व्यू (DMV) का उपयोग करके

MS SQL सर्वर में TempDB क्या है?

TempDB Microsoft SQL सर्वर में एक सिस्टम डेटाबेस है जिसका उपयोग आंतरिक वस्तुओं, पंक्ति संस्करणों, कार्य तालिकाओं, अस्थायी तालिकाओं और अनुक्रमितों के संग्रह के रूप में किया जाता है। TempDB SQL सर्वर इंस्टेंस से जुड़े सभी प्रतिभागियों के उपयोग के लिए उपलब्ध है (यह एक वैश्विक संसाधन है)। अन्य डेटाबेस स्वादों से परिचित लोगों के लिए, tempDB डेटाबेस Oracle में TEMP टेबलस्पेस के समान है। इसे हल्के ढंग से रखने के लिए, जो कुछ भी आपकी इंस्टेंस मेमोरी में फिट नहीं हो सकता है वह tempdb डेटा फ़ाइलों पर फैल जाता है।

TempDB आमतौर पर निम्नलिखित मामलों में प्रयोग किया जाता है:

  1. # नामकरण परंपरा के साथ अस्थायी तालिकाएँ बनाई जाती हैं। मैंने अपनी दुकान में एक या दो एप्लिकेशन देखे हैं जो इन सम्मेलनों का एक बहुत कुछ बनाते हैं। नतीजतन, यह प्रदर्शन को प्रभावित कर सकता है। प्रत्येक अस्थायी तालिका के लिए, TempDB उन पृष्ठों को वितरित करता है जिनका आकार तालिका के आकार पर निर्भर करता है। इसके अलावा, यदि कई समवर्ती सत्र एक साथ ऐसे TempTables बना रहे हैं, तो कुछ विरोध भी हो सकते हैं।
  2. READ_COMMITTED_SNAPSHOT आइसोलेशन स्तर सक्षम है। हमें कुछ साल पहले हमारे दो उदाहरणों पर ऐसा करना पड़ा क्योंकि दो आवेदन ऐसे थे जो गंभीर संख्या में गतिरोध का सामना कर रहे थे। स्नैपशॉट अलगाव स्तरों का उपयोग करना गतिरोध से निपटने का एक तरीका है, खासकर यदि आप उचित कोडिंग पर डेवलपर्स के साथ आगे और पीछे नहीं जाना चाहते हैं। आपको पता होना चाहिए कि इससे प्रदर्शन में सुधार करने में मदद मिलने की उम्मीद है। हालांकि, यह आशावादी समवर्ती नियंत्रण का उपयोग करता है जो डेटा अखंडता के संबंध में सभी मामलों में वांछनीय नहीं हो सकता है।
  3. सूचकांक SORT_IN_TEMPDB=ON विकल्प के साथ निर्मित या फिर से बनाए जाते हैं। यह डेटाबेस से छँटाई के बोझ को दूर करने के लिए जाता है जो कि पुनर्निर्माण की प्रक्रिया जारी रखते हुए सूचकांक का मालिक है। समग्र रूप से उदाहरण के प्रदर्शन पर इस विकल्प के कुल प्रभाव की जांच करने में मदद मिल सकती है।
  4. एकाधिक सक्रिय परिणाम सेट (MARS) कार्यक्षमता सक्षम है। नहीं, इस परिदृश्य में मंगल ग्रह नहीं है, यह एक ऐसी सुविधा है जो एक आवेदन को एक ही कनेक्शन के माध्यम से कई बैच जमा करने की अनुमति देती है। यह डिफ़ॉल्ट रूप से अक्षम है और MultipleActiveResultSets=True को शामिल करके इसे स्पष्ट रूप से सक्षम किया जा सकता है एक कनेक्शन स्ट्रिंग में।
  5. आंतरिक रूप से, SQL सर्वर भी TempDB का उपयोग कार्य तालिका बनाने के लिए करता है जो आमतौर पर कर्सर संचालन में उपयोग किया जाता है - GROUP BY, ORDER BY, या UNION क्लॉज द्वारा कॉल। कार्य तालिकाओं को सीधे उपयोगकर्ता गतिविधि के बजाय SQL सर्वर इंजन गतिविधि द्वारा बनाई गई अस्थायी तालिकाओं के रूप में माना जा सकता है।

प्रासंगिक गतिशील प्रबंधन SQL सर्वर को देखता है

TempDB में गतिविधि की जांच करते समय निम्नलिखित प्रासंगिक गतिशील प्रबंधन दृश्य (DMV) सहायक होते हैं:

  1. sys.dm_db_file_space_usage :यह डीएमवी उन डेटाबेस में फ़ाइलों के स्थान उपयोग के बारे में कुछ जानकारी देता है जिनमें आप रुचि रखते हैं। इसका उपयोग उदाहरण में किसी भी डेटाबेस की जांच करने के लिए किया जा सकता है और आउटपुट केवल उस डेटाबेस से संबंधित होता है। इस लेख के संदर्भ में, हम TempDB की जांच के लिए DMV का उपयोग करेंगे।
  2. sys.dm_db_session_space_usage :यह DMV TempDB डेटाबेस के लिए विशिष्ट है और किसी दिए गए डेटाबेस के लिए प्रत्येक सत्र द्वारा आवंटित और हटाए गए पृष्ठों की संख्या देता है। पृष्ठ आवंटन आमतौर पर सत्र समाप्त होने तक बनाए रखा जाता है।
  3. sys.dm_db_task_space_usage :यह DMV TempDB डेटाबेस के लिए भी विशिष्ट है और किसी दिए गए डेटाबेस के लिए प्रत्येक कार्य द्वारा आवंटित और हटाए गए पृष्ठों की संख्या के बारे में कुछ जानकारी प्रदान करता है।
  4. sys.dm_tran_active_snapshot_database_transactions :यह DMV उन सक्रिय लेन-देनों को लौटाता है जो पंक्ति संस्करण उत्पन्न करते हैं और उन तक पहुँच सकते हैं। यह दृश्य तब प्रासंगिक होता है जब ALLOW_SNAPSHOT_ISOLATION और READ_COMMITTED_SNAPSHOT जैसे विकल्प सक्षम होते हैं।
  5. sys.dm_tran_version_store :यह डीएमवी संस्करण स्टोर में सभी संस्करण रिकॉर्ड के बारे में कुछ जानकारी प्रदान करता है। एक सक्रिय उत्पादन सर्वर में, इस तालिका में रिकॉर्ड महत्वपूर्ण रूप से बढ़ सकते हैं। इस प्रकार, हमें DMV से पूछताछ करते समय सावधान रहने की आवश्यकता है।

TempDB डेटाबेस के साथ काम करने से पहले DMV कमांड की जांच करना

sys.dm_file_space_usage

हम Microsoft दस्तावेज़ों से इन DMV के कुछ विवरण प्राप्त कर सकते हैं।

तालिका 1 sys.dm_file_space_usage . का विवरण दिखाती है . लिस्टिंग 1 में क्वेरी क्रमशः TempDB और WideWorldImporters डेटाबेस के लिए फ़ाइल स्थान उपयोग को प्रदर्शित करती है। चित्र 1 और 2 इस क्वेरी के आउटपुट को क्रमशः TempDB और WideWorldImporters डेटाबेस दोनों के साथ लौटाते हैं।

[टेबल आईडी=44 /]

तालिका 1:sys.dm_file_space_usage . का विवरण

-- सूची 1:डेटाबेस फ़ाइलों पर स्थान उपयोग की जाँच करें-- tempdbuse tempdbgoselect db_name(database_id) [Database_name],file_name(file_id) [File_name],filegroup_id,total_page_count [TPC],total_page_count*8/1024 पर स्थान उपयोग की जाँच करें [टीएसयू (एमबी)],आवंटित_एक्सटेंट_पेज_काउंट [एईपीसी],आवंटित_एक्सटेंट_पेज_काउंट*8/1024 [एईपीसी (एमबी)], वर्जन_स्टोर_रिजर्व्ड_पेज_काउंट [वीएसआरपी], वर्जन_स्टोर_रिजर्व्ड_पेज_काउंट *8/1024 [वीएसआरपी (एमबी)], यूजर_ऑब्जेक्ट_यूओआरपी_पेज,काउंट 1024 [यूओआरपीसी (एमबी)], आंतरिक_ऑब्जेक्ट_आरक्षित_पेज_काउंट [आईओआरपीसी], आंतरिक_ऑब्जेक्ट_रिजर्व_पेज_काउंट*8/1024 [यूओआरपीसी (एमबी)],मिश्रित_एक्सटेंट_पेज_काउंट [एमईपीसी],मिश्रित_एक्सटेंट_पेज_काउंट*8-/1024 [एमईपीसी (एमबी)] sys. वाइडवर्ल्ड इम्पोर्टर्स पर उपयोग वाइडवर्ल्ड इम्पोर्टर्सगोसेलेक्ट db_name (डेटाबेस_आईडी) [डेटाबेस_नाम], फाइल_नाम (फाइल_आईडी) [फाइल_नाम], फाइलग्रुप_आईडी, टोटल_पेज_काउंट [टीपीसी], टोटल_पेज_काउंट * 8/1024 [टीएसयू (एमबी)], आबंटित_एक्सटेंट_पेज_काउंट [एईपीसी], आबंटित_एक्सटेंट_पेज_काउंट [एईपीसी] का उपयोग करें। एईपीसी ( MB)], version_store_reserved_page_count [VSRP],version_store_reserved_page_count*8/1024 [VSRP (MB)],user_object_reserved_page_count [UORP],user_object_reserved_page_count*8/1024 [UORPC (MB)_,internal_object_count_reserved_ [UORPC (MB)],internal_object_count_reserved_ (MB)],mixed_extent_page_count [MEPC],mixed_extent_page_count*8/1024 [MEPC (MB)] sys.dm_db_file_space_usage से;

चित्र 2 sys.dm_file_space_usage (WideWorldImporters)

पर क्वेरी का आउटपुट

ध्यान दें कि Total_page_count कॉलम विचाराधीन डेटाबेस फ़ाइल का सटीक आकार दिखाता है। इसके अतिरिक्त, लॉग और FILESTREAM फ़ाइल प्रकार प्रदर्शित नहीं होते हैं। साथ ही, जैसा कि अपेक्षित था, आवंटित_extent_page_count WWI_UserData डेटा फ़ाइल में प्रयुक्त स्थान से मेल खाता है।

वाइडवर्ल्ड इंपोर्टर्स डेटाबेस पर चित्र 3 फ़ाइल आकार

sys.dm_db_session_space_usage

तालिका 2 sys.dm_db_session_space_usage DMV के उपयोग को दर्शाती है। लिस्टिंग 2 क्वेरी का आउटपुट है। ध्यान दें कि लौटाई गई पंक्तियों की संख्या उदाहरण में सत्रों की वर्तमान संख्या (सक्रिय या निष्क्रिय) से मेल खाती है। साथ ही, याद रखें कि यह DMV केवल TempDB से संबंधित है।

[टेबल आईडी=45 /]

तालिका 2:sys.dm_db_session_space_usage . का विवरण

-- लिस्टिंग 2:उदाहरण में प्रति सत्र स्थान आवंटन की जांच करें-- tempdb डेटाबेस चयन सत्र_आईडी, डीबी_नाम (डेटाबेस_आईडी) [डेटाबेस_नाम], उपयोगकर्ता_ऑब्जेक्ट्स_आलोक_पेज_काउंट [यूओएपीसी], उपयोगकर्ता_ऑब्जेक्ट्स_आलोक_पेज_काउंट * 8/1024 [यूओएपीसी (एमबी)], उपयोगकर्ता_पृष्ठ_गणना पर लागू होता है। [UODPC],user_objects_dealloc_page_count*8/1024 [UODPC (MB)],internal_objects_alloc_page_count [UOAPC],internal_objects_alloc_page_count*8/1024 [UOAPC (MB)],internal_objects_count*/10_deal_objects_count*/10_deal_objects_dealloc_page_[UOD_8MB से], [यूओडीपीसी (एमबी)] से, sys.dm_db_session_space_usage;sys.dm_exec_sessions से गिनती (*) चुनें;

sys.dm_db_task_space_usage

तालिका 3 sys.dm_db_task_space_usage DMV के कार्यान्वयन को दर्शाती है। लिस्टिंग 3 इसके आउटपुट को प्रदर्शित करता है।

[टेबल आईडी=46 /]

तालिका 3:sys.dm_db_task_space_usage . का विवरण

-- सूची 3:उदाहरण के लिए प्रति कार्य स्थान आवंटन की जांच करें-- tempdb डेटाबेस चयनकर्ता_पता, is_remote_task, सत्र_आईडी, अनुरोध_आईडी, exec_context_id, db_name (डेटाबेस_आईडी) [डेटाबेस_नाम], उपयोगकर्ता_ऑब्जेक्ट्स_आलोक_पेज_काउंट [यूओएपीसी], उपयोगकर्ता_ऑब्जेक्ट पर लागू होता है। [यूओएपीसी (एमबी)],user_objects_dealloc_page_count [UODPC],user_objects_dealloc_page_count*8/1024 [UODPC (MB)],आंतरिक_ऑब्जेक्ट्स_आलोक_पेज_काउंट [UOAPC],internal_objects_alloc_page_count*8/1024 [UOAPC],internal_objects_dealloc_page_count*8/1024 [UOAPC],internal_objects_dealloc_page_count*8/1024 [UOAPC] 1024 [यूओडीपीसी (एमबी)]sys.dm_db_task_space_usage से;

MSSQL TempDB में अन्य DMV क्वेरी

किसी भी डेटाबेस गतिविधि को निष्पादित करने से पहले अन्य दो डीएमवी खाली प्रतीत होते हैं। तालिकाएँ 4 और 5 दोनों तालिकाओं का विवरण दिखाती हैं। अगले भाग में, हम देखेंगे कि जब हम डेटाबेस गतिविधि उत्पन्न करते हैं तो डीएमवी में डेटा कैसे बदलता है।

[टेबल आईडी=47 /]

तालिका 4:sys.dm_tran_active_snapshot_database_transactions का विवरण

[टेबल आईडी=48 /]

तालिका 5:sys.dm_tran_version_store . का विवरण

डेटाबेस गतिविधि पूर्ण होने के बाद DMV की जांच करना

आइए कुछ गतिविधि उत्पन्न करें।

ऐसा करने के लिए, लिस्टिंग 4 में साधारण प्रश्नों को चलाएँ।

-- लिस्टिंग 4-- क्वेरी 1 [Sales] से [WideWorldImportersgoselect * का उपयोग करें। 

जैसा कि आप देख सकते हैं, इस छोटी सी क्वेरी से कोई महत्वपूर्ण आवंटन या डीलोकेशन नहीं हैं, इसलिए हम लिस्टिंग 5 में स्क्रिप्ट का उपयोग करके एक अस्थायी तालिका बनाकर बार बढ़ाते हैं।

-- [Sales] से [#Invoices] में 5WideWorldImportersgoselect * का उपयोग करें।[चालान];tempdbgodrop तालिका [#Invoices] का उपयोग करें;

अब हम अपने सक्रिय सत्र 62 के लिए आवंटित और आरक्षित पृष्ठों की एक महत्वपूर्ण संख्या प्राप्त करते हैं (चित्र 8 देखें)। साथ ही, sys.dm_db_file_space_usage (चित्र 9) में दिखाए गए आवंटित विस्तार और आरक्षित पृष्ठों की महत्वपूर्ण संख्या पर ध्यान दें।

जब हम आगे बढ़ते हैं और Temptable #Invoice छोड़ते हैं, तो हम देखते हैं कि TempDB में आवंटित पृष्ठ चित्र 12 में दिखाए गए अनुसार जारी किए गए हैं। हालाँकि, dm_db_session_space_usage DMV का आउटपुट अभी भी इंगित करता है कि कुछ पृष्ठ सत्र के लिए आवंटित किए गए हैं। हम देखते हैं कि जैसे ही हम सत्र (सत्र आईडी 62) बंद करते हैं, यह जारी हो जाता है।

इसके बाद, हम एक और सत्र खोलते हैं और लिस्टिंग 6 में प्रश्नों का उपयोग करके एक इंडेक्स बनाते हैं। क्वेरी 1 में SORT_IN_TEMPDB विकल्प को छोड़कर और क्वेरी 2 में, हम इंडेक्स को छोड़ने के बाद इस विकल्प का उपयोग करते हैं। पहले मामले के लिए कोई महत्वपूर्ण आवंटन नहीं होता है लेकिन SORT_IN_TEMPDB का उपयोग करते समय हमें कुछ बदलाव दिखाई देते हैं। सूचकांक के आकार को देखते हुए यह परिवर्तन बहुत मामूली है (चित्र 16 और 17 देखें)।

हम अंतिम परीक्षण करेंगे। हमें पता चला है कि इस समय तक डीएमवी जैसे sys.dm_tran_active_snapshot_database_transactions और sys.dm_tran_version_store पूछे जाने पर कोई पंक्ति नहीं लौटाते हैं।

आइए SNAPSHOT_ISOLATION और READ_COMMITTED_SNAPSHOT आइसोलेशन स्तर (लिस्टिंग 7) को सक्षम करें। एक बार हो जाने के बाद, एक एकल अपडेट स्टेटमेंट sys.dm_tran_version_store DMV में एक रिकॉर्ड बनाता है। इसी क्वेरी को रखना एक लेन-देन है जिसका उपयोग हम यह देखने के लिए करते हैं कि लेन-देन के दौरान sys.dm_tran_active_snapshot_database_transactions में एक रिकॉर्ड भी उत्पन्न होता है।

-- सूची 7ALTER DATABASE वाइडवर्ल्ड इम्पोर्टर्ससेट ALLOW_SNAPSHOT_ISOLATION ON;ALTER DATABASE WideWorldImportersSET READ_COMMITTED_SNAPSHOT ON;
-- लिस्टिंग 8-- क्वेरी 1 अपडेट [वाइडवर्ल्ड इम्पोर्टर्स]। ]। [बिक्री]। [चालान] डिलीवरी निर्देश सेट करें ='दुकान 50, 1476 पोद्दार लेन' जहां चालान आईडी =48; प्रतीक्षा विलंब '00:00:30'; कमिट ट्रान;जाओ

निष्कर्ष

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

इन DMV का आउटपुट डेटा एप्लिकेशन डेवलपर्स को स्पष्ट रूप से tempDB पर उनके कोड व्यवहार के प्रभाव और समग्र रूप से उदाहरण दिखाने में मददगार हो सकता है। कुल मिलाकर, प्रदर्शन और अंतरिक्ष प्रबंधन से संबंधित डीबीए के रूप में इन डीएमवी के उपयोग को समझना काफी फायदेमंद है।

संदर्भ

SQL सर्वर में स्नैपशॉट अलगाव
एकाधिक सक्रिय परिणाम सेट का उपयोग करना
sys.dm_tran_version_store का विवरण
sys.dm_db_task_space_usage का विवरण
sys.dm_file_space_usage का विवरण
sys.dm_usagesion का विवरण
sys.dm_tran_active_snapshot_database_transactions का विवरण


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में क्लस्टर्ड या नॉन-क्लस्टर इंडेक्स का उपयोग कब करें

  2. खेल से आगे रहने के लिए SQL सर्वर प्रदर्शन मेट्रिक्स

  3. SQL सर्वर में सभी अक्षम विदेशी कुंजी बाधाओं को कैसे वापस करें (T-SQL उदाहरण)

  4. संग्रहीत कार्यविधि 'dbo.aspnet_CheckSchemaVersion' नहीं ढूँढ सका

  5. Red Hat पर sqlcmd और bcp कैसे स्थापित करें?