2010-10-22 13 views
11

हमने देखा है कि MySQL बहुत ही अस्थायी डिस्क टेबल (10,000 से अधिक) की रिपोर्ट कर रहा है, यह Server Density द्वारा रिपोर्ट किया गया है। इसके बारे में थोड़ा और समझने की कोशिश कर रहे थे।MySQL अस्थायी डिस्क टेबल्स की उच्च संख्या

  • MySQL द्वारा बनाई गई अस्थायी डिस्क टेबल क्यों हैं?
  • प्रदर्शन पर उनके पास क्या प्रभाव पड़ता है?
  • क्या वे कभी भी MySQL द्वारा हटाए गए हैं या यह संख्या अभी बढ़ेगी?

उत्तर

15

टेम्पलेट टेबल कई कारणों से बनाया जा सकता है। कोई भी चुनिंदा ऑपरेशन जिसमें एक बड़ा डेटा सेट होता है और सॉर्टिंग की आवश्यकता होती है उसे एक में लिखा जाएगा। सीधे पूछे जाने वाले प्रश्नों (टेम्पलेटरी टेबल प्रकार) द्वारा बनाई गई वास्तविक अस्थायी सारणी प्रति कनेक्शन आधार पर की जाती हैं, इसलिए यदि आपके पास 50 कनेक्शन के साथ एक स्क्रिप्ट है जो प्रत्येक एक ही अस्थायी तालिका कर रही है, तो उनके लिए ऑन-डिस्क अस्थायी फ़ाइलों के 50 सेट । अस्थायी तालिका निर्माण कारण समूह द्वारा क्रमबद्ध और विशिष्ट द्वारा डिस्क-आधारित i/o डीबीएमएस का सबसे महंगा हिस्सा है, इसलिए यदि ये टेबल बड़े डेटा सेट के लिए हैं, तो आप शायद डीबी प्रदर्शन को सीमित कर रहे हैं आपका आई/ओ सिस्टम। लेकिन आम तौर पर, केवल मौजूदा रूप से, वे केवल डिस्क स्थान चबाने वाले होते हैं और अधिक नहीं।

सॉर्टिंग उद्देश्यों के लिए टेम्पलेट टेबल को क्वेरी पूर्ण होने पर स्वयं को साफ़ करना चाहिए। 'टेम्पोररी' प्रकार की टेम्प टेबल स्वयं को साफ़ कर देगी जब कनेक्शन से जुड़े हुए हैं। यदि आप निरंतर कनेक्शन का उपयोग कर रहे हैं, तो टेम्पलेटरी टेबल तब तक चिपके रहेंगे जब तक आप (या एक प्रोग्राम) मैन्युअल रूप से उन्हें डीआरओपी नहीं करते।

+0

आह मैं देखता हूं, इसलिए यदि व्यस्त सर्वर पर लगातार कनेक्शन का उपयोग कर रहे थे तो हम मूल्य को बड़े मूल्य में बढ़ा सकते हैं, लेकिन इसके बारे में चिंतित होने के लिए कुछ भी नहीं है? – Tom

+1

टेबल पर बनाए गए तरीकों पर निर्भर करता है। कनेक्शन में एक अस्थायी तालिका 'ए' बनाना ठीक है। कनेक्शन के बाद के पुन: उपयोग केवल उसी तालिका का पुन: उपयोग करेंगे। लेकिन यदि आप उन्हें यादृच्छिक नामों के साथ उत्पन्न कर रहे हैं, तो आप उन temp तालिकाओं को लीक कर लेंगे जब तक कनेक्शन बंद नहीं हो जाता है और MySQL साफ़ हो जाता है। –

+0

स्मृति, डिस्क पर कहां ले जा रहा है? – Tom

1

आपने टेबल पर कई अनुक्रमणिका परिभाषित की हैं। क्या आपने कभी इंडेक्सिंग के काम के बारे में बताया है?

बस एक सूचकांक dbase में एक अस्थायी तालिका है जो अनुक्रमित कॉलम की प्रतिलिपि रखता है। जब एक नई पंक्ति सम्मिलित किया जाता है, dbase सही जगह पर अस्थायी तालिका में एक नया रिकार्ड रखता है, ताकि एक सूचकांक निम्न परिणाम है:

ए) लाभ:

1) खोज की गति में वृद्धि क्योंकि तालिका

1) धीरे (बनाएँ, अद्यतन, हटाएँ) क्योंकि एक ही कार्रवाई अस्थायी टेबल पर किया जाना चाहिए अगर जरूरत: अनुक्रमित क्षेत्र (रों)

बी) नुकसान के आधार पर एक अस्थायी तालिका में क्रमबद्ध किया जाता है।

2) डेटाबेज आकार temp तालिकाओं का उपयोग करने के कारण बढ़ता है।

निष्कर्ष:

अनुक्रमण डेटा की बड़ी राशि में बड़ा डाटाबेस आकार और धीमी प्रविष्टि और तेजी से खोज के एक व्यापार बंद है। उन क्षेत्रों पर अनुक्रमण का उपयोग करें जिन्हें आप अक्सर उन्हें खोज मानदंड (WHERE) के रूप में संदर्भित करते हैं और अपने डीबी डिज़ाइन को अनुकूलित करने के लिए अतिरिक्त अनुक्रमणिका हटाते हैं।

6

सबसे पहले पढ़ने के लिए the answer by Marc B यह कारण है कि आपके पास बहुत सारी अस्थायी सारणी क्यों हैं। वैसे भी, अस्थायी टेबल स्वयं खराब नहीं हैं, बुरी चीज "ऑन-डिस्क अस्थायी तालिका" है जो धीमी है और डिस्क IO का अधिक कारण है।

अस्थायी तालिका को रोकने के लिए डिस्क पर संग्रहीत करने के लिए निम्न चरणों का पालन करने की कोशिश:

  • max_heap_table_size का मूल्य की जाँच करें चर
  • tmp_table_size चर
  • का मूल्य की जाँच की जाँच करें सभी अस्थायी तालिकाओं के बीच डिस्क-टेबल का प्रतिशत। बस इन दो संख्याओं show global status like 'Created_tmp_%tables' की तुलना करें। यदि प्रतिशत बहुत बड़ा नहीं है - तो चिंता करने की कोई बात नहीं है।
+0

max_heap_table_size और tmp_table_size के मान अच्छे/बुरे मान क्या हैं? – Tom

+0

यह आपके बहुत से प्रोजेक्ट विशिष्ट पर निर्भर करता है। तो मूल्यों के बारे में कोई सामान्य सलाह नहीं है। एकमात्र चीज जो मैं सुझा सकता हूं: बस डिस्क अस्थायी तालिकाओं से बचें। – Vadim

संबंधित मुद्दे