Cette page a été traduite automatiquement. Lisez l'original en anglais. English

Bibliothèque IBSurgeon

Comment « gonfler » une base de données Firebird avec des blobs temporaires

Ceci est l’un des articles « à ne pas faire » - juste à titre d’exemple. Si vous constatez une croissance anormale de votre base de données Firebird, vérifiez que vous n’avez pas écrit une procédure stockée, un déclencheur ou un bloc d’exécution qui utilise la concaténation de BLOBs.

Dans certains cas, Firebird stocke les BLOBs temporaires dans le fichier de base de données, ce qui le fait croître très très rapidement.

Ce problème est corrigé dans HQbird, où les BLOBs temporaires peuvent être envoyés dans un dossier temporaire au lieu de la base de données elle-même.

L’exemple suivant illustre le problème : il crée beaucoup de petits BLOBs temporaires, qui sont stockés dans le fichier de base de données, ce qui « gonfle » la base de données Firebird d’environ 2 Go (Soyez prudent et ne l’exécutez pas sur des bases de production ou importantes !) :

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 conserve les BLOBs temporaires jusqu’au commit (ou rollback) de la transaction. Si vous validez la transaction puis relancez le code une fois de plus, vous remarquerez que le fichier de base de données ne croîtra pas - cela est dû au fait que l’espace pour les BLOBs temporaires dans la base de données est réutilisé.

Suivez les blagues du vendredi Firebird sur notre chaîne Telegram : https://t.me/firebirdsql