बढ़ी हुई रैम, खराब प्रदर्शन


9

सेट अप:

  • विंडोज सर्वर 2008 R2
  • SQL सर्वर 2008 R2 SP1
  • 240GB RAM
  • TempDB 8x16GB डेटा फ़ाइलें w / आउट ऑटो-ग्रो (कुल 128GB) है
  • फिजिकल / स्टैंड-अलोन सर्वर

इस सर्वर का उपयोग ETL प्रोसेसिंग के लिए किया जाता है। हमने इस सर्वर में कुल 240GB RAM के लिए अधिक RAM स्थापित किया है। SQL सर्वर सेवाएँ केवल वास्तविक चीजें चल रही हैं।

मेमोरी BIOS, OpenManage और Windows में ठीक दिखाता है।

यदि मैं 70 / 100GB मेमोरी के मिन / मैक्स का उपयोग करने के लिए SQL सर्वर को कॉन्फ़िगर करता हूं, तो हमारे पास कोई समस्या नहीं है। हालाँकि, एक बार जब मैं इसे बढ़ाकर १२० / १५० जीबी कर देता हूं, मुझे मेरी ईटीएल प्रक्रियाओं में से एक चलाने पर निम्न त्रुटि मिलती है:

ऑब्जेक्ट '<अस्थायी सिस्टम ऑब्जेक्ट: 422234507706368>' डेटाबेस के लिए 'tempdb' में स्थान आवंटित नहीं कर सका क्योंकि 'PRIMARY' फ़ाइलग्रुप भरा हुआ है। अनावश्यक फ़ाइलों को हटाने, फ़ाइल समूह में वस्तुओं को छोड़ने, फ़ाइल समूह में अतिरिक्त फ़ाइलों को जोड़ने, या फ़ाइल समूह में मौजूदा फ़ाइलों के लिए ऑटोग्रॉथ सेट करके डिस्क स्थान बनाएं। (संदेश 1105, राज्य 2, प्रक्रिया अज्ञात, पंक्ति 1)

मेमोरी कॉन्फ़िगरेशन बदलने से पहले हम इस मुद्दे पर कभी नहीं चले। मूल 70 / 100GB पर फिर से कॉन्फ़िगर करने के बाद, हमें यह त्रुटि नहीं मिलती है।

चीजें जो मैंने कोशिश की हैं:

  1. TempDB डेटा फ़ाइलों को ऑटो-बढ़ने के लिए सेट करें। यह केवल डिस्क-क्षमता तक पहुंचने और फिर विफल होने तक फ़ाइलों को स्वचालित रूप से बढ़ता है।
  2. अधिक TempDB डेटा फ़ाइलें जोड़ें। जैसा दिखाया गया वैसा ही त्रुटि।
  3. TempDB आकार बढ़ाकर 8x32GB (कुल 256GB)

मैं इस समस्या का कारण हो सकता है के रूप में एक नुकसान में हूँ।


2
क्या आपकी मेमोरी NUMA नोड्स में संतुलित है? कैसे अपने प्रोसेसर के बारे में? क्या SQL सर्वर लॉग दिखाता है कि स्टार्टअप के दौरान कितने CPU उपयोग में हैं?
हारून बर्ट्रेंड

1
ईटीएल प्रक्रियाओं के लिए आप क्या उपयोग कर रहे हैं? SSIS या कुछ समान उपकरण? यदि यह SQL सर्वर के बाहर एक उपकरण है, तो क्या आप इसे उसी सर्वर पर चला रहे हैं जैसे कि आपका SQL सर्वर आवृत्ति?
माइक फाल

1
यह एक अच्छा बिंदु है @ माइक, अगर ETL प्रक्रिया अपनी चीज़ को करने के लिए पर्याप्त मेमोरी को हथियाने में असमर्थ है, क्योंकि SQL Server बहुत अधिक उपयोग कर रहा है, तो इसे काम को tempdb पर धकेलना पड़ सकता है।
हारून बर्ट्रेंड

1
यहाँ अस्थायी उपयोग की निगरानी के लिए एक अच्छा स्टार्टर है: msdn.microsoft.com/en-us/library/ms176029(v=SQL.105).aspx । इससे आपको पता चल जाएगा कि क्या हो रहा है।
थॉमस स्ट्रिंगर

2
क्या आपने TempDB वास्तव में विस्तार कर रहे हैं जब आपने वास्तव में क्या चल रहा है, इसका कोई विश्लेषण किया है? एक साधारण sp_who2 / sp_whoisactive? यह मुझे लगता है कि आपको कुछ लंबे समय तक चलने वाले लेन-देन मिले हैं, जिन्हें बेहतर तरीके से प्रबंधित किया जा सकता है, लेकिन यह बताना मुश्किल है। व्यक्तिगत रूप से, मैं मेमोरी परिवर्तन से संलग्न नहीं होता, लेकिन पहले कोड को देखें और देखें कि क्या वह ठीक से चल रहा है।
माइक फाल

जवाबों:


3

मदद के लिए सभी को धन्यवाद।

कुछ निष्पादन योजनाओं के माध्यम से डालने के बाद, यह पता चलता है कि एक JOIN है जो उपलब्ध RAM की मात्रा के आधार पर अलग-अलग तरीके से संसाधित किया जा रहा है। कम रैम के साथ यह एक हैश के साथ इसका मूल्यांकन करता है; अधिक रैम के साथ, यह मर्ज जॉइन की एक श्रृंखला का उपयोग करता है।

इसलिए मूल रूप से यह टी-एसक्यूएल को खराब लिखा गया था, जिसे मैं वर्तमान में रिफ्लेक्ट कर रहा हूं।


4
यह काफी सहज है क्योंकि मर्ज नहीं होने पर हैश ज्वाइन को मेमोरी ग्रांट की आवश्यकता होती है। मर्ज में शामिल होने के लिए एक अतिरिक्त प्रकार का ऑपरेशन है?
मार्टिन स्मिथ

1

यह सवाल का जवाब नहीं है, बस कुछ कोड मैं एक टिप्पणी में पोस्ट नहीं करना चाहता था। NUMA नोड्स में अपने शेड्यूलर्स और मेमोरी का संतुलन देखने के लिए (और यह भी देखना है कि क्या कोई नोड ऑनलाइन दिखाई नहीं दे रहे हैं):

SELECT 
  parent_node_id, 
  [status],
  AVG(current_tasks_count) AS avg_tasks_count, 
  AVG(load_factor) AS avg_load_factor,
  scheduler_count = COUNT(*)
FROM sys.dm_os_schedulers
GROUP BY parent_node_id, [status];

SELECT 
  memory_node_id, 
  name, 
  SUM(single_pages_kb + multi_pages_kb) AS memory_kb
FROM sys.dm_os_memory_clerks
GROUP BY memory_node_id, name;

(SQL Server 2012 में, अंतिम SUMहोना चाहिए SUM(pages_kb)क्योंकि अब अलग एकल और बहु-पृष्ठ आवंटनकर्ता नहीं हैं।)

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