MySQL: инструменты и утилиты для тестирования сервера

Утилиты для тестирования (бенчмаркинга) MySQLИтак, на текущий момент мы изучили для чего, что измерять и какими способами тестировать производительность БД MySQL. Теперь обратим внимание на то, какие программные средства, инструменты и утилиты для этого используются. Если нет веских оснований считать, что готовые инструменты не подходят для ваших целей, то не стоит создавать собственную систему эталонного тестирования баз данных MySQL, а использовать готовые проверенные решения. В этой статье я расскажу о некоторых из этих инструментов.


Оглавление статьи[Показать]


 

Полностековые инструменты

Вспомним, что существует два типа эталонного тестирования: полностековое и по­компонентное. Нет ничего удивительного в том, что имеются инструменты для тестирования всего приложения и тестирования под нагрузкой MySQL и других компонентов по отдельности. Полностековое тестирование — обычно лучший способ получить полное представление о производительности всей системы. В число инструментов полностекового тестирования входят следующие:

  • ab. Это инструмент тестирования производительности сервера HTTP Apache. Он показывает, сколько запросов в секунду способен обслуживать НТТР-сервер. Если вы тестируете веб-приложение, это число демонстрирует, какое количество запросов в секунду может обслужить приложение в целом. Это очень простой инструмент, но полезность его ограниченна, поскольку он просто обращается к одному адресу URL настолько быстро, насколько это возможно. Дополнитель­ную информацию об утилите ab вы найдете на странице;
  • http_load. Концепция этого инструмента похожа на концепцию ab: он также предназначен для создания нагрузки на веб-сервер, но более гибок. Вы можете создать входной файл, включающий много разных адресов URL, a http_load будет выбирать их случайным образом. Также можете настроить параметры таким образом, что запросы станут отправляться с заданным интервалом, а не с максимально возможной скоростью. Подробности смотрите на этой странице;
  • JMeter. Представляет собой приложение на языке Java, которое может загружать другое приложение и измерять его производительность. Эта утилита была раз­работана для тестирования веб-приложений, но ее можно использовать и при тестировании FTP-серверов, и при отправке запросов к базе данных через ин­терфейс JDBC.

    Утилита JMeter значительно сложнее, чем ab и http_load. С ее помощью можно более гибко имитировать поведение реальных пользователей, управляя таким параметром, как время нарастания нагрузки. У нее есть графический пользова­тельский интерфейс со встроенными средствами построения графиков, также она позволяет сохранять результаты и воспроизводить их в автономном режиме. Подробности смотрите на этой странице.

 

Инструменты покомпонентного тестирования

Предусмотрены несколько полезных инструментов для тестирования производитель­ности MySQL и операционной системы, на которой она работает. Далее приведем примеры эталонных тестов, в которых эти инструменты используются.

  • mysqlslap. Имитирует нагрузку на сервер и выдает данные хронометража. Эта утилита является частью дис­трибутива MySQL 5.1, но ее можно использовать и с более ранними версиями, начиная с 4.1. Вы можете настроить количество конкурентных соединений и передать программе с помощью либо команды SQL в командной строке, либо файла с командами SQL. Если вы не зададите режим тестирования вручную, программа сама исследует схему базы данных и автоматически сгенерирует команды SELECT.
  • MySQL Benchmark Suite (sql-bench). Вместе с сервером MySQL распространяется набор инструментов эталонного тестирования, который можно использовать для исследования нескольких различных серверов баз данных. Он однопоточный и измеряет скорость выполнения запросов сервером. Результаты показывают, какие типы операций сервер хорошо выполняет.

    Главным преимуществом этого набора является то, что он содержит множество готовых тестов, так что с его помощью легко сравнивать различные подсистемы хранения или конфигурации. Как высокоуровневый инструмент эталонного те­стирования, он полезен для сравнения общей производительности двух серверов. Кроме того, вы можете запускать подмножество тестов (например, тестировать только производительность команды UPDATE). В основном тесты нагружают про­цессоры, но есть короткие периоды, в течение которых выполняется большой объем операций дискового ввода/вывода.

    Среди основных недостатков этого инструмента можно выделить следующие: он работает в однопользовательском режиме, задействует очень маленький набор исходных значений, не допускает тестирования на данных, характерных именно для ваших условий, а его результаты могут сильно варьироваться от запуска к запуску. Поскольку он однопоточный и полностью последовательный, с его помощью невозможно оценить выигрыш от наличия нескольких процессоров, но вместе с тем он вполне пригоден для сравнения однопроцессорных серверов. Эталонное тестирование сервера базы данных требует установки драйверов DBD и языка Perl. Документацию можно найти по адресу.

  • Super Smack. Это инструмент эталонного те­стирования, тестирования под нагрузкой и создания нагрузки для MySQL и PostgreSQL. Он мощный, но довольно сложный, позволяет имитировать ра­боту нескольких пользователей, загружать тестовые данные в базу и заполнять таблицы случайно сгенерированными значениями. Эталонные тесты содержатся в smack-файлах, использующих простой язык определения клиентов, таблиц, за­просов и т. д.
  • Database Test Suite. Инструмент разработан компанией The Open Source Develop­ment Labs (OSDL) и размещен на сайте SourceForge по этому адресу, представляет собой набор утилит для запуска эталонного тестиро­вания, сходного со стандартными промышленными эталонными тестами, такими как опубликованные Советом по оценке производительности обработки транзак­ций (Transaction Processing Performance Council, TPC). В частности, инструмент dbt2 представляет собой бесплатную (но несертифицированную) реализацию теста ТРС-С OLTP. Мы неоднократно использовали его, пока не разработали специальный инструмент для MySQL.
  • Percona's TPCC-MySQL Tool. Мы создали реализацию эталонного теста, ана­логичного тесту ТРС-С, с инструментами, специально разработанными для эталонного тестирования MySQL. Обычно используем его для оценки пове­дения MySQL при нестандартных нагрузках. (Для более простых эталонных тестов применяем sysbench.) Исходный код доступен на этой странице, также в исходном репозитории хранится краткая документация по использованию.
  • sysbench. Это многопоточный инструмент для эта­лонного тестирования системы. Цель его применения — получить представление о производительности системы с точки зрения факторов, важных для работы сервера базы данных. Например, вы можете измерить производительность фай­лового ввода/вывода, планировщика операционной системы, распределения па­мяти и скорости передачи данных, потоков POSIX и самого сервера базы данных, sysbench поддерживает скрипты на языке Lua, что делает его очень гибким при тестировании множества сценариев. Это наш любимый универ­сальный инструмент эталонного тестирования MySQL, операционной системы и производительности оборудования.

 

Функция MySQL BENCHMARK()

В MySQL имеется удобная функция BENCHMARK(), которую можно использовать для тестирования скорости выполнения определенных типов операций. Для этого нужно указать количество прогонов и подлежащее выполнению выражение. Им может быть любое скалярное выражение, например скалярный подзапрос или функция. Это удоб­но для тестирования относительных скоростей некоторых операций, в частности для оценки того, какая из функций, MD5() или SHA1(), работает быстрее:

mysql> SET @input := 'hello world';
mysql> SELECT BENCHMARK(1000000, MD5(@input));
+---------------------------------+
| BENCHMARK(1000000, MD5(@input)) |
+---------------------------------+
| 0 |
+---------------------------------+
1 row in set (2.78 sec)
mysql> SELECT BENCHMARK(1000000, SHA1(@input));
+----------------------------------+
| BENCHMARK(1000000, SHA1(@input)) |
+----------------------------------+
| 0 |
+----------------------------------+
1 row in set (3.50 sec)

 

Возвращаемым значением всегда является 0, клиентское приложение сообщает, сколько времени потребовалось на выполнение запроса. В данном случае, похоже, быстрее работает MD5(). Однако корректно использовать функцию BENCHMARK() не­просто, если вы не совсем понимаете, что она делает. А она просто определяет, как быстро сервер может выполнить выражение, но не сообщает ничего об издержках на синтаксический анализ и оптимизацию. И если выражение не включает в себя пользовательскую переменную, как в нашем примере, то второй и последующие случаи выполнения сервером данного выражения могут оказаться обращением к кэшу.

Несмотря на удобство функции BENCHMARK(), мы никогда не применяем ее для реаль­ного эталонного тестирования: слишком трудно определить, что она в действитель­ности измеряет. Кроме того, ее результаты относятся лишь к небольшой части всего процесса выполнения.

Теперь рассмотрим на конкретных примерах, как работает каждая утилита. Начнем с http_load.

 

Вас заинтересует / Intresting for you:

Подсистемы хранения в MySQL
Подсистемы хранения в MySQL 2886 просмотров Ирина Светлова Sat, 07 Aug 2021, 10:44:17
Модель развития базы данных My...
Модель развития базы данных My... 1407 просмотров Ирина Светлова Thu, 10 Jan 2019, 12:29:03
Эталонное тестирование MySQL (...
Эталонное тестирование MySQL (... 2363 просмотров Ирина Светлова Sun, 13 Jan 2019, 07:30:59
Кейс по диагностике MySQL: ище...
Кейс по диагностике MySQL: ище... 2438 просмотров Светлана Комарова Sat, 23 Feb 2019, 09:37:33
Войдите чтобы комментировать