मुझे लगता है कि आप InnoDB का उपयोग कर रहे हैं, क्योंकि यह MySQL 5.5 में डिफ़ॉल्ट स्टोरेज इंजन है।
जैसे ही आप डेटा डालते हैं InnoDB टेबलस्पेस बढ़ता है, लेकिन जब आप डेटा हटाते हैं तो फाइलें सिकुड़ती नहीं हैं। इसलिए उदाहरण के लिए यदि आप 1 मिलियन पंक्तियाँ सम्मिलित करते हैं, और फिर उन्हें हटाते हैं, तो फ़ाइल में बहुत अधिक स्थान होगा जो भौतिक रूप से आवंटित किया गया है, लेकिन अब इसका उपयोग नहीं किया जाता है। टेबलस्पेस फ़ाइल को फिर से बढ़ाने से पहले यदि वह कर सकता है तो InnoDB उस स्थान का फिर से उपयोग करेगा।
साथ ही, यदि आप हटाते नहीं हैं, तो भी कुछ "व्यर्थ" स्थान हो सकता है क्योंकि जब टेबलस्पेस फ़ाइलों को आकार में बढ़ाया जाता है, तो वे पृष्ठों के एक बड़े हिस्से द्वारा विस्तारित होते हैं, जो कि कॉन्फ़िगरेशन विकल्प innodb_autoextend_increment
द्वारा निर्धारित किया जाता है। मेगाबाइट में। जब तक वे पृष्ठ डेटा से भर नहीं जाते, वे खाली स्थान होते हैं।
InnoDB द्वारा रिपोर्ट किया गया Data_free केंद्रीय टेबलस्पेस फ़ाइल में खाली पृष्ठों में "व्यर्थ" स्थान की मात्रा है। इसका NULL मानों से कोई लेना-देना नहीं है, इसका उन डेटा पृष्ठों से कोई लेना-देना नहीं है, जिनमें पंक्तियाँ नहीं हैं।
इसके अलावा, MySQL 5.5 में, डिफ़ॉल्ट सभी तालिकाओं के लिए ibdata
नामक एक केंद्रीय टेबलस्पेस साझा करने के लिए है। . इस टेबलस्पेस में सभी टेबल के लिए डेटा_फ्री एक ही आंकड़े की रिपोर्ट करेगा, जो कि केवल एक टेबल के लिए नहीं, बल्कि पूरे टेबल स्पेस में फ्री पेज में स्पेस की मात्रा है।
आप प्रति टेबल एक अलग टेबलस्पेस भी आवंटित कर सकते हैं (innodb_file_per_table=1
), और अलग-अलग टेबल स्पेस में टेबल के लिए, आप data_free के लिए प्रति टेबल एक अलग मान देखेंगे।
Data_free केवल पूरी तरह से खाली सीमा . द्वारा छोड़े गए स्थान की रिपोर्ट करता है (एक हद 1 एमबी के बराबर पृष्ठों का एक ब्लॉक है)। आप देखेंगे कि data_free हमेशा 1MB का गुणज होता है। नि:शुल्क पृष्ठों के छोटे ब्लॉकों की गणना data_free में नहीं की जाती है और न ही आंशिक रूप से भरे गए पृष्ठों की गणना की जाती है। तो "बर्बाद" स्थान शायद बहुत अधिक है, लेकिन हमारे पास इसे जानने का कोई तरीका नहीं है।