Firebird veritabanını geçici blob’larla nasıl "şişirirsiniz"
Bu, “bunu yapmayın” türü makalelerden biridir - sadece bir örnek olarak. Firebird veritabanınızın anormal büyümesiyle karşılaşırsanız, BLOB birleştirme kullanan bir saklı prosedür, tetikleyici veya execute block yazmadığınızı kontrol edin.
Bazı durumlarda, Firebird geçici BLOB’ları veritabanı dosyasının içinde saklar, bu yüzden çok çok hızlı büyür.
Bu sorun HQbird’de çözülmüştür; burada geçici BLOB’lar veritabanının kendisi yerine geçici klasöre gönderilebilir.
Aşağıdaki örnek sorunu gösterir: veritabanı dosyasında saklanan çok sayıda küçük geçici blob oluşturur, bu yüzden Firebird veritabanını ~2Gb kadar “şişirir” (Dikkatli olun ve bunu üretim veya önemli veritabanlarında çalıştırmayın!):
execute block
returns (
BLB blob)
as
declare BLB1 blob;
declare I integer;
begin
I = 0;
BLB = 'blabla';
BLB1 = cast('blablablablablablablablablablablablablabla' as blob);
while (I < 10000) do
begin
BLB = BLB || BLB1;
I = I + 1;
end
suspend;
end
Firebird geçici blob’ları işlemin commit (veya rollback) işlemine kadar tutar. İşlemi commit edip kodu tekrar çalıştırırsanız, veritabanı dosyasının büyümeyeceğini fark edeceksiniz - bunun nedeni, veritabanı içindeki geçici BLOB’lar için alanın yeniden kullanılmasıdır.
Firebird Friday Jokes’u Telegram kanalımızda takip edin: https://t.me/firebirdsql