Streaming konverzija Firebird 2.5 baza podataka u ODS12 format (Firebird 3.0)

Svaka verzija Firebird-a ima svoju verziju formata disk strukture baze podataka, O(n)D(isk)S(struktura). Do uključujući verziju 2.5, Firebird motor je mogao raditi sa ODS-om prethodnih verzija, odnosno baze podataka iz starih verzija su otvarane novom verzijom i radile su u kompatibilnom modu, ali Firebird 3.0 motor radi samo sa bazama podataka u vlastitoj ODS verziji 12.0.

Za migraciju na 3.0, baza podataka iz 2.5 mora biti konvertirana u novi format putem sigurnosne kopije/vraćanja. Naravno, pretpostavljamo da je baza podataka prethodno pripremljena za konverziju – tj. metapodaci i upiti su provjereni na kompatibilnost sa Firebirdom 3.0.

Ako slijedite standardni pristup, to znači da morate napraviti sigurnosnu kopiju na verziji 2.5, zatim instalirati 3.0 i izvršiti vraćanje. Takav postupak je prihvatljiv ako ima dovoljno vremena, ali pri migraciji velikih baza podataka, ili pri migraciji nekoliko desetina baza u isto vrijeme, kada vrijeme istekne, možete koristiti streaming konverziju, koja je 30-40% brža. Kako to tačno uraditi (pod Windowsom i pod Linuxom), pročitajte ispod reza.

Opća ideja je da ćemo koristiti cjevovod da ubrzamo stvari:

gbak -b … база25 stdout | gbak -c … stdin база30

Gbak od 2.5 generiše rezervnu kopiju u linearnom formatu i šalje je na stdout, koji odmah preuzima gbak iz 3.0 preko stdin-a i kreira novu bazu podataka.

Neophodno je organizirati takav cjevovod s lokalnom (datotečnom) metodom pristupa, jer će pristup mreži (čak i preko localhost-a) značajno usporiti proces.

U nastavku ćemo pregledati detalje za Windows i Linux.

Windows

U slučaju Windowsa, najlakši način je napraviti potpuno samostalnu verziju Firebird-a. Za ovo uzimamo embed-archive Firebird 2.5, preimenujte fbemded.dll u fbclient.dll, dodajte gbak.exe i (opciono) isql.exe uslužne programe iz “obične” 2.5 arhive.

Firebird 3.0 koristi pojedinačna montaža i ne zahtijeva nikakve modifikacije.

Najminimalnija verzija (koja ne zahtijeva instalaciju VS2008/VS2010 runtime biblioteka na ciljnom sistemu) sadrži sljedeće datoteke:

25/gbak.exe
25/fbclient.dll
25/firebird.conf
25/firebird.log
25/firebird.msg
25/ib_util.dll
25/icudt30.dll
25/icuin30.dll
25/icuuc30.dll
25/Microsoft.VC80.CRT.manifest
25/msvcp80.dll
25/msvcr80.dll

30/fbclient.dll
30/firebird.conf
30/firebird.msg
30/gbak.exe
30/ib_util.dll
30/icudt52.dll
30/icudt52l.dat
30/icuin52.dll
30/icuuc52.dll
30/msvcp100.dll
30/msvcr100.dll
30/intl/fbintl.conf
30/intl/fbintl.dll
30/plugins/engine12.dll

Iskusni administrator može primijetiti da 2.5 ne uključuje datoteke intl/fbintl.dll i intl/fbintl.conf. Ovo je tačno, budući da gbak ne koristi skup znakova veze i ne konvertuje podatke između skupova znakova, ali na strani "prijema" Firebird-a 3.0, ove datoteke su neophodne prilikom kreiranja indeksa.

U firebird.conf Firebird 3.0 preporučuje se dodavanje:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Također, poželjno je postaviti različite vrijednosti IpcName za 2.5 i 3.0.

Prilikom odabira vrijednosti ostalih parametara firebird.conf, polazimo od jednostavnog razmatranja: u fazi transfuzije podataka, gbak pokreće 2.5 u jednom procesu, a 3.0 u drugom, zatim 2.5 izlazi, a 3.0 počinje graditi indeksi.

Da biste ubrzali fazu izgradnje indeksa u verziji 3.0, preporučuje se povećanje veličine parametra TempCacheLimit na ~40% RAM-a (ako se radi o namjenskom serveru, naravno).

Na primjer, ako server ima 16 GB RAM-a, onda možete staviti

TempCacheLimit=6G

Naravno, ova vrijednost se može postaviti samo za 64-bitni Firebird 3, budući da nijedan 32-bitni proces ne može dodijeliti više od 2 gigabajta memorije.

U 2.5, ovaj parametar ne treba mijenjati - ionako ne može biti veći od 2 gigabajta i ne utiče na brzinu tokom backup-a.

Prije izvođenja operacije, morate provjeriti da li je keš stranica u zaglavlju baze podataka postavljen na 0 (naredba gstat -h databasename, pogledajte red Buffers stranica).

Ako je keš memorija eksplicitno postavljena u zaglavlju baze podataka, tada ona nadjačava vrijednosti iz firebird.conf (i databases.conf u 3.0), a u slučaju neadekvatno velikih vrijednosti može dovesti do prekomjerne potrošnje memorije i zamjene.

Zatim kopirajte datoteke na ciljni sistem.

Konverzija se vrši nakon zaustavljanja "sistemskog" Firebird 2.5 servisa, na komandnoj liniji sa povišenim pravima za lokalnog administratora (primjer):

set ISC_USER=владелец
"25/gbak" -z -b -g -v -st t -y 25.log база25 stdout|^
"30/gbak" -z -c -v -st t -y 30.log stdin база30

Ovaj primjer koristi "kosu crtu" u navodnicima (ispravan "unix-style"), a "šešir" (znak "^") izbjegava znak novog reda, što je korisno kada kucate duge komande. Opcija -st(atus) pojavila se u Firebirdu 2.5.8 i omogućava vam da evidentirate podatke o vremenu kada je gbak proces bio pokrenut (za detalje pogledajte dokumentaciju).

Linux

Na Linuxu Firebird 3 zavisi od tommath biblioteke. Na CentOS-u (RHEL) ova biblioteka se nalazi u epel repozitoriju, na Ubuntu (Debian) u sistemskom spremištu.

Za CentOS, prvo morate povezati epel spremište i tek onda to učiniti

yum install libtommath

Ubuntu ne mora da uključuje dodatna spremišta, ali Ubuntu 16 i Ubuntu 18 instaliraju različite verzije paketa - libtommath0 i libtommath1, respektivno.

Firebird 3.0 traži tommath.so.0, a za Ubuntu 18 dodatno je potrebno kreirati vezu (symlink) od tommath.so.0 do tommath.so.1. Da biste to učinili, prvo morate pronaći tommath.so.1.

Traženi put u Ubuntu-u - /usr/lib/x86_64-linux-gnu/, ali druge distribucije zasnovane na Debianu mogu biti drugačije.

Drugi problem je vezan za činjenicu da do i uključujući Firebird 3.0.1, nije bilo lakog načina da se instaliraju dvije različite verzije servera. Ne razmatramo opciju “kompajliranje iz izvora sa potrebnim prefiksom” zbog njene relativne složenosti.

Za Firebird 3.0.2 i novije implementirano izgraditi sa --enable-binreloc i zasebna opcija instalatera (putanja -put).

Pod pretpostavkom da su tommath biblioteka i, ako je potrebno, simbolična veza za tommath.so.0 dodati sistemu, možete instalirati trenutnu (u vrijeme pisanja ovog teksta) Firebird 3.0.4 distribuciju u, na primjer, /opt /fb3:

./install.sh -path /opt/fb3

Nakon toga, možete zaustaviti Firebird sistemsku uslugu i započeti konverziju striminga.

Kada zaustavljate Firebird, imajte na umu da Firebid 2.5 procese u klasičnom načinu obično pokreće xinetd - tako da morate ili onemogućiti firebird servis za xinetd ili potpuno zaustaviti xinetd.

U firebird.conf za 3.0 na Linuxu, ne morate postavljati MaxUnflushed parametre (oni rade samo na Windows-u) i mijenjati Firebird 2.5 postavke.

U Linuxu, Firebird 2.5 lokalni (datotečni) pristup nije ekvivalentan ugrađenoj verziji pod Windowsom - 2.5 server će se pokrenuti u gbak procesu (bez mrežnog dijela), ali će se prava pristupa provjeravati u odnosu na korisničku bazu, što znači da biće potrebna ne samo prijava, već i lozinka:

export ISC_USER=username ISC_PASSWORD=password
/opt/firebird/bin/gbak -b … база25 stdout
|/opt/fb3/bin/gbak -c … stdin база30

Nakon uspješne konverzije, prvo morate deinstalirati "dodatni" Firebird 3.0, zatim "glavni" Firebird 2.5, a nakon toga izvršiti čistu instalaciju Firebirda 2.5 - i to najbolje iz običnog tar.gz instalatora, a ne preko repozitorijumi, jer. verzija u spremištima može zaostajati.

Također, nakon vraćanja baze podataka na Linux i ponovne instalacije, morate provjeriti da li je nova baza podataka u vlasništvu Firebird korisnika.

Ako to nije slučaj, onda će se to morati ispraviti.

chown firebird.firebird database

Rezultat

Osim uštede vremena i prostora na disku, streaming konverzija ima još jednu važnu prednost - konverzija baze podataka se vrši bez brisanja postojećeg Firebird 2.5, što uvelike pojednostavljuje vraćanje u prethodno stanje u slučaju neuspješne konverzije (najčešće zbog nedostatka prostora ili neočekivanog ponovnog pokretanja tokom migracije). proces).

Ušteda vremena je zbog činjenice da je "klasična" konverzija "vrijeme sigurnosne kopije" plus "vrijeme vraćanja". Oporavak se sastoji od dva dijela: čitanja podataka iz sigurnosne kopije i pravljenja indeksa.

Uz konverziju striminga, ukupno vrijeme se dobija kao "vrijeme sigurnosne kopije plus pet do deset posto" i "vrijeme izgradnje indeksa".

Konkretni rezultati zavise od strukture baze podataka, ali u prosjeku, vrijeme oporavka je otprilike dvostruko veće od vremena sigurnosne kopije. Stoga, ako uzmemo rezervno vrijeme kao jedinicu, onda je "klasična konverzija" tri jedinice vremena, a streaming dvije jedinice vremena. Povećanje TempCacheLimit pomaže dodatnom smanjenju vremena.

Općenito, streaming konverzija u praksi vam omogućava da uštedite 30-40% vremena alternativnog sigurnosnog kopiranja i vraćanja.

Imate pitanja?

Molimo napišite sva pitanja u komentarima ili ih pošaljite autoru metodologije i koautoru ovog članka - Vasiliju Sidorovu, iBase vodeći sistem inženjer, na bs na ibase ru.

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.

Koju verziju Firebird-a koristite?

  • Firebird 3.x

  • Firebird 2.5

  • Firebird 2.1

  • Firebird 2.0, 1.5 ili 1.0

Glasalo je 16 korisnika. 1 korisnik je bio uzdržan.

izvor: www.habr.com

Dodajte komentar