Sysbench: оценка производительности MySQL на примере

Утилита Sysbench для тестирования (бенчмаркинга) MySQLС помощью инструмента sysbench можно запускать различные эталонные тесты. Он разработан не только для тестирования производительности базы данных, но и для определения того, насколько хорошо работает система как сервер баз данных. Фактически авторы Петр и Вадим изначально разработали его для запуска эталонных тестов, особенно важных для оценки производительности MySQL, даже несмотря на то, что они на самом деле не являются эталонными тестами MySQL. Мы начнем с некоторых тестов, не характерных для MySQL и измеряющих производительность подсистем, которые определяют общие ограничения системы. Затем покажем, как измерять производительность базы данных.



Мы настоятельно рекомендуем познакомиться с sysbench. Это один из самых по­лезных инструментов в наборе пользователя MySQL. И хотя существует множество других инструментов, которые выполняют часть его функций, эти инструменты не всегда надежны и полученные результаты не всегда отражают производительность MySQL. Например, вы можете тестировать производительность ввода/вывода с по­мощью iozone, bonnie++ и ряда других инструментов, однако потребуется приложить много усилий, чтобы заставить их тестировать ввод/вывод таким же образом, как InnoDB нагружает диски. А вот sysbench ведет себя так же, как InnoDB, поэтому его тест fileio вполне релевантен в поставляемом виде.

 

Эталонное тестирование процессора с помощью инструмента sysbench

Стандартным тестом подсистемы является эталонный тест процессора, в котором для вычисления простых чисел до указанного максимума используются 64-разряд­ные целые числа. Мы запустили этот тест на двух серверах, каждый под управлением GNU/Linux, и сравнили результаты. Вот характеристики оборудования первого сервера:

[server1 ~]$ cat /proc/cpuinfo
...
model name : AMD Opteron(tm) Processor 246
stepping : 1
cpu MHz : 1992.857
cache size : 1024 KB

И вот как прошел запуск эталонного теста:

[server1 ~]$ sysbench --test=cpu --cpu-max-prime=20000 run
sysbench v0.4.8: multithreaded system evaluation benchmark
...
Test execution summary: total time: 121.7404s

У второго сервера другой процессор:

[server2 ~]$ cat /proc/cpuinfo
...
model name : Intel(R) Xeon(R) CPU 5130 @ 2.00GHz
stepping : 6
cpu MHz : 1995.005

Вот результат его эталонного теста:

[server1 ~]$ sysbench --test=cpu --cpu-max-prime=20000 run
sysbench v0.4.8: multithreaded system evaluation benchmark
...
Test execution summary: total time: 61.8596s

Результат показывает общее время, требуемое для вычисления простых чисел, кото­рое очень легко сравнить. В данном случае второй сервер выполнил эталонный тест приблизительно в два раза быстрее, чем первый.

 

Эталонное тестирование файлового ввода/вывода с помощью инструмента sysbench

Эталонный тест fileio измеряет параметры работы системы при различных нагрузках ввода/вывода. Он очень полезен для сравнения жестких дисков, RAID-контроллеров и режимов RAID, а также настройки подсистемы ввода/вывода. Тест эмулирует работу InnoDB с дисками.

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

$ sysbench --test=fileio --file-total-size=150G prepare

Эта команда создает файлы в текущем рабочем каталоге, на этапе запуска в него будет производиться запись и из него — чтение.

Вторым шагом является запуск теста. Для тестирования производительности при раз­личных типах нагрузки на систему ввода/вывода используется несколько параметров:

  • seqwi— последовательная запись;
  • seqrewr — последовательная перезапись;
  • seqrd — последовательное чтение;
  • rndrd — произвольное чтение;
  • rndwr — произвольная запись;
  • rndrw — произвольное чтение в сочетании с произвольной записью.

Следующая команда запускает тест ввода/вывода с произвольными чтением/записью:

$ sysbench --test=fileio --file-total-size=150G --file-test-mode=rndrw/
--init-rng=on --max-time=300 --max-requests=0 run

И вот результаты:

sysbench v0.4.8: multithreaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from timer.

Extra file open flags: 0
128 files, 1.1719Gb each
150Gb total file size
Block size 16Kb
Number of random requests for random IO: 10000
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Threads started!
Time limit exceeded, exiting...
Done.

Operations performed: 40260 Read, 26840 Write, 85785 Other = 152885 Total
Read 629.06Mb Written 419.38Mb Total transferred 1.0239Gb (3.4948Mb/sec)
   223.67 Requests/sec executed

Test execution summary:
   total time: 300.0004s
   total number of events: 67100
   total time taken by event execution: 254.4601
   per-request statistics:
      min: 0.0000s
      avg: 0.0038s
      max: 0.5628s
      approx. 95 percentile: 0.0099s

Threads fairness:
   events (avg/stddev): 67100.0000/0.00
   execution time (avg/stddev): 254.4601/0.00

Получен большой объем информации. Для измерения производительности подсисте­мы ввода/вывода наиболее интересны количество запросов в секунду и общая про­пускная способность — в данном случае 223,67 запроса в секунду и 3,4948 Мбайт/с соответственно. Эти значения дают хорошее представление о производительности диска.

Закончив тестирование, можете запустить очистку, чтобы удалить файлы, созданные программой sysbench для эталонного тестирования:

$ sysbench --test=fileio --file-total-size=150G cleanup

 

Эталонное тестирование OLTP-системы с помощью инструмента sysbench

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

$ sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test/
--mysql-user=root prepare
sysbench v0.4.8: multithreaded system evaluation benchmark

No DB drivers specified, using mysql
Creating table 'sbtest'...
Creating 1000000 records in table 'sbtest'...

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

$ sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root/
--max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 run
sysbench v0.4.8: multithreaded system evaluation benchmark

No DB drivers specified, using mysql
WARNING: Preparing of "BEGIN" is unsupported, using emulation
(last message repeated 7 times)
Running the test with following options:
Number of threads: 8

Doing OLTP test.
Running mixed OLTP test
Doing read-only test
Using Special distribution (12 iterations, 1 pct of values are returned in 75 pct
cases)
Using "BEGIN" for starting transactions
Using auto_inc on the id column
Threads started!
Time limit exceeded, exiting...
(last message repeated 7 times)
Done.

OLTP test statistics:
   queries performed:
      read: 179606
      write: 0
      other: 25658
      total: 205264
   transactions: 12829 (213.07 per sec.)
   deadlocks: 0 (0.00 per sec.)
   read/write requests: 179606 (2982.92 per sec.)
   other operations: 25658 (426.13 per sec.)

Test execution summary:
   total time: 60.2114s
   total number of events: 12829
   total time taken by event execution: 480.2086

   per-request statistics:
      min: 0.0030s
      avg: 0.0374s
      max: 1.9106s
      approx. 95 percentile: 0.1163s

Threads fairness:
   events (avg/stddev): 1603.6250/70.66
   execution time (avg/stddev): 60.0261/0.06

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

  • счетчик транзакций;
  • количество транзакций в секунду;
  • временная статистика (минимальное, среднее, максимальное время и 95-й про­центиль);
  • татистика равномерности загрузки потоков, которая показывает, насколько справедливо распределялась между ними имитированная нагрузка.

Приводимый пример применим к версии 4 инструмента sysbench, которая доступ­на в предварительно созданных двоичных файлах на SourceForge.net. Но если вы скомпилируете sysbench из исходного кода на Launchpad (это легко и просто!), то сможете воспользоваться большим количеством улучшений, внесенных в вер­сию 5. Вы сможете запускать эталонные тесты не для одной таблицы, а для не­скольких, через равные интервалы (например, каждые 10 секунд) видеть пропуск­ную способность и время отклика. Эти показатели очень важны для понимания поведения системы.

 

Другие возможности инструмента sysbench

Инструмент sysbench может запускать другие эталонные тесты системы, которые непосредственно не измеряют производительность сервера базы данных.

  • memory. Выполняет последовательные операции чтения или записи в памяти.
  • threads. Проводит эталонное тестирование производительности планировщика потоков. Особенно полезно тестировать поведение планировщика при высоких нагрузках.
  • mutex. Измеряет производительность работы мьютексов, эмулируя ситуацию, когда все потоки большую часть времени конкурируют, захватывая мьютекс только на короткое время (мьютекс — это структура данных, которая гарантирует взаимоисключающий доступ к некоторому ресурсу, предотвращая возникновение проблем, связанных с конкурентным доступом).
  • seqwr. Измеряет производительность последовательной записи. Это очень важно для тестирования практических пределов производительности систе­мы. Тест может показать, насколько хорошо работает кэш RAID-контроллера, и предупредить, если результаты оказываются необычными. Например, если отсутствует кэш записи с резервным питанием от батареи, а диск обрабатывает 3000 запросов в секунду, то что-то идет не так и вашим данным определенно угрожает опасность.

Кроме параметра, задающего режим тестирования (--test), инструмент sysbench принимает и некоторые другие общие параметры, такие как --num-threads, --max-requests и --maxtime. Подробное описание этих параметров вы найдете в соответ­ствующей технической документации.

 

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

Модель развития базы данных My...
Модель развития базы данных My... 787 просмотров Ирина Светлова Thu, 10 Jan 2019, 12:29:03
Выбор оптимальных типов данных...
Выбор оптимальных типов данных... 3593 просмотров Валерий Павлюков Sun, 27 Oct 2019, 15:24:19
Использование MySQL в качестве...
Использование MySQL в качестве... 1317 просмотров Андрей Волков Tue, 01 Oct 2019, 05:41:51
Обзор версий MySQL - какой рел...
Обзор версий MySQL - какой рел... 4951 просмотров Ирина Светлова Fri, 05 Feb 2021, 17:19:41
Войдите чтобы комментировать