Ădo version i Firebird ka versionin e tij tĂ« formatit tĂ« strukturave tĂ« diskut tĂ« bazĂ«s sĂ« tĂ« dhĂ«nave â O(n)D(isk)S(tructure). Deri nĂ« versionin 2.5 pĂ«rfshirĂ«, motorri Firebird mund tĂ« punonte me ODS tĂ« versioneve tĂ« mĂ«parshme, domethĂ«nĂ«, bazat nga versionet e vjetra hapeshin nga versioni i ri dhe punonin nĂ« modin e kompatibilitetit, por motorri Firebird 3.0 punon vetĂ«m me DB nĂ« versionin e tij ODS 12.0.
Për të kaluar në 3.0, baza e të dhënave nga 2.5 duhet të konvertohet në formatin e ri përmes backup/restore. Sigurisht, ne supozojmë se DB është përgatitur paraprakisht për konvertimin - dmth. metadatet dhe pyetjet janë kontrolluar për kompatibilitet me Firebird 3.0.
Nëse ndjekim qasjen standarde, kjo do të thotë se duhet të bëhet një backup në versionin 2.5, pastaj të instalojmë 3.0 dhe të kryejmë një restaurim. Kjo procedurë është e pranueshme nëse ka mjaft kohë, por gjatë migrimit të bazave të mëdha të të dhënave, ose gjatë migrimit të disa dhjetëra DB-ve njëkohësisht, kur koha është e kufizuar, mund të përdoret konvertimi në rrjedhë, i cili është 30-40% më i shpejtë. Si të bëhet kjo (në Windows dhe Linux), lexoni më poshtë.
Ideja e përgjithshme është se për të acceleruar, ne do të përdorim një pipeline:
gbak -b ⊠baza25 stdout | gbak -c ⊠stdin baza30Gbak nga 2.5 gjeneron një backup në formatin linear dhe e dërgon atë në stdout, i cili dhembje nga stdin merr direkt gbak nga 3.0 dhe krijon një DB të re.
Organizimi i këtij pipeline duhet të bëhet detyrimisht me metodën lokale (file access), sepse qasja në rrjet (edhe përmes localhost) do ta ngadalësojë dukshëm procesin.
Më poshtë shqyrtojmë detajet për Windows dhe Linux.
Windows
NĂ« rastin e Windows, mĂ« e thjeshtĂ« Ă«shtĂ« tĂ« bĂ«sh njĂ« ndĂ«rtim tĂ« plotĂ« autonom tĂ« Firebird. PĂ«r kĂ«tĂ«, marrim , e riemĂ«rojmĂ« fbemded.dll nĂ« fbclient.dll, shtojmĂ« nga arkivi âi zakonshĂ«mâ 2.5 utilitetet gbak.exe dhe (jo domosdoshmĂ«risht) - isql.exe.
Firebird 3.0 përdor dhe nuk kërkon asnjë përmirësim.
Varianti minimal (pa nevojën për të instaluar bibliotekat runtime të VS2008/VS2010 në sistemin e synuar) përmban skedarët e mëposhtëm:
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.dllNjĂ« administrator i stĂ«rvitur mund tĂ« vĂ«rejĂ« se nĂ« 2.5 nuk janĂ« pĂ«rfshirĂ« skedarĂ«t intl/fbintl.dll dhe intl/fbintl.conf. Kjo Ă«shtĂ« e vĂ«rtetĂ«, pasi gbak nuk pĂ«rdor charset-in e lidhjes dhe nuk konverton tĂ« dhĂ«nat midis charset-eve, por nĂ« anĂ«n e âpranimitâ Firebird 3.0 kĂ«ta skedarĂ« janĂ« tĂ« nevojshĂ«m gjatĂ« krijimit tĂ« indekseve.
Në firebird.conf Firebird 3.0 rekomandohet të shtohet:
MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1Po ashtu, është e preferueshme të vendosni edhe një vlerë të ndryshme të IpcName për 2.5 dhe 3.0.
Kur zgjidhim vlerat e parametrave tĂ« tjerĂ« nĂ« firebird.conf, ne nxjerrim nga njĂ« logjikĂ« tĂ« thjeshtĂ«: nĂ« fazĂ«n e kalimit tĂ« tĂ« dhĂ«nave nĂ« njĂ« proces gbak punon 2.5, ndĂ«rsa nĂ« tjetrin â 3.0, pastaj 2.5 pĂ«rfundon punĂ«n, ndĂ«rsa 3.0 fillon ndĂ«rtimin e indekseve.
Për të acceleruar fazën e ndërtimit të indekseve në 3.0, rekomandohet të rritet madhësia e parametrave TempCacheLimit deri në ~40% RAM (nëse ky është një server i dedikuar, natyrisht).
Për shembull, nëse serveri ka 16 GB RAM, atëherë mund të vendoset
TempCacheLimit=6GSigurisht, një vlerë e tillë mund të vendoset vetëm tek Firebird 3 64-bit, pasi çdo proces 32-bit nuk mund të alokojë më shumë se 2 gigabajt memorie.
Në 2.5 nuk është e nevojshme të ndryshohet ky parameter - ai gjithashtu nuk mund të jetë më shumë se 2 gigabajt dhe nuk ka ndikim në shpejtësinë gjatë backup-it.
Para se të kryhet operacioni, duhet të kontrolloni që cache-i i faqeve në header-in e databazës të jetë vendosur në 0 (komanda gstat -h databasename, shihni rreshtin Page buffers).
Nëse cache-i është caktuar qartë në header-in e DB, atëherë ai e mbulon vlerën e firebird.conf (dhe databases.conf në 3.0), dhe në rastin e vlerave të papërshtatshme të mëdha, mund të çojë në konsum të tepruar të memories dhe dalje në swap.
Më pas, kopjojmë skedarët në sistemin e synuar.
Konvertimi bëhet pas ndalimit të shërbimit 'sistemor' Firebird 2.5, në terminalin e komandave me privilegje të larta deri në administratorin lokal (shembuj):
set ISC_USER=gazmend
"25/gbak" -z -b -g -v -st t -y 25.log baza25 stdout|^
"30/gbak" -z -c -v -st t -y 30.log stdin baza30Në këtë shembull përdoret 'shigjeta e drejtpërdrejtë' në thonjëza (e lejuar 'unix-style'), ndërsa 'kapaku' (simboli '^') e escapeton simbolin e kthimit të linjës, që është e përshtatshme gjatë shkruarjes së komandave të gjata. Opsioni -st(atus) u shfaq në Firebird 2.5.8 dhe lejon të regjistrohen në protokoll të dhënat për kohëzgjatjen e procesit gbak (detajet - në dokumentacion).
Linux
NĂ« Linux Firebird 3 varfĂ«rohet nga biblioteka tommath. NĂ« CentOS (RHEL) kjo bibliotekĂ« gjendet nĂ« repo-n e epel, nĂ« Ubuntu (Debian) nĂ« â sistemike.
Për CentOS, së pari duhet të lidhni repo-n e epel dhe pastaj të bëni
yum install libtommathUbuntu nuk ka nevojĂ« tĂ« lidhen depozita shtesĂ«, por nĂ« Ubuntu 16 dhe nĂ« Ubuntu 18 instalohen versione tĂ« ndryshme tĂ« pakove â libtommath0 dhe libtommath1, pĂ«rkatĂ«sisht.
Firebird 3.0 kërkon tommath.so.0 dhe për Ubuntu 18 nevojitet gjithashtu të krijohet një lidhje (symlink) nga tommath.so.0 në tommath.so.1. Për këtë, së pari duhet të gjendet tommath.so.1.
Rruga e kërkuar në Ubuntu është /usr/lib/x86_64-linux-gnu/, por në distribucione të tjera të bazuara në Debian mund të jetë ndryshe.
Problemi i dytë është se deri në Firebird 3.0.1, përfshirë, nuk kishte një mënyrë të thjeshtë për të instaluar dy versione të ndryshme të serverit. Opcioni "kompilo nga burimet me prefiksin e nevojshëm" nuk po shqyrtohet për shkak të punës së tij relative të rëndë.
Për Firebird 3.0.2 dhe më lart është realizuar dhe një opsion të veçantë të instaluesit (-path rruga).
Duke supozuar se biblioteka tommath dhe, nëse është e nevojshme, lidhja për tommath.so.0 janë shtuar në sistem, mund të instalohet distribucioni aktual (në momentin e shkruarjes së këtij artikulli) Firebird 3.0.4 në, p.sh., /opt/fb3:
./install.sh -path /opt/fb3Pas kësaj, mund të ndalet shërbimi sistemor Firebird dhe të fillohet konvertimi në rrjedhë.
Kur ndalohet Firebird, duhet tĂ« merret parasysh se proceset Firebid 2.5 nĂ« modin Classic zakonisht aktivizohen nga xinetd â prandaj, duhet ose tĂ« ndalohet shĂ«rbimi firebird pĂ«r xinetd ose tĂ« ndalohet tĂ«rĂ«sisht xinetd.
Në firebird.conf për 3.0 në Linux nuk është nevojë të caktohen parametrat MaxUnflushed (ato funksionojnë vetëm në Windows) dhe të ndryshohen cilësimet e Firebird 2.5.
NĂ« Linux, akses lokal (file) i Firebird 2.5 nuk Ă«shtĂ« ekuivalent me variantin embedded nĂ«n Windows â serveri 2.5 do tĂ« funksionojĂ« nĂ« procesin gbak (pa pjesĂ«n rrjetore), por tĂ« drejtat e aksesit do tĂ« verifikohen pĂ«rmes bazĂ«s sĂ« pĂ«rdoruesve, dhe kĂ«shtu do tĂ« nevojitet jo vetĂ«m njĂ« pĂ«rdorues, por edhe njĂ« fjalĂ«kalim:
export ISC_USER=username ISC_PASSWORD=password
/opt/firebird/bin/gbak -b ⊠baza25 stdout
|/opt/fb3/bin/gbak -c ⊠stdin baza30Pas konvertimit tĂ« suksesshĂ«m, duhet tĂ« hiqet fillimisht Firebird 3.0 "shtesĂ«", pastaj Firebird 2.5 "tĂ« rĂ«ndĂ«sishĂ«m" dhe vetĂ«m pas kĂ«saj tĂ« kryhet njĂ« instalim i pastĂ«r i Firebird 2.5 â dhe Ă«shtĂ« mĂ« mirĂ« tĂ« bĂ«het nga instaluesi standard tar.gz, dhe jo pĂ«rmes depozitave, sepse versioni nĂ« depozita mund tĂ« jetĂ« pas.
Gjithashtu, pas rikuperimit të DB në Linux dhe riinstalimit duhet të kontrolloni që DB e re të ketë pronar përdoruesin firebird.
Nëse nuk është kështu, atëherë do të nevojitet të korrigjohet
chown firebird.firebird databasePërfundimi
PĂ«rveç kursimit tĂ« kohĂ«s dhe hapĂ«sirĂ«s nĂ« disk, konvertimi nĂ« rrjedhĂ« ka njĂ« avantazh tĂ« rĂ«ndĂ«sishĂ«m tjetĂ«r â transformimi i bazĂ«s bĂ«het pa fshirĂ« Firebird 2.5 ekzistues, gjĂ« qĂ« e thjeshton ndjeshĂ«m rikthimin nĂ« rast tĂ« dĂ«shtimit tĂ« konvertimit (mĂ« shpesh â pĂ«r shkak tĂ« mungesĂ«s sĂ« hapĂ«sirĂ«s ose rikthimit tĂ« papritur gjatĂ« procesit tĂ« migrimit).
Kursimi i kohës është i lidhur me faktin se "konvertimi klasik" është "koha e backup-it" plus "koha e rikuperimit". Rikuperimi përbëhet nga dy pjesë: leximi i të dhënave nga skedari i backup-it dhe ndërtimi i indeksit.
Në konvertimin në rrjedhë, koha totale del si "koha e backup-it plus pesë deri në dhjetë përqind" dhe "koha e ndërtimit të indekseve".
Rezultatet specifike varen nga struktura e bazës, por mesatarisht, koha e rikuperimit është afërsisht e barabartë me dyfishin e kohës së backup-it. Prandaj, nëse e marrim si njësi kohën e backup-it, atëherë "konvertimi klasik" i shkon tre njësi kohë, kurse ai në rrjedhë dy njësi kohë. Shtesë, zvogëlimi i kohës ndihmon rritja e TempCacheLimit.
Në përgjithësi, konvertimi në rrjedhë në praktikë lejon kursimin e 30-40% të kohës së backup-it dhe rikuperimit sekuencial.
Pyetje?
Ju lutemi, dĂ«rgoni tĂ« gjitha pyetjet nĂ« komentet, ose dĂ«rgoni autorit tĂ« metodikĂ«s dhe bashkĂ«autorit tĂ« kĂ«tij artikulli â Vasili Sidori, inxhinierin kryesor tĂ« sistemeve nĂ« kompaninĂ« "iBase", nĂ« adresĂ«n bs at ibase ru.
Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. , ju lutemi.
Cilës versione të Firebird po i përdorni?
Firebird 3.x
Firebird 2.5
Firebird 2.1
Firebird 2.0, 1.5 ose 1.0
Të 16 përdoruesit votuan. 1 përdorues u abstenua.
Burimi: habr.com
