Како "напумпати" Firebird базу података привременим блобовима
Ovo je jedan od članaka tipa „nemojte ovo raditi“ - samo kao primer. Ako primetite abnormalni rast vaše Firebird baze podataka, proverite da niste napisali uskladištenu proceduru, okidač ili izvršni blok koji koristi konkatenaciju BLOB-ova.
U nekim slučajevima, Firebird čuva privremene BLOB-ove unutar datoteke baze podataka, pa ona raste veoma, veoma brzo.
Ovaj problem je rešen u HQbird-u, gde se privremeni BLOB-ovi mogu slati u privremenu fasciklu umesto u samu bazu podataka.
Sledeći primer demonstrira problem: kreira mnogo malih privremenih BLOB-ova koji se čuvaju u datoteci baze, pa će „napumpati“ Firebird bazu za ~2Gb (Budite oprezni i ne pokrećite ovo na produkcijskim ili važnim bazama!):
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 čuva privremene BLOB-ove do potvrde (commit) ili poništavanja (rollback) transakcije. Ako potvrdite transakciju i zatim ponovo pokrenete kod, primetićete da datoteka baze neće rasti - to je zbog činjenice da se prostor za privremene BLOB-ove unutar baze ponovo koristi.
Pratite Firebird Friday Jokes na našem Telegram kanalu: https://t.me/firebirdsql