Streamovaná konverzia databáz Firebird 2.5 do formátu ODS12 (Firebird 3.0)

Každá verzia Firebirdu má svoju vlastnú verziu formátu štruktúry disku databázy O(n)D(isk)S(štruktúra). Až do verzie 2.5 vrátane mohol engine Firebird pracovať s ODS predchádzajúcich verzií, to znamená, že databázy zo starých verzií boli otvorené novou verziou a pracovali v režime kompatibility, ale engine Firebird 3.0 pracuje iba s databázami vo svojej vlastnej verzii ODS. 12.0.

Ak chcete migrovať na 3.0, databázu z 2.5 je potrebné skonvertovať do nového formátu pomocou zálohovania/obnovy. Samozrejme predpokladáme, že databáza bola predtým pripravená na konverziu – t.j. metadáta a dotazy boli skontrolované z hľadiska kompatibility s Firebird 3.0.

Ak budete postupovať podľa štandardného prístupu, znamená to, že musíte vytvoriť zálohu verzie 2.5, potom nainštalovať verziu 3.0 a vykonať obnovenie. Takýto postup je prijateľný, ak je dostatok času, no pri migrácii veľkých databáz, alebo pri migrácii niekoľkých desiatok databáz súčasne, keď sa kráti čas, môžete využiť streaming konverziu, ktorá je o 30-40% rýchlejšia. Ako presne to urobiť (pod Windows a pod Linuxom), si prečítajte pod rezom.

Všeobecnou myšlienkou je, že na urýchlenie vecí použijeme plynovod:

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

Gbak z 2.5 vygeneruje zálohu v lineárnom formáte a odošle ju stdout, ktorý okamžite vyberie gbak z 3.0 cez stdin a vytvorí novú databázu.

Je potrebné zorganizovať takýto kanál s lokálnou (súborovou) prístupovou metódou, pretože sieťový prístup (aj cez localhost) výrazne spomalí proces.

Podrobnosti pre Windows a Linux prejdeme nižšie.

Windows

V prípade Windowsu je najjednoduchším spôsobom vytvoriť úplne samostatnú zostavu Firebirdu. Za to berieme vložiť archív Firebird 2.5, premenujte fbemded.dll na fbclient.dll, pridajte pomôcky gbak.exe a (voliteľne) isql.exe z „bežného“ archívu 2.5.

Používa Firebird 3.0 jediná montáž a nevyžaduje žiadnu úpravu.

Najnižšia verzia (ktorá nevyžaduje inštaláciu runtime knižníc VS2008/VS2010 na cieľovom systéme) obsahuje nasledujúce súbory:

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

Skúsený administrátor si môže všimnúť, že 2.5 neobsahuje súbory intl/fbintl.dll a intl/fbintl.conf. To je pravda, keďže gbak nepoužíva znakovú sadu pripojenia a nekonvertuje údaje medzi znakovými sadami, ale na „prijímacej“ strane Firebird 3.0 sú tieto súbory potrebné pri vytváraní indexov.

Do firebird.conf Firebird 3.0 sa odporúča pridať:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Tiež je žiaduce nastaviť rôzne hodnoty IpcName pre 2.5 a 3.0.

Pri výbere hodnôt ostatných parametrov firebird.conf vychádzame z jednoduchej úvahy: v štádiu transfúzie dát gbak beží 2.5 v jednom procese a 3.0 v druhom, potom 2.5 ukončí a 3.0 sa začne stavať indexy.

Na urýchlenie fázy budovania indexu vo verzii 3.0 sa odporúča zväčšiť veľkosť parametra TempCacheLimit na ~40 % RAM (ak ide samozrejme o dedikovaný server).

Napríklad, ak má server 16 GB RAM, potom môžete dať

TempCacheLimit=6G

Samozrejme, túto hodnotu je možné nastaviť len pre 64-bitový Firebird 3, keďže žiadny 32-bitový proces nemôže alokovať viac ako 2 gigabajty pamäte.

Vo verzii 2.5 tento parameter nie je potrebné meniť – aj tak nemôže byť viac ako 2 gigabajty a nemá vplyv na rýchlosť pri zálohovaní.

Pred vykonaním operácie musíte skontrolovať, či je vyrovnávacia pamäť stránky v hlavičke databázy nastavená na 0 (príkaz gstat -h databasename, pozri riadok Page buffers).

Ak je vyrovnávacia pamäť nastavená explicitne v hlavičke databázy, potom prepíše hodnoty z firebird.conf (a databases.conf vo verzii 3.0) a v prípade neadekvátne veľkých hodnôt to môže viesť k nadmernej spotrebe pamäte a swapovaniu.

Potom skopírujte súbory do cieľového systému.

Konverzia sa vykoná po zastavení „systémovej“ služby Firebird 2.5 na príkazovom riadku so zvýšenými právami na lokálneho správcu (príklad):

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

Tento príklad používa „lomku“ v úvodzovkách (platný „štýl unixu“) a „klobúk“ (znak „^“) pred znakom nového riadku, čo je užitočné pri písaní dlhých príkazov. Vo Firebirde 2.5.8 sa objavila voľba -st(atus) a umožňuje vám zaznamenať údaje o čase spustenia procesu gbak (podrobnosti nájdete v dokumentácii).

Linux

V systéme Linux Firebird 3 závisí od knižnice tommath. Na CentOS (RHEL) sa táto knižnica nachádza v úložisku epel, na Ubuntu (Debian) v systémovom úložisku.

Pre CentOS musíte najprv pripojiť úložisko epel a až potom to urobiť

yum install libtommath

Ubuntu nemusí obsahovať ďalšie úložiská, ale Ubuntu 16 a Ubuntu 18 inštalujú rôzne verzie balíkov - libtommath0 a libtommath1.

Firebird 3.0 hľadá tommath.so.0 a pre Ubuntu 18 je navyše potrebné vytvoriť odkaz (symlink) z tommath.so.0 na tommath.so.1. Aby ste to dosiahli, musíte najprv nájsť tommath.so.1.

Hľadaná cesta v Ubuntu - /usr/lib/x86_64-linux-gnu/, ale iné distribúcie založené na Debiane sa môžu líšiť.

Druhý problém súvisí so skutočnosťou, že až po Firebird 3.0.1 vrátane, neexistoval jednoduchý spôsob inštalácie dvoch rôznych verzií servera. Neberieme do úvahy možnosť „kompilovať zo zdroja s požadovanou predponou“ kvôli jej relatívnej zložitosti.

Implementované pre Firebird 3.0.2 a vyššie zostaviť pomocou --enable-binreloc a samostatná voľba inštalačného programu (cesta -cesta).

Za predpokladu, že do systému bola pridaná knižnica tommath a v prípade potreby aj symbolický odkaz pre tommath.so.0, môžete aktuálnu (v čase písania tohto článku) distribúciu Firebird 3.0.4 nainštalovať napríklad do /opt /fb3:

./install.sh -path /opt/fb3

Potom môžete zastaviť systémovú službu Firebird a spustiť konverziu streamovania.

Pri zastavovaní Firebird majte na pamäti, že procesy Firebid 2.5 v klasickom režime zvyčajne spúšťa xinetd – takže musíte buď vypnúť službu firebird pre xinetd, alebo úplne zastaviť xinetd.

V firebird.conf pre 3.0 na Linuxe nie je potrebné nastavovať parametre MaxUnflushed (fungujú iba vo Windows) a meniť nastavenia Firebirdu 2.5.

V Linuxe nie je lokálny (súborový) prístup Firebird 2.5 ekvivalentný embeded verzii pod Windows - server 2.5 pobeží v procese gbak (bez sieťovej časti), ale prístupové práva budú kontrolované voči užívateľskej základni, čo znamená, že bude sa vyžadovať nielen prihlasovacie meno, ale aj heslo:

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

Po úspešnej konverzii musíte najskôr odinštalovať "dodatočný" Firebird 3.0, potom "hlavný" Firebird 2.5 a potom vykonať čistú inštaláciu Firebird 2.5 - a najlepšie z bežného inštalátora tar.gz, a nie cez úložiská, pretože. verzia v úložiskách môže zaostávať.

Po obnovení databázy v systéme Linux a preinštalovaní musíte tiež skontrolovať, či novú databázu vlastní používateľ firebird.

Ak tomu tak nie je, bude to potrebné opraviť.

chown firebird.firebird database

Celkový

Streamovacia konverzia má okrem úspory času a miesta na disku ešte jednu dôležitú výhodu – konverzia databázy prebieha bez odstránenia existujúceho Firebird 2.5, čo výrazne zjednodušuje rollback v prípade neúspešnej konverzie (najčastejšie z dôvodu nedostatku miesta alebo neočakávaného reštartu počas migrácie proces).

Úspora času je spôsobená tým, že „klasický“ prevod je „čas zálohy“ plus „čas obnovenia“. Obnova pozostáva z dvoch častí: čítanie údajov zo záložného súboru a vytvorenie indexu.

Pri konverzii streamingu sa celkový čas získa ako „čas zálohovania plus päť až desať percent“ a „čas zostavenia indexu“.

Konkrétne výsledky závisia od štruktúry databázy, ale v priemere je čas obnovy približne dvojnásobkom času zálohovania. Ak teda berieme čas zálohovania ako jednotku, potom „klasická konverzia“ sú tri jednotky času, streaming sú dve jednotky času. Zvýšenie TempCacheLimit pomáha ďalej skrátiť čas.

Vo všeobecnosti vám streamingová konverzia v praxi umožňuje ušetriť 30 – 40 % času alternatívneho zálohovania a obnovy.

Máte otázky?

Všetky otázky napíšte do komentárov, alebo ich pošlite autorovi metodiky a spoluautorovi tohto článku - Vasilij Sidorov, vedúci systémový inžinier iBase, v bs na ibase ru.

Do prieskumu sa môžu zapojiť iba registrovaní užívatelia. Prihlásiť saProsím.

Akú verziu Firebirdu používaš?

  • Firebird 3.x

  • Firebird 2.5

  • Firebird 2.1

  • Firebird 2.0, 1.5 alebo 1.0

Hlasovalo 16 užívateľov. 1 používateľ sa zdržal hlasovania.

Zdroj: hab.com

Pridať komentár