2008-08-29 21 views
2

Şu anda varolan bir veritabanı yapısı için Class :: DBI'nin büyük bir uygulaması üzerinde çalışıyorum ve Class :: DBI'den önbelleği temizlerken bir sorunla karşılaşıyorum. Bu bir mod_perl uygulamasıdır, bu nedenle bir sınıfın bir örneği erişildiği zamanlar arasında oldukça eski olabilir.Sınıf :: DBI'nin dahili önbelleğini nasıl temizlerim?

Music::DBI->clear_object_index(); 

Ve: man sayfalarından Ben iki seçenek buldum DESTROY yöntemine clear_object_index() eklediğinizde Şimdi

Music::Artist->purge_object_index_every(2000); 

, çalıştırmak gibi görünüyor, ama aslında boçaltmıyor önbellek. Veritabanını el ile değiştirebiliyorum, isteği yeniden çalıştırabiliyorum ve hala eski sürüm. purge_object_index_every, dizinin her n isteğini temizlediğini söylüyor. Bunu "1" veya "0" olarak ayarlamak, endeksi ... bazen temizliyor gibi görünüyor. Bu ikisinden birinin çalışmasını beklerdim, ama bir sebepten dolayı her seferinde bunu yapmıyor. 5 kez daha 1 gibi.

Bunu temizlemek için herhangi bir öneriniz var mı?

cevap

5

Class::DBI wiki numaralı "common problems" sayfasında bu konu hakkında section vardır. Bir sayfa veritabanı değiştirir o çağrıldığında, daima doğrudan o nesne sıfırlamak böylece

$Class::DBI::Weaken_Is_Available = 0; 
+0

Bağlantı artık yok. Güncellenmiş bağlantıyı bilen var mı? –

0

Ben, geçmişte remove_from_object_index başarıyla kullandım: basit çözüm tamamen kullanarak canlı nesne endeksini devre dışı bırakmaktır Onay sayfasının bir parçası olarak önbellek.

2

$ obj-> dbi_commit(); Tamamlanmamış işlemleriniz varsa aradığınız şey olabilir. Ancak, bu durum, büyük olasılıkla, herhangi bir kalıcı işlemi, imhada otomatik olarak tamamlama eğiliminde olduğu için geçerli değildir.

Bunu yaptığınızda: Hafızanın tüketimini korumak için nesne önbelleğe her 2000 nesne yükleri incelemek ve herhangi ölü referansları kaldırmak için anlatıyorsun

Music::Artist->purge_object_index_every(2000); 

. Bence istediğin şey bu değil.

Ayrıca

,

Music::DBI->clear_object_index(); 

tüm nesneler canlı bir nesne indeksi oluşturur kaldırır. Bunun nasıl yardımcı olacağını bilmiyorum; Onları diske yıkamak değil, gerçekten.

Yapmaya çalıştığınız şey, sahip olduğunuz gibi çalışması gerektiği gibi görünüyor, ancak SQL'inizde veya başka bir yerde, INSERT veya UPDATE'in çalışmasını engelleyen bir sorun olabilir. Perldoc'un önerdiği gibi her bir veritabanı sorgusu için hata kontrolü yapıyor musunuz? Belki de oraya ya da veritabanı hata kayıtlarınızda, neden tamamlanmadıklarını ya da geldiklerini görmek için sorguları izleyerek başlayabilirsiniz.

Bu yardımcı olur umarız!

-1

Sınıf :: DBI'nin kullanımdan kaldırıldığını ve kodunuzu DBIx::Class yerine taşımanız gerektiğini unutmayın.

İlgili konular