2011-11-21 4 views
6

मैं एक प्रश्न है कि एक अस्थायी तालिका बनाता है लेकिन सीमा 64MB है और मैं पहुँच अनुमतियाँ आदि जब की वजह से सीमा बदलने के लिए सक्षम नहीं हूँ चला रहा हूँ उपयोग करने के लिए अनुमति दी है एक बड़ी तिथि सीमा का चयन किया जाता है अस्थायी तालिका अंतरिक्ष से बाहर हो जाती है और परिणामस्वरूप एक MySQL त्रुटि में परिणाम होता है।mysql - मैं निर्धारित या स्मृति क्वेरी की मात्रा को सीमित कर सकते हैं

क्या वैसे भी मैं क्वेरी चलाने के प्रयास से पहले क्वेरी का उपयोग करने के लिए आकार या स्मृति की मात्रा निर्धारित कर सकता हूं, इसलिए मैं उपर्युक्त समस्या से सावधानी से बच सकता हूं?

उत्तर

3

आपके मूल SQL क्वेरी में पंक्तियों की एक छोटी संख्या के लिए पूछताछ के अलावा, अस्थायी तालिका के आकार को सीमित करने का कोई तरीका नहीं है।

क्या आप जो त्रुटि देख रहे हैं उसके बारे में अधिक विशिष्ट हो सकते हैं? MySQL अस्थायी सारणी tmp_table_size और max_heap_table_size की मेमोरी में मौजूद हो सकती है। यदि अस्थायी तालिका बड़ी है, तो MySQL इसे ऑन-डिस्क अस्थायी तालिका में परिवर्तित करता है।

यह अस्थायी भंडारण की तुलना में अस्थायी तालिका को बहुत धीमा कर देगा, लेकिन इसके परिणामस्वरूप you have no space available in your temp directory तक कोई त्रुटि नहीं होनी चाहिए।

अस्थायी तालिका भंडारण के अलावा ways MySQL uses memory भी बहुत सारे हैं। आप इनमें से कई के लिए चर ट्यून कर सकते हैं, लेकिन यह एक क्वेरी का उपयोग करने वाली स्मृति पर सीमा रखने जैसा नहीं है।


त्रुटि 1114 इंगित करता है कि आप अंतरिक्ष से बाहर हो गए हैं। यदि यह डिस्क पर एक InnoDB तालिका थी, तो संभवतः इसका मतलब है कि आपके पास tablepace के लिए परिभाषित autoextend के बिना एक ibdata1 फ़ाइल है। मेमोरी टेबल के लिए, इसका मतलब है कि आप max_heap_table_size की सीमा को मार रहे हैं।

जब से तुम max_heap_table_size नहीं बदल सकते, अपने विकल्पों को एक समय में पंक्तियों की संख्या आप तालिका में डाल को कम करने, वरना एक पर डिस्क अस्थायी तालिका का उपयोग करने के बजाय स्मृति में करने के लिए कर रहे हैं।

इसके अलावा MySQL के मुख्य संस्करण के सबसे मौजूदा रिलीज का उपयोग कर के बारे में सावधान रहना होगा। मैं bug 18160 कि MySQL के ढेर तालिकाओं (जिसमें स्मृति अस्थायी तालिकाओं के लिए उपयोग किया जाता है) के लिए तालिका आकार की गणना गलत तरीके से रिपोर्ट मिल गया। तो उदाहरण के लिए सुनिश्चित करें कि आप उस बग के लिए फिक्स प्राप्त करने के लिए कम से कम MySQL 5.0.23 या 5.1.10 का उपयोग कर रहे हैं। : आपके उत्तर के लिए

+0

धन्यवाद, त्रुटि संदेश im हो रही [1114 मूल निवासी कोड] है [मूल संदेश: तालिका 'dertemp' भरा है] –

+0

मैं डिस्क पर अस्थायी तालिका का प्रयोग करेंगे कैसे के शुरू होने से मेरी क्वेरी तरह लग रहा है 'अस्थायी तालिका erebus.dertemp चयन आदि बनाएं here' चला जाता है मैं कल्पना मैं पहली बार थोड़ा बदल सकते हैं और वहाँ किसी भी तरह में ऑन-disk'' डाल करने के लिए की आवश्यकता होगी? –

+0

'बनाएं अस्थायी तालिका erebus.dertemp इंजन = InnoDB का चयन करें ...' –

1

मुझे इसे पूरा करने के प्रत्यक्ष तरीके से अवगत नहीं है, लेकिन आप SHOW TABLE STATUS द्वारा प्रदान की गई उपयोग की गई सारणी के बारे में जानकारी का उपयोग कर सकते हैं उदाहरण के लिए औसत पंक्ति आकार और फिर SELECT COUNT(*) ... का उपयोग करके अपनी क्वेरी द्वारा लौटाए गए रिकॉर्ड्स की संख्या की गणना करें । यदि आपको कॉलम प्रकारों का उपयोग करके वास्तव में पंक्ति के अधिकतम आकार की गणना करने की आवश्यकता है।

शायद यह रिकॉर्ड जो संभाला जा सकता है की संख्या की जांच करने के लिए आसान होगा और फिर या तो एक निश्चित LIMIT खंड निर्दिष्ट या SELECT COUNT(*) ... पर प्रतिक्रिया करने के लिए।

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