outil de test de chargement sql personnalisé

Je voudrais exécuter des tests pour comparer notre application mysql dans plusieurs configurations. Mais je ne veux pas utiliser quelque chose comme les tests syschench ou oltp, car nous avons une logique lourde de procédures stockées. Alors … Je veux tester nos procédures.

Existe-t-il une application / cadre de test que nous pouvons utiliser pour exécuter des requêtes personnalisées (en option – en parallèle) et voir les statistics? Quelque chose comme Siege pour le web? Ce que j'ai déjà trouvé utilise habituellement leurs propres schémas et scénarios de database générés.

Je pourrais requestr à mes développeurs de créer une interface java personnalisée et d'utiliser Siege pour elle, bot ne veut pas append de frais généraux ou affecter des nombres.

Cordialement, Igor.

Jmeter peut effectuer un test de charge de database en utilisant JDBC: http://jakarta.apache.org/jmeter/usermanual/build-db-test-plan.html

Je n'ai pas utilisé la fonctionnalité jdbc avant, alors je ne sais pas si elle va gérer vos requêtes complexes.

Vous pouvez suivre les principes généraux de la plupart des moteurs de tests unitaires pour créer un moteur de test d'unité mySQL simple.

Nous construisons quelque chose comme ceci pour MS SQL dans le passé

L'idée était la suivante

1) Nous écrivons les procédures d'essai de l'unité et leur donnons le même nom préfixes comme "test_". Dans MS SQL, nous avons également utilisé des propriétés étendues comme méta-informations pour décrire certains parameters spécifiques des tests externes (comme dans NUnit on peut utiliser différents attributes de test)

2) Nous écrivons une procédure / script qui ouvre un slider, sélectionne à partir du catalogue tous les noms de procédure qui démarre "test_" et exécute chacun d'entre eux dans l'instruction EXEC (@procedure_name). Si le test échoue, la procédure de test devrait générer une erreur.

3) Les résultats de l'exécution du test sont stockés dans une table.

4) Afin d'exécuter le test sur les mêmes données et d'get des résultats prévisibles, nous avons un exemple de database de test que nous avons sauvegardé une fois et restauré à partir de la sauvegarde avant chaque exécution de test

Si vous souhaitez qu'un outil soit livré avec MySQL 5.1, vous pourriez le faire pire qu'essayer MySQL Slap (alias mysqlslap) . Un exemple directement de la documentation:

Fournissez vos propres instructions de création et de requête SQL, avec 50 requêtes de clients et 200 sélectionnées pour chacune d'entre elles:

mysqlslap --delimiter=";" \ --create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)" \ --query="SELECT * FROM a" --concurrency=50 --iterations=200 

Cela fournit l'option d'exécuter les tests en parallèle – bien que la mise en œuvre du parallélisme à l'aide de plusieurs clients peut ne pas être exactement à votre convenance. Voici une brève description (encore une fois, textuellement):

mysqlslap s'exécute en trois étapes:

  1. Créez un schéma, un tableau et, éventuellement, les programmes stockés ou datatables que vous souhaitez utiliser pour le test. Cette étape utilise une connection client unique.

  2. Exécutez le test de charge. Cette étape peut utiliser de nombreuses connections client.

  3. Nettoyez (déconnectez, déposez la table s'il est spécifié). Cette étape utilise une connection client unique.

Si ce n'est pas exactement à votre goût, vous pouvez soit utiliser un script cron pour triggersr MySQL Slap à un moment précis pour de nombreux users, soit pour plusieurs machines configurées / spécifiées de manière identique, avec des paths réseau identiques vers le server, etc. (ce dernier est très important, car l'parsing comparative devrait éliminer toute divergence possible pour prévenir les conclusions obscures).

Si (comme cela est probable), vous exécutez une version précédente de MySQL, ce lien fournit des informations utiles sur la compilation de la source 5.1 pour 5.0; il n'est probablement plus possible de faire de l'avant.

Voici une procédure de base.

J'aime:

  1. Écrivez un script PHP / Python / Perl pour accéder à la database et exécutez le test et imprimez le résultat au format XML
  2. Utilisez un outil de benchmarking HTTP (httperf ou similaire) pour supprimer la database et save les résultats résultants
  3. Parlez pour les échecs, répétez.

J'ai fini par utiliser SQLIO pour souligner les disques, puis j'ai écrit des requêtes personnalisées pour générer assez de données, puis fais des calculs variés sur de grandes tables et simule une database lourdement chargée mais mal optimisée. J'ai ensuite accéléré le nombre de connections simultanées jusqu'à ce qu'il soit mort.