2010-06-25 12 views
5

पर MyISAM में HEIS कनवर्ट करना क्यों जारी रखता हूं हमें हमारे MySQL सर्वर के साथ कुछ समस्याएं आ रही हैं। यह इन प्रश्नों में से कई प्रश्नों को एक साथ फेंकता रहता है (इस प्रकार उन्हें मेरी प्रक्रिया सूची में ढेर कर देता है)। हम एक Grails आवेदन के लिए ग्लासफ़िश v3 के माध्यम से एक MyISAM डीबी और कनेक्शन पूलिंग का उपयोग कर रहे हैं।मैं अपने mysql सर्वर

db_user myhost: 35,143 डाटाबेस क्वेरी 39

converting HEAP to MyISAM /* mysql-connector-java-5.1.7 (Revision:) */SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'net_write_timeout' OR Variable_name = 'interactive_timeout' OR Variable_name = 'wait_timeout' OR Variable_name = 'character_set_client' OR Variable_name = 'character_set_connection' OR Variable_name = 'character_set' OR Variable_name = 'character_set_server' OR Variable_name = 'tx_isolation' OR Variable_name = 'transaction_isolation' OR Variable_name = 'character_set_results' OR Variable_name = 'timezone' OR Variable_name = 'time_zone' OR Variable_name = 'system_time_zone' OR Variable_name = 'lower_case_table_names' OR Variable_name = 'max_allowed_packet' OR Variable_name = 'net_buffer_length' OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' OR Variable_name = 'query_cache_size' OR Variable_name = 'init_connect' 

हम अटकलें GORM के माध्यम से बनाया जा रहा अस्थायी तालिकाओं (grails ORM) है कि इन प्रश्नों का कारण बन रहे होते हैं। मैं अपने mysql सर्वर पर MyISAM में HEAP को कनवर्ट करना क्यों जारी रखूं?

उत्तर

6

converting HEAP to MyISAM संदेश के बारे में है, तो निम्न answer लिखते हैं:

यह तब होता है जब अस्थायी क्वेरी प्रोसेसिंग के मध्यवर्ती चरणों में MySQL द्वारा बनाई टेबल बहुत बड़ा स्मृति में संग्रहीत करने के लिए बढ़ता है। जहां तक ​​मुझे पता है, यह माईएसक्यूएल करते समय आपके द्वारा उपयोग किए जाने वाले डीबी इंजन के बावजूद अस्थायी माईसाम टेबल लिखते हैं (यह केवल एक अस्थायी तालिका है जो क्वेरी के अंत में हटा दी जाएगी)। प्रक्रिया के समय को छोड़कर यह कोई समस्या नहीं है।

सबसे आसान समाधान tmp_table_size बढ़ाने के लिए है, अस्थायी रूप से यदि आप रखरखाव कार्य कर रहे हैं। यदि यह पर्याप्त नहीं है, तो LIMIT और OFFSET का उपयोग करके अपनी क्वेरी को विभाजित करें और अपनी क्वेरी में पढ़ने वाली सभी तालिका को कवर करने के लिए ऑफ़सेट सेट करें। यदि आप क्वेरी में कई बड़ी टेबल पढ़ रहे हैं और उनमें से प्रत्येक को सीमित करने की आवश्यकता है, तो तालिकाओं के सभी संयोजनों को कवर करना न भूलें: उदा। यदि आप दो टेबल का उपयोग करते हैं और तीन भागों में प्रत्येक को विभाजित करना चाहते हैं तो आपको ऑफसेट के बढ़ते मूल्यों के विभिन्न संयोजनों के साथ ऑफसेट-टेड क्वेरी छह बार दोहराए जाने की आवश्यकता होगी। यह सब आसान बनाने के लिए एक बैच फ़ाइल हाथ में आ जाएगी।

तो MySQL इन इन-मेमोरी टेबल (और संभावित रूप से उन्हें अस्थायी MyISAM तालिकाओं में परिवर्तित कर रहा है), Grails नहीं बना रहा है। लेकिन मेरी समझ यह है कि वे बहुत भारी प्रश्नों के परिणामस्वरूप हो सकते हैं।

+0

जोड़ना: जब कोई नया कनेक्शन बनाया जाता है तो टिप्पणी के साथ शुरू होने वाला बिट कनेक्टर-जे से बाहर आता है। (यह com.mysql.jdbc.ConnectionImpl # loadServerVariables में है यदि आप देखना चाहते हैं।) यदि आप उनमें से बहुत से देख रहे हैं, तो मैं दोबारा जांच करूँगा कि कनेक्शन पूलिंग आपकी अपेक्षा के अनुसार काम कर रही है, और यह कि आपका MySQL को उचित कनेक्शन के लिए कॉन्फ़िगर किया गया है। –

+0

आईआईएसएएम की एक मेज पर एक हेसी पूछताछ चलाने पर मैं अभी भी ge tthis संदेश भेजता हूं। तो ढेर कहाँ से आता है? – chiliNUT

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