سؤال

أنا حاليا تنظيف طاولة مع 2 الفهارس و 250 مليون النشطة الصفوف تقريبا كما العديد من القتلى الصفوف (أو أكثر).أصدرت قيادة فراغ كامل تحليل من الكمبيوتر العميل (الكمبيوتر المحمول) إلى الخادم.فقد استمرت أعماله لمدة 3-4 أيام أو نحو ذلك ؛ وأنا أتساءل عما إذا كان سوف ينتهي في وقت قريب من أجل لدي الكثير من العمل للقيام به!

الملقم رباعية رمز Xeon 2.66 GHz, 12 جيجابايت أو RAM و وحدة تحكم RAID تعلق على 2 × 10 آلاف لفة في الدقيقة سعة 146 جيجابايت محركات أقراص SAS HDs في غارة 1 التكوين ؛ فمن التشغيل Suse Linux.وأنا أتساءل...

الآن, أولا الفراغ البريد العملية يبدو أن الاستفادة من نواة واحدة فقط.ثانيا, أنا لا أرى عالية جدا I/O يكتب I/O وقت الخمول نسبة.ثالثا ، من الدعوة procinfo, أنا يمكن أن تستنبط أن الفراغ عملية يقضي معظم وقته (88%) في انتظار I/0.

لذا لماذا لا تستخدم أكثر النوى من خلال المواضيع من أجل الزائد وحدة تحكم RAID (على ارتفاع I/O يكتب إلى الخمول نسبة) ؟ لماذا هو انتظار I/O إذا كان I/O الحمل ليست عالية ؟ لماذا لا تسير بشكل أسرع مع كل هذه القوة/الموارد أصابع ؟ يبدو لي أن فراغ يمكن أن تكون مؤشرات خاصة إذا كان يعمل على طاولة كبيرة و هو عمل واحد فقط!

أيضا ، هو وسيلة لتكوين كيو.conf أن ندعه multithread هذه الفراغات?ما أستطيع أن يقتل و لا تزال تستفيد من الجزئي نظيفة ؟ أنا بحاجة إلى العمل على هذا الجدول.

[أنا باستخدام كيو 8.1]

تشك مرة أخرى

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

المحلول

أنت لا تقول أي إصدار من الإنترنت الذي تستخدمه.هل من الممكن فمن قبل 8.0?

كان هذا بالضبط نفس السيناريو.أفضل أفضل:

  • قتل الفراغ
  • العودة إلى أعلى الجدول مع pg_dump -t الخيار
  • إسقاط الجدول
  • استعادة الجدول

إذا كنت تستخدم 8.× أنظر autovacuum الخيارات.فراغ واحدة مترابطة, لا يوجد شيء يمكنك القيام به لجعل استخدام مؤشرات ترابط متعددة.

نصائح أخرى

بعض النصائح السريعة:

  • تشغيل فراغ كامل مطول حتى تتمكن se ما يجري.
  • انخفاض جميع المؤشرات قبل الفراغ.انها أسرع إلى إعادة بنائها من فراغ لهم.تحتاج أيضا إلى إعادة بناء عليها الآن ثم بسبب فراغ كامل ليست جيدة بما فيه الكفاية (لا سيما في مثل هذا قديم PosgreSQL كما 8.1).
  • تعيين maintenance_work_mem عالية حقا.
  • استخدام أحدث كيو.راجع للشغل, 8.4 سوف يكون هناك تحسن كبير في كنس.

بديل الفراغ هو تفريغ واستعادة.

تحرير:منذ 9.0 فراغ كامل كتابة الجدول بأكمله.هو أساسا نفس الشيء كما فعل تفريغ + استعادة لذا تشغيل REINDEX لا لزوم لها.

هل أنت متأكد أنك لا تملك شيئا المستمر الذي يمكن قفل الجداول ومنع الفراغ من الترشح؟

و(على أي حال، فإنه من الأفضل استخدام <لأ href = "http://www.postgresql.org/docs/8.1/interactive/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-VACUUM-COST" يختلط = "نوفولو noreferrer"> vacuum_cost_delay حتى هذا الفراغ ليس التخريبية للإنتاج.)

وقديم فراغ كامل الأحفوري. انها بطيئة جدا جدا، وعليك أن REINDEX بعد ذلك. لا يستخدمونه. إذا كنت تريد حقا أن ديفراغ جدول، استخدام العنقودية، أو هذا:

وLettssay لديك بعض المساحة على القرص اليسار، وهذا هو أسرع بكثير من تفريغ وإعادة تحميل:

CREATE TABLE newtable AS SELECT * FROM oldtable;
CREATE INDEX bla ON newtable( ... );
ALTER TABLE oldtable RENAME TO archive;
ALTER TABLE newtable RENAME TO oldtable;

ملاحظة هذا لن نسخ القيود الخاصة بك. يمكنك استخدام CREATE TABLE مثل ... نسخها.

<اقتباس فقرة>   

وهكذا لماذا أليس كذلك استخدام المزيد من النوى من خلال المواضيع

وخريج لا يدعم هذا.

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