كيف يمكنني مسح ذاكرة التخزين المؤقت الداخلية لـ Class::DBI؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

أنا أعمل حاليًا على تنفيذ كبير لـ Class::DBI لبنية قاعدة بيانات موجودة، وأواجه مشكلة في مسح ذاكرة التخزين المؤقت من Class::DBI.هذا تطبيق mod_perl، لذلك يمكن أن يكون مثيل الفصل قديمًا جدًا بين مرات الوصول إليه.من صفحات الرجل وجدت خيارين:

Music::DBI->clear_object_index();

و:

Music::Artist->purge_object_index_every(2000);

الآن، عندما أقوم بإضافة Clear_object_index() إلى طريقة DESTROY، يبدو أنه يعمل، لكنه لا يفرغ ذاكرة التخزين المؤقت فعليًا.يمكنني تغيير قاعدة البيانات يدويًا، وإعادة تشغيل الطلب، ولا يزال الإصدار القديم.يقول purge_object_index_every أنه يقوم بمسح الفهرس في كل طلبات n.يبدو أن تعيين هذا على "1" أو "0" يؤدي إلى مسح الفهرس ...أحيانا.أتوقع أن يعمل أحد هذين الاثنين، لكن لسبب ما لا يفعل ذلك في كل مرة.أكثر مثل 1 في 5 مرات.

أي اقتراحات لمسح هذا؟

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

المحلول

ال "المشاكل الشائعة"الصفحة على فئة::DBI ويكي لديه قسم حول هذا الموضوع.الحل الأبسط هو تعطيل فهرس الكائن المباشر بالكامل باستخدام:

$Class::DBI::Weaken_Is_Available = 0;

نصائح أخرى

$obj->dbi_commit();قد يكون هذا هو ما تبحث عنه إذا كانت لديك معاملات غير مكتملة.ومع ذلك، فإن هذا ليس هو الحال على الأرجح، لأنه يميل إلى إكمال أي معاملات متبقية تلقائيًا عند التدمير.

عندما تفعل هذا:

Music::Artist->purge_object_index_every(2000);

أنت تطلب منه فحص ذاكرة التخزين المؤقت للكائنات عند تحميل 2000 كائن وإزالة أي مراجع ميتة للحفاظ على استخدام الذاكرة.لا أعتقد أن هذا ما تريده على الإطلاق.

بالإضافة إلى،

Music::DBI->clear_object_index();

يزيل كافة الكائنات من فهرس الكائن المباشر.لا أعرف كيف سيساعد هذا على الإطلاق؛إنه لا يقوم بدفعهم إلى القرص، حقًا.

يبدو أن ما تحاول القيام به يجب أن يعمل بشكل جيد بالطريقة التي تعمل بها، ولكن قد تكون هناك مشكلة في SQL الخاص بك أو في أي مكان آخر تمنع INSERT أو UPDATE من العمل.هل تقوم بالتحقق من الأخطاء لكل استعلام في قاعدة البيانات كما يقترح perldoc؟ربما يمكنك البدء من هناك أو في سجلات أخطاء قاعدة البيانات الخاصة بك، ومراقبة الاستعلامات لمعرفة سبب عدم اكتمالها أو ما إذا كانت قد وصلت.

أتمنى أن يساعدك هذا!

لقد استخدمت Remove_from_object_index بنجاح في الماضي، لذلك عندما يتم استدعاء صفحة لتعديل قاعدة البيانات، يتم دائمًا إعادة تعيين هذا الكائن بشكل صريح في ذاكرة التخزين المؤقت كجزء من صفحة التأكيد.

يجب أن أشير إلى أن Class::DBI تم إهماله ويجب عليك نقل الكود الخاص بك إليه DBix::فئة بدلاً من.

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