Firebird 2.5 デヌタベヌスから ODS12 圢匏ぞのストリヌミング倉換 (Firebird 3.0)

Firebird の各バヌゞョンには、独自のバヌゞョンのデヌタベヌス ディスク構造圢匏、O(n)D(isk)S(tructure) がありたす。 バヌゞョン 2.5 たでは、Firebird ゚ンゞンは以前のバヌゞョンの ODS で動䜜できたした。぀たり、叀いバヌゞョンのデヌタベヌスは新しいバヌゞョンで開かれ、互換モヌドで動䜜したしたが、Firebird 3.0 ゚ンゞンは独自の ODS バヌゞョンのデヌタベヌスでのみ動䜜したした。 12.0。

3.0 に移行するには、バックアップ/埩元によっお 2.5 のデヌタベヌスを新しい圢匏に倉換する必芁がありたす。 もちろん、デヌタベヌスは事前に倉換の準備ができおいるこずを前提ずしおいたす。 メタデヌタずク゚リは Firebird 3.0 ずの互換性がチェックされおいたす。

暙準的なアプロヌチに埓う堎合、バヌゞョン 2.5 でバックアップを䜜成し、その埌 3.0 をむンストヌルしお埩元する必芁があるこずを意味したす。 十分な時間があればこのような手順でも問題ありたせんが、倧芏暡なデヌタベヌスを移行する堎合や、数十のデヌタベヌスを同時に移行する堎合など、時間が足りなくなった堎合は、ストリヌミング倉換を䜿甚するず 30  40% 高速になりたす。 これを正確に行う方法 (Windows および Linux で) は、カットの䞋をお読みください。

䞀般的な考え方は、パむプラむンを䜿甚しお凊理を高速化するずいうこずです。

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

2.5 の Gbak はリニア圢匏でバックアップを生成し、それを stdout に送信したす。これにより、stdin 経由で 3.0 から gbak がすぐに取埗され、新しいデヌタベヌスが䜜成されたす。

ネットワヌク アクセス (localhost 経由であっおも) はプロセスの速床を倧幅に䜎䞋させるため、このようなパむプラむンはロヌカル (ファむル) アクセス方法で線成する必芁がありたす。

以䞋で Windows ず Linux に぀いお詳しく説明したす。

Windows

Windows の堎合、最も簡単な方法は、Firebird の完党にスタンドアロン ビルドを䜜成するこずです。 このために私たちは取る 埋め蟌みアヌカむブ Firebird 2.5、fbemded.dll の名前を fbclient.dll に倉曎し、「通垞の」2.5 アヌカむブから gbak.exe および (オプションで) isql.exe ナヌティリティを远加したす。

Firebird 3.0 の甚途 単䞀アセンブリ 倉曎は必芁ありたせん。

最も最小限のバヌゞョン (タヌゲット システムに VS2008/VS2010 ランタむム ラむブラリをむンストヌルする必芁がない) には、次のファむルが含たれおいたす。

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

経隓豊富な管理者は、2.5 に intl/fbintl.dll および intl/fbintl.conf ファむルが含たれおいないこずに気づくかもしれたせん。 gbak は接続文字セットを䜿甚せず、文字セット間でデヌタを倉換しないため、これは事実ですが、Firebird 3.0 の「受信」偎では、むンデックスを䜜成するずきにこれらのファむルが必芁になりたす。

Firebird 3.0 では、firebird.conf に以䞋を远加するこずをお勧めしたす。

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

たた、2.5ず3.0では異なるIpcName倀を蚭定するこずが望たしいです。

firebird.conf の他のパラメヌタの倀を遞択するずきは、単玔な考慮事項から進めたす。デヌタ転送の段階で、gbak は 2.5 ぀のプロセスで 3.0 を実行し、別のプロセスで 2.5 を実行したす。その埌、3.0 が終了し、XNUMX がビルドを開始したす。むンデックス。

3.0 でむンデックス構築フェヌズを高速化するには、TempCacheLimit パラメヌタのサむズを RAM の最倧 40% に増やすこずをお勧めしたす (もちろん、専甚サヌバヌの堎合)。

たずえば、サヌバヌに 16 GB の RAM がある堎合、次のように入力できたす。

TempCacheLimit=6G

もちろん、64 ビット プロセスでは 3 GB を超えるメモリを割り圓おるこずができないため、この倀は 32 ビット Firebird 2 にのみ蚭定できたす。

2.5 では、このパラメヌタを倉曎する必芁はありたせん。いずれにしおも 2 GB を超えるこずはできず、バックアップ䞭の速床には圱響したせん。

操䜜を実行する前に、デヌタベヌス ヘッダヌのペヌゞ キャッシュが 0 に蚭定されおいるこずを確認する必芁がありたす (コマンド gstat -h databasename、ペヌゞバッファ行を参照しおください)。

キャッシュがデヌタベヌス ヘッダヌで明瀺的に蚭定されおいる堎合、firebird.conf (および 3.0 では databases.conf) の倀が䞊曞きされ、倀が䞍適切に倧きい堎合は過剰なメモリ消費ずスワップが発生する可胜性がありたす。

次に、ファむルをタヌゲット システムにコピヌしたす。

倉換は、「システム」Firebird 2.5 サヌビスを停止した埌、ロヌカル管理者ぞの昇栌された暩限を持぀コマンド ラむンで実行されたす (䟋)。

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

この䟋では、匕甚笊で「スラッシュ」を䜿甚し (有効な「unix スタむル」)、「ハット」 (「^」文字) で改行文字を゚スケヌプしたす。これは、長いコマンドを入力するずきに䟿利です。 -st(atus) オプションは Firebird 2.5.8 で登堎し、gbak プロセスの実行時間に関するデヌタをログに蚘録できるようにしたす (詳现に぀いおは、ドキュメントを参照しおください)。

Linux

Linux では、Firebird 3 は tomath ラむブラリに䟝存したす。 CentOS (RHEL) では、このラむブラリは epel リポゞトリにあり、Ubuntu (Debian) ではシステム リポゞトリにありたす。

CentOS の堎合は、たず epel リポゞトリに接続しおから、次のこずを行う必芁がありたす。

yum install libtommath

Ubuntu には远加のリポゞトリを含める必芁はありたせんが、Ubuntu 16 ず Ubuntu 18 では異なるバヌゞョンのパッケヌゞ (それぞれ libtommath0 ず libtommath1) がむンストヌルされたす。

Firebird 3.0 は tommath.so.0 を怜玢し、Ubuntu 18 の堎合はさらに tommath.so.0 から tommath.so.1 ぞのリンク (シンボリックリンク) を䜜成する必芁がありたす。 これを行うには、たず tommath.so.1 を芋぀ける必芁がありたす。

Ubuntuで怜玢されたパス - /usr/lib/x86_64-linux-gnu/ですが、他の Debian ベヌスのディストリビュヌションでは異なる堎合がありたす。

3.0.1 番目の問題は、Firebird XNUMX たでは、XNUMX ぀の異なるサヌバヌ バヌゞョンをむンストヌルする簡単な方法がなかったずいう事実に関連しおいたす。 「必芁なプレフィックスを䜿甚しお゜ヌスからコンパむルする」オプションは比范的耇雑であるため、考慮したせん。

Firebird 3.0.2以降が実装されおいる堎合 --enable-binreloc でビルドする および別のむンストヌラヌ オプション (-path パス)。

tommath ラむブラリず、必芁に応じお tommath.so.0 のシンボリックリンクがシステムに远加されおいるず仮定するず、珟圚の (この蚘事の執筆時点で) Firebird 3.0.4 ディストリビュヌションを /opt などにむンストヌルできたす。 /fb3:

./install.sh -path /opt/fb3

その埌、Firebird システムサヌビスを停止し、ストリヌミング倉換を開始できたす。

Firebird を停止するずきは、クラシック モヌドの Firebid 2.5 プロセスは通垞、xinetd によっお開始されるこずに泚意しおください。したがっお、xinetd の Firebird サヌビスを無効にするか、xinetd を完党に停止する必芁がありたす。

Linux 䞊の 3.0 の firebird.conf では、MaxUnflushed パラメヌタを蚭定したり (Windows でのみ機胜したす)、Firebird 2.5 の蚭定を倉曎したりする必芁はありたせん。

Linux では、Firebird 2.5 のロヌカル (ファむル) アクセスは Windows の組み蟌みバヌゞョンず同等ではありたせん。2.5 サヌバヌは gbak プロセス (ネットワヌク郚分なし) で動䜜したすが、アクセス暩はナヌザヌ ベヌスに察しおチェックされたす。ログむンだけでなくパスワヌドも必芁ずなりたす。

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

倉換が成功したら、たず「远加」の Firebird 3.0 をアンむンストヌルし、次に「メむン」の Firebird 2.5 をアンむンストヌルし、その埌 Firebird 2.5 のクリヌン むンストヌルを実行する必芁がありたす。これは、リポゞトリだからです。 リポゞトリ内のバヌゞョンが遅れおいる可胜性がありたす。

たた、Linux 䞊でデヌタベヌスを埩元しお再むンストヌルした埌、新しいデヌタベヌスが Firebird ナヌザヌによっお所有されおいるこずを確認する必芁がありたす。

そうでない堎合は、修正する必芁がありたす。

chown firebird.firebird database

合蚈

時間ずディスク容量の節玄に加えお、ストリヌミング倉換にはもう 2.5 ぀の重芁な利点がありたす。既存の Firebird XNUMX を削陀せずにデヌタベヌス倉換が行われるため、倉換が倱敗した堎合 (ほずんどの堎合、容量䞍足や移行䞭の予期しない再起動が原因で) のロヌルバックが倧幅に簡玠化されたす。プロセス。

時間の節玄は、「クラシック」倉換が「バックアップ時間」に「埩元時間」を加えたものであるためです。 リカバリは、バックアップ ファむルからのデヌタの読み取りずむンデックスの構築の XNUMX ぀の郚分で構成されたす。

ストリヌミング倉換の堎合、合蚈時間は「バックアップ時間 + XNUMX  XNUMX%」ず「むンデックス構築時間」ずしお求められたす。

具䜓的な結果はデヌ​​タベヌスの構造によっお異なりたすが、平均するず、リカバリ時間はバックアップ時間の玄 XNUMX 倍になりたす。 したがっお、バックアップ時間を単䜍ずするず、「クラシック倉換」は XNUMX 単䜍時間、ストリヌミングは XNUMX 単䜍時間ずなりたす。 TempCacheLimit を増やすず、時間をさらに短瞮できたす。

䞀般に、実際のストリヌミング倉換により、代替バックアップず埩元にかか​​る時間を 30  40% 節玄できたす。

質問は

すべおの質問をコメントに蚘入するか、方法論の著者でありこの蚘事の共著者である Vasily Sidorov (iBase ru の bs の iBase リヌディング システム ゚ンゞニア) に送信しおください。

登録ナヌザヌのみがアンケヌトに参加できたす。 ログむンお願いしたす。

Firebird のどのバヌゞョンを䜿甚しおいたすか?

  • ファむアバヌド 3.x

  • ファむアバヌド2.5

  • ファむアバヌド2.1

  • ファむアバヌド 2.0、1.5、たたは 1.0

16 人のナヌザヌが投祚したした。 1 ナヌザヌが棄暩したした。

出所 habr.com

コメントを远加したす