Показать страницуИстория страницыСсылки сюдаCopy this pageExport to MarkdownODT преобразованиеНаверх Вы загрузили старую версию документа! Сохранив её, вы создадите новую текущую версию с этим содержимым. Медиафайлы{{tag>monioring benchmark test mysql postgres}} ====== Sysbench - Тестирование производительности ====== SysBench - это модульный, кроссплатформенный и многопоточный инструмент тестирования для оценки параметров операционной системы, которые важны для системы, работающей с базой данных под интенсивной нагрузкой. Идея этого набора тестов состоит в том, чтобы быстро получить представление о производительности системы без настройки сложных тестов базы данных или даже без установки базы данных вообще. ===== sysbench ===== ^ Вариант ^ Описание | Значение по умолчанию | | --threads | Общее количество рабочих потоков, которые нужно создать | 1 | | --events | Ограничение на общее количество запросов. 0 (по умолчанию) означает отсутствие ограничений. | 0 | | --time | Ограничение общего времени выполнения в секундах. 0 означает отсутствие ограничений | 10 | | --warmup-time | Выполнять события в течение этого количества секунд с отключенной статистикой до фактического запуска теста с включенной статистикой. Это полезно, если вы хотите исключить начальный период выполнения теста из статистики. Во многих тестах начальный период не является репрезентативным, поскольку процессору/базе данных/страницам и другим кэшам требуется некоторое время для прогрева. | 0 | | --rate | Средняя скорость транзакций. Число указывает, сколько событий (транзакций) в секунду должно выполняться всеми потоками в среднем. 0 (по умолчанию) означает неограниченную скорость, т.е. события выполняются максимально быстро. | 0 | | --thread-init-timeout | Время ожидания в секундах для инициализации рабочих потоков | 30 | | --thread-stack-size | Размер стека для каждого потока | 32К | | --report-interval | Периодически сообщать промежуточную статистику с заданным интервалом в секундах. Обратите внимание, что статистика, создаваемая этой опцией, является поинтервальной, а не кумулятивной. 0 отключает промежуточные отчеты | 0 | | --debug | Распечатать дополнительную информацию об отладке | выключенный | | --validate | Провести проверку результатов испытаний, где это возможно. | выключенный | | --help | Распечатать справку по общему синтаксису или по указанному тесту и выйти. | выключенный | | --verbosity | Уровень детализации (0 — только критические сообщения, 5 — отладка) | 4 | | --percentile | sysbench измеряет время выполнения всех обработанных запросов для отображения статистической информации, такой как минимальное, среднее и максимальное время выполнения. Для большинства тестов также полезно знать значение времени выполнения запроса, соответствующее некоторому процентилю (например, процентиль 95% означает, что мы должны отбросить 5% самых длинных запросов и выбрать максимальное значение из оставшихся). Эта опция позволяет указать процентильный ранг времени выполнения запроса для подсчета. | 95 | | --luajit-cmd | выполнить команду управления LuaJIT. Эта опция эквивалентна luajit -j. Дополнительную информацию см. в документации LuaJIT. | | ==== Примеры ==== <code bash> $ sysbench /usr/share/sysbench/oltp_read_write.lua --threads=10 --events=100000000 --time=300 --mysql-host=10.1.71.41 --mysql-db=sbtest --mysql-user=sbtest --mysql-password=sbtest_pass --mysql-port=3307 --tables=100 --table-size=1000000 --range_selects=off --db-ps-mode=disable --report-interval=1 cleanup </code> <code bash> $ sysbench /usr/share/sysbench/oltp_read_write.lua --threads=10 --events=100000000 --mysql-host=10.1.71.41 --mysql-db=sbtest --mysql-user=sbtest --mysql-password=sbtest_pass --mysql-port=3307 --tables=100 --table-size=10000000 prepare </code> <code bash> $ sysbench /usr/share/sysbench/oltp_read_write.lua --threads=10 --events=100000000 --time=300 --mysql-host=10.1.71.41 --mysql-db=sbtest --mysql-user=sbtest --mysql-password=sbtest_pass --mysql-port=3307 --tables=100 --delete_inserts=10 --index_updates=10 --non_index_updates=10 --table-size=10000000 --db-ps-mode=disable --report-interval=1 run </code> === Проверяем производительность CPU === Выполнение теста: <code bash> $ sysbench --test=cpu --cpu-max-prime=20000 run </code> === Тестируем дисковую подсистему === Подготовка тестовых файлов: <code bash> $ sysbench --test=fileio --file-total-size=70G prepare </code> Выполнение теста: <code bash> $ sysbench --test=fileio --file-total-size=70G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run </code> Очистка временных файлов: <code bash> $ sysbench --test=fileio cleanup </code> === Тест MySQL OLTP === Подготовка к тестированию: <code bash> $ sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=pass prepare </code> Запуск теста: <code bash> $ sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=pass --max-time=60 --oltp-read-only=off --max-requests=0 --num-threads=8 run </code> Очистка: <code bash> $ sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=pass cleanup </code> === Тест MySQL oltp_read_write === Подготовка к тестированию: <code bash> $ sysbench /usr/share/sysbench/oltp_read_write.lua --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=pass prepare </code> Запуск теста: <code bash> $ sysbench /usr/share/sysbench/oltp_read_write.lua --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=pass --max-time=60 --oltp-read-only=off --max-requests=0 --num-threads=8 run </code> Очистка: <code bash> $ sysbench /usr/share/sysbench/oltp_read_write.lua --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=pass cleanup </code> === Как измерить производительность PostgreSQL? === <code sql> BEGIN; UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; SELECT abalance FROM pgbench_accounts WHERE aid = :aid; UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); END; </code> Для создания тестовых данных выполняем команду: <code bash> $ pgbench -h localhost -U test_user -i -s 100 test </code> Выполняем тестирование: <code bash> $ pgbench -h localhost -U test_user -t 5000 -c 4 -j 4 test </code> === А как же производительность PHP? === [[https://github.com/florinsky/af-php-bench|PHP Benchmark tool]] Для запуска: <code bash> $ wget https://github.com/florinsky/af-php-bench/raw/master/build/phpbm.phar $ php phpbm.phar </code> ===== Документация / Ссылки ===== * https://github.com/akopytov/sysbench * https://severalnines.com/blog/how-benchmark-performance-mysql-mariadb-using-sysbench/ * https://habr.com/ru/companies/simbirsoft/articles/271485/ * https://github.com/florinsky/af-php-bench/tree/masterСохранитьПросмотрРазличияОтменить Сводка изменений Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии: CC0 1.0 Universal