dbt2 TPC-C: оценка производительности MySQL на примере

Утилита dbt2 TPC-C для тестирования (бенчмаркинга) MySQLВ предыдущих публикациях мы уже рассказали как оценить производительность сервера MySQL или MariaDb с помощью утилит Sysbench, MySQL Benchmark Suite и http_load. В сегодняшней статье мы рассмотрим еще одну программу для тестирования - dbt2. Инструмент dbt2 из комплекта Database Test Suite представляет собой бесплатную реализацию теста ТРС-С для базы данных MySQL. ТРС-С — это спецификация (опубликована организацией ТРС), которая эмулирует нагрузку, характерную для сложной оперативной обработ­ки транзакций. Этот инструмент сообщает результаты, измеряемые в транзакциях в минуту (tpmC), а также стоимость каждой транзакции (Price/tpmC). Итоги сильно зависят от оборудования, поэтому опубликованные результаты эталонного теста ТРС-С содержат подробные характеристики серверов, использованных при его проведении.

 

Тест dbt2 не является настоящим тестом ТРС-С. Он не сертифицирован
организацией ТРС, и его результаты нельзя непосредственно сравнивать
с результатами ТРС-С.

 

Давайте посмотрим, как настраивать и запускать эталонный тест dbt2. Мы исполь­зовали его версию 0.37, наиболее свежую из подходящих для MySQL (более поздние версии содержат исправления, которые MySQL поддерживает не полностью). Вы­полнены следующие шаги.

 

1.     Подготовка данных

Следующая команда создает данные по десяти хранилищам данных в указанном ка­талоге. Вся информация по десяти хранилищам занимает надиске около 700 Мбайт. Требуемое место изменяется пропорционально количеству хранилищ данных, так что можете изменить параметр -w для создания набора данных нужного вам размера:

# src/datagen -w 10 -d /mnt/data/dbt2-w10
warehouses = 10
districts = 10
customers = 3000
items = 100000
orders = 3000
stock = 100000
new_orders = 900

Output directory of data files: /mnt/data/dbt2-w10

Generating data files for 10 warehouse(s)...
Generating item table data...
Finished item table data...
Generating warehouse table data...
Finished warehouse table data...
Generating stock table data...

 

2.     Загрузка данных в базу MySQL

Следующая команда создает базу данных с названием dbt2wl0 и заполняет ее данными, которые мы сгенерировали на предыдущем шаге (флаг -d задает имя базы, a -f  - каталог со сгенерированными данными):

# scripts/mysql/mysql_load_db.sh -d dbt2w10 -f /mnt/data/dbt2-w10/
-s /var/lib/mysql/mysql.sock

 

3.     Запуск эталонного теста

Последний шаг заключается в выполнении следующей команды из каталога scripts:

# run_mysql.sh -c 10 -w 10 -t 300 -n dbt2w10/
-u root -o /var/lib/mysql/mysql.sock-e
************************************************************************
* DBT2 test for MySQL started                                          *
*                                                                      *
* Results can be found in output/9 directory                           *
************************************************************************
*                                                                      *
* Test consists of 4 stages:                                           *
*                                                                      *
* 1. Start of client to create pool of databases connections           *
* 2. Start of driver to emulate terminals and transactions generation  *
* 3. Test                                                              *
* 4. Processing of results                                             *
*                                                                      *
************************************************************************

DATABASE NAME: dbt2w10
DATABASE USER: root
DATABASE SOCKET: /var/lib/mysql/mysql.sock
DATABASE CONNECTIONS: 10
TERMINAL THREADS: 100
SCALE FACTOR(WARHOUSES): 10
TERMINALS PER WAREHOUSE: 10
DURATION OF TEST(in sec): 300
SLEEPY in (msec) 300
ZERO DELAYS MODE: 1

Stage 1. Starting up client...
Delay for each thread - 300 msec. Will sleep for 4 sec to start 10 database
connections
CLIENT_PID = 12962

Stage 2. Starting up driver...
Delay for each thread - 300 msec. Will sleep for 34 sec to start 100 terminal
threads
All threads has spawned successfuly.

Stage 3. Starting of the test. Duration of the test 300 sec

Stage 4. Processing of results...
Shutdown clients. Send TERM signal to 12962.
Response Time (s)
Transaction      %  Average : 90th %  Total Rollbacks     %
------------ ----- ----------------- ------ --------- -----
Delivery      3.53    2.224 :  3.059   1603         0 0.00
New Order    41.24    0.659 :  1.175  18742       172 0.92
Order Status  3.86    0.684 :  1.228   1756         0 0.00
Payment      39.23    0.644 :  1.161  17827         0 0.00
Stock Level   3.59    0.652 :  1.147   1630         0 0.00

3396.95 new-order transactions per minute (NOTPM)
5.5 minute duration
0 total unknown errors
31 second(s) ramping up

 Наиболее важная информация содержится в одной из последних строк:

3396.95 new-order transactions per minute (NOTPM)

Она показывает, сколько транзакций в минуту может выполнить система. Чем боль­ше это значение, тем лучше. (Термин new-order это не специальное определение для типа транзакции, он просто обозначает, что тест имитирует новый заказ в вооб­ражаемом интернет-магазине.)

Вы можете менять некоторые параметры для создания различных эталонных тестов.

  • . Количество соединений с базой данных. Изменяя этот параметр, вы эмули­руете различные уровни параллелизма и видите, как система масштабируется.
  • . Этот параметр активизирует режим нулевой задержки и означает, что между запросами не будет задержки. Это позволяет выполнить нагрузочное тестирование базы данных. Однако такая ситуация не вполне реалистична, так как живым пользо­вателям перед генерацией очередного запроса требуется некоторое время подумать.
  • -t. Общая продолжительность эталонного теста. Выбирайте этот параметр тща­тельно, иначе результаты будут бессмысленными. Слишком малое время для эталонного тестирования производительности ввода/вывода даст неправильные результаты, поскольку у системы не будет достаточно времени для «прогрева» кэша и перехода в нормальный режим работы. Но если вы хотите выполнить эта­лонное тестирование системы в режиме загрузки процессора, то не стоит устанав­ливать это значение слишком большим, поскольку набор данных может заметно вырасти и нагрузка ляжет в основном на подсистему ввода/вывода.

Результаты эталонного теста могут дать информацию не только о производитель­ности. Например, если вы увидите слишком много откатов транзакций, то поймете: скорее всего, что-то в системе работает неправильно.

 

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

MyISAM: подсистема хранения ба...
MyISAM: подсистема хранения ба... 2644 просмотров Ирина Светлова Wed, 04 Aug 2021, 19:39:29
Оператор SELECT в MySQL 8: пол...
Оператор SELECT в MySQL 8: пол... 7293 просмотров Дэйзи ак-Макарова Sat, 07 Aug 2021, 10:47:45
InnoDB: подсистема хранения ба...
InnoDB: подсистема хранения ба... 4885 просмотров Ирина Светлова Mon, 07 Jan 2019, 06:34:07
Использование MySQL в качестве...
Использование MySQL в качестве... 2247 просмотров Андрей Волков Tue, 01 Oct 2019, 05:41:51
Войдите чтобы комментировать

apv аватар
apv ответил в теме #10100 2 года 7 мес. назад
dbt2 TPC-C - отличная тулза для оценки производительности MySQL.