The load test results repository is out of space

Si jamais vous avez l’habitude de mettre en place une plateforme de test de charge et que vous avez industrialisé ces tests pour les faire tourner à chaque nouvelle version d’une application, vous êtes peut-être déjà tombé sur l’erreur indiquant que la base de données stockant les résultats de test de charge est pleine: “Error occurred running test. Result collection stopped due to the following error: The load test results repository is out of space”.

Deux solutions s’offrent alors à vous:

  • le nettoyage par le vide
  • le nettoyage sélectif

Solution 1: le nettoyage  par le vide.

Le principe n’est pas réellement de tout supprimer mais de jeter tous les résultats de campagne ayant plus de N jours. Avec cette solution, nous gagnons “rapidement” beaucoup de place dans notre base de données pour ne garder que les toutes dernières campagnes. Cette solution se fait tout simplement par l’exécution d’un script SQL que vous trouverez un peu partout sur le net (notamment sur le blog de Bill Barnett) et qui peut être personnalisé sur le nombre de jours de résultats à gagner.

 

 -- This script deletes all load test run older than two weeks
-- To change the timeframe, change the number of days from 14 to the desired number

USE LoadTest
DECLARE @LoadTestRunId int
DECLARE OldLoadTestsCursor CURSOR FOR
    SELECT LoadTestRunId FROM LoadTestRun WHERE datediff(dd, StartTime, getdate()) > 14

OPEN OldLoadTestsCursor
FETCH NEXT FROM OldLoadTestsCursor INTO @LoadTestRunId

WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC Prc_DeleteLoadTestRun @LoadTestRunId
    FETCH NEXT FROM OldLoadTestsCursor INTO @LoadTestRunId
END

CLOSE OldLoadTestsCursor
DEALLOCATE OldLoadTestsCursor

/!\ A noter que ce script est très lent et peut prendre plusieurs heures!

Solution 2: le nettoyage sélectif

Si la première solution permet de répondre à un gain de place, elle a pour problématique majeure de ne pas permettre de la sélection des éléments que l’on supprime. La seule chose qu’il nous faudrait c’est donc une simple IHM permettant de visualiser les résultats de campagnes et pourquoi gérer certains d’entre eux pour soit les supprimer, soit les exporter.

Et par le plus grand des hasards, c’est exactement ce que nous propose Visual Studio! Puis y accéder, ouvrez un test de charge (fichier loadtest) et à l’aide du bouton droit, choisissez Open and Manage Results dans le menu contextuel.

cleanDb2

Une fenêtre s’ouvre à vous permettant de filtrer tout d’abord par contrôleur (si vous en avez un), puis par test de charge. Ceci vous affiche alors toutes les campagnes terminées ou non, et vous permet d’agir sur chacune d’entre elles. Dans notre cas il suffit de sélectionner les campagnes à supprimer (ctrl + clic) puis de cliquer sur Remove. Comme le script plus haut, plus la campagne a enregistré d’information, plus la suppression est longue.

cleanDb1

 

Ce process est encore plus lent que la première solution mais permet réellement de ne garder que ce que l’on souhaite.

Ces deux solutions permettent de corriger de façon temporaire notre problème de place disponible mais si vous voulez exécuter des campagnes de façon pérenne et éviter que l’erreur ne se déclenche en plein de milieu de campagne (vous obligeant à recommencer de zéro), pensez à revoir le sizing de la base de données. Par défaut, Visual Studio s’installe avec SQL Express qui limite la taille des bases de données à 4Go. Envisagez-donc d’utiliser SQL Server.