Konverżjoni Streaming tad-databases Firebird 2.5 għall-format ODS12 (Firebird 3.0)

Kull verżjoni ta' Firebird għandha l-verżjoni tagħha stess tal-format tal-istruttura tad-diska tad-database, O(n)D(isk)S(tructure). Sal-verżjoni 2.5 inkluża, il-magna Firebird setgħet taħdem ma 'ODS ta' verżjonijiet preċedenti, jiġifieri, databases minn verżjonijiet antiki nfetħu bil-verżjoni l-ġdida u ħadmu fil-mod ta 'kompatibilità, iżda l-magna Firebird 3.0 taħdem biss ma' databases fil-verżjoni ODS tagħha stess. 12.0.

Biex temigra għal 3.0, id-database minn 2.5 trid tiġi kkonvertita għall-format il-ġdid permezz ta 'backup/restore. Naturalment, nassumu li d-database kienet ippreparata qabel għall-konverżjoni - i.e. il-metadata u l-mistoqsijiet ġew iċċekkjati għall-kompatibilità ma' Firebird 3.0.

Jekk issegwi l-approċċ standard, dan ifisser li għandek bżonn tagħmel backup fuq il-verżjoni 2.5, imbagħad tinstalla 3.0 u tagħmel restawr. Proċedura bħal din hija aċċettabbli jekk ikun hemm biżżejjed ħin, iżda meta jemigraw databases kbar, jew meta jemigraw diversi tużżani databases fl-istess ħin, meta l-ħin ikun qed jispiċċa, tista 'tuża konverżjoni streaming, li hija 30-40% aktar mgħaġġla. Kif eżattament tagħmel dan (taħt Windows u taħt Linux), aqra taħt il-qatgħa.

L-idea ġenerali hija li se nużaw pipeline biex tħaffef l-affarijiet:

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

Gbak minn 2.5 jiġġenera backup f'format lineari u jibgħatha lil stdout, li immedjatament jiġbor gbak minn 3.0 permezz ta 'stdin u joħloq database ġdida.

Huwa meħtieġ li jiġi organizzat tali pipeline b'metodu ta 'aċċess lokali (fajl), peress li l-aċċess għan-netwerk (anke permezz ta' localhost) inaqqas b'mod sinifikanti l-proċess.

Aħna nimxu fuq id-dettalji għall-Windows u l-Linux hawn taħt.

twieqi

Fil-każ tal-Windows, l-eħfef mod huwa li tagħmel bini kompletament standalone ta 'Firebird. Għal dan nieħdu embed-archive Firebird 2.5, semmi mill-ġdid fbemded.dll għal fbclient.dll, żid gbak.exe u (b'għażla) isql.exe utilitajiet mill-arkivju 2.5 "regolari".

Firebird 3.0 juża assemblaġġ wieħed u ma teħtieġ l-ebda modifika.

L-aktar verżjoni minima (li ma teħtieġx installazzjoni tal-libreriji tar-runtime VS2008/VS2010 fuq is-sistema fil-mira) fiha l-fajls li ġejjin:

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

Amministratur b'esperjenza jista' jinnota li 2.5 ma jinkludix il-fajls intl/fbintl.dll u intl/fbintl.conf. Dan huwa minnu, peress li gbak ma jużax charset ta 'konnessjoni u ma jikkonvertix data bejn charsets, iżda fuq in-naħa "riċevitur" ta' Firebird 3.0, dawn il-fajls huma meħtieġa meta jinħolqu indiċi.

Fi firebird.conf Firebird 3.0 huwa rakkomandat li żżid:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Ukoll, huwa mixtieq li jiġu stabbiliti valuri IpcName differenti għal 2.5 u 3.0.

Meta nagħżlu l-valuri ta 'parametri oħra ta' firebird.conf, nipproċedu minn konsiderazzjoni sempliċi: fl-istadju tat-trasfużjoni tad-dejta, gbak jaħdem 2.5 fi proċess wieħed, u 3.0 fl-ieħor, imbagħad 2.5 ħruġ, u 3.0 jibda jibni indiċi.

Biex tħaffef il-fażi tal-bini tal-indiċi fi 3.0, huwa rakkomandat li jiżdied id-daqs tal-parametru TempCacheLimit għal ~ 40% RAM (jekk huwa server dedikat, ovvjament).

Per eżempju, jekk is-server għandu 16 GB ta 'RAM, allura tista' tpoġġi

TempCacheLimit=6G

Naturalment, dan il-valur jista 'jiġi stabbilit biss għal 64-bit Firebird 3, peress li kwalunkwe proċess ta' 32-bit ma jistax jalloka aktar minn 2 gigabytes ta 'memorja.

F'2.5, dan il-parametru m'għandux għalfejn jinbidel - xorta waħda ma jistax ikun aktar minn 2 gigabytes, u ma jaffettwax il-veloċità waqt il-backup.

Qabel ma twettaq l-operazzjoni, trid tiċċekkja li l-cache tal-paġna fl-intestatura tad-database hija ssettjata għal 0 (kmand gstat -h databasename, ara l-linja Page buffers).

Jekk il-cache tkun issettjata b'mod espliċitu fl-header tad-database, allura jegħleb il-valuri minn firebird.conf (u databases.conf f'3.0), u f'każ ta 'valuri kbar mhux adegwati, jista' jwassal għal konsum eċċessiv ta 'memorja u skambju.

Sussegwentement, kopja l-fajls fis-sistema fil-mira.

Il-konverżjoni titwettaq wara li twaqqaf is-servizz Firebird 2.5 "sistema", fuq il-linja tal-kmand bi drittijiet elevati lill-amministratur lokali (eżempju):

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

Dan l-eżempju juża "forward slash" fi kwotazzjonijiet (validu "unix-style"), u "kappell" (il-karattru "^") jaħrab mill-karattru newline, li huwa utli meta ttajpja kmandi twal. L-għażla -st(atus) dehret f'Firebird 2.5.8 u tippermettilek tilloggja data dwar il-ħin li kien qed jaħdem il-proċess gbak (għad-dettalji, ara d-dokumentazzjoni).

Linux

Fuq Linux Firebird 3 jiddependi fuq il-librerija tommath. Fuq CentOS (RHEL) din il-librerija tinsab fir-repożitorju epel, fuq Ubuntu (Debian) fir-repożitorju tas-sistema.

Għal CentOS, l-ewwel trid tikkonnettja r-repożitorju tal-epel u mbagħad tagħmel biss

yum install libtommath

Ubuntu m'għandux għalfejn jinkludi repożitorji addizzjonali, iżda Ubuntu 16 u Ubuntu 18 jinstallaw verżjonijiet differenti tal-pakketti - libtommath0 u libtommath1, rispettivament.

Firebird 3.0 ifittex tommath.so.0 u għal Ubuntu 18 huwa wkoll meħtieġ li jinħoloq link (symlink) minn tommath.so.0 għal tommath.so.1. Biex tagħmel dan, l-ewwel trid issib tommath.so.1.

Mogħdija mfittxija f'Ubuntu - /usr/lib/x86_64-linux-gnu/, iżda distribuzzjonijiet oħra bbażati fuq Debian jistgħu jkunu differenti.

It-tieni problema hija relatata mal-fatt li sa u inkluż Firebird 3.0.1, ma kien hemm l-ebda mod faċli biex jiġu installati żewġ verżjonijiet differenti tas-server. Aħna ma nqisux l-għażla "kompila mis-sors bil-prefiss meħtieġ" minħabba l-kumplessità relattiva tagħha.

Għal Firebird 3.0.2 u ogħla implimentati ibni b'--enable-binreloc u għażla separata tal-installatur (-path path).

Jekk wieħed jassumi li l-librerija tommath u, jekk meħtieġ, symlink għal tommath.so.0 ġew miżjuda mas-sistema, tista 'tinstalla d-distribuzzjoni kurrenti ta' Firebird 3.0.4, pereżempju, /opt. /fb3:

./install.sh -path /opt/fb3

Wara dan, tista 'twaqqaf is-servizz tas-sistema Firebird u tibda konverżjoni streaming.

Meta twaqqaf Firebird, żomm f'moħħok li l-proċessi Firebid 2.5 fil-modalità Classic normalment jinbdew minn xinetd - għalhekk għandek bżonn jew tiddiżattiva s-servizz firebird għal xinetd jew twaqqaf xinetd kompletament.

F'firebird.conf għal 3.0 fuq Linux, m'għandekx bżonn li tissettja l-parametri MaxUnflushed (jaħdmu biss fuq Windows) u tibdel is-settings ta 'Firebird 2.5.

Fil-Linux, aċċess lokali (fajl) ta 'Firebird 2.5 mhuwiex ekwivalenti għall-verżjoni inkorporata taħt Windows - is-server 2.5 se jaħdem fil-proċess gbak (mingħajr il-parti tan-netwerk), iżda d-drittijiet ta' aċċess se jiġu ċċekkjati mal-bażi tal-utent, li jfisser li mhux biss login, iżda wkoll password se tkun meħtieġa:

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

Wara konverżjoni b'suċċess, l-ewwel trid tneħħi l-Firebird 3.0 "addizzjonali", imbagħad il-Firebird 2.5 "prinċipali", u wara dan twettaq installazzjoni nadifa ta 'Firebird 2.5 - u huwa aħjar mill-installatur tar.gz regolari, u mhux permezz tal- repożitorji, għaliex. il-verżjoni fir-repożitorji tista' tibqa' lura.

Ukoll, wara li tirrestawra d-database fuq Linux u terġa 'tiinstalla, trid tiċċekkja li d-database l-ġdida hija proprjetà tal-utent firebird.

Jekk dan ma jkunx il-każ, allura jeħtieġ li jiġi kkoreġut.

chown firebird.firebird database

Total

Minbarra l-iffrankar tal-ħin u l-ispazju tad-diska, il-konverżjoni tal-istriming għandha vantaġġ ieħor importanti - il-konverżjoni tad-database ssir mingħajr ma tħassar il-Firebird 2.5 eżistenti, li jissimplifika bil-kbir rollback f'każ ta 'konverżjoni bla suċċess (l-aktar spiss minħabba nuqqas ta' spazju jew reboot mhux mistenni matul il-migrazzjoni proċess).

L-iffrankar tal-ħin huwa dovut għall-fatt li l-konverżjoni "klassika" hija "ħin ta 'backup" flimkien ma "ħin ta' restawr". L-irkupru jikkonsisti f'żewġ partijiet: qari tad-dejta minn fajl ta 'backup u bini ta' indiċi.

Bil-konverżjoni tal-istrimjar, il-ħin totali jinkiseb bħala "ħin ta 'backup flimkien ma' ħamsa sa għaxra fil-mija" u "ħin tal-bini tal-indiċi".

Riżultati speċifiċi jiddependu fuq l-istruttura tad-database, iżda bħala medja, il-ħin ta 'rkupru huwa bejn wieħed u ieħor id-doppju tal-ħin tal-backup. Għalhekk, jekk nieħdu l-ħin tal-backup bħala unità, allura "konverżjoni klassika" hija tliet unitajiet ta 'ħin, l-istrimjar huwa żewġ unitajiet ta' ħin. Iż-żieda ta' TempCacheLimit tgħin biex tnaqqas aktar iż-żmien.

B'mod ġenerali, konverżjoni streaming fil-prattika tippermetti li inti tiffranka 30-40% tal-ħin ta 'backup u restawr alternattiv.

Mistoqsijiet?

Jekk jogħġbok ikteb il-mistoqsijiet kollha fil-kummenti, jew ibgħathom lill-awtur tal-metodoloġija u l-ko-awtur ta 'dan l-artikolu - Vasily Sidorov, iBase Leading System Engineer, f'bs at ibase ru.

Utenti reġistrati biss jistgħu jipparteċipaw fl-istħarriġ. Idħol, ta 'xejn.

X'verżjoni ta' Firebird qed tuża?

  • Firebird 3.x

  • Għasafar tan-nar 2.5

  • Għasafar tan-nar 2.1

  • Firebird 2.0, 1.5 jew 1.0

Ivvutaw 16-il utent. utent 1 astjena.

Sors: www.habr.com

Żid kumment