Новости компании
JMeter: нагрузочное тестирование бaзы данных Часть I
July 23, 2013

Предлагаем вашему вниманию серию статей от специалистов QA отдела Soft Industry, которые помогут разобраться что такое JMeter и как он может пригодится при нагрузочном тестировании базы данных.
Apache JMeter — это мощный инструмент для проведения нагрузочного тестирования, с возможностью одновременного создания большого количества запросов благодаря параллельной работе на нескольких компьютерах. JMeter подходит для тестирования как статических, так и динамических ресурсов или объектов (файлов, Servlets, Perl scripts, Java Objects, Data Bases and Queries, FTP Servers и т.д.). Он также может быть использован для проведения графического анализа производительности или же для нагрузочного тестирования сервера, скрипта, объекта.
Рассмотрим вариант использования JMeter для нагрузочного тестирования базы данных(БД).
Нам понадобиться:
- собственно сам JMeter;
- БД данных – какая нравится. JMeter будет работать с любой, в настройках будет меняться только jdbc драйвер;
- драйвер, который будет стучаться к БД.
Драйвер для 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:
Для psql прописываем его драйвер вот в таком виде:
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.
Следите за обновлениями или подпишитесь на рассылку новостей, чтобы всегда быть в курсе последующих публикаций.