Strömmande konvertering av Firebird 2.5-databaser till ODS12-formatet (Firebird 3.0)

Varje version av Firebird har sin egen version av diskstrukturformatet för databasen – O(n)D(isk)S(tructure). Fram till och med version 2.5 kunde Firebird-motorn arbeta med ODS frĂ„n tidigare versioner, vilket innebar att databaser frĂ„n gamla versioner öppnades av den nya versionen och kördes i kompatibilitetslĂ€ge, men Firebird 3.0 fungerar endast med databaser i sin egen ODS-version 12.0.

För att uppgradera till 3.0 mĂ„ste databasen frĂ„n 2.5 omvandlas till det nya formatet genom backup/restore. SjĂ€lvklart förutsĂ€tter vi att databasen har förberetts för konvertering – det vill sĂ€ga att metadata och förfrĂ„gningar har kontrollerats för kompatibilitet med Firebird 3.0.

Om man följer den standardmetoden, betyder det att man först sÀkrar pÄ version 2.5, dÀrefter installerar 3.0 och gör en ÄterstÀllning. En sÄdan procedur Àr acceptabel om det finns tillrÀckligt med tid, men vid migrering av stora databaser, eller vid samtidig migrering av flera dussin databaser, nÀr tiden Àr knapp, kan man anvÀnda strömkonvertering som Àr 30-40% snabbare. Hur detta görs (pÄ Windows och Linux) kan lÀsas nedan.

Den allmÀnna idén Àr att för att pÄskynda processen anvÀnda en pipeline:

gbak -b 
 database25 stdout | gbak -c 
 stdin database30

Gbak frÄn 2.5 genererar en backup i linjÀrt format och skickar den till stdout, som omedelbart fÄngas av gbak frÄn 3.0 via stdin och skapar en ny databas.

Det Àr nödvÀndigt att organisera en sÄdan pipeline med lokal (fil)Ätkomstmetod, eftersom nÀtverksÄtkomst (Àven via localhost) avsevÀrt saktar ner processen.

Nedan behandlar vi detaljerna för Windows och Linux.

Windows

För Windows Ă€r det enklast att göra en fullstĂ€ndigt fristĂ„ende version av Firebird. För detta tar vi embed-archive Firebird 2.5, döp om fbembedded.dll till fbclient.dll, lĂ€gg till gbak.exe frĂ„n "vanlig" 2.5-arkiv och (valfritt) – isql.exe.

Firebird 3.0 anvÀnder enhetlig distribution och krÀver ingen ytterligare anpassning.

Det mest minimi alternativet (som inte krÀver installation av runtime-bibliotek VS2008/VS2010 pÄ mÄlsystemet) innehÄller följande filer:

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

En erfaren administratör kan mÀrka att intelfilerna intl/fbintl.dll och intl/fbintl.conf inte ingÄr i version 2.5. Detta Àr verkligen fallet, eftersom gbak inte anvÀnder anslutningens teckenkodning och inte konverterar data mellan teckenkodningar, men pÄ "mottagarens" sida av Firebird 3.0 Àr dessa filer nödvÀndiga vid skapande av index.

Det rekommenderas att lÀgga till följande i firebird.conf för Firebird 3.0:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Det Àr ocksÄ lÀmpligt att stÀlla in olika vÀrden för IpcName för version 2.5 och 3.0.

Vid val av vÀrden för andra parametrar i firebird.conf utgÄr vi frÄn en enkel begrundan: vid överföring av data arbetar gbak i en process med version 2.5, och i en annan med version 3.0, sedan avslutar 2.5 sitt jobb, medan 3.0 börjar bygga index.

För att pÄskynda indexbyggnadsstadiet i 3.0 rekommenderas det att öka storleken pÄ TempCacheLimit-parametern till ~40% av RAM (om det förstÄs Àr en dedikerad server).

Till exempel, om servern har 16 GB RAM kan man stÀlla in

TempCacheLimit=6G

SjÀlvklart kan ett sÄdant vÀrde endast sÀttas pÄ 64-bitars Firebird 3, eftersom vilken 32-bitars process som helst inte kan allokera mer Àn 2 gigabyte minne.

För 2.5 behöver denna parameter inte Ă€ndras – den kan Ă€ndĂ„ inte vara mer Ă€n 2 gigabyte och pĂ„verkar inte hastigheten vid sĂ€kerhetskopiering.

Innan operationen utförs mÄste det kontrolleras att sidcache i databasens header Àr instÀlld pÄ 0 (kommandot gstat -h databasnamn, se raden Page buffers).

Om cachen anges tydligt i DB:s header, sÄ ÄsidosÀtter den vÀrdena frÄn firebird.conf (och databases.conf i 3.0), och i fallet med orealistiskt stora vÀrden kan det leda till överdriven minnesanvÀndning och swapping.

DÀrefter kopieras filerna till mÄlsystemet.

Konverteringen utförs efter att den "systemmessiga" tjÀnsten Firebird 2.5 har stoppats, i kommandoraden med lyftning av rÀttigheter till lokal administratör (exempel):

set ISC_USER=Ă€gare
"25/gbak" -z -b -g -v -st t -y 25.log databas25 stdout|^
"30/gbak" -z -c -v -st t -y 30.log stdin databas30

I detta exempel anvĂ€nds "rak sned" inom citat (tillĂ„ten "unix-style"), och "hatten" (symbolen "^") skyddar radbytet, vilket Ă€r praktiskt vid inmatning av lĂ„nga kommandon. Alternativet -st(atus) tillkom i Firebird 2.5.8 och gör det möjligt att registrera tidpunkten för processen gbak (detaljer – i dokumentationen).

Linux

PĂ„ Linux beror Firebird 3 pĂ„ biblioteket tommath. I CentOS (RHEL) finns detta bibliotek i epel-repositoriet, i Ubuntu (Debian) i – systemet.

För CentOS mÄste du först aktivera epel-förvaret och sedan köra

yum install libtommath

För Ubuntu behöver du inte aktivera nĂ„gra ytterligare förvar, men i Ubuntu 16 och Ubuntu 18 installeras olika versioner av paketen – libtommath0 och libtommath1, respektive.

Firebird 3.0 söker efter tommath.so.0 och för Ubuntu 18 krÀvs dessutom att en symbolisk lÀnk (symlink) skapas frÄn tommath.so.0 till tommath.so.1. För detta mÄste tommath.so.1 först hittas.

Den sökta sökvÀgen i Ubuntu Àr /usr/lib/x86_64-linux-gnu/, men i andra Debian-baserade distributioner kan det vara annorlunda.

Det andra problemet Àr kopplat till det faktum att fram till Firebird 3.0.1 fanns det inget enkelt sÀtt att installera tvÄ olika versioner av servern. Alternativet "kompilera frÄn kÀllkoden med rÀtt prefix" övervÀger vi inte pÄ grund av dess relativt stora arbetsinsats.

För Firebird 3.0.2 och senare har en kompilering med –enable-binreloc och en separat installationsval (-path vĂ€g) implementerats.

Om vi antar att biblioteket tommath och, om nödvÀndigt, symboliska lÀnkar för tommath.so.0 har lagts till i systemet, kan den aktuella (vid tidpunkten för denna artikels skrivande) distributionen av Firebird 3.0.4 installeras till exempel i /opt/fb3:

./install.sh -path /opt/fb3

Efter detta kan du stoppa systemtjÀnsten Firebird och starta den strömmade konverteringen.

Vid stopp av Firebird bör man ta hĂ€nsyn till att processerna för Firebird 2.5 i Classic-lĂ€get vanligtvis startas av xinetd – sĂ„ antingen mĂ„ste Firebird-tjĂ€nsten stĂ€ngas av för xinetd eller sĂ„ mĂ„ste xinetd stoppas helt.

I firebird.conf för 3.0 pÄ Linux behöver du inte ange MaxUnflushed-parametrarna (de fungerar endast pÄ Windows) och Àndra instÀllningarna för Firebird 2.5.

I Linux Ă€r lokal (fil) Ă„tkomst till Firebird 2.5 inte likvĂ€rdig med embedded-versionen pĂ„ Windows – server 2.5 kommer att arbeta i processen gbak (utan nĂ€tverksdel), men Ă„tkomstrĂ€ttigheterna kommer att kontrolleras av anvĂ€ndardatabasen, vilket innebĂ€r att bĂ„de anvĂ€ndarnamn och lösenord krĂ€vs:

export ISC_USER=username ISC_PASSWORD=password
/opt/firebird/bin/gbak -b 
 database25 stdout
|/opt/fb3/bin/gbak -c 
 stdin database30

Efter en lyckad konvertering behöver du först ta bort "ytterligare" Firebird 3.0, sedan "huvud" Firebird 2.5 och först dĂ€refter utföra en ren installation av Firebird 2.5 – helst via den vanliga installationsprogrammet tar.gz, inte genom förvar, eftersom versionen i förvaren kan vara förĂ„ldrad.

Dessutom, efter restaurering av databasen pÄ Linux och ominstallation, mÄste du kontrollera att den nya databasen har anvÀndaren firebird som Àgare.

Om sÄ inte Àr fallet mÄste detta ÄtgÀrdas

chown firebird.firebird database

Resultat

Förutom tids- och diskutrymmesbesparingar har den strömmande konverteringen en annan viktig fördel – konverteringen av databasen görs utan att den befintliga Firebird 2.5 tas bort, vilket tydligt förenklar Ă„terstĂ€llningen vid en misslyckad konvertering (oftast pĂ„ grund av brist pĂ„ utrymme eller en ovĂ€ntad omstart under migrationsprocessen).

Tidsbesparingen beror pĂ„ att "klassisk" konvertering innebĂ€r "backup-tid" plus "Ă„terstĂ€llningstid". ÅterstĂ€llningen bestĂ„r av tvĂ„ delar: att lĂ€sa data frĂ„n backup-filen och att bygga index.

Vid strömmande konvertering blir den totala tiden "backup-tid plus fem-tio procent" och "indexbyggandet".

De specifika resultaten beror pÄ databasens struktur, men i genomsnitt Àr ÄterstÀllningstiden ungefÀr dubbelt sÄ lÄng som backup-tiden. SÄ, om vi tar backup-tiden som en enhet, sÄ innebÀr "klassisk konvertering" tre enheter tid och strömmande konvertering tvÄ enheter tid. Att öka TempCacheLimit bidrar ocksÄ till att förkorta tiden.

Sammanfattningsvis möjliggör strömmande konvertering i praktiken en besparing pÄ 30-40% av tiden för sekventiell backup och restaurering.

FrÄgor?

VĂ€nligen skriv alla frĂ„gor i kommentarsfĂ€ltet eller skicka dem till metodens författare och medförfattare till denna artikel – Vasily Sidorov, ledande systemingenjör pĂ„ "iBase", pĂ„ adressen bs at ibase ru.

Endast registrerade anvÀndare kan delta i omröstningen. Logga in, tack.

Vilken version av Firebird anvÀnder du?

  • Firebird 3.x

  • Firebird 2.5

  • Firebird 2.1

  • Firebird 2.0, 1.5 eller 1.0

16 anvÀndare har röstat. 1 anvÀndare avstod.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster