IBAnalyst
IBAnalyst fait désormais partie de HQbird Standard !
IBAnalyst est un outil qui permet à un administrateur de base de données d’analyser les statistiques détaillées d’une base de données Firebird ou InterBase, puis d’identifier les problèmes potentiels de performance, de maintenance de la base de données et d’interaction entre l’application et la base de données.
Documentation
IBAnalyst affiche graphiquement les statistiques de la base de données Firebird (ou InterBase) de manière conviviale et met en évidence les problèmes suivants :
- fragmentation des tables et des BLOBs,
- versionnement des enregistrements,
- collecte des ordures (garbage collection),
- efficacité des index, etc.
De plus, IBAnalyst peut automatiquement formuler des suggestions intelligentes pour améliorer les performances et la maintenance de la base de données.
IBAnalyst peut obtenir les statistiques des bases de données de production en direct via l’API Services (recommandé), ou analyser la sortie texte des commandes gstat -a -r …. Les statistiques des périodes de charge maximale peuvent fournir de nombreuses informations sur les problèmes de performance réels dans les bases de production.
Comment IBAnalyst peut vous aider à trouver des problèmes dans votre base de données Firebird ou InterBase
Parcourons les principales fonctionnalités d’IBAnalyst. Lorsque vous consultez les statistiques de votre base de données dans IBAnalyst pour la première fois, certaines choses peuvent ne pas être claires, surtout si IBAnalyst affiche de nombreux avertissements avec des cellules colorées en rouge et jaune dans les vues Récapitulatif, Tables et Index. Examinons plusieurs exemples réels de statistiques.
Vue Récapitulatif
La page Récapitulatif affiche de nombreuses informations, mais la plus précieuse est l’état des transactions ( veuillez lire la description des états possibles des transactions dans l’aide d’IBAnalyst, disponible en appuyant sur F1 ou dans le menu Aide).
Sur cette capture d’écran, vous pouvez voir qu’une transaction est active depuis longtemps, « 60 % de la moyenne quotidienne ». IBAnalyst marque l’état de cette transaction en rouge, car cette transaction peut empêcher les versions accumulées d’être considérées comme des ordures par le serveur et donc d’être collectées. C’est une cause possible de lenteur : plus il existe de versions pour un enregistrement, plus le temps de lecture sera long.
Pour trouver cette transaction de longue durée, vous pouvez utiliser le module MON$Logger de FBScanner, ou effectuer une requête directe sur les tables MON$. Ensuite, pour savoir quelles tables ont été affectées par les transactions de longue durée (tables avec de nombreuses versions d’enregistrements), vous devez vous rendre dans la vue « Tables » d’IBAnalyst.
Vue Tables
Dans la vue « Tables », vous pouvez voir les tables et leurs paramètres importants : nombre d’enregistrements, nombre de versions d’enregistrements, longueur des enregistrements, nombre maximal de versions, etc.
Vous pouvez trier cette vue pour trouver les plus grandes tables. Nous nous intéressons particulièrement aux tables avec de nombreuses versions d’enregistrements - de nombreuses versions d’enregistrements allongeront la collecte des ordures pour les tables concernées. Il est généralement nécessaire de modifier les algorithmes de mise à jour et de suppression pour éliminer les nombreuses versions d’enregistrements.
« Row Versions » affiche le nombre total de versions pour une table particulière, et « Row Max Vers » affiche le nombre maximal de versions atteint par un enregistrement. Par exemple, si vous regardez la table NAB, il y a 11,9 millions d’enregistrements, le nombre total de versions est de 20 932, mais un enregistrement possède 176 versions. La lecture et l’analyse d’un tel paquet depuis le disque prennent plus de temps, donc la lecture de cet enregistrement est plus lente que celle des autres.
Cette image montre également de nombreuses tables où des données ont été supprimées. Mais, en raison de la transaction de longue durée, le serveur ne peut pas supprimer ces versions, et elles restent sur le disque, toujours indexées, et toujours lues par le serveur lors de la lecture des données.
Vue Index
Certaines bases de production peuvent avoir des index avec une seule valeur de clé indexée. Cela peut arriver parce que la base de données a été développée « pour être étendue à l’avenir », ou que quelqu’un a simplement expérimenté avec les index pendant le développement ou les tests. Vous pouvez voir ces index comme « Inutiles » dans IBAnalyst :
SKIN04, SKIN05, SKOUT03, etc., construits sur la colonne qui n’a qu’une seule valeur pour toutes les lignes (des millions de lignes). Ces index sont vraiment inutiles, car
- l’optimiseur peut utiliser cet index si vous spécifiez « where field = … ». Comme le champ ne contient qu’une seule valeur, l’utilisation de l’index entraînera une lecture inutile des pages d’index du disque vers la mémoire, et consommera de la mémoire (et du temps) lorsque le serveur préparera les lignes à afficher pour cette requête.
- la création des index fait partie du processus de restauration. Des index supplémentaires ajoutent du temps supplémentaire.
Bien sûr, ce n’est pas tout ce que vous pouvez découvrir sur votre base de données dans IBAnalyst. Vous pouvez également trouver
- le nombre moyen de transactions par jour
- s’il y a eu des rollbacks ou des connexions perdues, et quand
- la taille (en mégaoctets) de chaque table et index
- les tables dont les enregistrements sont intercalés avec des blobs, ce qui rend la lecture des seuls enregistrements plus lente
- les tables vides - simplement oubliées, ou vides au moment où les statistiques ont été prises
- les index avec beaucoup de clés dupliquées (vous pouvez réfléchir à la distribution des valeurs de colonnes)
- les index avec une profondeur de 4 et plus - peut-être devez-vous augmenter la taille de page pour accélérer
Recommandations automatiques
Si vous êtes dérouté par la lecture des avertissements des cellules colorées, ouvrez simplement « Reports\View recommendations » - tout ce qui est suffisant pour les performances de la base de données y est rassemblé. N’hésitez pas à poser toutes vos questions ( [email protected])


