mysqlslap
устанавливается вместе с MySQL:
# yum provides "*mysqlslap" ... mysql-5.1.71-1.el6.x86_64 : MySQL client programs and shared libraries Repo : base Matched from: Filename : /usr/bin/mysqlslap
# which mysqlslap /usr/bin/mysqlslap
Создаём тестовую базу:
mysql> create database mysqlslap; Query OK, 1 row affected (0.02 sec)
Назначаем привилегии:
mysql> grant all on mysqlslap.* to 'setevoy'@'localhost'; Query OK, 0 rows affected (0.03 sec)
Самый простой вариант проверки скорости работы MySQL:
$ mysqlslap -u setevoy -p --auto-generate-sql Enter password: Benchmark Average number of seconds to run all queries: 0.001 seconds Minimum number of seconds to run all queries: 0.001 seconds Maximum number of seconds to run all queries: 0.001 seconds Number of clients running queries: 1 Average number of queries per client: 0
Тут – mysqlslap
автоматически создаёт таблицу, выполняет INSERT
произвольных данных в неё, затем выполняет SELECT
и удаляет таблицу.
Что бы просмотреть все выполняемые действия – добавьте -v
, -vv
или -vvv
:
$ mysqlslap -u setevoy -p --auto-generate-sql -vvv ... Building Create Statements for Auto Building Query Statements for Auto Parsing engines to use. Starting Concurrency Test DROP SCHEMA IF EXISTS `mysqlslap`; Loading Pre-data CREATE SCHEMA `mysqlslap`; CREATE SCHEMA `mysqlslap`; CREATE TABLE `t1` (intcol1 INT(32) ,charcol1 VARCHAR(128)); INSERT INTO t1 VALUES (1804289383,'mxvtvmC9127qJNm06sGB8R92q2j7vTiiITRDGXM9ZLzkdekbWtmXKwZ2qG1llkRw5m9DHOFilEREk3q7oce8O3BEJC0woJsm6uzFAEynLH2xCsw1KQ1lT4zg9rdxBL'); INSERT INTO t1 VALUES (822890675,'97RGHZ65mNzkSrYT3zWoSbg9cNePQr1bzSk81qDgE4Oanw3rnPfGsBHSbnu1evTdFDe83ro9w4jjteQg4yoo9xHck3WNqzs54W5zEm92ikdRF48B2oz3m8gMBAl11W'); INSERT INTO t1 VALUES (1308044878,'50w46i58Giekxik0cYzfA8BZBLADEg3JhzGfZDoqvQQk0Akcic7lcJInYSsf9wqin6LDC1vzJLkJXKn5onqOy04MTw1WksCYqPl2Jg2eteqOqTLfGCvE4zTZwWvgMz'); INSERT INTO t1 VALUES (964445884,'DPh7kD1E6f4MMQk1ioopsoIIcoD83DD8Wu7689K6oHTAjD3Hts6lYGv8x9G0EL0k87q8G2ExJjz2o3KhnIJBbEJYFROTpO5pNvxgyBT9nSCbNO9AiKL9QYhi0x3hL9'); ... SELECT intcol1,charcol1 FROM t1; INSERT INTO t1 VALUES (866596855,'naQuzhMt1IrZIJMkbLAKBNNKKK2sCknzI5uHeGAgQuDd5SLgpN0smODyc7qorTo1QaI5qLl97qmCIzl0Mds81x7TxpIoJyqlY0iEDRNKA1PS0AKEn5NhuMAr3KgEIM'); SELECT intcol1,charcol1 FROM t1; INSERT INTO t1 VALUES (364531492,'qMa5SuKo4M5OM7ldvisSc6WK9rsG9E8sSixocHdgfa5uiiNTGFxkDJ4EAwWC2e4NL1BpAgWiFRcp1zIH6F1BayPdmwphatwnmzdwgzWnQ6SRxmcvtd6JRYwEKdvuWr'); Generating stats Benchmark Average number of seconds to run all queries: 0.001 seconds Minimum number of seconds to run all queries: 0.001 seconds Maximum number of seconds to run all queries: 0.001 seconds Number of clients running queries: 1 Average number of queries per client: 0 DROP SCHEMA IF EXISTS `mysqlslap`;
Что бы добавить эмуляцию нескольких одновременных подключений – используйте опцию --concurrency
:
$ mysqlslap -u setevoy -p --auto-generate-sql --concurrency 10 Enter password: Benchmark Average number of seconds to run all queries: 0.444 seconds Minimum number of seconds to run all queries: 0.444 seconds Maximum number of seconds to run all queries: 0.444 seconds Number of clients running queries: 10 Average number of queries per client: 0
Что бы повторить тестирование несколько раз – имеется опция --iterations
:
$ mysqlslap -u setevoy -p --auto-generate-sql --concurrency 10 --iterations 10 Enter password: Benchmark Average number of seconds to run all queries: 0.016 seconds Minimum number of seconds to run all queries: 0.015 seconds Maximum number of seconds to run all queries: 0.018 seconds Number of clients running queries: 10 Average number of queries per client: 0
Что бы указать количество запросов, выполняемых каждым “клиентом” – используйте опцию --number-of-queries
. Её число будет поделено на кол-во “клиентов”.
Например – при вызове mysqlslap
с опциями --concurrency=10
--number-of-queries=100
– 100/10, следовательно каждый “клиент” выполнит по 10 запросов:
$ mysqlslap -u setevoy -p --auto-generate-sql --concurrency=10 --number-of-queries=100 Enter password: Benchmark Average number of seconds to run all queries: 0.024 seconds Minimum number of seconds to run all queries: 0.024 seconds Maximum number of seconds to run all queries: 0.024 seconds Number of clients running queries: 10 Average number of queries per client: 10
По-умолчанию – mysqlslap создаёт таблицу с двумя столбцами – один int и один var.
Если вы хотите изменить эти значения и увеличить таблицу – используйте опции --number-char-cols
для указания количества столбцов типа char
, и --number-int-cols
– для столбцов ineteger
:
$ mysqlslap -u setevoy -p --auto-generate-sql --concurrency 10 --number-of-queries 100 --number-char-cols=5 --number-int-cols=10 Enter password: Benchmark Average number of seconds to run all queries: 0.040 seconds Minimum number of seconds to run all queries: 0.040 seconds Maximum number of seconds to run all queries: 0.040 seconds Number of clients running queries: 10 Average number of queries per client: 10
Наиболее удобная опция – вызов собственных запросов с помощью опции --query
:
$ mysqlslap -u setevoy -p --create-schema=setevoyorgua_db1 --query="select post_author, post_date from db_posts;" -vvv Parsing engines to use. Enter password: Starting Concurrency Test Generating primary key list connected! select post_author, post_date from db_posts;; Generating stats Benchmark Average number of seconds to run all queries: 0.000 seconds Minimum number of seconds to run all queries: 0.000 seconds Maximum number of seconds to run all queries: 0.000 seconds Number of clients running queries: 1 Average number of queries per client: 1
Опция --create-schema
служит для указания используемой базы данных.
Так же – в --query
можно указать путь к sql
-файлу с запросом.
И ещё одна приятная возможность – опция – --engine
, с помощью которой можно явно задать тип таблиц для тестирования и сравнения:
$ mysqlslap -u setevoy -p --auto-generate-sql --concurrency 10 --number-of-queries 100 --number-char-cols=5 --number-int-cols=10 --engine=innodb Enter password: Benchmark Running for engine innodb Average number of seconds to run all queries: 0.175 seconds Minimum number of seconds to run all queries: 0.175 seconds Maximum number of seconds to run all queries: 0.175 seconds Number of clients running queries: 10 Average number of queries per client: 10
$ mysqlslap -u setevoy -p --auto-generate-sql --concurrency 10 --number-of-queries 100 --number-char-cols=5 --number-int-cols=10 --engine=myisam Enter password: Benchmark Running for engine myisam Average number of seconds to run all queries: 0.040 seconds Minimum number of seconds to run all queries: 0.040 seconds Maximum number of seconds to run all queries: 0.040 seconds Number of clients running queries: 10 Average number of queries per client: 10
$ mysqlslap -u setevoy -p --auto-generate-sql --concurrency 10 --number-of-queries 100 --number-char-cols=5 --number-int-cols=10 --engine=memory Enter password: Benchmark Running for engine memory Average number of seconds to run all queries: 0.033 seconds Minimum number of seconds to run all queries: 0.033 seconds Maximum number of seconds to run all queries: 0.033 seconds Number of clients running queries: 10 Average number of queries per client: 10
Полный список опций можно посмотреть командой:
$ mysqlslap --help
Либо на странице http://dev.mysql.com/doc/refman/5.1/en/mysqlslap.html