So bläst man eine Firebird-Datenbank mit temporären Blobs auf
Dies ist einer der “Das-sollte-man-nicht-tun”-Artikel - nur als Beispiel. Wenn Sie ein abnormales Wachstum Ihrer Firebird-Datenbank feststellen, prüfen Sie, ob Sie eine gespeicherte Prozedur, einen Trigger oder einen Execute-Block geschrieben haben, der BLOB-Verkettung verwendet.
In einigen Fällen speichert Firebird temporäre BLOBs in der Datenbankdatei, sodass diese sehr schnell wächst.
Dieses Problem ist in HQbird behoben, wo temporäre BLOBs in einen temporären Ordner statt in die Datenbank selbst gesendet werden können.
Das folgende Beispiel demonstriert das Problem: Es erzeugt viele kleine temporäre BLOBs, die in der Datenbankdatei gespeichert werden, sodass die Firebird-Datenbank um etwa 2 GB “aufgebläht” wird (Seien Sie vorsichtig und führen Sie es nicht auf Produktions- oder wichtigen Datenbanken aus!):
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 behält temporäre BLOBs bis zum Commit (oder Rollback) der Transaktion. Wenn Sie die Transaktion committen und den Code erneut ausführen, werden Sie feststellen, dass die Datenbankdatei nicht wächst - dies liegt daran, dass der Speicherplatz für temporäre BLOBs in der Datenbank wiederverwendet wird.
Folgen Sie Firebird Friday Jokes auf unserem Telegram-Kanal: https://t.me/firebirdsql