Ова страница је машински преведена. Прочитајте енглески оригинал. English

IBSurgeon библиотека

Како "напумпати" 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!):

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 č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