инструмент для индивидуального нагрузочного тестирования SQL

инструмент для индивидуального нагрузочного тестирования SQL

Я хотел бы запустить несколько тестов для сравнения нашего приложения mysql в нескольких конфигурациях. Но я не хочу использовать что-то вроде тестов sysbench или oltp, потому что у нас есть некоторая тяжелая логика хранимых процедур. Поэтому... я хочу протестировать наши процедуры.

Есть ли тестовое приложение/фреймворк, который мы можем использовать для запуска пользовательских запросов (как вариант - параллельно) и просмотра статистики? Что-то вроде Siege for web? То, что я уже нашел, обычно использует свои собственные сгенерированные схемы баз данных и сценарии.

Я мог бы попросить своих разработчиков создать какой-нибудь пользовательский интерфейс Java и использовать для него Siege, бот не хочет добавлять накладные расходы или влиять на цифры.

С уважением, Игорь.

решение1

Jmeter может выполнять нагрузочное тестирование базы данных с использованием JDBC:http://jakarta.apache.org/jmeter/usermanual/build-db-test-plan.html

Я раньше не пользовался функционалом jdbc, поэтому не знаю, справится ли он с вашими сложными запросами.

решение2

Вы можете следовать общим принципам большинства движков модульного тестирования, чтобы создать простой движок модульного тестирования MySQL.

Мы создали нечто подобное для MS SQL в прошлом.

Идея была следующая

1) Мы пишем процедуры модульного тестирования и даем им одинаковые префиксы имен, например "test_". В MS SQL мы также использовали расширенные свойства в качестве метаинформации для описания некоторых конкретных параметров наших тестов (так же, как в NUnit можно использовать различные атрибуты тестов)

2) Мы пишем процедуру/скрипт, который открывает курсор, выбирает из каталога все имена процедур, которые начинаются с "test_", и выполняет каждую из них в операторе EXEC (@procedure_name). Если тест не пройден, тестовая процедура должна выдать ошибку.

3) Результаты выполнения теста сохраняются в таблице.

4) Чтобы запустить тест на одних и тех же данных и получить предсказуемые результаты, у нас есть образец тестовой базы данных, резервную копию которой мы сделали один раз и восстанавливали из резервной копии перед каждым выполнением тестов.

решение3

Если вам нужен инструмент, который теперь поставляется в комплекте с MySQL 5.1, то вы могли бы поступить хуже, чем попробоватьMySQL Slap (он же mysqlslap). Пример прямо из документации:

Предоставьте собственные SQL-операторы создания и запроса, с 50 запросами клиентов и 200 выборками для каждого:

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

Это дает возможность запускать тесты параллельно - хотя реализация параллелизма с использованием нескольких клиентов может не совсем вам понравиться. Вот краткое описание (опять же, дословное):

mysqlslap выполняется в три этапа:

  1. Создайте схему, таблицу и, по желанию, любые сохраненные программы или данные, которые вы хотите использовать для теста. На этом этапе используется одно клиентское соединение.

  2. Запустите нагрузочный тест. На этом этапе может использоваться много клиентских подключений.

  3. Очистка (отключение, удаление таблицы, если указано). На этом этапе используется одно клиентское соединение.

Если это вам не совсем по вкусу, вы можете использовать скрипт cron для запуска MySQL Slap в определенное время для многих пользователей или для многих машин с одинаковой конфигурацией/спецификациями, с идентичными сетевыми путями к серверу и т. д. (последнее очень важно, так как сравнительный анализ должен исключить любые возможные расхождения, чтобы избежать неясных выводов).

Если (что вполне вероятно) вы используете предыдущую версию MySQL,эта ссылкапредоставляет полезную информацию о том, как скомпилировать исходный код 5.1 для 5.0; дальнейшее обратное портирование, вероятно, невозможно.

Вот базовое пошаговое руководство.

решение4

Я в итоге использовалSQLIO чтобы нагрузить диски, а затем написал несколько пользовательских запросов, чтобы сгенерировать довольно много данных, а затем выполнить различные вычисления на больших таблицах и смоделировать сильно загруженную, но плохо оптимизированную базу данных. Затем я увеличил количество одновременных подключений, пока они не умерли.

Связанный контент