Firebird 2.5 duomenų bazių srautinis konvertavimas į ODS12 formatą (Firebird 3.0)

Kiekviena Firebird versija turi savo duomenų bazės disko struktūros formato versiją O(n)D(isk)S(struktūra). Iki 2.5 versijos imtinai „Firebird“ variklis galėjo dirbti su ankstesnių versijų ODS, tai yra, senų versijų duomenų bazės buvo atidarytos nauja versija ir veikė suderinamumo režimu, tačiau „Firebird 3.0“ variklis veikia tik su savo ODS versijos duomenų bazėmis. 12.0.

Norint pereiti į 3.0, duomenų bazė iš 2.5 turi būti konvertuota į naują formatą naudojant atsarginę kopiją / atkūrimą. Žinoma, darome prielaidą, kad duomenų bazė anksčiau buvo paruošta konvertavimui – t.y. buvo patikrintas metaduomenų ir užklausų suderinamumas su Firebird 3.0.

Jei laikotės standartinio metodo, tai reiškia, kad turite sukurti atsarginę kopiją 2.5 versijoje, tada įdiegti 3.0 ir atkurti. Tokia procedūra priimtina, jei yra pakankamai laiko, tačiau migruojant dideles duomenų bazes arba vienu metu migruojant kelias dešimtis duomenų bazių, kai baigiasi laikas, galima naudoti srautinio perdavimo konversiją, kuri yra 30-40% greitesnė. Kaip tiksliai tai padaryti (naudojant „Windows“ ir „Linux“), skaitykite po išpjova.

Bendra idėja yra ta, kad mes naudosime dujotiekį, kad pagreitintume:

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

Gbak iš 2.5 sukuria atsarginę kopiją linijiniu formatu ir siunčia ją į stdout, kuri iš karto paima gbak iš 3.0 per stdin ir sukuria naują duomenų bazę.

Būtina organizuoti tokį dujotiekį vietinės (failo) prieigos metodu, nes prieiga prie tinklo (net per localhost) žymiai sulėtins procesą.

Toliau apžvelgsime išsamią „Windows“ ir „Linux“ informaciją.

Windows

„Windows“ atveju lengviausias būdas yra sukurti visiškai atskirą „Firebird“ versiją. Tam mes imamės įterpti-archyvas Firebird 2.5, pervardykite fbemded.dll į fbclient.dll, pridėkite gbak.exe ir (pasirinktinai) isql.exe paslaugų iš „įprasto“ 2.5 archyvo.

„Firebird 3.0“ naudojimas vienas surinkimas ir nereikalauja jokių modifikacijų.

Minimaliausioje versijoje (kuriai nereikia įdiegti VS2008/VS2010 vykdymo laiko bibliotekų tikslinėje sistemoje) yra šie failai:

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

Patyręs administratorius gali pastebėti, kad 2.5 neapima failų intl/fbintl.dll ir intl/fbintl.conf. Tai tiesa, kadangi gbak nenaudoja ryšio simbolių rinkinio ir nekonvertuoja duomenų tarp simbolių rinkinių, tačiau „Firebird 3.0“ „gavimo“ pusėje šie failai būtini kuriant indeksus.

Firebird.conf Firebird 3.0 rekomenduojama pridėti:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Be to, pageidautina nustatyti skirtingas IpcName reikšmes 2.5 ir 3.0.

Renkantis kitų firebird.conf parametrų reikšmes, vadovaujamės paprastu svarstymu: duomenų perdavimo etape gbak paleidžia 2.5 viename procese, o 3.0 kitame, tada išeina 2.5, o 3.0 pradeda kurti indeksai.

Norint paspartinti indekso kūrimo fazę 3.0 versijoje, rekomenduojama padidinti TempCacheLimit parametro dydį iki ~40% RAM (jei tai yra dedikuotas serveris, žinoma).

Pavyzdžiui, jei serveryje yra 16 GB RAM, galite įdėti

TempCacheLimit=6G

Žinoma, šią reikšmę galima nustatyti tik 64 bitų Firebird 3, nes bet kuris 32 bitų procesas negali skirti daugiau nei 2 gigabaitus atminties.

2.5 versijoje šio parametro keisti nereikia – jis vis tiek negali būti didesnis nei 2 gigabaitai ir tai neturi įtakos greičiui kuriant atsarginę kopiją.

Prieš atlikdami operaciją, turite patikrinti, ar puslapio talpykla duomenų bazės antraštėje nustatyta į 0 (komandą gstat -h databasename, žr. eilutę Puslapio buferiai).

Jei talpykla yra aiškiai nustatyta duomenų bazės antraštėje, ji nepaiso reikšmių iš firebird.conf (ir duomenų bazės.conf 3.0 versijoje), o esant nepakankamai didelėms reikšmėms, tai gali sukelti pernelyg didelį atminties suvartojimą ir apsikeitimą.

Tada nukopijuokite failus į tikslinę sistemą.

Konvertavimas atliekamas sustabdžius „sistemos“ Firebird 2.5 paslaugą, komandų eilutėje su padidintomis vietinio administratoriaus teisėmis (pavyzdys):

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

Šiame pavyzdyje kabutėse naudojamas pasvirasis brūkšnys (galioja "unix" stilius), o "skrybėlė" (simbolis "^") pašalina naujos eilutės simbolį, o tai naudinga rašant ilgas komandas. Parinktis -st(atus) atsirado Firebird 2.5.8 ir leidžia registruoti duomenis apie laiką, kai buvo vykdomas gbak procesas (daugiau informacijos ieškokite dokumentacijoje).

Linux

Linux Firebird 3 priklauso nuo tommath bibliotekos. „CentOS“ (RHEL) ši biblioteka yra „epel“ saugykloje, „Ubuntu“ („Debian“) – sistemos saugykloje.

Jei naudojate CentOS, pirmiausia turite prijungti „epel“ saugyklą ir tik tada tai padaryti

yum install libtommath

Ubuntu nereikia įtraukti papildomų saugyklų, tačiau Ubuntu 16 ir Ubuntu 18 įdiegia skirtingas paketų versijas – atitinkamai libtommath0 ir libtommath1.

Firebird 3.0 ieško tommath.so.0, o Ubuntu 18 papildomai reikalaujama sukurti nuorodą (symlink) iš tommath.so.0 į tommath.so.1. Norėdami tai padaryti, pirmiausia turite rasti tommath.so.1.

Ieškotas kelias Ubuntu - /usr/lib/x86_64-linux-gnu/, tačiau kiti „Debian“ pagrindu sukurti platinimai gali skirtis.

Antroji problema susijusi su tuo, kad iki Firebird 3.0.1 imtinai nebuvo lengvas būdas įdiegti dvi skirtingas serverio versijas. Mes nesvarstome parinkties „sudaryti iš šaltinio su reikiamu priešdėliu“ dėl jos santykinio sudėtingumo.

Įdiegta Firebird 3.0.2 ir naujesnė versija sukurti naudojant --enable-binreloc ir atskira diegimo parinktis (-kelio kelias).

Darant prielaidą, kad tommath biblioteka ir, jei reikia, tommath.so.0 simbolinė nuoroda buvo įtraukta į sistemą, galite įdiegti dabartinį (šio rašymo metu) Firebird 3.0.4 platinimą, pavyzdžiui, /opt. /fb3:

./install.sh -path /opt/fb3

Po to galite sustabdyti „Firebird“ sistemos paslaugą ir pradėti srautinio perdavimo konvertavimą.

Stabdydami „Firebird“, atminkite, kad „Firebid 2.5“ procesus klasikiniu režimu paprastai paleidžia xinetd, todėl turite arba išjungti firebird paslaugą, skirtą xinetd, arba visiškai sustabdyti xinetd.

„Firebird.conf“, skirta 3.0 „Linux“, nereikia nustatyti „MaxUnflushed“ parametrų (jie veikia tik „Windows“ sistemoje) ir keisti „Firebird 2.5“ nustatymų.

Linux sistemoje Firebird 2.5 vietinė (failo) prieiga nėra lygiavertė įterptajai versijai sistemoje Windows – 2.5 serveris veiks gbak procese (be tinklo dalies), tačiau prieigos teisės bus tikrinamos pagal vartotojų bazę, o tai reiškia, kad reikės ne tik prisijungimo, bet ir slaptažodžio:

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

Po sėkmingo konvertavimo pirmiausia turite pašalinti „papildomą“ Firebird 3.0, tada „pagrindinį“ Firebird 2.5, o po to atlikti švarų Firebird 2.5 diegimą – ir tai geriausia naudojant įprastą tar.gz diegimo programą, o ne per saugyklos, nes. versija saugyklose gali atsilikti.

Be to, atkūrę duomenų bazę Linux sistemoje ir iš naujo įdiegę, turite patikrinti, ar nauja duomenų bazė priklauso Firebird vartotojui.

Jei taip nėra, tai reikės ištaisyti.

chown firebird.firebird database

Visas

Be laiko ir vietos diske taupymo, srautinio perdavimo konvertavimas turi dar vieną svarbų pranašumą – duomenų bazės konvertavimas atliekamas neištrinant esamos Firebird 2.5, o tai labai supaprastina atšaukimą nesėkmingo konvertavimo atveju (dažniausiai dėl vietos trūkumo arba netikėto perkrovimo perkėlimo metu procesas).

Laiko taupymas yra dėl to, kad „klasikinis“ konvertavimas yra „atsarginis laikas“ ir „atkūrimo laikas“. Atkūrimas susideda iš dviejų dalių: duomenų nuskaitymo iš atsarginės kopijos failo ir indekso kūrimo.

Konvertuojant srautu, bendras laikas gaunamas kaip „atsarginės kopijos kūrimo laikas plius nuo penkių iki dešimties procentų“ ir „indekso kūrimo laikas“.

Konkretūs rezultatai priklauso nuo duomenų bazės struktūros, tačiau vidutiniškai atkūrimo laikas yra maždaug du kartus didesnis už atsarginės kopijos kūrimo laiką. Todėl, jei atsarginį laiką imame kaip vienetą, tada „klasikinis konvertavimas“ yra trys laiko vienetai, srautas yra du laiko vienetai. TempCacheLimit padidinimas padeda dar labiau sumažinti laiką.

Apskritai, srautinio perdavimo konvertavimas praktiškai leidžia sutaupyti 30–40% alternatyvaus atsarginės kopijos kūrimo ir atkūrimo laiko.

Turite klausimų?

Visus klausimus rašykite komentaruose arba siųskite metodologijos autoriui ir šio straipsnio bendraautoriui - Vasilijui Sidorovui, iBase vadovaujančiam sistemos inžinieriui, adresu bs at ibase ru.

Apklausoje gali dalyvauti tik registruoti vartotojai. Prisijungti, Prašau.

Kokią Firebird versiją naudojate?

  • Firebird 3.x

  • Ugnies paukštis 2.5

  • Ugnies paukštis 2.1

  • Firebird 2.0, 1.5 arba 1.0

Balsavo 16 vartotojai. 1 vartotojas susilaikė.

Šaltinis: www.habr.com

Добавить комментарий