Come "gonfiare" un database Firebird con blob temporanei
Questo è uno degli articoli del tipo “non fatelo” - solo come esempio. Se noti una crescita anomala del tuo database Firebird, verifica di non aver scritto una stored procedure, un trigger o un execute block che utilizza la concatenazione di BLOB.
In alcuni casi, Firebird memorizza i BLOB temporanei all’interno del file del database, quindi cresce molto molto rapidamente.
Questo problema è risolto in HQbird, dove i BLOB temporanei possono essere inviati alla cartella temporanea invece che al database stesso.
L’esempio seguente dimostra il problema: crea molti piccoli BLOB temporanei, che vengono memorizzati nel file del database, quindi “gonfierà” il database Firebird di circa 2 GB (Fai attenzione e non eseguirlo su database di produzione o importanti!) :
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 mantiene i BLOB temporanei fino al commit (o rollback) della transazione. Se esegui il commit della transazione e poi lanci di nuovo il codice, noterai che il file del database non crescerà - questo è dovuto al fatto che lo spazio per i BLOB temporanei all’interno del database viene riutilizzato.
Segui le battute del Firebird Friday sul nostro canale Telegram: https://t.me/firebirdsql