هل تتم إعادة استخدام المساحة التي تشغلها الصفوف المحذوفة؟

StackOverflow https://stackoverflow.com/questions/634257

سؤال

لقد قرأت عدة مرات أنه بعد حذف صف في جدول InnoDB في MySQL، لا يتم إعادة استخدام مساحته، لذلك إذا قمت بإنشاء الكثير من الإدخالات في جدول ثم قمت بحذف بعض الصفوف بشكل دوري، فسيستخدم الجدول المزيد والمزيد من المساحة على القرص، كما لو لم يتم حذف الصفوف على الإطلاق.

لقد قيل لي مؤخرًا أنه تتم إعادة استخدام المساحة التي تشغلها الصفوف المحذوفة ولكن فقط بعد اكتمال بعض المعاملات وحتى ذلك الحين - ليس بشكل كامل.أنا الآن في حيرة من أمري.

هل يمكن لأحد أن يفهم هذا بالنسبة لي؟أحتاج إلى إجراء الكثير من عمليات الإدخال في جدول InnoDB ثم أحتاج كل X دقيقة إلى حذف السجلات التي يزيد عمرها عن Y دقيقة.هل أواجه مشكلة في تزايد جدول InnoDB هنا، أم أنه جنون العظمة؟

هل كانت مفيدة؟

المحلول

إنه جنون العظمة :)

لا ينمو حجم قواعد البيانات بشكل غير ضروري، ولكن بالنسبة لمشكلات الأداء، لا يتم تحرير المساحة أيضًا.

ما سمعته على الأرجح هو أنه إذا قمت بحذف السجلات فلن يتم إرجاع هذه المساحة إلى نظام التشغيل.وبدلاً من ذلك، يتم الاحتفاظ بها كمساحة فارغة لإعادة استخدام قاعدة البيانات بعد ذلك.

هذا بسبب:

  • تحتاج قاعدة البيانات إلى بعض المساحة عالية الدقة لحفظ بياناتها؛إذا لم يكن لديه أي مساحة، فإنه يحتفظ ببعض المساحة الفارغة في البداية.
  • عند إدراج صف جديد، يتم استخدام جزء من تلك المساحة.
  • عند نفاد المساحة الحرة، يتم حجز كتلة جديدة، وهكذا.
  • الآن، عند حذف بعض الصفوف, ، من أجل منع حجز المزيد والمزيد من الكتل، يتم الاحتفاظ بمساحتها مجانًا ولكن لا يتم إعادتها أبدًا إلى نظام التشغيل، لذلك يمكنك استخدامها مرة أخرى لاحقًا دون الحاجة إلى حجز كتل جديدة.

كما ترون، الفضاء يكون أعيد استخدامها، ولكن لم يتم إعادتها أبدًا.هذه هي النقطة الرئيسية لسؤالك.

نصائح أخرى

في innodb، لا توجد طريقة عملية لتحرير المساحة.

  • استخدم ملف IBDATA لكل جدول ، مما يمكّنك من حذف تسجيل نسخ البيانات إلى جدول جديد وحذف الجدول القديم ، وبالتالي استرداد السجلات.
  • استخدم mysqldump والكثير من المصادر لتنظيف الخادم بأكمله.تحقق مما يلي:
    http://dev.mysql.com/doc/refman/5.0/en/adding-and-removing.html

تصبح كل هذه الطرق غير عملية عند استخدام جداول ضخمة (في حالتي يزيد حجمها عن 250 جيجابايت) ويجب عليك الاحتفاظ بها وحذف السجلات للحصول على أداء أفضل.

سيتعين عليك التفكير بجدية فيما إذا كان لديك مساحة كافية على القرص الصلب الخاص بك لأداء إحدى الوظائف المذكورة أعلاه (في حالتي، لا أعتقد أن 1 تيرابايت كافية لجميع هذه الإجراءات)

مع جدول Innotab (وmysql نفسه)، يكون الخيار محدودًا إلى حد ما إذا كان حجم قاعدة البيانات كبيرًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top