Первоначально написано Майкл Коберн
Учитывая недавнее волнение и интерес к OpenStack, я хотел убедиться, что я готов провести соответствующие оценки производительности системы. Я обычно обращаюсь к sysbench, так как он поставляется с различными тестами (доступ через интерфейс –test = option), включая:
- fileio — File I / O test
- CPU — тест производительности процессора
- память — тест скорости памяти функций
- потоки — Тест производительности подсистемы потоков
- mutex — тест производительности Mutex
Как вы видите, sysbench позволяет вам выделить многие фундаментальные компоненты вашего оборудования и инфраструктуры, такие как дисковая подсистема, а также ваши процессоры и память. Существует дополнительная опция, предназначенная для проведения синтетического стресс-тестирования MySQL, и я был удивлен, когда не увидел его в вышеприведенном списке в версии 0.5, так как он раньше отображался как «oltp — OLTP test». Что случилось с –test = oltp ??
Этот список взят из последней версии sysbench, которая составляет 0.5 — вы будете в этой версии только в том случае, если вы соберете ее самостоятельно или используете пакет, предоставленный Фредериком Декампом.(спасибо, Лефред!) Если вы используете версию из EPEL, Ubuntu 14.04 или Debian 7, вы все еще используете версию 0.4.12 (проверьте с помощью sysbench –version). Вы заметите, что тестовый тип OLTP больше не отображается. Что дает? Я чесал голову, пока не спросил о Percona IRC и обнаружил, что в 0.5 стандартный тип теста OLTP был заменен другим синтаксисом, что вместо передачи параметров в sysbench вы вместо ссылок на скрипты, написанные на lua. Преимущество здесь в том, что теперь у вас есть интерфейс для написания ваших собственных специфических нагрузочных тестов (при условии, что вы знаете lua, но это не сложно). Для тех из вас, кто хочет запустить предконсервированные нагрузочные тесты, они все еще существуют, но вы должны иметь их как часть установки RPM или иным образом скопировать в вашу систему.
К счастью, если вы используете пакет, предоставленный lefred, вы найдете эти сценарии lua здесь (это использование Amazon ami по состоянию на 4 августа 2014 г.):
[root@pxc-control ~]# ls -l /usr/share/doc/sysbench/tests/db/ total 44 -rw-r--r-- 1 root root 3585 Sep 7 2012 common.lua -rw-r--r-- 1 root root 340 Sep 7 2012 delete.lua -rw-r--r-- 1 root root 830 Sep 7 2012 insert.lua -rw-r--r-- 1 root root 2925 Sep 7 2012 oltp.lua -rw-r--r-- 1 root root 342 Sep 7 2012 oltp_simple.lua -rw-r--r-- 1 root root 425 Sep 7 2012 parallel_prepare.lua -rw-r--r-- 1 root root 343 Sep 7 2012 select.lua -rw-r--r-- 1 root root 3964 Sep 7 2012 select_random_points.lua -rw-r--r-- 1 root root 4066 Sep 7 2012 select_random_ranges.lua -rw-r--r-- 1 root root 343 Sep 7 2012 update_index.lua -rw-r--r-- 1 root root 552 Sep 7 2012 update_non_index.lua
Таким образом, хитрость (если вы хотите это так назвать) заключается в том, что вместо передачи одного слова в директиву –test вместо этого вы передаете полный путь к сценарию lua.
Это старый способ (sysbench 0.4.12 из репозитория EPEL):
--test=oltp --oltp-test-mode=complex
Это новый способ (sysbench 0.5):
--test=/usr/share/doc/sysbench/tests/db/insert.lua
Вот пример теста, который я запускаю через haproxy для 3-узлового кластера PXC, выполняющего тип теста только для INSERT, чтобы вы могли увидеть полный синтаксис, который я передаю sysbench:
[root@pxc-control ~]# cat sys_haproxy.sh #!/bin/bash sysbench --test=/usr/share/doc/sysbench/tests/db/insert.lua --mysql-host=pxc-control --mysql-port=9999 --mysql-user=sysbench-haproxy --mysql-password=sysbench-haproxy --mysql-db=sbtest --mysql-table-type=innodb --oltp-test-mode=complex --oltp-read-only=off --oltp-reconnect=on --oltp-table-size=1000000 --max-requests=100000000 --num-threads=3 --report-interval=1 --report-checkpoints=10 --tx-rate=24 $1
А вот как выглядит скрипт insert.lua:
[root@pxc-control ~]# cat /usr/share/doc/sysbench/tests/db/insert.lua pathtest = string.match(test, "(.*/)") or "" dofile(pathtest .. "common.lua") function thread_init(thread_id) set_vars() end function event(thread_id) local table_name local i local c_val local k_val local pad_val table_name = "sbtest".. sb_rand_uniform(1, oltp_tables_count) if (oltp_auto_inc) then i = 0 else i = sb_rand_uniq(1, oltp_table_size) end k_val = sb_rand(1, oltp_table_size) c_val = sb_rand_str([[ ###########-###########-###########-###########-###########-###########-###########-###########-###########-###########]]) pad_val = sb_rand_str([[ ###########-###########-###########-###########-###########]]) rs = db_query("INSERT INTO " .. table_name .. " (id, k, c, pad) VALUES " .. string.format("(%d, %d, '%s', '%s')",i, k_val, c_val, pad_val)) end
Что мне больше всего нравится в sysbench 0.5 (за пределами интерфейса lua, конечно же!), Так это то, что он теперь поставляется с опцией –report-interval (которую я обычно устанавливаю как = 1), так что вы получаете вывод во время работы скрипта , Больше не нужно ждать до конца теста, чтобы получить обратную связь! Вот пример sysbench 0.5 в действии, который может выполнить тест INSERT через локальный экземпляр haproxy и выполнить запись в три узла в кластере PXC, таких как OpenStack Trove:
[root@pxc-control ~]# ./sys_haproxy.sh run sysbench 0.5: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 3 Report intermediate results every 1 second(s) Random number generator seed is 0 and will be ignored Threads started! [ 1s] threads: 3, tps: 0.00, reads/s: 0.00, writes/s: 1099.28, response time: 9.86ms (95%) [ 2s] threads: 3, tps: 0.00, reads/s: 0.00, writes/s: 973.02, response time: 10.77ms (95%) [ 3s] threads: 3, tps: 0.00, reads/s: 0.00, writes/s: 1181.01, response time: 6.23ms (95%) [ 4s] threads: 3, tps: 0.00, reads/s: 0.00, writes/s: 1103.00, response time: 6.77ms (95%)
Я также хотел бы обратить ваше внимание на сообщение в блоге Нилнандана Джоши из команды поддержки Percona, где он описывает метод сборки sysbench 0.5 на Debian 7. Спасибо Нилу за то, что указал на это!
Я надеюсь, что это поможет другим, которые обновятся до sysbench 0.5, а затем зададут вопросы о том, куда направился –test = oltp. Мне бы очень хотелось услышать ваши собственные сценарии использования sysbench и то, публикует ли кто-нибудь еще сценарии lua для собственного нагрузочного тестирования!