一个人的狂欢

mysql压力测试

MySQL从5.1.4版开始带有一个压力测试工具mysqlslap,通过模拟多个并发客户端访问
mysql来执行测试。 "man mysqlslap" 可以看到有下面一条示例

mysqlslap --delimiter=";" --create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)"  --query="SELECT * FROM a" --concurrency=50 --iterations=200 -uroot -p

–create ="用于生成一个表,"后绪的查询
–query 用这个表做测试,这里一般是insert ,或select 或update 语句
–create 可以是几条sql语句 ,也可以是一个文件名,里面写满sql语句

指定并发数: —concurrency ,可以多个值,逗号分开

mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --debug-info -uroot -proot

指定查询总次数: —number-of-queries
-a, –auto-generate-sql 自动生成一条测试用的语句, 不用你写sql进行测试
比如这句的结果是(分别测试了并发为50,和100时,总共进行1000次访问花费的时间 )
这里列出了最大、最小、平均值。均为相同的值,因为 只进行了一次测试 ,
重复多次(迭代多次): —iterations

进行5 次测试 可显示为最大 最小 平均值
mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --debug-info  -uroot -proot

Benchmark
Average number of seconds to run all queries: 0.204 seconds
Minimum number of seconds to run all queries: 0.204 seconds
Maximum number of seconds to run all queries: 0.204 seconds
Number of clients running queries: 50
Average number of queries per client: 20

Benchmark
Average number of seconds to run all queries: 0.260 seconds
Minimum number of seconds to run all queries: 0.260 seconds
Maximum number of seconds to run all queries: 0.260 seconds
Number of clients running queries: 100
Average number of queries per client: 10

User time 0.13, System time 0.07
Maximum resident set size 5640, Integral resident set size 0
Non-physical pagefaults 2371, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 8661, Involuntary context switches 19

指定引擎: —engine

mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --engine=myisam,innodb --debug-info

其他参数 –help

-auto-generate-sql, -a
自动生成测试表和数据(用系统自己生成的SQL语句来测试)

-auto-generate-sql-load-type=type
测试语句的类型。取值包括:read,key,write,update和mixed(多种混合,默认)。

-number-char-cols=N, -x N
自动生成的测试表中包含多少个字符类型的列,默认1

-number-int-cols=N, -y N
自动生成的测试表中包含多少个数字类型的列,默认1

-number-of-queries=N
总的测试查询次数(并发客户数×每客户查询次数)

另外
select benchmark( 5000000, md5( 'test' ) );
可以做压力测试 ,如执行5000000 次md5()

Comments

comments powered by Disqus