Firebird 2.5 andmebaaside voogesitus ODS12 vormingusse (Firebird 3.0)

Igal Firebirdi versioonil on oma andmebaasi kettastruktuuri vormingu versioon O(n)D(isk)S(truktuur). Kuni versioonini 2.5 (kaasa arvatud) võis Firebirdi mootor töötada eelmiste versioonide ODS-iga, st vanade versioonide andmebaasid avati uue versiooniga ja töötasid ühilduvusrežiimis, kuid Firebird 3.0 mootor töötab ainult oma ODS-i versioonis olevate andmebaasidega. 12.0.

3.0-le üleminekuks tuleb andmebaas 2.5-st varundamise/taastamise kaudu uude vormingusse teisendada. Loomulikult eeldame, et andmebaas oli eelnevalt konverteerimiseks ette valmistatud – s.t. metaandmete ja päringute ühilduvust Firebird 3.0-ga on kontrollitud.

Kui järgite standardset lähenemisviisi, tähendab see, et peate tegema varukoopia versioonist 2.5, seejärel installima 3.0 ja taastama. Selline protseduur on vastuvõetav, kui aega on piisavalt, kuid suurte andmebaaside migreerimisel või mitmekümne andmebaasi korraga migreerimisel, kui aeg hakkab otsa saama, saab kasutada voogedastuskonversiooni, mis on 30-40% kiirem. Kuidas seda täpselt teha (Windowsi ja Linuxi all), loe lõike alt.

Üldine idee on see, et me kasutame asjade kiirendamiseks torujuhet:

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

Gbak versioonist 2.5 genereerib lineaarses vormingus varukoopia ja saadab selle stdoutile, mis võtab kohe stdini kaudu üles gbak versioonist 3.0 ja loob uue andmebaasi.

Selline torujuhe on vaja korraldada kohaliku (faili) juurdepääsumeetodiga, kuna juurdepääs võrgule (isegi kohaliku hosti kaudu) aeglustab protsessi oluliselt.

Allpool käsitleme Windowsi ja Linuxi üksikasju.

Windows

Windowsi puhul on lihtsaim viis Firebirdi täiesti eraldiseisva järgu tegemine. Selleks võtame embed-archive Firebird 2.5, nimetage fbemded.dll ümber failiks fbclient.dll, lisage utiliidid gbak.exe ja (valikuliselt) isql.exe "tavalisest" 2.5 arhiivist.

Kasutab Firebird 3.0 üksik kokkupanek ja ei vaja muudatusi.

Kõige minimaalsem versioon (mis ei nõua VS2008/VS2010 käitusaja teekide installimist sihtsüsteemi) sisaldab järgmisi faile:

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

Kogenud administraator võib märgata, et versioon 2.5 ei sisalda faile intl/fbintl.dll ja intl/fbintl.conf. See on tõsi, kuna gbak ei kasuta ühenduse märgikomplekti ega teisenda andmeid märgikomplektide vahel, kuid Firebird 3.0 "vastuvõtu" poolel on need failid vajalikud indeksite loomisel.

Failis firebird.conf on Firebird 3.0 soovitatav lisada:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Samuti on soovitav määrata erinevad IpcName väärtused 2.5 ja 3.0 jaoks.

Firebird.conf muude parameetrite väärtuste valimisel lähtume lihtsast kaalutlusest: andmeülekande etapis töötab gbak ühes protsessis 2.5 ja teises 3.0, seejärel väljub 2.5 ja 3.0 hakkab ehitama. indeksid.

Indeksi koostamise faasi kiirendamiseks 3.0-s on soovitatav TempCacheLimit parameetri suurust suurendada ~40% RAM-i (kui see on muidugi spetsiaalne server).

Näiteks kui serveril on 16 GB muutmälu, siis võite panna

TempCacheLimit=6G

Loomulikult saab selle väärtuse määrata ainult 64-bitise Firebird 3 jaoks, kuna ükski 32-bitine protsess ei saa eraldada rohkem kui 2 gigabaiti mälu.

2.5-s ei pea seda parameetrit muutma - see ei saa niikuinii olla suurem kui 2 gigabaiti ja see ei mõjuta varundamise kiirust.

Enne toimingu sooritamist peate kontrollima, et lehe vahemälu andmebaasi päises oleks seatud väärtusele 0 (käsk gstat -h databasename, vaadake rida Lehekülje puhvrid).

Kui vahemälu on andmebaasi päises selgesõnaliselt määratud, siis alistab see faili firebird.conf (ja andmebaasis.conf 3.0 puhul) väärtused ning ebapiisavalt suurte väärtuste korral võib see kaasa tuua liigse mälukulu ja vahetuse.

Järgmisena kopeerige failid sihtsüsteemi.

Teisendamine viiakse läbi pärast teenuse "süsteemi" Firebird 2.5 peatamist käsureal kohaliku administraatori kõrgendatud õigustega (näide):

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

Selles näites kasutatakse jutumärkides "edasi kaldkriipsu" (kehtib "unixi stiilis") ja "müts" (märk "^") väldib reavahetusmärki, mis on kasulik pikkade käskude tippimisel. Valik -st(atus) ilmus versioonis Firebird 2.5.8 ja see võimaldab teil logida andmeid gbak-protsessi tööaja kohta (üksikasju vt dokumentatsioonist).

Linux

Linux Firebird 3 sõltub Tommathi raamatukogust. CentOS-is (RHEL) asub see teek epeli hoidlas, Ubuntu (Debian) puhul süsteemihoidlas.

CentOS-i jaoks peate esmalt ühendama epeli hoidla ja alles seejärel tegema

yum install libtommath

Ubuntu ei pea lisama täiendavaid hoidlaid, kuid Ubuntu 16 ja Ubuntu 18 installivad pakettide erinevad versioonid - vastavalt libtommath0 ja libtommath1.

Firebird 3.0 otsib faili tommath.so.0 ja Ubuntu 18 jaoks on lisaks vaja luua link (symlink) aadressilt tommath.so.0 kuni tommath.so.1. Selleks tuleb esmalt leida tommath.so.1.

Otsitud tee Ubuntus - /usr/lib/x86_64-linux-gnu/, kuid teised Debianil põhinevad distributsioonid võivad erineda.

Teine probleem on seotud asjaoluga, et kuni Firebird 3.0.1-ni (kaasa arvatud) polnud kahe erineva serveriversiooni installimiseks lihtsat viisi. Selle suhtelise keerukuse tõttu ei arvesta me võimalust „koostada allikast nõutava prefiksiga”.

Rakendatud on Firebird 3.0.2 ja uuemad versioonid ehitada koos --enable-binrelociga ja eraldi installeri suvand (-path path).

Eeldades, et süsteemile on lisatud tommath teek ja vajadusel sümlink tommath.so.0 jaoks, saate installida praeguse (selle kirjutamise ajal) Firebird 3.0.4 distributsiooni näiteks kausta /opt /fb3:

./install.sh -path /opt/fb3

Pärast seda saate Firebirdi süsteemiteenuse peatada ja alustada voogesituse teisendamist.

Firebirdi peatamisel pidage meeles, et klassikalises režiimis Firebid 2.5 protsessid käivitab tavaliselt xinetd – seega peate kas xinetd jaoks Firebirdi teenuse keelama või xinetd täielikult peatama.

Linuxi versioonis firebird.conf 3.0 jaoks ei pea te MaxUnflushedi parameetreid määrama (need töötavad ainult Windowsis) ega muutma Firebird 2.5 sätteid.

Linuxis ei ole Firebird 2.5 kohalik (faili) juurdepääs samaväärne Windowsi manustatud versiooniga - 2.5 server töötab gbak protsessis (ilma võrguosata), kuid juurdepääsuõigusi kontrollitakse kasutajabaasi suhtes, mis tähendab, et vaja pole mitte ainult sisselogimist, vaid ka parooli:

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

Pärast edukat teisendamist peate esmalt desinstallima "täiendava" Firebird 3.0, seejärel "peamise" Firebird 2.5 ja pärast seda teostama Firebird 2.5 puhas installi – ja see on kõige parem tavalisest tar.gz installerist, mitte läbi selle. hoidlad, sest. hoidlates olev versioon võib maha jääda.

Samuti peate pärast andmebaasi taastamist Linuxis ja uuesti installimist kontrollima, et uus andmebaas kuulub Firebirdi kasutajale.

Kui see nii ei ole, tuleb see parandada.

chown firebird.firebird database

Summaarne

Lisaks aja ja kettaruumi säästmisele on voogesituse teisendamisel veel üks oluline eelis – andmebaasi teisendamine toimub ilma olemasolevat Firebird 2.5 kustutamata, mis lihtsustab oluliselt tagasipööramist ebaõnnestunud teisenduse korral (enamasti ruumipuuduse või ootamatu taaskäivitamise tõttu migratsiooni ajal protsess).

Aja kokkuhoid tuleneb sellest, et "klassikaline" teisendus on "varundusaeg" pluss "taastamisaeg". Taastamine koosneb kahest osast: andmete lugemisest varukoopiafailist ja indeksi koostamisest.

Voogesituse teisendamise korral saadakse koguaeg kui "varundusaeg pluss viis kuni kümme protsenti" ja "indeksi koostamise aeg".

Konkreetsed tulemused sõltuvad andmebaasi struktuurist, kuid keskmiselt on taastumisaeg ligikaudu kaks korda pikem kui varundusaeg. Seega, kui võtta varuaega ühikuna, siis “klassikaline teisendamine” on kolm ajaühikut, voogesitus kaks ajaühikut. TempCacheLimiti suurendamine aitab aega veelgi vähendada.

Üldiselt võimaldab voogesituse teisendamine praktikas säästa 30–40% alternatiivse varundamise ja taastamise ajast.

Küsimused?

Palun kirjutage kõik küsimused kommentaaridesse või saatke need metoodika autorile ja käesoleva artikli kaasautorile - Vassili Sidorovile, iBase'i juhtivale süsteemiinsenerile, aadressil bs at ibase ru.

Küsitluses saavad osaleda ainult registreerunud kasutajad. Logi sissepalun.

Millist Firebirdi versiooni te kasutate?

  • Firebird 3.x

  • Tulelind 2.5

  • Tulelind 2.1

  • Firebird 2.0, 1.5 või 1.0

16 kasutajat hääletas. 1 kasutaja jäi erapooletuks.

Allikas: www.habr.com

Lisa kommentaar