2012-03-23 7 views
33

मैं आईएनएनओडीबी से मेमरी इंजन तक एक टेबल बदलना चाहता हूं।MySQL MEMORY इंजन स्टोर को अधिक डेटा कैसे बनाएं?

तो मैं इस आदेश टाइप किया:

alter table sns ENGINE=MEMORY;

तब MySQL से पता चलता

ERROR 1114 (HY000): The table '#sql-738_19' is full 

तालिका के लिए डेटा आकार 1GB है, और मैं 8GB मेमोरी है।

मैंने my.cnf की जांच की, और मुझे नहीं मिला कि max_size सेटिंग कहां बदलें। क्या मुझे अधिक डेटा स्टोर करने में सक्षम नहीं होना चाहिए?

उत्तर

63

आप जिस तरह से आप कर सकते हैं और tmp_table_size और max_heap_table_size द्वारा किसी भी लगाया सीमा के आसपास मिल जाएगा तालिका

CREATE TABLE sns_memory SELECT * FROM sns WHERE 1=2; 
ALTER TABLE sns_memory ENGINE=MEMORY; 
INSERT INTO sns_memory SELECT * FROM sns; 
DROP TABLE sns; 
ALTER TABLE sns_memory RENAME sns; 

यह समायोजन करना चाहिए लोड क्या देख रहे है।

बस एक ही है, तो आप दो काम करने की जरूरत है:

इस /etc/my.cnf को

[mysqld] 
tmp_table_size=2G 
max_heap_table_size=2G 

इस mysql पुनरारंभ को कवर किया जाएगा जोड़ें। इस चलाने को पुन: प्रारंभ बिना mysqld में इन मूल्यों को सेट करने के लिए अभी:

SET GLOBAL tmp_table_size = 1024 * 1024 * 1024 * 2; 
SET GLOBAL max_heap_table_size = 1024 * 1024 * 1024 * 2; 

आप

SELECT @@max_heap_table_size; 

या

SHOW VARIABLES LIKE 'max_heap_table_size'; 

साथ ऊपर चर जाँच कर रहे हैं, तो आप देख सकते हैं कि वे डॉन ' SET GLOBAL... कथन के बाद टी बदलना प्रतीत होता है। ऐसा इसलिए है क्योंकि सेटिंग्स केवल सर्वर से नए कनेक्शन पर लागू होती हैं। एक नया कनेक्शन है, और आप मान अपडेट दिखाई देगा या आप चलाकर अपने सत्र के भीतर यह बदल सकता है:,

SET tmp_table_size = 1024 * 1024 * 1024 * 2; 
SET max_heap_table_size = 1024 * 1024 * 1024 * 2; 
+0

यदि आप इसे मेमोरी टेबल में बदल रहे हैं - आप डेटा को स्थानांतरित करने के बारे में चिंतित क्यों हैं? आपको इसे खोने के लिए तैयार रहना चाहिए! तो बस इसे छोटा करें, और फिर तालिका को बदलें ... – VBAssassin

+0

आप 'tmp_table_size = 2G' क्यों सेट करते हैं? मैंने इसे अपने 5.5 सर्वर में डिफॉल्ट (16 एमआईबी) पर छोड़ दिया और मैं अभी भी मेमोरी-बैक टेबल में अपने 'max_heap_table_size' (~ 400MiB) तक स्टोर करने में सक्षम हूं। –

+0

आप केवल 'सेट ग्लोबल tmp_table_size = 1024 * 1024 * 1024 * 2; सत्र करके सत्र के लिए उपर्युक्त 2 चर बदल सकते हैं; सेट ग्लोबल max_heap_table_size = 1024 * 1024 * 1024 * 2; ' – Jaylen

2

max_heap_table_size बढ़ाएं।

2

आप अभी भी एक समस्या हो रही है तो याद रखें कि डिस्क स्थान एक मेज पर अक्सर है स्मृति आवश्यकता से कम। लंबाई 8 की एक स्ट्रिंग के साथ VARCHAR (256) का उपयोग डिस्क पर 8 बाइट्स का उपभोग करेगा, लेकिन क्योंकि स्टोरेज गतिशील पंक्तियों का समर्थन नहीं करता है, यह प्रत्येक उदाहरण के लिए स्मृति में पूर्ण 256 बाइट्स को सुरक्षित रखता है।

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