Cette page a été traduite automatiquement. Lisez l'original en anglais. English

Bibliothèque IBSurgeon

FirebirdSQL : fichiers internes, fichiers temporaires et variables d'environnement

by Vasily Sidorov, Sep 2, 2022, IBSurgeon

Les DBA Firebird expérimentés savent que Firebird peut nécessiter une quantité assez importante d’espace disque pour stocker les fichiers internes et temporaires. La taille recommandée de l’espace disque pour les fichiers temporaires d’un système de production est de 30 à 40 Go, mais pour les systèmes à forte charge, elle peut être plus importante.

Dans cet article, nous décrirons les types de fichiers internes et temporaires de Firebird, et nous examinerons également comment ils sont stockés et gérés via les paramètres de configuration et les variables d’environnement du système d’exploitation. Cet article poursuit la série d’articles et de documents consacrés à la maîtrise de l’installation et de la configuration de Firebird.

Avis important des développeurs du cœur de Firebird :

Ne définissez ou ne modifiez JAMAIS, jamais, JAMAIS la variable d’environnement FIREBIRD_LOCK - sauf si vous savez TRÈS BIEN ce que vous faites.

Suggestion explicite de l’équipe IBSurgeon :

Ne modifiez pas FIREBIRD_LOCK.

Pour les autres fichiers temporaires - voir ceci.

Fichiers internes dans Firebird

Les fichiers internes sont des fichiers utilisés par Firebird pour effectuer ses opérations internes. Ces fichiers ne doivent pas être modifiés ou touchés par les utilisateurs ou les logiciels tiers. Les informations ci-dessous sont fournies à titre de référence uniquement.

Le modèle de nommage courant des fichiers internes

Firebird utilise en interne le préfixe fbNN_, où NN peut être

  • le numéro ODS (structure sur disque) majeur (ODS 12 pour Firebird 3.0, ODS 13 pour Firebird 4.0), c’est-à-dire que le fichier commence par fb13.
  • NN peut être le numéro de version abrégé - par exemple, le fichier peut commencer par fb50.

Il peut également y avoir le préfixe fb_, qui est aussi utilisé pour les fichiers temporaires.

Types de fichiers internes dans Firebird

Il existe les principaux types de fichiers internes suivants dans Firebird :

  1. fb_lock_ fichiers de verrouillage - fichiers utilisés par le gestionnaire de verrous de Firebird
  2. fbNN_monitor_ fichiers avec les données des tables de surveillance
  3. fbNN_trace_ fichier avec les données des sessions de trace
  4. fb_event_ fichier avec les tampons stockés des événements
  5. fb_user_mapping fichiers avec les données de mappage des utilisateurs
  6. fichiers avec les données internes des sessions de trace
  7. fichiers drapeaux (taille zéro)
  8. fb_repl_ fichiers de réplication

Examinons les fichiers internes de Firebird en détail.

Fichiers de verrouillage

Les fichiers de verrouillage ont le préfixe fb_lock_. Ils sont utilisés par le gestionnaire de verrous de Firebird pour synchroniser l’accès aux objets dans la base de données Firebird et entre les instances Firebird.

Les fichiers de verrouillage sont créés à l’ouverture d’un fichier de base de données et supprimés à la fermeture.

Par défaut, le fichier de base de données est fermé lorsque la dernière connexion est déconnectée. À partir de Firebird 3.0, il est possible de maintenir un fichier de base de données ouvert dans Firebird après la déconnexion de la dernière connexion en utilisant l’option LINGER.

La taille initiale du fichier de verrouillage est définie par le paramètre LockMemSize dans firebird.conf. La taille de travail diffère selon l’architecture : SuperServer utilise les fichiers de verrouillage de manière moins intensive que Classic et SuperClassic. La taille typique de la table de verrous est d’environ 30 à 50 Mo, mais pour les serveurs avec des milliers de connexions en Classic/SuperClassic, la taille des fichiers de verrouillage peut atteindre 2 Go. 2 Go est la limite d’implémentation pour les fichiers de verrouillage dans Firebird vanilla.

Fichiers avec les données des tables de surveillance

À partir de la version 2.1, Firebird dispose de tables de surveillance. Ces tables ne sont pas stockées dans la base de données ; les données de surveillance sont collectées à la demande et conservées dans les fichiers internes avec le modèle de nom fbNN_monitor_.

La taille des fichiers avec les données des tables de surveillance dépend du nombre de connexions et de leur activité (transactions, instructions, procédures stockées, etc.). De plus, la quantité et la taille des fichiers fb_NN_monitor_ dépendent du nombre de requêtes vers les tables de surveillance depuis différentes connexions (c’est l’une des raisons pour lesquelles vous ne devriez pas utiliser les tables MON$ pour des tâches non liées à la surveillance).

Fichiers avec les données des sessions de trace

Le modèle de nom de fichier fbNN_trace_ conserve le lien vers le fichier de session de trace actif. Les fichiers avec le modèle de nom fb_trace_ contiennent des informations sur la session de trace. C’est une sorte de tampon pour les données de trace. La taille maximale du fichier fb_trace est limitée par le paramètre MaxUserTraceLogSize dans firebird.conf. Si ce tampon est saturé, la trace sera automatiquement suspendue.

Fichier pour les tampons d’événements

Les fichiers avec le modèle de nom fb_event_ sont des tampons où Firebird stocke les événements non livrés aux applications clientes.

Fichiers avec les données de mappage des utilisateurs

Les fichiers fb_user_mapping sont utilisés pour mettre en cache les mappages d’utilisateurs dans les instances Firebird.

Fichiers drapeaux

Sous POSIX, Firebird utilise des fichiers drapeaux de taille zéro - fb_guard, fb_init, fb_port_NUMBER. Ces fichiers sont utilisés au démarrage de Firebird.

Fichiers de réplication

Dans Firebird 4 et HQbird, les fichiers fb_repl_ contiennent les données internes pour les processus de réplication.

Emplacement des fichiers internes

Par défaut, tous les fichiers internes de Firebird sont stockés dans le même dossier : sous Windows, il s’agit de C:\ProgramData\firebird, sous Linux - /tmp/firebird. Veuillez noter que le dossier doit avoir les permissions suffisantes pour que l’instance Firebird puisse créer et travailler avec les fichiers à cet endroit !

Il est possible de modifier l’emplacement du dossier contenant les fichiers internes de Firebird en définissant la variable d’environnement FIREBIRD_LOCK, mais nous ne le recommandons pas.

VEUILLEZ NOTER : pour éviter la corruption de la base de données, tous les processus Firebird qui ouvrent le même fichier de base de données doivent travailler avec le même FIREBIRD_LOCK. Veuillez ne pas créer cette variable et utiliser les emplacements par défaut.

Taille des fichiers internes

En pratique, la taille totale des fichiers internes de Firebird est d’environ 100 à 200 Mo, jusqu’à 2 Go comme maximum connu.

Fichiers temporaires dans Firebird

Les fichiers temporaires sont créés par le moteur Firebird pour stocker les données temporaires qui résultent des opérations des utilisateurs - les requêtes avec DISTINCT, par exemple. Les fichiers temporaires peuvent être très volumineux dans les systèmes de production à forte charge, il est donc nécessaire pour un DBA expérimenté de pouvoir reconnaître les types de fichiers temporaires et, si nécessaire, d’ajuster la configuration de Firebird ou d’allouer de l’espace disque pour stocker les fichiers temporaires.

Emplacement des fichiers temporaires dans Firebird

Firebird crée les fichiers temporaires dans le dossier spécifié par les variables d’environnement FIREBIRD_TMP, TEMP, TMP (dans cet ordre). Si ces variables n’existent pas, les fichiers temporaires seront créés dans C:\Temp sous Windows ou /tmp sous Linux.

En pratique, sous Windows, nous pouvons voir les fichiers temporaires de Firebird dans C:\Windows\Temp (correspond à la variable d’environnement TEMP), sous Linux dans /tmp.

Types de fichiers temporaires dans Firebird

Il existe les fichiers temporaires suivants (tous utilisent le préfixe fb_) :

  1. fb_table_ objets de table, y compris, mais sans s’y limiter, les tables temporaires
  2. fb_blob_ blobs et transactions autonomes
  3. fb_undo_ données d’annulation
  4. fb_recbuf_ utilisé pour conserver les données intermédiaires dans les requêtes actives, les tables virtuelles, etc.
  5. fb_merge_ données pour les jointures par hachage
  6. fb_sort_ tris (pour les requêtes avec DISTINCT/ORDER BY/GROUP BY et pour la création/recréation d’index)
  7. fb_tpc_ données fb_tpc_ - à partir de v4, liste de toutes les transactions connues avec les numéros de validation associés
  8. fb_snap_ données pour - à partir de v4, liste de tous les instantanés de base de données actifs

Comment modifier l’emplacement des fichiers temporaires ?

Pour les versions de Firebird antérieures à 4, il est possible de définir un dossier spécifique pour stocker les fichiers temporaires des types 4 à 8 avec le paramètre de configuration Firebird TempDirectories.

Pour Firebird 4 et supérieur, le nouveau paramètre de configuration TempTableDirectory permet de spécifier le dossier pour stocker les tables temporaires des types 1 à 3. Il peut être défini dans firebird.conf et dans databases.conf.

Variables d’environnement pour Firebird

Firebird peut utiliser les variables d’environnement du système d’exploitation suivantes (si elles sont définies) :

  • FIREBIRD dossier avec les fichiers de configuration de Firebird
  • FIREBIRD_LOCK dossier avec les fichiers internes
  • FIREBIRD_MSG dossier avec le fichier de messages (firebird.msg)
  • FIREBIRD_TMP dossier pour les fichiers temporaires

En pratique, FIREBIRD_TMP est la seule variable qu’il est logique de définir si vous avez une bonne raison de stocker les fichiers temporaires dans un emplacement spécifique non par défaut.

Veuillez noter que si le chemin dans FIREBIRD_TMP est invalide (n’existe pas ou permissions insuffisantes), cela entraînera des erreurs critiques qui empêcheront Firebird de fonctionner.

Avis important des développeurs du cœur de Firebird :

Ne définissez ou ne modifiez JAMAIS, jamais, JAMAIS la variable d’environnement FIREBIRD_LOCK - sauf si vous savez TRÈS BIEN ce que vous faites.

Suggestion explicite de l’équipe IBSurgeon :

Ne modifiez jamais FIREBIRD_LOCK. Cette information est fournie à titre de référence uniquement.

Pour les autres fichiers temporaires - voir ceci.

Au lieu d’un résumé : réponse à une question très fréquente

De nombreux DBA demandent - devrions-nous utiliser un disque RAM ou tmpfs pour stocker les fichiers internes et/ou temporaires de Firebird ?

La réponse courte est : Non, il vaut mieux ajuster la configuration de Firebird. Si vous avez beaucoup de mémoire, vous pouvez augmenter la valeur de DefaultDBCachePages (pour SuperServer uniquement) et augmenter TempCacheLimit (dans les versions 3+, Firebird permet d’utiliser TempCacheLimit au-delà de 2 Go).

Si vous n’êtes pas sûr des valeurs à utiliser, veuillez utiliser le Calculateur de configuration Firebird, qui crée des configurations optimales et sûres pour des paramètres matériels/VM spécifiques.

La réponse plus longue : Firebird est conçu pour conserver la majeure partie des fichiers temporaires et internes en mémoire, mais, comme en pratique il existe des situations où les objets temporaires deviennent très volumineux, il dispose également d’un mécanisme pour les stocker sur le disque. Firebird utilise efficacement les mécanismes du système d’exploitation (mmap, cache du système de fichiers, fichiers temporaires, etc.) pour mettre en cache les fichiers temporaires et internes en mémoire lorsque cela est possible et raisonnable. L’ajustement de Firebird doit d’abord se faire via la configuration de Firebird, puis au niveau du système d’exploitation (définir l’emplacement des fichiers temporaires, diverses options pour le réglage du cache de fichiers, etc.).

Liens connexes

Vidéos :

Présentation sur le réglage de l’utilisation de la mémoire

N’hésitez pas à poser des questions ou à envoyer des commentaires à [email protected]