Vous êtes-vous déjà demandé quelles tables de votre base de données occupent le plus d’espace de stockage sur votre serveur ? Vous souhaitez peut-être surveiller la vitesse à laquelle la taille de vos tables augmente afin d’élaborer une stratégie d’archivage pour contrôler la consommation d’espace de stockage.

Cet article présente une technique permettant de créer un script modulaire et portable qui peut être copié et collé dans n’importe quelle solution FileMaker pour mesurer la taille des tables. Cela peut vous aider à contrôler la taille de stockage de votre solution.

Comment mesurer la taille d’une table

Commençons par parler de la façon dont nous mesurons la taille des tables. Cette méthode de mesure peut être comparée à la façon dont je mesure le poids de mon chat :

Je prends mon chat dans mes bras, je mesure notre poids combiné sur la balance, je le repose, puis je mesure à nouveau le poids sur la balance. La différence entre les deux mesures est le poids de mon chat.

Lorsque nous mesurons la taille d’une table, nous enregistrons une copie compacte de la base de données, nous mesurons sa taille, nous tronquons la table que nous voulons mesurer, nous enregistrons une autre copie compactée et nous mesurons à nouveau la taille. La différence entre les deux mesures correspond alors approximativement à la taille de la table.

Comment pouvons-nous automatiser cela ?

Nous savons maintenant comment mesurer la taille d’une table, mais je ne veux pas le faire manuellement. Je veux mesurer et enregistrer la taille automatiquement. Comment faire ? La solution la plus simple consiste à utiliser un script pour effectuer ces étapes à ma place.

Pour enregistrer une copie compactée, nous pouvons utiliser l’action de script « Enregistrer une copie » et spécifier l’option « Copie compactée » :

Pour tronquer une table, nous pouvons utiliser l’action de script “Tronquer la table” :

Pour mesurer la taille de la copie compactée, nous pouvons utiliser l’action de script “Obtenir la taille du fichier” :

En les combinant, je dispose d’un flux de travail automatisé qui enregistre, mesure, tronque, enregistre, mesure et compare.

Comment faire cela de manière dynamique ?

Malheureusement, l’action de script Tronquer la table ne nous permet pas de spécifier un nom de table calculé en tant que paramètre. Cela signifie que nous devons soit créer plusieurs copies du bloc d’actions de script que nous venons de voir, une pour chaque table, soit trouver un moyen de tronquer les tables de manière dynamique. Ceci m’amène à l’étape 3, rendre ce processus dynamique, modulaire et portable.

Comme mentionné précédemment, la contrainte est que l’action de script Tronquer la table ne prend pas en charge la saisie dynamique. Cependant, elle a l’option de tronquer la table actuelle. Si je peux accéder à au moins un modèle par table, je peux toutes les tronquer.

Le défi consiste maintenant à trouver un moyen d’accéder à un modèle par table. Nous pouvons facilement obtenir une liste de tous les modèles du système en utilisant la fonction de conception “NomsModeles”, et l’action de script “Activer modèle” prend en charge la saisie dynamique, ce qui signifie que vous pouvez accéder à un modèle par son nom. La combinaison de ces deux éléments nous permettra de couvrir toutes les mises en page du système. Si nous supposons que chaque table que nous voulons mesurer possède au moins une disposition, cette méthode atteindra notre objectif.

Obtenir une liste de tous les noms des tables de base

Optimisons un peu tout cela. Dans un système FileMaker, nous savons tous qu’il est très courant qu’une table ait de nombreuses occurrences dans le graphique des relations. Nous savons également que chaque occurrence de table peut avoir plusieurs modèles basés sur elle. Nous n’avons pas besoin de tronquer la table sur toutes ces occurrences, nous n’avons besoin de le faire qu’une seule fois. Dans mon script, j’ai ajouté un mécanisme pour enregistrer les tables qui ont été tronquées ou mesurées. Si une table a déjà été mesurée, nous pouvons la sauter la prochaine fois que nous atterrirons sur un autre modèle basée sur elle.

J’utilise la fonction “ExecuterSQL” pour interroger une table système FileMaker et obtenir tous les noms des tables de base. Il s’agit en quelque sorte d’une fonctionnalité cachée de la fonction “ExecuterSQL” ; elle vous permet d’interroger les métadonnées de votre base de données, comme les noms des occurences de table, des tables de base et des rubriques.

Voici un lien vers la référence FileMaker SQL, qui explique cela plus en détail. Dans la référence, allez au chapitre intitulé “Objets système FileMaker”, et vous verrez comment utiliser cette fonction.

Barrer les éléments après la mesure

Maintenant que j’ai une liste de noms de tables de base, j’ai besoin d’un moyen de les rayer une par une. Pour ce faire, j’ai besoin de savoir sur quelle table de base une mise en page est basée.

Cela semble plus trivial que cela ne l’est. Nous disposons de la fonction “Obtenir(NomTableModèle)”. Toutefois, cette fonction renvoie le nom de l’occurrence de la table au lieu du nom de la table de base sur laquelle la mise en page est basée.

Pour obtenir le nom de la table de base, je dois à nouveau utiliser la fonction ExecuteSQL pour interroger les tables du système et trouver la table de base sur laquelle l’occurrence de la table est basée.

Grâce à la possibilité d’obtenir le nom de la table de base d’une disposition, nous pouvons supprimer le nom de la table de base correspondante de la liste chaque fois que nous en mesurons une. Ainsi, la prochaine fois que nous rencontrons une disposition basée sur la même table de base, nous pouvons l’ignorer.

Tout mettre en place

Maintenant, mettons tout ensemble.

Nous commençons par obtenir dynamiquement une liste de tous les noms de tables de base pour nous aider à déterminer ce qu’il faut mesurer.

Ensuite, nous utilisons une boucle pour passer en revue toutes les mises en page du système. Pour chaque mise en page, si elle est basée sur un tableau de base qui n’a pas été mesuré, nous mesurons la taille du fichier, nous tronquons ce tableau, puis nous mesurons à nouveau et calculons la taille du tableau tronqué. Et nous rayons ce tableau de base de notre liste, afin qu’il ne soit pas mesuré à nouveau.

Enfin, nous enregistrons le journal sur le chemin du bureau de l’utilisateur sous forme de fichier CSV, à l’aide des étapes de script “[…] fichier de données”.

Tout ce qui se trouve ici est natif de FileMaker. Aucun plugin ou fonction personnalisée n’est utilisé, ce qui signifie qu’il peut être facilement copié et collé dans n’importe quel fichier.

Voici le fichier de démonstration (en anglais) qui contient le script complet: