SQL स्टेटमेंट को कैसे खोजें जिससे टेम्पर्ड ग्रोथ हुई हो?


26

एक सर्वर (SQL Server 2008) की गति हर महीने 500GB + कई बार बढ़ जाती है। क्या यह पता लगाना संभव है कि किन एसक्यूएल बयानों के कारण यह समस्या हुई? समस्या आमतौर पर create table #temp...; insert into #temp...या select ... into #temp...जटिल जॉइन के कारण नहीं होती है ।

प्रारंभिक आकार tempdb फ़ाइलों में से कुछ की भी स्वतः ही बहुत बड़ा मान के लिए हर समय सेट किया गया है। इसे कैसे रोका जाए?

शायद ही कभी कैश्ड योजना फाइलों को आकार बदलने / सिकोड़ने से रोकती है। कैसे पता लगाएं कि कौन सा टेम्पर्ड पकड़ है?


1
क्षमा करें, यह लगभग 2 बजे है और मैं इस प्रश्न का पूरी तरह से उत्तर देने के लिए गैस से बाहर हूं, हालांकि ये URL आपके काम आ सकते हैं जबकि आप अन्य उत्तरों की प्रतीक्षा करते हैं - mssqltips.com/sqlservertip/1432/… और google.com/search?q= जो + प्रश्नों + हैं + + tempdb का उपयोग कर
हारून बर्ट्रेंड

जवाबों:


27

तीन DMV हैं जिनका उपयोग आप अस्थायी उपयोग ट्रैक करने के लिए कर सकते हैं:

पहले दो आपको एक क्वेरी और सत्र स्तर पर आवंटन ट्रैक करने की अनुमति देंगे। संस्करण स्टोर, उपयोगकर्ता और आंतरिक वस्तुओं में तीसरा ट्रैक आवंटन।

निम्नलिखित उदाहरण क्वेरी आपको प्रति सत्र आवंटन देगा:

SELECT
  sys.dm_exec_sessions.session_id AS [SESSION ID]
  ,DB_NAME(database_id) AS [DATABASE Name]
  ,HOST_NAME AS [System Name]
  ,program_name AS [Program Name]
  ,login_name AS [USER Name]
  ,status
  ,cpu_time AS [CPU TIME (in milisec)]
  ,total_scheduled_time AS [Total Scheduled TIME (in milisec)]
  ,total_elapsed_time AS    [Elapsed TIME (in milisec)]
  ,(memory_usage * 8)      AS [Memory USAGE (in KB)]
  ,(user_objects_alloc_page_count * 8) AS [SPACE Allocated FOR USER Objects (in KB)]
  ,(user_objects_dealloc_page_count * 8) AS [SPACE Deallocated FOR USER Objects (in KB)]
  ,(internal_objects_alloc_page_count * 8) AS [SPACE Allocated FOR Internal Objects (in KB)]
  ,(internal_objects_dealloc_page_count * 8) AS [SPACE Deallocated FOR Internal Objects (in KB)]
  ,CASE is_user_process
             WHEN 1      THEN 'user session'
             WHEN 0      THEN 'system session'
  END         AS [SESSION Type], row_count AS [ROW COUNT]
FROM 
  sys.dm_db_session_space_usage
INNER join
  sys.dm_exec_sessions
ON  sys.dm_db_session_space_usage.session_id = sys.dm_exec_sessions.session_id

यदि आप समय की अवधि में उपयोग को ट्रैक करना चाहते हैं, तो Sp_whoisactive के साथ डेटा एकत्र करने पर विचार करें , जैसा कि केंद्र लिटिल द्वारा प्रदर्शित किया गया है ।


3
धन्यवाद। [SPACE Allocated FOR USER Objects (in KB)]और [SPACE Deallocated FOR USER Objects (in KB)]सत्र के वास्तविक कब्जे वाले स्थान का अंतर है ?
u23432534

4

किसी समस्या के विभिन्न स्रोत हो सकते हैं:

  • टेबल चर या अस्थायी तालिकाओं का उपयोग
  • sql सर्वर ने tempdb में वर्कटेबल्स के रूप में मध्यवर्ती परिणाम बनाए - आमतौर पर छंटनी के उद्देश्य के लिए (आमतौर पर अनुपस्थित इंडेक्स / आउट-ऑफ-डेट आँकड़े)
  • sql सर्वर ने टेबल वैल्यू फ़ंक्शन के परिणाम का पूर्व-मूल्यांकन करने का निर्णय लिया और इस मामले में यह डेटा को tempdb में संग्रहीत करता है
  • विकल्प के साथ अनुक्रमणिका पुनः बनाना SORT_IN_TEMPDB = ON
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.