Pag-stream ng conversion ng Firebird 2.5 database sa ODS12 format (Firebird 3.0)

Ang bawat bersyon ng Firebird ay may sariling bersyon ng format ng istraktura ng database ng disk, O(n)D(isk)S(tructure). Hanggang sa bersyon 2.5 inclusive, ang Firebird engine ay maaaring gumana sa ODS ng mga nakaraang bersyon, iyon ay, ang mga database mula sa mga lumang bersyon ay binuksan ng bagong bersyon at nagtrabaho sa compatibility mode, ngunit ang Firebird 3.0 engine ay gumagana lamang sa mga database sa sarili nitong bersyon ng ODS 12.0.

Upang lumipat sa 3.0, ang database mula sa 2.5 ay dapat na ma-convert sa bagong format sa pamamagitan ng backup/restore. Siyempre, ipinapalagay namin na ang database ay dati nang inihanda para sa conversion - i.e. ang metadata at mga query ay nasuri para sa pagiging tugma sa Firebird 3.0.

Kung susundin mo ang karaniwang diskarte, nangangahulugan ito na kailangan mong gumawa ng backup sa bersyon 2.5, pagkatapos ay i-install ang 3.0 at gumawa ng isang pagpapanumbalik. Ang ganitong pamamaraan ay katanggap-tanggap kung may sapat na oras, ngunit kapag nag-migrate ng malalaking database, o kapag nag-migrate ng ilang dosenang database nang sabay-sabay, kapag nauubos na ang oras, maaari mong gamitin ang streaming conversion, na 30-40% na mas mabilis. Paano eksaktong gawin ito (sa ilalim ng Windows at sa ilalim ng Linux), basahin sa ilalim ng hiwa.

Ang pangkalahatang ideya ay gagamit tayo ng pipeline para mapabilis ang mga bagay-bagay:

gbak -b … Π±Π°Π·Π°25 stdout | gbak -c … stdin Π±Π°Π·Π°30

Ang Gbak mula sa 2.5 ay bumubuo ng isang backup sa isang linear na format at ipinapadala ito sa stdout, na agad na kumukuha ng gbak mula sa 3.0 sa pamamagitan ng stdin at lumilikha ng isang bagong database.

Kinakailangang ayusin ang naturang pipeline na may lokal na (file) na paraan ng pag-access, dahil ang pag-access sa network (kahit sa pamamagitan ng localhost) ay makabuluhang magpapabagal sa proseso.

Tatalakayin namin ang mga detalye para sa Windows at Linux sa ibaba.

Windows

Sa kaso ng Windows, ang pinakamadaling paraan ay ang gumawa ng ganap na standalone na build ng Firebird. Para dito ay kinukuha namin embed-archive Firebird 2.5, palitan ang pangalan ng fbemded.dll sa fbclient.dll, magdagdag ng gbak.exe at (opsyonal) isql.exe utility mula sa β€œregular” 2.5 archive.

Gumagamit ang Firebird 3.0 iisang pagpupulong at hindi nangangailangan ng anumang pagbabago.

Ang pinakakaunting bersyon (na hindi nangangailangan ng pag-install ng VS2008/VS2010 runtime library sa target na system) ay naglalaman ng mga sumusunod na file:

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

Maaaring mapansin ng isang may karanasang administrator na hindi kasama sa 2.5 ang intl/fbintl.dll at intl/fbintl.conf na mga file. Ito ay totoo, dahil ang gbak ay hindi gumagamit ng isang koneksyon charset at hindi nagko-convert ng data sa pagitan ng mga charset, ngunit sa "pagtanggap" na bahagi ng Firebird 3.0, ang mga file na ito ay kinakailangan kapag gumagawa ng mga index.

Sa firebird.conf Inirerekomenda ng Firebird 3.0 na idagdag ang:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Gayundin, ito ay kanais-nais na magtakda ng iba't ibang mga halaga ng IpcName para sa 2.5 at 3.0.

Kapag pumipili ng mga halaga ng iba pang mga parameter ng firebird.conf, nagpapatuloy kami mula sa isang simpleng pagsasaalang-alang: sa yugto ng pagsasalin ng data, ang gbak ay tumatakbo ng 2.5 sa isang proseso, at 3.0 sa isa pa, pagkatapos ay 2.5 na paglabas, at ang 3.0 ay nagsisimulang bumuo mga index.

Upang pabilisin ang yugto ng pagbuo ng index sa 3.0, inirerekumenda na taasan ang laki ng TempCacheLimit parameter sa ~40% RAM (kung ito ay isang dedikadong server, siyempre).

Halimbawa, kung ang server ay may 16 GB ng RAM, pagkatapos ay maaari mong ilagay

TempCacheLimit=6G

Siyempre, ang halagang ito ay maaaring itakda lamang para sa 64-bit na Firebird 3, dahil ang anumang 32-bit na proseso ay hindi maaaring maglaan ng higit sa 2 gigabytes ng memorya.

Sa 2.5, ang parameter na ito ay hindi kailangang baguhin - hindi ito maaaring higit sa 2 gigabytes, at hindi ito nakakaapekto sa bilis sa panahon ng pag-backup.

Bago isagawa ang operasyon, kailangan mong suriin na ang cache ng pahina sa header ng database ay nakatakda sa 0 (command gstat -h databasename, tingnan ang linya ng Mga buffer ng Pahina).

Kung malinaw na itinakda ang cache sa header ng database, i-override nito ang mga value mula sa firebird.conf (at databases.conf sa 3.0), at sa kaso ng hindi sapat na malalaking halaga, maaari itong humantong sa labis na pagkonsumo ng memorya at pagpapalit.

Susunod, kopyahin ang mga file sa target na sistema.

Ang conversion ay isinasagawa pagkatapos ihinto ang "system" na serbisyo ng Firebird 2.5, sa command line na may mataas na karapatan sa lokal na administrator (halimbawa):

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

Gumagamit ang halimbawang ito ng "forward slash" sa mga quote (valid na "unix-style"), at isang "hat" (ang "^" character) ang lumalabas sa newline na character, na kapaki-pakinabang kapag nagta-type ng mahahabang command. Ang -st(atus) na opsyon ay lumabas sa Firebird 2.5.8 at pinapayagan kang mag-log ng data tungkol sa oras na tumatakbo ang proseso ng gbak (para sa mga detalye, tingnan ang dokumentasyon).

Linux

Sa Linux Firebird 3 ay depende sa tommath library. Sa CentOS (RHEL) ang library na ito ay matatagpuan sa epel repository, sa Ubuntu (Debian) sa system repository.

Para sa CentOS, kailangan mo munang ikonekta ang epel repository at pagkatapos lamang gawin

yum install libtommath

Hindi kailangang isama ng Ubuntu ang mga karagdagang repository, ngunit ang Ubuntu 16 at Ubuntu 18 ay nag-install ng iba't ibang bersyon ng mga pakete - libtommath0 at libtommath1, ayon sa pagkakabanggit.

Hinahanap ng Firebird 3.0 ang tommath.so.0 at para sa Ubuntu 18 kinakailangan din na gumawa ng link (symlink) mula tommath.so.0 hanggang tommath.so.1. Para magawa ito, kailangan mo munang hanapin ang tommath.so.1.

Hinanap na landas sa Ubuntu - /usr/lib/x86_64-linux-gnu/, ngunit maaaring iba ang iba pang mga distribusyon na nakabatay sa Debian.

Ang pangalawang problema ay nauugnay sa katotohanan na hanggang sa at kabilang ang Firebird 3.0.1, walang madaling paraan upang mag-install ng dalawang magkaibang bersyon ng server. Hindi namin isinasaalang-alang ang opsyon na "mag-compile mula sa pinagmulan na may kinakailangang prefix" dahil sa pagiging kumplikado nito.

Para sa Firebird 3.0.2 at mas mataas na ipinatupad bumuo gamit ang --enable-binreloc at isang hiwalay na opsyon sa installer (-path path).

Ipagpalagay na ang tommath library at, kung kinakailangan, isang symlink para sa tommath.so.0 ay naidagdag sa system, maaari mong i-install ang kasalukuyang (sa oras ng pagsulat na ito) Firebird 3.0.4 distribution sa, halimbawa, /opt /fb3:

./install.sh -path /opt/fb3

Pagkatapos nito, maaari mong ihinto ang serbisyo ng Firebird system at simulan ang pag-stream ng conversion.

Kapag huminto sa Firebird, tandaan na ang mga proseso ng Firebid 2.5 sa Classic mode ay karaniwang sinisimulan ng xinetd - kaya kailangan mong i-disable ang serbisyo ng firebird para sa xinetd o ganap na ihinto ang xinetd.

Sa firebird.conf para sa 3.0 sa Linux, hindi mo kailangang magtakda ng mga parameter ng MaxUnflushed (gumagana lang sila sa Windows) at baguhin ang mga setting ng Firebird 2.5.

Sa Linux, ang Firebird 2.5 local (file) access ay hindi katumbas ng naka-embed na bersyon sa ilalim ng Windows - ang 2.5 server ay tatakbo sa proseso ng gbak (nang walang bahagi ng network), ngunit ang mga karapatan sa pag-access ay susuriin laban sa user base, na nangangahulugan na hindi lamang isang pag-login, ngunit kailangan din ng isang password:

export ISC_USER=username ISC_PASSWORD=password
/opt/firebird/bin/gbak -b … Π±Π°Π·Π°25 stdout
|/opt/fb3/bin/gbak -c … stdin Π±Π°Π·Π°30

Pagkatapos ng matagumpay na conversion, dapat mo munang alisin ang "karagdagang" Firebird 3.0, pagkatapos ay ang "pangunahing" Firebird 2.5, at pagkatapos nito ay magsagawa ng malinis na pag-install ng Firebird 2.5 - pinakamaganda sa lahat mula sa karaniwang installer ng tar.gz, at hindi sa pamamagitan ng mga repositoryo, kasi Maaaring ma-lag ang bersyon sa mga repositoryo.

Gayundin, pagkatapos ibalik ang database sa Linux at muling i-install, kailangan mong suriin na ang bagong database ay pagmamay-ari ng gumagamit ng firebird.

Kung hindi ito ang kaso, kakailanganin itong itama.

chown firebird.firebird database

Kabuuan

Bilang karagdagan sa pagtitipid ng oras at espasyo sa disk, ang streaming conversion ay may isa pang mahalagang bentahe - ang conversion ng database ay ginagawa nang hindi tinatanggal ang umiiral na Firebird 2.5, na lubos na pinapasimple ang rollback sa kaso ng hindi matagumpay na conversion (madalas dahil sa kakulangan ng espasyo o hindi inaasahang pag-reboot sa panahon ng paglipat. proseso).

Ang pagtitipid ng oras ay dahil sa katotohanan na ang "classic" na conversion ay "backup time" at "restore time". Ang pagbawi ay binubuo ng dalawang bahagi: pagbabasa ng data mula sa isang backup na file at pagbuo ng isang index.

Sa streaming na conversion, ang kabuuang oras ay nakukuha bilang "backup time plus lima hanggang sampung porsyento" at "index building time."

Ang mga partikular na resulta ay nakasalalay sa istraktura ng database, ngunit sa karaniwan, ang oras ng pagbawi ay humigit-kumulang dalawang beses sa oras ng pag-backup. Samakatuwid, kung kukuha tayo ng backup na oras bilang isang yunit, kung gayon ang "classic na conversion" ay tatlong yunit ng oras, ang streaming ay dalawang yunit ng oras. Ang pagtaas ng TempCacheLimit ay nakakatulong upang higit pang mabawasan ang oras.

Sa pangkalahatan, nagbibigay-daan sa iyo ang streaming conversion sa pagsasanay na makatipid ng 30-40% ng oras ng kahaliling pag-backup at pagpapanumbalik.

Mga katanungan?

Mangyaring isulat ang lahat ng mga tanong sa mga komento, o ipadala ang mga ito sa may-akda ng pamamaraan at kapwa may-akda ng artikulong ito - Vasily Sidorov, iBase Leading System Engineer, sa bs at ibase ru.

Ang mga rehistradong user lamang ang maaaring lumahok sa survey. Mag-sign in, pakiusap

Anong bersyon ng Firebird ang ginagamit mo?

  • Firebird 3.x

  • Firebird 2.5

  • Firebird 2.1

  • Firebird 2.0, 1.5 o 1.0

16 na user ang bumoto. 1 user ang umiwas.

Pinagmulan: www.habr.com

Magdagdag ng komento