* GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
MySQLslap 运行三个阶段
第一阶段:创建用于测试的模式、表和可选的任何存储程序或数据。这个阶段使用单个客户端连接。
第二阶段:运行负载测试。这个阶段可以使用许多客户端连接。
第三阶段:清理(断开连接,删除表格,如果指定)。这个阶段使用单个客户端连接。
MySQLslap 选项
-u, --user=:用于连接到服务器的MySQL帐户的用户名。
-p, --password=:连接到服务器时使用的密码。
-S, --socket=:指定用于连接的套接字文件的名称,socket套接字就是ip+端口,包括本地ip:port, 远程ip:port)。如果系统上有多个实例,通过连接socket可以连接相应的实例,socket可以用户连接到那个实例。
-q, --query=:指定自定义的测试SQL语句,不会加上DROP SCHEMA、CREATE SCHEMA、use、DROP SCHEMA语句。一般针对select语法语句。如果自动生成测试SQL需要使用--auto-generate-sql参数。
--create=name:指定自定义的测试SQL语句,会加上DROP SCHEMA、CREATE SCHEMA、use、DROP SCHEMA语句。如果自动生成测试SQL需要使用--auto-generate-sql参数。
-a, --auto-generate-sql:当文件中未提供或未使用命令选项(--create or --query)时,自动生成测试SQL语句和测试库mysqlslap,然后测试完成再删除,不会在数据库中留下痕迹。手动指定测试SQL需要使用--create or --query参数,并且这个参数不能和--create、--query同时使用。
--no-drop:使用 --auto-generate-sql参数会在生产测试库mysqlslap先删除(DROP SCHEMA IF EXISTS)然后测试完成后再删除(DROP SCHEMA IF EXISTS),如果加上此参数那么就不会删除测试库mysqlslap了。
--create-schema=:运行测试的架构(数据库名),不指定默认为mysqlslap库。
-c, --concurrency=:表示会话连接并发量,也就是模拟多少个客户端同时执行select。也可指定多个值以逗号或者--delimiter参数指定的值做为分隔符,如:--concurrency=100,200,500。
-i, --iterations=:迭代遍数,同样的环境下整体运行几遍,默认1遍。如果只运行一遍那么Average、Minimum、Maximum的结果都是相同的,所以要在同样的环境下运行多遍才能反应真实的结果。
-F, --delimiter=:在文件或使用命令选项提供的SQL语句中使用的分隔符是什么。
--number-of-queries=:指定总的测试查询次数(并发客户端数--concurrency * 每个客户端的查询次数)。如:--number-of-queries=1000,--concurrency=100,那么每个客户端平均查询10次。
-e, --engine=:用于创建表的存储引擎。
--auto-generate-sql-load-type=:指定测试负载类型。允许的值是read(读,scan tables)、write(写,insert into tables)、key(键,read primary keys)、update(更新,update primary keys)或mixed(混合,half inserts, half scanning selects)。默认为mixed。
--auto-generate-sql-add-autoincrement:添加一个AUTO_INCREMENT列添加到自动生成的表中。
-x, --number-char-cols=:自动生成的测试表中包含多少个字符类型的列,默认1。如果测试表字符类型只有1个那么测试结果不真实。
-y, --number-int-cols=:自动生成的测试表中包含多少个数字类型的列,默认1。如果测试表数字类型只有1个那么测试结果不真实。
--only-print:打印生成实际执行的测试SQL语句,不会实际执行(仅用于浏览将要执行的SQL)。
MySQLslap 输出结果详解
Average number of seconds to run all queries:运行所有语句一遍的平均秒数
Minimum number of seconds to run all queries:运行所有语句总遍的某一个的最小秒数
Maximum number of seconds to run all queries:运行所有语句总遍的某一个的最大秒数
Number of clients running queries:客户端数量
Average number of queries per client:每个客户端运行查询的平均数
1、单个客户端运行1遍压测
$ mysqlslap --auto-generate-sql -uroot -p'123456' -S /mysql/data/3306/mysql.sock
注:加上 --only-print
参数为打印生成实际执行的测试SQL语句,不会实际执行(仅用于浏览将要执行的SQL)。
使用 --auto-generate-sql
参数自动生成测试库mysqlslap,然后测试完成再删除,不会在数据库中留下痕迹。
对输出的内容进行解释:
一个客户端同时运行--auto-generate-sql
生成的语句算一遍,计算一遍的总时间,不是某一个客户端运行时间。
一个客户端运行一遍的平均秒数0.151,总遍的某一个的最小秒数0.151,总遍的某一个的最大秒数0.151。因为只运行了1遍所以所有的值相同。
2、并发500个客户端运行2遍压测
$ mysqlslap --auto-generate-sql --concurrency=500 --iterations=2 -uroot -p'123456' -S /mysql/data/3306/mysql.sock
注:加上--only-print
参数为打印生成实际执行的测试SQL语句,不会实际执行(仅用于浏览将要执行的SQL)。使用--auto-generate-sql
参数自动生成测试库mysqlslap,然后测试完成再删除,不会在数据库中留下痕迹。
对输出的内容进行解释:
500个客户端同时运行--auto-generate-sql
生成的语句算一遍,计算一遍的总时间,不是某一个客户端运行时间。
500个客户端运行一遍的平均秒数10.046,总遍的某一个的最小秒数8.974,总遍的某一个的最大秒数11.119。因为运行了2遍那么一遍的平均秒数=(总的最小秒数+总的最大秒数)/2。
3、并发100和500个客户端运行5遍压测iINNODB存储引擎的性能进行对比
$ mysqlslap --auto-generate-sql --concurrency=100,500 --iterations=5 --engine=innodb -uroot -p'123456' -S /mysql/data/3306/mysql.sock
注:加上--only-print
参数为打印生成实际执行的测试SQL语句,不会实际执行(仅用于浏览将要执行的SQL)。使用--auto-generate-sql
参数自动生成测试库mysqlslap,然后测试完成再删除,不会在数据库中留下痕迹。
对输出的内容进行解释:
100或500个客户端同时运行--auto-generate-sql
生成的语句算一遍,计算一遍的总时间,不是某一个客户端运行时间。
100个客户端运行一遍的平均秒数1.101,总遍的某一个的最小秒数0.897,总遍的某一个的最大秒数1.316。
500个客户端运行一遍的平均秒数9.068,总遍的某一个的最小秒数8.486,总遍的某一个的最大秒数9.455。
因为客户端是5倍之差所以一遍的平均秒数,总遍的某一个的最小秒数,总遍的某一个的最大秒数也是在5倍左右。
4、使用自定义SQL脚本执行测试,将DQL语句在脚本中运行(更真实,使用大量真实存在的表进行DQL和DML)
$ vi q.sql
select * from itpux_m1; ---数据库中真实存在的表。1万行,在itpuxdb数据库中
select * from itpux_m5; ---数据库中真实存在的表。5万行,在itpuxdb数据库中
$ mysqlslap --concurrency=100 --iterations=3 --create-schema=itpuxdb --query=q.sql --delimiter=";" -uroot -p'123456' -S /mysql/data/3306/mysql.sock
注:加上--only-print
参数为打印生成实际执行的测试SQL语句,不会实际执行(仅用于浏览将要执行的SQL)。
总结:
100个客户端同时运行select * from itpux_m5
和itpux_m1
算一遍,计算一遍的总时间,不是某一个客户端运行时间。
100个客户端运行一遍的平均秒数19.189,总遍的某一个的最小秒数18.725,总遍的某一个的最大秒数19.472。
MySQLslap 运行三个阶段
第一阶段:创建用于测试的模式、表和可选的任何存储程序或数据。这个阶段使用单个客户端连接。
第二阶段:运行负载测试。这个阶段可以使用许多客户端连接。
第三阶段:清理(断开连接,删除表格,如果指定)。这个阶段使用单个客户端连接。
MySQLslap 选项
-u, --user=:用于连接到服务器的MySQL帐户的用户名。
-p, --password=:连接到服务器时使用的密码。
-S, --socket=:指定用于连接的套接字文件的名称,socket套接字就是ip+端口,包括本地ip:port, 远程ip:port)。如果系统上有多个实例,通过连接socket可以连接相应的实例,socket可以用户连接到那个实例。
-q, --query=:指定自定义的测试SQL语句,不会加上DROP SCHEMA、CREATE SCHEMA、use、DROP SCHEMA语句。一般针对select语法语句。如果自动生成测试SQL需要使用--auto-generate-sql参数。
--create=name:指定自定义的测试SQL语句,会加上DROP SCHEMA、CREATE SCHEMA、use、DROP SCHEMA语句。如果自动生成测试SQL需要使用--auto-generate-sql参数。
-a, --auto-generate-sql:当文件中未提供或未使用命令选项(--create or --query)时,自动生成测试SQL语句和测试库mysqlslap,然后测试完成再删除,不会在数据库中留下痕迹。手动指定测试SQL需要使用--create or --query参数,并且这个参数不能和--create、--query同时使用。
--no-drop:使用 --auto-generate-sql参数会在生产测试库mysqlslap先删除(DROP SCHEMA IF EXISTS)然后测试完成后再删除(DROP SCHEMA IF EXISTS),如果加上此参数那么就不会删除测试库mysqlslap了。
--create-schema=:运行测试的架构(数据库名),不指定默认为mysqlslap库。
-c, --concurrency=:表示会话连接并发量,也就是模拟多少个客户端同时执行select。也可指定多个值以逗号或者--delimiter参数指定的值做为分隔符,如:--concurrency=100,200,500。
-i, --iterations=:迭代遍数,同样的环境下整体运行几遍,默认1遍。如果只运行一遍那么Average、Minimum、Maximum的结果都是相同的,所以要在同样的环境下运行多遍才能反应真实的结果。
-F, --delimiter=:在文件或使用命令选项提供的SQL语句中使用的分隔符是什么。
--number-of-queries=:指定总的测试查询次数(并发客户端数--concurrency * 每个客户端的查询次数)。如:--number-of-queries=1000,--concurrency=100,那么每个客户端平均查询10次。
-e, --engine=:用于创建表的存储引擎。
--auto-generate-sql-load-type=:指定测试负载类型。允许的值是read(读,scan tables)、write(写,insert into tables)、key(键,read primary keys)、update(更新,update primary keys)或mixed(混合,half inserts, half scanning selects)。默认为mixed。
--auto-generate-sql-add-autoincrement:添加一个AUTO_INCREMENT列添加到自动生成的表中。
-x, --number-char-cols=:自动生成的测试表中包含多少个字符类型的列,默认1。如果测试表字符类型只有1个那么测试结果不真实。
-y, --number-int-cols=:自动生成的测试表中包含多少个数字类型的列,默认1。如果测试表数字类型只有1个那么测试结果不真实。
--only-print:打印生成实际执行的测试SQL语句,不会实际执行(仅用于浏览将要执行的SQL)。
MySQLslap 输出结果详解
Average number of seconds to run all queries:运行所有语句一遍的平均秒数
Minimum number of seconds to run all queries:运行所有语句总遍的某一个的最小秒数
Maximum number of seconds to run all queries:运行所有语句总遍的某一个的最大秒数
Number of clients running queries:客户端数量
Average number of queries per client:每个客户端运行查询的平均数
1、单个客户端运行1遍压测
$ mysqlslap --auto-generate-sql -uroot -p'123456' -S /mysql/data/3306/mysql.sock
注:加上 --only-print
参数为打印生成实际执行的测试SQL语句,不会实际执行(仅用于浏览将要执行的SQL)。
使用 --auto-generate-sql
参数自动生成测试库mysqlslap,然后测试完成再删除,不会在数据库中留下痕迹。
对输出的内容进行解释:
一个客户端同时运行
--auto-generate-sql
生成的语句算一遍,计算一遍的总时间,不是某一个客户端运行时间。一个客户端运行一遍的平均秒数0.151,总遍的某一个的最小秒数0.151,总遍的某一个的最大秒数0.151。因为只运行了1遍所以所有的值相同。
2、并发500个客户端运行2遍压测
$ mysqlslap --auto-generate-sql --concurrency=500 --iterations=2 -uroot -p'123456' -S /mysql/data/3306/mysql.sock
注:加上--only-print
参数为打印生成实际执行的测试SQL语句,不会实际执行(仅用于浏览将要执行的SQL)。使用--auto-generate-sql
参数自动生成测试库mysqlslap,然后测试完成再删除,不会在数据库中留下痕迹。
对输出的内容进行解释:
500个客户端同时运行
--auto-generate-sql
生成的语句算一遍,计算一遍的总时间,不是某一个客户端运行时间。500个客户端运行一遍的平均秒数10.046,总遍的某一个的最小秒数8.974,总遍的某一个的最大秒数11.119。因为运行了2遍那么一遍的平均秒数=(总的最小秒数+总的最大秒数)/2。
3、并发100和500个客户端运行5遍压测iINNODB存储引擎的性能进行对比
$ mysqlslap --auto-generate-sql --concurrency=100,500 --iterations=5 --engine=innodb -uroot -p'123456' -S /mysql/data/3306/mysql.sock
注:加上--only-print
参数为打印生成实际执行的测试SQL语句,不会实际执行(仅用于浏览将要执行的SQL)。使用--auto-generate-sql
参数自动生成测试库mysqlslap,然后测试完成再删除,不会在数据库中留下痕迹。
对输出的内容进行解释:
100或500个客户端同时运行
--auto-generate-sql
生成的语句算一遍,计算一遍的总时间,不是某一个客户端运行时间。100个客户端运行一遍的平均秒数1.101,总遍的某一个的最小秒数0.897,总遍的某一个的最大秒数1.316。
500个客户端运行一遍的平均秒数9.068,总遍的某一个的最小秒数8.486,总遍的某一个的最大秒数9.455。
因为客户端是5倍之差所以一遍的平均秒数,总遍的某一个的最小秒数,总遍的某一个的最大秒数也是在5倍左右。
4、使用自定义SQL脚本执行测试,将DQL语句在脚本中运行(更真实,使用大量真实存在的表进行DQL和DML)
$ vi q.sql
select * from itpux_m1; ---数据库中真实存在的表。1万行,在itpuxdb数据库中
select * from itpux_m5; ---数据库中真实存在的表。5万行,在itpuxdb数据库中
$ mysqlslap --concurrency=100 --iterations=3 --create-schema=itpuxdb --query=q.sql --delimiter=";" -uroot -p'123456' -S /mysql/data/3306/mysql.sock
注:加上--only-print
参数为打印生成实际执行的测试SQL语句,不会实际执行(仅用于浏览将要执行的SQL)。
总结:
100个客户端同时运行
select * from itpux_m5
和itpux_m1
算一遍,计算一遍的总时间,不是某一个客户端运行时间。100个客户端运行一遍的平均秒数19.189,总遍的某一个的最小秒数18.725,总遍的某一个的最大秒数19.472。
《GreatSQL运维实战》视频课程
GreatSQL数据库是一款开源免费数据库,可在普通硬件上满足金融级应用场景,具有高可用、高性能、高兼容、高安全等特性,可作为MySQL或Percona Server for MySQL的理想可选替换。
⏩GitHub : https://github.com/GreatSQL/
🆙BiliBili : https://space.bilibili.com/1363850082
(对文章有疑问或见解可去社区官网提出哦~)
加入微信交流群 | 加入QQ交流群 |