Язык

Новости компании

JMeter: нагрузочное тестирование бaзы данных Часть I

July 23, 2013

database load testing

Предлагаем вашему вниманию серию статей от специалистов QA отдела Soft Industry, которые помогут разобраться что такое JMeter и как он может пригодится при нагрузочном тестировании базы данных.

Apache JMeter — это мощный инструмент для проведения нагрузочного тестирования, с возможностью одновременного создания большого количества запросов благодаря параллельной работе на нескольких компьютерах. JMeter подходит для тестирования как статических, так и динамических ресурсов или объектов (файлов, Servlets, Perl scripts, Java Objects, Data Bases and Queries, FTP Servers и т.д.). Он также может быть использован для проведения графического анализа производительности или же для нагрузочного тестирования сервера, скрипта, объекта.

Рассмотрим вариант использования JMeter для нагрузочного тестирования базы данных(БД).

Нам понадобиться:

  1. собственно сам JMeter;
  2. БД данных – какая нравится. JMeter будет работать с любой, в настройках будет меняться только jdbc драйвер;
  3. драйвер, который будет стучаться к БД.

Драйвер для psql можно скачать здесь http://jdbc.postgresql.org/download.html .

Драйвер для mysql — http://www.mysql.com/products/connector/ . Его необходимо распаковать и в папке установки JMeter, разместить в папку /lib.

В JMeter есть два основных элемента, о которых необходимо знать для работы с базой данных. С одним из них мы ознакомимся в сегодняшней статье — это JDBC Connection Configuration из раздела Config Element.

Итак, конфигурируем:

Test Plan → Add → Thread Group

Thread Group → Add → Config Element → JDBC Connection Configuration:

jmeter settings

Для psql прописываем его драйвер вот в таком виде:

jmeter configure

JDBC Connection Configuration — это элемент, управляющий пулом (набором) соединений до БД. В поле Variable Name задайте имя, чтобы разделить пулы если мы тестируем сразу несколько БД или если необходимо эмулировать разные виды нагрузки на одну и ту же базу одновременно.

Дальше идут  настройки самого пула. Пул имеет два режима работы: sharing mode и single connection per thread. В поле Max Number of Connections  можно задать положительное число, тогда  будет использоваться режим sharing mode. Если значение  будет равно нулю, то будет использоваться режим single connection per thread.

А теперь немного о каждом из них. При работе пула в режиме sharing mode появится некоторый набор открытых соединений и любой поток для выполнения запроса должен сначала получить свободное соединение и только потом через него уже делать запрос к базе данных. В большинстве java-приложений используется именно эта стратегия, и поэтому для эмулирования работы приложения нужно использовать такой подход.

Single connection per thread означает, что на каждый поток  в thread group будет создаваться свой отдельный сокет для соединения с БД. Благодаря такой схеме, у нас не будет конкуренции за соединение между потоками, но количество jdbc-сессий будет равно количеству потоков. Такой режим работы нужен для  определения оптимального количества сессий для заданного типа запросов. Во время теста, мы можем менять количество потоков  в thread groups и таким образом управлять количеством одновременных сессий.

Pool Timeout это таймаут на выдачу сессии пулом. Если все сессии будут заняты в течении timeout, то поток, выполняющий jdbc-запрос получит ошибку. Эта опция  нужна для работы в режиме sharing mode.

Idle Cleanup Interval это период времени, по которому закрываются неактивные сессии. Таким образом,  мы  экономим ресурсы нагрузочной станции и тестируемой БД при достаточном количестве коннектов.

Про Auto Commit и Transaction Isolation думаю говорить не имеет смысла. Обычно такие параметры настраиваются на стороне БД, но здесь их можно переопределить.

В следующей статье мы поговорим о том, как настроить две последующие секции Connection Validation by Pool и Database Connection Configuration, а также поможем разобраться со вторым элементом JMeter JDBC Request из раздела Samplers.

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