Penstriman penukaran pangkalan data Firebird 2.5 kepada format ODS12 (Firebird 3.0)

Setiap versi Firebird mempunyai versi format struktur cakera pangkalan datanya sendiri, O(n)D(isk)S(struktur). Sehingga versi 2.5 inklusif, enjin Firebird boleh berfungsi dengan ODS versi terdahulu, iaitu pangkalan data daripada versi lama dibuka oleh versi baharu dan berfungsi dalam mod keserasian, tetapi enjin Firebird 3.0 hanya berfungsi dengan pangkalan data dalam versi ODSnya sendiri 12.0.

Untuk berhijrah ke 3.0, pangkalan data daripada 2.5 mesti ditukar kepada format baharu melalui sandaran/pulihkan. Sudah tentu, kami menganggap bahawa pangkalan data telah disediakan sebelum ini untuk penukaran - i.e. metadata dan pertanyaan telah disemak untuk keserasian dengan Firebird 3.0.

Jika anda mengikut pendekatan standard, ini bermakna anda perlu membuat sandaran pada versi 2.5, kemudian pasang 3.0 dan buat pemulihan. Prosedur sedemikian boleh diterima jika terdapat masa yang mencukupi, tetapi apabila memindahkan pangkalan data yang besar, atau apabila memindahkan beberapa dozen pangkalan data pada masa yang sama, apabila masa semakin suntuk, anda boleh menggunakan penukaran penstriman, iaitu 30-40% lebih cepat. Bagaimana sebenarnya untuk melakukan ini (di bawah Windows dan di bawah Linux), baca di bawah potongan.

Idea umum ialah kami akan menggunakan saluran paip untuk mempercepatkan perkara:

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

Gbak daripada 2.5 menjana sandaran dalam format linear dan menghantarnya ke stdout, yang segera mengambil gbak daripada 3.0 melalui stdin dan mencipta pangkalan data baharu.

Adalah perlu untuk mengatur saluran paip sedemikian dengan kaedah akses (fail) tempatan, kerana akses rangkaian (walaupun melalui localhost) akan melambatkan proses dengan ketara.

Kami menyemak butiran untuk Windows dan Linux di bawah.

Windows

Dalam kes Windows, cara paling mudah ialah membuat binaan Firebird yang berdiri sendiri sepenuhnya. Untuk ini kami ambil arkib benam Firebird 2.5, menamakan semula fbemded.dll kepada fbclient.dll, tambah gbak.exe dan (pilihan) utiliti isql.exe daripada arkib "biasa" 2.5.

Kegunaan Firebird 3.0 perhimpunan tunggal dan tidak memerlukan sebarang pengubahsuaian.

Versi paling minimum (yang tidak memerlukan pemasangan perpustakaan masa jalan VS2008/VS2010 pada sistem sasaran) mengandungi fail berikut:

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

Pentadbir yang berpengalaman mungkin menyedari bahawa 2.5 tidak termasuk fail intl/fbintl.dll dan intl/fbintl.conf. Ini adalah benar, kerana gbak tidak menggunakan set aksara sambungan dan tidak menukar data antara set aksara, tetapi pada bahagian "menerima" Firebird 3.0, fail ini diperlukan semasa membuat indeks.

Dalam firebird.conf Firebird 3.0 disyorkan untuk menambah:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Juga, adalah wajar untuk menetapkan nilai IpcName yang berbeza untuk 2.5 dan 3.0.

Apabila memilih nilai parameter lain firebird.conf, kami meneruskan daripada pertimbangan mudah: pada peringkat pemindahan data, gbak menjalankan 2.5 dalam satu proses, dan 3.0 dalam proses yang lain, kemudian 2.5 keluar, dan 3.0 mula membina indeks.

Untuk mempercepatkan fasa pembinaan indeks dalam 3.0, adalah disyorkan untuk meningkatkan saiz parameter TempCacheLimit kepada ~40% RAM (jika ia adalah pelayan khusus, sudah tentu).

Sebagai contoh, jika pelayan mempunyai 16 GB RAM, maka anda boleh meletakkan

TempCacheLimit=6G

Sudah tentu, nilai ini boleh ditetapkan hanya untuk 64-bit Firebird 3, kerana mana-mana proses 32-bit tidak boleh memperuntukkan lebih daripada 2 gigabait memori.

Dalam 2.5, parameter ini tidak perlu ditukar - ia tidak boleh melebihi 2 gigabait, dan ia tidak menjejaskan kelajuan semasa sandaran.

Sebelum menjalankan operasi, anda perlu menyemak sama ada cache halaman dalam pengepala pangkalan data ditetapkan kepada 0 (command gstat -h databasename, lihat baris Penampan Halaman).

Jika cache ditetapkan secara eksplisit dalam pengepala pangkalan data, maka ia akan mengatasi nilai daripada firebird.conf (dan databases.conf dalam 3.0), dan sekiranya nilai yang tidak mencukupi, ia boleh menyebabkan penggunaan memori dan pertukaran yang berlebihan.

Seterusnya, salin fail ke sistem sasaran.

Penukaran dilakukan selepas menghentikan perkhidmatan "sistem" Firebird 2.5, pada baris arahan dengan hak yang dinaikkan kepada pentadbir tempatan (contoh):

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

Contoh ini menggunakan "garis miring ke hadapan" dalam petikan ("gaya unix") yang sah dan "topi" (aksara "^") melarikan diri daripada aksara baris baharu, yang berguna apabila menaip arahan panjang. Pilihan -st(atus) muncul dalam Firebird 2.5.8 dan membolehkan anda melog data tentang masa proses gbak berjalan (untuk butiran, lihat dokumentasi).

Linux

Pada Linux Firebird 3 bergantung pada perpustakaan tommath. Pada CentOS (RHEL) perpustakaan ini terletak dalam repositori epel, pada Ubuntu (Debian) dalam repositori sistem.

Untuk CentOS, anda mesti menyambungkan repositori epel terlebih dahulu dan kemudian lakukannya

yum install libtommath

Ubuntu tidak perlu memasukkan repositori tambahan, tetapi Ubuntu 16 dan Ubuntu 18 memasang versi pakej yang berbeza - libtommath0 dan libtommath1, masing-masing.

Firebird 3.0 mencari tommath.so.0 dan untuk Ubuntu 18 ia juga diperlukan untuk mencipta pautan (symlink) dari tommath.so.0 ke tommath.so.1. Untuk melakukan ini, anda perlu mencari tommath.so.1 terlebih dahulu.

Laluan carian dalam Ubuntu - /usr/lib/x86_64-linux-gnu/, tetapi pengedaran berasaskan Debian lain mungkin berbeza.

Masalah kedua adalah berkaitan dengan fakta bahawa sehingga dan termasuk Firebird 3.0.1, tidak ada cara mudah untuk memasang dua versi pelayan yang berbeza. Kami tidak menganggap pilihan "susun daripada sumber dengan awalan yang diperlukan" kerana kerumitan relatifnya.

Untuk Firebird 3.0.2 dan lebih tinggi dilaksanakan bina dengan --enable-binreloc dan pilihan pemasang berasingan (-laluan laluan).

Dengan mengandaikan bahawa perpustakaan tommath dan, jika perlu, pautan sym untuk tommath.so.0 telah ditambahkan pada sistem, anda boleh memasang pengedaran semasa (pada masa penulisan ini) Firebird 3.0.4 dalam, sebagai contoh, /opt /fb3:

./install.sh -path /opt/fb3

Selepas itu, anda boleh menghentikan perkhidmatan sistem Firebird dan mulakan penukaran penstriman.

Apabila menghentikan Firebird, perlu diingat bahawa proses Firebid 2.5 dalam mod Klasik biasanya dimulakan oleh xinetd - jadi anda perlu sama ada melumpuhkan perkhidmatan firebird untuk xinetd atau menghentikan xinetd sepenuhnya.

Dalam firebird.conf untuk 3.0 di Linux, anda tidak perlu menetapkan parameter MaxUnflushed (ia hanya berfungsi pada Windows) dan menukar tetapan Firebird 2.5.

Di Linux, akses (fail) tempatan Firebird 2.5 tidak bersamaan dengan versi terbenam di bawah Windows - pelayan 2.5 akan berjalan dalam proses gbak (tanpa bahagian rangkaian), tetapi hak akses akan disemak terhadap pangkalan pengguna, yang bermaksud bahawa bukan sahaja log masuk, tetapi juga kata laluan akan diperlukan:

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

Selepas penukaran berjaya, anda mesti menyahpasang Firebird 3.0 "tambahan" dahulu, kemudian Firebird 2.5 "utama", dan selepas itu lakukan pemasangan bersih Firebird 2.5 - dan ia adalah yang terbaik daripada pemasang tar.gz standard, dan bukan melalui repositori, kerana. versi dalam repositori mungkin ketinggalan.

Selain itu, selepas memulihkan pangkalan data pada Linux dan memasang semula, anda perlu menyemak bahawa pangkalan data baharu dimiliki oleh pengguna firebird.

Jika ini tidak berlaku, maka ia perlu diperbetulkan.

chown firebird.firebird database

Jumlah

Selain menjimatkan masa dan ruang cakera, penukaran penstriman mempunyai satu lagi kelebihan penting - penukaran pangkalan data dilakukan tanpa memadamkan Firebird 2.5 sedia ada, yang sangat memudahkan pemulangan sekiranya penukaran tidak berjaya (paling kerap disebabkan kekurangan ruang atau but semula yang tidak dijangka semasa penghijrahan proses).

Penjimatan masa adalah disebabkan oleh fakta bahawa penukaran "klasik" ialah "masa sandaran" ditambah "masa pemulihan". Pemulihan terdiri daripada dua bahagian: membaca data daripada fail sandaran dan membina indeks.

Dengan penukaran penstriman, jumlah masa diperoleh sebagai "masa sandaran ditambah lima hingga sepuluh peratus" dan "masa pembinaan indeks".

Keputusan khusus bergantung pada struktur pangkalan data, tetapi secara purata, masa pemulihan adalah lebih kurang dua kali ganda masa sandaran. Oleh itu, jika kita mengambil masa sandaran sebagai satu unit, maka "penukaran klasik" ialah tiga unit masa, penstriman ialah dua unit masa. Meningkatkan TempCacheLimit membantu mengurangkan lagi masa.

Secara umum, penukaran penstriman dalam amalan membolehkan anda menjimatkan 30-40% daripada masa sandaran dan pemulihan alternatif.

Soalan?

Sila tulis semua soalan dalam ulasan, atau hantarkan kepada pengarang metodologi dan pengarang bersama artikel ini - Vasily Sidorov, Jurutera Sistem Peneraju iBase, di bs at ibase ru.

Hanya pengguna berdaftar boleh mengambil bahagian dalam tinjauan. Log masuk, Sama-sama.

Apakah versi Firebird yang anda gunakan?

  • Burung api 3.x

  • Burung api 2.5

  • Burung api 2.1

  • Firebird 2.0, 1.5 atau 1.0

16 pengguna mengundi. 1 pengguna berpantang.

Sumber: www.habr.com

Tambah komen