Tool für benutzerdefinierte SQL-Lasttests

Tool für benutzerdefinierte SQL-Lasttests

Ich möchte einige Tests ausführen, um unsere MySQL-Anwendung in mehreren Konfigurationen zu vergleichen. Ich möchte jedoch keine Sysbench- oder OLTP-Tests verwenden, da wir eine umfangreiche Stored-Procedure-Logik haben. Also ... möchte ich mit unseren Prozeduren testen.

Gibt es eine Testanwendung/ein Testframework, mit dem wir benutzerdefinierte Abfragen (optional parallel) ausführen und Statistiken anzeigen können? So etwas wie Siege für das Web? Was ich bereits gefunden habe, verwendet normalerweise ihre eigenen generierten Datenbankschemata und Szenarien.

Ich könnte meine Entwickler bitten, eine benutzerdefinierte Java-Schnittstelle zu erstellen und dafür Siege zu verwenden. Ich möchte aber keinen zusätzlichen Overhead verursachen oder die Zahlen beeinflussen.

Grüße, Igor.

Antwort1

Jmeter kann mit JDBC Datenbanklasttests durchführen:http://jakarta.apache.org/jmeter/usermanual/build-db-test-plan.html

Ich habe die JDBC-Funktionalität bisher noch nicht verwendet und weiß daher nicht, ob sie Ihre komplexen Abfragen bewältigen kann.

Antwort2

Sie können den allgemeinen Prinzipien der meisten Unit-Test-Engines folgen, um eine einfache MySQL-Unit-Test-Engine zu erstellen.

Wir haben in der Vergangenheit so etwas für MS SQL gebaut

Die Idee war folgende

1) Wir schreiben Unit-Test-Prozeduren und geben ihnen dieselben Namenspräfixe wie „test_“. In MS SQL verwenden wir auch erweiterte Eigenschaften als Metainformationen, um einige spezifische Parameter unserer Tests zu beschreiben (genauso wie man in NUnit verschiedene Testattribute verwenden kann).

2) Wir schreiben eine Prozedur/ein Skript, das einen Cursor öffnet, aus dem Katalog alle Prozedurnamen auswählt, die mit „test_“ beginnen, und jeden davon in einer EXEC-Anweisung (@procedure_name) ausführt. Wenn der Test fehlschlägt, sollte die Testprozedur einen Fehler ausgeben.

3) Die Ergebnisse der Testausführung werden in einer Tabelle gespeichert.

4) Um Tests mit denselben Daten durchzuführen und vorhersehbare Ergebnisse zu erhalten, verfügen wir über eine Beispieltestdatenbank, die wir einmal gesichert und vor jeder Testausführung aus der Sicherung wiederhergestellt haben.

Antwort3

Wenn Sie ein Tool möchten, das jetzt mit MySQL 5.1 geliefert wird, könnten Sie es schlechter machen alsMySQL Slap (auch bekannt als mysqlslap). Ein Beispiel direkt aus der Dokumentation:

Geben Sie Ihre eigenen SQL-Anweisungen zum Erstellen und Abfragen ein, mit jeweils 50 Abfragen durch Clients und 200 Auswahlmöglichkeiten:

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

Dies bietet die Möglichkeit, die Tests parallel auszuführen – obwohl die Implementierung der Parallelität mit mehreren Clients möglicherweise nicht ganz Ihren Wünschen entspricht. Hier ist eine kurze Beschreibung (wiederum wörtlich):

mysqlslap wird in drei Phasen ausgeführt:

  1. Erstellen Sie Schema, Tabelle und optional alle gespeicherten Programme oder Daten, die Sie für den Test verwenden möchten. In dieser Phase wird eine einzelne Clientverbindung verwendet.

  2. Führen Sie den Belastungstest aus. In dieser Phase können viele Clientverbindungen verwendet werden.

  3. Bereinigen (trennen, Tabelle löschen, falls angegeben). Diese Phase verwendet eine einzelne Clientverbindung.

Wenn dies nicht ganz nach Ihrem Geschmack ist, können Sie entweder ein Cron-Skript verwenden, um MySQL Slap zu einem bestimmten Zeitpunkt für viele Benutzer oder für viele identisch konfigurierte/spezifizierte Maschinen mit identischen Netzwerkpfaden zum Server usw. auszulösen (letzteres ist sehr wichtig, da durch Benchmarking alle möglichen Unstimmigkeiten beseitigt werden sollten, um unklare Schlussfolgerungen zu vermeiden).

Wenn Sie (was wahrscheinlich ist) eine frühere MySQL-Version verwenden,dieser Linkbietet nützliche Informationen zum Kompilieren der 5.1-Quelle für 5.0; ein weiteres Backporting ist wahrscheinlich nicht möglich.

Hier ist eine grundlegende Anleitung.

Antwort4

Ich habe schließlich verwendetSQLIO um die Festplatten zu belasten, und habe dann einige benutzerdefinierte Abfragen geschrieben, um eine ganze Menge Daten zu generieren und dann verschiedene Berechnungen an großen Tabellen durchzuführen und eine stark belastete, aber schlecht optimierte Datenbank zu simulieren. Dann habe ich die Anzahl der gleichzeitigen Verbindungen erhöht, bis sie abstürzte.

verwandte Informationen