Conversion en streaming des bases de données Firebird 2.5 au format ODS12 (Firebird 3.0)

Chaque version de Firebird a sa propre version du format de structure de disque de base de données, O(n)D(isk)S(tructure). Jusqu'à la version 2.5 incluse, le moteur Firebird pouvait fonctionner avec ODS des versions précédentes, c'est-à-dire que les bases de données des anciennes versions étaient ouvertes par la nouvelle version et fonctionnaient en mode de compatibilité, mais le moteur Firebird 3.0 ne fonctionne qu'avec les bases de données dans sa propre version ODS 12.0.

Pour migrer vers la version 3.0, la base de données de la version 2.5 doit être convertie au nouveau format via une sauvegarde/restauration. Bien sûr, nous supposons que la base de données a été préalablement préparée pour la conversion - c'est-à-dire la compatibilité des métadonnées et des requêtes avec Firebird 3.0 a été vérifiée.

Si vous suivez l'approche standard, cela signifie que vous devez faire une sauvegarde sur la version 2.5, puis installer la 3.0 et faire une restauration. Une telle procédure est acceptable s'il y a suffisamment de temps, mais lors de la migration de bases de données volumineuses, ou lors de la migration de plusieurs dizaines de bases de données en même temps, lorsque le temps presse, vous pouvez utiliser la conversion en continu, qui est 30 à 40 % plus rapide. Comment faire exactement cela (sous Windows et sous Linux), lisez sous la coupe.

L'idée générale est que nous allons utiliser un pipeline pour accélérer les choses :

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

Gbak à partir de 2.5 génère une sauvegarde au format linéaire et l'envoie à stdout, qui récupère immédiatement gbak à partir de 3.0 via stdin et crée une nouvelle base de données.

Il est nécessaire d'organiser un tel pipeline avec une méthode d'accès local (fichier), car l'accès au réseau (même via localhost) ralentira considérablement le processus.

Nous passons en revue les détails pour Windows et Linux ci-dessous.

Windows

Dans le cas de Windows, le moyen le plus simple est de créer une version complètement autonome de Firebird. Pour cela nous prenons embed-archive Firebird 2.5, renommez fbemded.dll en fbclient.dll, ajoutez les utilitaires gbak.exe et (éventuellement) isql.exe à partir de l'archive 2.5 "normale".

Firebird 3.0 utilise assemblage unique et ne nécessite aucune modification.

La version la plus minimale (qui ne nécessite pas l'installation des bibliothèques d'exécution VS2008/VS2010 sur le système cible) contient les fichiers suivants :

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

Un administrateur expérimenté peut remarquer que la version 2.5 n'inclut pas les fichiers intl/fbintl.dll et intl/fbintl.conf. C'est vrai, puisque gbak n'utilise pas de jeu de caractères de connexion et ne convertit pas les données entre les jeux de caractères, mais du côté "réception" de Firebird 3.0, ces fichiers sont nécessaires lors de la création d'index.

Dans firebird.conf, Firebird 3.0 est recommandé d'ajouter :

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

En outre, il est souhaitable de définir différentes valeurs IpcName pour 2.5 et 3.0.

Lors du choix des valeurs des autres paramètres de firebird.conf, nous partons d'une considération simple : au stade de la transfusion de données, gbak exécute 2.5 dans un processus, et 3.0 dans un autre, puis 2.5 sort, et 3.0 commence à construire index.

Pour accélérer la phase de construction de l'index en 3.0, il est recommandé d'augmenter la taille du paramètre TempCacheLimit à ~40% de RAM (s'il s'agit d'un serveur dédié, bien sûr).

Par exemple, si le serveur dispose de 16 Go de RAM, vous pouvez mettre

TempCacheLimit=6G

Bien sûr, cette valeur ne peut être définie que pour Firebird 64 3 bits, car tout processus 32 bits ne peut pas allouer plus de 2 gigaoctets de mémoire.

Dans la version 2.5, ce paramètre n'a pas besoin d'être modifié - il ne peut de toute façon pas dépasser 2 gigaoctets et il n'affecte pas la vitesse pendant la sauvegarde.

Avant d'effectuer l'opération, vous devez vérifier que le cache de pages dans l'en-tête de la base de données est défini sur 0 (commande gstat -h databasename, voir la ligne Tampons de page).

Si le cache est défini explicitement dans l'en-tête de la base de données, il remplace les valeurs de firebird.conf (et databases.conf en 3.0), et en cas de valeurs insuffisamment grandes, cela peut entraîner une consommation excessive de mémoire et un échange.

Ensuite, copiez les fichiers sur le système cible.

La conversion s'effectue après l'arrêt du service "système" Firebird 2.5, en ligne de commande avec des droits élevés à l'administrateur local (exemple) :

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

Cet exemple utilise une "barre oblique" entre guillemets ("style unix" valide) et un "chapeau" (le caractère "^") échappe au caractère de nouvelle ligne, ce qui est utile lors de la saisie de commandes longues. L'option -st(atus) est apparue dans Firebird 2.5.8 et vous permet d'enregistrer des données sur l'heure d'exécution du processus gbak (pour plus de détails, consultez la documentation).

Linux/Unix

Sous Linux, Firebird 3 dépend de la bibliothèque tommath. Sur CentOS (RHEL), cette bibliothèque se trouve dans le référentiel epel, sur Ubuntu (Debian) dans le référentiel système.

Pour CentOS, vous devez d'abord connecter le référentiel epel et ensuite seulement faire

yum install libtommath

Ubuntu n'a pas besoin d'inclure des référentiels supplémentaires, mais Ubuntu 16 et Ubuntu 18 installent différentes versions des packages - libtommath0 et libtommath1, respectivement.

Firebird 3.0 recherche tommath.so.0 et pour Ubuntu 18, il est en outre nécessaire de créer un lien (lien symbolique) de tommath.so.0 à tommath.so.1. Pour ce faire, vous devez d'abord trouver tommath.so.1.

Chemin recherché dans Ubuntu - /usr/lib/x86_64-linux-gnu/, mais d'autres distributions basées sur Debian peuvent être différentes.

Le deuxième problème est lié au fait que jusqu'à et y compris Firebird 3.0.1, il n'y avait pas de moyen facile d'installer deux versions de serveur différentes. Nous ne considérons pas l'option "compiler à partir des sources avec le préfixe requis" en raison de sa relative complexité.

Pour Firebird 3.0.2 et supérieur implémenté construire avec --enable-binreloc et une option d'installation distincte (chemin -path).

En supposant que la bibliothèque tommath et, si nécessaire, un lien symbolique pour tommath.so.0 ont été ajoutés au système, vous pouvez installer la distribution Firebird 3.0.4 actuelle (au moment de la rédaction de cet article) dans, par exemple, /opt /fb3 :

./install.sh -path /opt/fb3

Après cela, vous pouvez arrêter le service système Firebird et démarrer la conversion en streaming.

Lorsque vous arrêtez Firebird, gardez à l'esprit que les processus Firebid 2.5 en mode classique sont généralement démarrés par xinetd - vous devez donc soit désactiver le service firebird pour xinetd, soit arrêter complètement xinetd.

Dans firebird.conf pour 3.0 sous Linux, vous n'avez pas besoin de définir les paramètres MaxUnflushed (ils ne fonctionnent que sous Windows) et de modifier les paramètres de Firebird 2.5.

Sous Linux, l'accès local (fichier) de Firebird 2.5 n'est pas équivalent à la version embarquée sous Windows - le serveur 2.5 fonctionnera dans le processus gbak (sans la partie réseau), mais les droits d'accès seront vérifiés par rapport à la base d'utilisateurs, ce qui signifie que non seulement un login, mais aussi un mot de passe seront demandés :

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

Après une conversion réussie, vous devez d'abord désinstaller le Firebird 3.0 "supplémentaire", puis le Firebird 2.5 "principal", et après cela effectuer une installation propre de Firebird 2.5 - et c'est mieux à partir de l'installateur tar.gz régulier, et non via le référentiels, parce que. la version dans les référentiels peut être à la traîne.

De plus, après avoir restauré la base de données sous Linux et réinstallé, vous devez vérifier que la nouvelle base de données appartient à l'utilisateur firebird.

Si ce n'est pas le cas, il faudra alors le corriger.

chown firebird.firebird database

Total

En plus de gagner du temps et de l'espace disque, la conversion en streaming présente un autre avantage important - la conversion de la base de données se fait sans supprimer le Firebird 2.5 existant, ce qui simplifie grandement la restauration en cas d'échec de la conversion (le plus souvent en raison d'un manque d'espace ou d'un redémarrage inattendu lors de la migration processus).

Le gain de temps est dû au fait que la conversion "classique" est "temps de sauvegarde" plus "temps de restauration". La récupération se compose de deux parties : la lecture des données à partir d'un fichier de sauvegarde et la création d'un index.

Avec la conversion en continu, le temps total est obtenu en tant que "temps de sauvegarde plus cinq à dix pour cent" et "temps de création d'index".

Les résultats spécifiques dépendent de la structure de la base de données, mais en moyenne, le temps de récupération est environ le double du temps de sauvegarde. Par conséquent, si nous prenons le temps de sauvegarde comme une unité, alors la "conversion classique" est de trois unités de temps, le streaming est de deux unités de temps. L'augmentation de TempCacheLimit aide à réduire davantage le temps.

En général, la conversion en continu vous permet en pratique d'économiser 30 à 40 % du temps de sauvegarde et de restauration alternatives.

Questions?

Veuillez écrire toutes les questions dans les commentaires ou les envoyer à l'auteur de la méthodologie et co-auteur de cet article - Vasily Sidorov, ingénieur système en chef d'iBase, chez bs chez ibase ru.

Seuls les utilisateurs enregistrés peuvent participer à l'enquête. se connecters'il te plait.

Quelle version de Firebird utilisez-vous ?

  • Oiseau de feu 3.x

  • Firebird 2.5

  • Firebird 2.1

  • Firebird 2.0, 1.5 ou 1.0

16 utilisateurs ont voté. 1 utilisateur s'est abstenu.

Source: habr.com

Ajouter un commentaire