Aujourd'hui, je réfléchissais aux quotas imposés par les forfaits d'hébergement où le client pouvait se voir imposer une limite d'espace disque sur le serveur web et autre pour l'espace occupé par la base de données.
C'est un peu ce qui se produit dans l'entreprise où je travaille. Nous offrons des forfaits sur mesure mais nous devons surveiller l'utilisation que le client en fait pour éviter des abus. De façon générale, nous surveillons surtout les fichiers hébergés sur nos serveurs mais trop souvent, nous négligeons l'espace qu'occupe la base de données puisque PostgreSQL se trouve sur un serveur différent du serveur Apache.
Pour suivre l'utilisation des BD, j'ai écrit un petit script qui interroge le serveur en temps réel (uniquement lors de la consultation de la page PHP, mais j'aurais aussi pu le mettre en cronjob) pour connaître l'espace occupé en temps réel. Sans en restreindre l'utilisation par un quota calculé, nous pouvons quand même suivre l'évolution et ajuster le prix facturé si la taille d'une base de données devient plus volumineuse que ce qui était initialement prévu au contrat.
Voici le type de requête SQL qu'on peut utiliser pour connaître l'état de chacune des bases de données d'un serveur (pg_catalog.pg_database retourne la liste de toutes les bases de données sur le serveur) :
SELECT datname as db_name,Avec cette requête, nous nous sommes aperçus que trois clients inscrits à un forfait de base possédaient un site web comptant à peine quelques mégaoctets d'espace web alors que la base de données s'étalait sur plusieurs gigaoctets, et ce sans frais additionnels. Avec cette information, nous pourrons non seulement ajuster le forfait et récupérer de l'argent, mais aussi mieux planifier les procédures de sauvegarde (backup) et optimiser l'utilisation du serveur.
pg_database_size(datname) as db_size,
pg_size_pretty(pg_database_size(datname)) as db_txt_size
FROM pg_catalog.pg_database
ORDER BY db_size DESC;