Questa pagina è stata tradotta automaticamente. Leggi l'originale in inglese. English

Libreria IBSurgeon

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!) :

Code
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