MySQL डिस्क पर इतने सारे अस्थायी टेबल क्यों बना रहा है?


13

क्या कोई विन्यास गलती mysql..mysql ट्यूनर शो के द्वारा बहुत अधिक अस्थायी तालिकाओं का निर्माण कर सकती है

Current max_heap_table_size = 200 M
Current tmp_table_size = 200 M
Of 17158 temp tables, 30% were created on disk

table_open_cache = 125 tables
table_definition_cache = 256 tables
You have a total of 97 tables
You have 125 open tables.
Current table_cache hit rate is 3%

इससे पहले टेम्प टेबल "23725 टेम्‍प टेबल की 38% डिस्क पर बनाई गई थी", लेकिन मैंने अधिकतम 16 मीटर से अधिकतम 200 मीटर और tmp_table को बदल दिया और यह 30% तक कम हो गया।

विन्यास:

engine myisam 
group_concat_max_len = 32768
key_buffer_size = 3.7 GB,
thread_stack = 256k,
table_cache = 125
query_cache_limit = 1M
query_cache_size = 16M
join_buffer_size = 2.00 M
max_connections = 800

डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ एक अन्य सिस्टम "23725 अस्थायी तालिकाओं का दिखा रहा है, 1% एक ही डेटाबेस के साथ डिस्क पर बनाया गया था"।

मैंने इस मुद्दे के साथ मशीन पर डिफ़ॉल्ट रूप से बदलने की कोशिश की और यह अभी भी "580 टेम्पल टेबल, 16% डिस्क पर बनाया गया" दिखाता है।

मैं 48 जीबी रैम के साथ उबंटू 11.4 64 बिट का उपयोग कर रहा हूं। क्या कोई समाधान सुझा सकता है?

"फिक्स" द्वारा "समूह" का उपयोग करते हुए तालिकाओं पर "myisam" से "मेमोरी" में db इंजन को बदल देगा? जैसा कि यहाँ बताया गया है: http://www.mysqlperformanceblog.com/2007/08/16/how-much-overhead-is-caused-by-on-disk-temporary-tables/

जवाबों:


16

mysqltuner शायद ही कोई उपयोगी जानकारी प्रदान करता है। यह "हिट दरों" के बारे में ज्यादातर अप्रासंगिक आंकड़ों का उपयोग करता है और जो विजेट की स्वीकार्य संख्या है स्वीकार्य हैं उस पर मनमानी सीमाएं लगाता है। यदि आप एक प्रदर्शन समस्या का सामना नहीं कर रहे हैं, तो आपको वास्तव में किसी भी समस्या को हल करने की आवश्यकता नहीं है जो यह आपके लिए प्रस्तुत करता है। कहा जा रहा है, यहाँ अस्थायी तालिकाओं के बारे में थोड़ी जानकारी है ...

MySQL आंतरिक रूप से अंतर्निहित अस्थायी टेबल बनाने के लिए मेमोरी स्टोरेज इंजन का उपयोग करता है। डिस्क पर अस्थायी तालिकाएँ MyISAM संग्रहण इंजन का उपयोग करती हैं।

जब डिस्क पर अस्थायी तालिकाएँ बनाई जाती हैं:

  • पाठ या ब्लॉब फ़ील्ड मौजूद हैं (क्योंकि मेमोरी इन प्रकारों का समर्थन नहीं करती है)
  • परिणामी अंतर्निहित अस्थायी तालिका का आकार tmp_table_sizeया उससे कम होता हैmax_heap_table_size
  • यदि कोई स्तंभ w / 512 बाइट्स से अधिक का उपयोग किसी ग्रुप BY या UNION या ORDER BY के साथ किया जाता है

अधिक विवरण के लिए आंतरिक अस्थायी तालिकाओं पर MySQL प्रलेखन पढ़ें ।

आप इस बारे में क्या कर सकते हैं? यह मानते हुए कि यह वास्तव में एक प्रदर्शन समस्या का प्रतिनिधित्व करता है (केवल आपको बुरी तरह परेशान करने के बजाय):

  • TEXT / BLOB फ़ील्ड से बचें और इसके बजाय जहाँ संभव हो, VARCHAR या CHAR फ़ील्ड का उचित आकार दें।
  • यदि TEXT / BLOB अनुपलब्ध हैं, तो उन्हें एक विदेशी कुंजी संबंध के साथ तालिकाओं को अलग करने के लिए अनुक्रमित करें और केवल तब ही जॉइन करें जब आपको उनकी आवश्यकता हो।
  • बड़े स्तंभों का इलाज करें, जैसा कि ऊपर उल्लेखित TEXT / BLOB फ़ील्ड में 512 बाइट्स से अधिक होगा।
  • सुनिश्चित करें कि आपके प्रश्न केवल वही परिणाम सेट कर रहे हैं जिनकी आपको आवश्यकता है (उचित रूप से चयनात्मक रूप से क्‍लॉस, चयन से बचें *)
  • उपश्रेणियों से बचें और उन्हें जोड़ों के साथ बदलें, खासकर यदि वे एक बड़े परिणाम सेट को वापस करते हैं
  • अंतिम उपाय - दोनों को बढ़ाएं tmp_table_sizeऔर max_heap_table_size। ऐसा तब तक न करें जब तक आपको पता न चले कि आपके प्रश्नों को अनुकूलित नहीं किया जा सकता है।

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

"फिक्स" द्वारा "समूह" का उपयोग करते हुए तालिकाओं पर "myisam" से "मेमोरी" में db इंजन को बदल देगा? जैसा यहाँ बताया गया है

नहीं, यह नहीं होगा और यह ऐसा बना देगा कि आपकी तालियाँ कभी भी डिस्क पर बनी नहीं रहेंगी। यह मत करो।


+1, लेकिन कहा कि इसके बारे में कम है tmp_table_sizeयाmax_heap_table_size
डेरेक डाउनी

Mysqltuner द्वारा सबसे अच्छी सिफारिश धीमी क्वेरी लॉग को सक्षम करने के लिए थी। यदि कोई हो, तो यह आपको धीमी क्वेरी की पहचान करने में मदद करेगा।
fat_mike

2

"अस्थायी का उपयोग करना" और "फाइल का उपयोग करना" दुनिया का अंत नहीं है!

चयन करें ... ग्रुप बाय ए, बी ओडर बाय सी, डी - 1 या 2 "टेम्प टेबल" की आवश्यकता है।

ऐसे समय होते हैं जब आपके प्रश्न अस्थायी टेबलों का उपयोग करेंगे। अस्थायी तालिका एक छोटे कारक द्वारा क्वेरी को धीमा कर सकती है। लेकिन अगर क्वेरी अभी भी "काफी तेज" है, तो इसके बारे में चिंता न करें।

यदि क्वेरी बहुत धीमी है (tmp तालिकाओं के साथ या उसके बिना), तो आइए चर्चा करते हैं। कृपया कम आकार की तालिका, शोबल तालिका और विस्तार प्रदान करें।


1
यदि आपके पास एक अनुक्रमणिका है (a, b, c, d), तो कोई भी अस्थायी तालिका नहीं होगी।
यवन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.