- 浏览: 912805 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
天天来注册:
...
try catch finally 用法 -
tadpole_java:
谢谢你的分享。
二十七、Qt数据库(七)QSqlRelationalTableModel(转) -
359449749tan:
android之EditText文本监听(addTextChangedListener) -
michael_wang:
人过留名 多谢分享
Android NOtification 使用 -
wilsonchen:
wangqi0614 写道这个删除是删除所有的把?能不能值删除 ...
Android的SharedPreferences保存与删除数据简单实例
第一、mysqlslap
mysqlslap是一个mysql官方提供的压力测试工具。以下是比较重要的参数:
–defaults-file,配置文件存放位置
–concurrency,并发数
–engines,引擎
–iterations,迭代的实验次数
–socket,socket文件位置
自动测试:
–auto-generate-sql,自动产生测试SQL
–auto-generate-sql-load-type,测试SQL的类型。类型有mixed,update,write,key,read。
–number-of-queries,执行的SQL总数量
–number-int-cols,表内int列的数量
–number-char-cols,表内char列的数量
例如 1:
shell>mysqlslap –defaults-file=/u01/mysql1/mysql/my.cnf –concurrency=50,100 –iterations=1 –number-int-cols=4 –auto-generate-sql –auto-generate-sql-load-type=write –engine=myisam –number-of-queries=200 -S/tmp/mysql1.sock
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.016 seconds
Minimum number of seconds to run all queries: 0.016 seconds
Maximum number of seconds to run all queries: 0.016 seconds
Number of clients running queries: 50
Average number of queries per client: 4
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.265 seconds
Minimum number of seconds to run all queries: 0.265 seconds
Maximum number of seconds to run all queries: 0.265 seconds
Number of clients running queries: 100
Average number of queries per client: 2
指定数据库的测试:
–create-schema,指定数据库名称
–query,指定SQL语句,可以定位到某个包含SQL的文件
例如2:
shell>mysqlslap –defaults-file=/u01/mysql1/mysql/my.cnf –concurrency=25,50 –iterations=1 –create-schema=test –query=/u01/test.sql -S/tmp/mysql1.sock
Benchmark
Average number of seconds to run all queries: 0.018 seconds
Minimum number of seconds to run all queries: 0.018 seconds
Maximum number of seconds to run all queries: 0.018 seconds
Number of clients running queries: 25
Average number of queries per client: 1
Benchmark
Average number of seconds to run all queries: 0.011 seconds
Minimum number of seconds to run all queries: 0.011 seconds
Maximum number of seconds to run all queries: 0.011 seconds
Number of clients running queries: 50
Average number of queries per client: 1
碰到的问题:
测试过程中,当并发数超过300时,就会出错
mysqlslap: Could not create thread
由于系统默认的“stack size”为10M,这样并发300个进程时,就消耗了10M X 300 = 3000M 内存,超过系统可用内存导致。
解决办法:
通过修改”stack size“为1M(1024),这样并发3000个进程就相当于系统默认的300个进程的内存使用量。
ulimit -s 1024
例如3:
MySQL从5.1.4版开始带有一个压力测试工具mysqlslap,通过模拟多个并发客户端访问mysql来执行测试,使用起来非常的简单。通过mysqlslap –help可以获得可用的选项,这里列一些主要的参数,更详细的说明参考官方手册。
–auto-generate-sql, -a
自动生成测试表和数据–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
总的测试查询次数–query=name,-q
使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。–create-schema
测试的schema,MySQL中schema也就是database–commint=N
多少条DML后提交一次–compress, -C
如果服务器和客户端支持都压缩,则压缩信息传递–concurrency=N, -c N
并发量,也就是模拟多少个客户端同时执行select。可指定多个值,以逗号或者–delimiter参数指定的值做为分隔符–engine=engine_name, -e engine_name
创建测试表所使用的存储引擎,可指定多个–iterations=N, -i N
测试执行的迭代次数–detach=N
执行N条语句后断开重连–debug-info, -T
打印内存和CPU的信息–only-print
只打印测试语句而不实际执行
测试的过程需要生成测试表,插入测试数据,这个mysqlslap可以自动生成,默认生成一个mysqlslap的schema,如果已经存在则先删除,这里要注意了,不要用–create-schema指定已经存在的库,否则后果可能很严重。可以用–only-print来打印实际的测试过程:
DROP SCHEMA IF EXISTS `mysqlslap`;
CREATE SCHEMA `mysqlslap`;
use mysqlslap;
CREATE TABLE `t1` (intcol1 INT(32) ,charcol1 VARCHAR(128));
INSERT INTO t1 VALUES (1804289383,'mxvtvmC9127qJNm06sGB8R92q2j7vTiiITRDGXM9ZLzkdekbWtmXKwZ2qG1llkRw5m9DHOFilEREk3q7oce8O3BEJC0woJsm6uzFAEynLH2xCsw1KQ1lT4zg9rdxBL');
...
SELECT intcol1,charcol1 FROM t1;
INSERT INTO t1 VALUES (364531492,'qMa5SuKo4M5OM7ldvisSc6WK9rsG9E8sSixocHdgfa5uiiNTGFxkDJ4EAwWC2e4NL1BpAgWiFRcp1zIH6F1BayPdmwphatwnmzdwgzWnQ6SRxmcvtd6JRYwEKdvuWr');
DROP SCHEMA IF EXISTS `mysqlslap`;
可以看到最后由删除一开始创建的schema的动作,整个测试完成后不会在数据库中留下痕迹。假如我们执行一次测试,分别50和100个并发,执行1000次总查询,那么:
Benchmark
Average number of seconds to run all queries: 0.375 seconds
Minimum number of seconds to run all queries: 0.375 seconds
Maximum number of seconds to run all queries: 0.375 seconds
Number of clients running queries: 50
Average number of queries per client: 20
Benchmark
Average number of seconds to run all queries: 0.453 seconds
Minimum number of seconds to run all queries: 0.453 seconds
Maximum number of seconds to run all queries: 0.453 seconds
Number of clients running queries: 100
Average number of queries per client: 10
User time 0.29, System time 0.11
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 4032, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 7319, Involuntary context switches 681
上结果可以看出,50和100个并发分别得到一次测试结果(Benchmark),并发数越多,执行完所有查询的时间越长。为了准确起见,可以多迭代测试几次:
Benchmark
Average number of seconds to run all queries: 0.380 seconds
Minimum number of seconds to run all queries: 0.377 seconds
Maximum number of seconds to run all queries: 0.385 seconds
Number of clients running queries: 50
Average number of queries per client: 20
Benchmark
Average number of seconds to run all queries: 0.447 seconds
Minimum number of seconds to run all queries: 0.444 seconds
Maximum number of seconds to run all queries: 0.451 seconds
Number of clients running queries: 100
Average number of queries per client: 10
User time 1.44, System time 0.67
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 17922, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 36796, Involuntary context switches 4093
测试同时不同的存储引擎的性能进行对比:
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.200 seconds
Minimum number of seconds to run all queries: 0.188 seconds
Maximum number of seconds to run all queries: 0.210 seconds
Number of clients running queries: 50
Average number of queries per client: 20
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.238 seconds
Minimum number of seconds to run all queries: 0.228 seconds
Maximum number of seconds to run all queries: 0.251 seconds
Number of clients running queries: 100
Average number of queries per client: 10
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.375 seconds
Minimum number of seconds to run all queries: 0.370 seconds
Maximum number of seconds to run all queries: 0.379 seconds
Number of clients running queries: 50
Average number of queries per client: 20
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.443 seconds
Minimum number of seconds to run all queries: 0.440 seconds
Maximum number of seconds to run all queries: 0.447 seconds
Number of clients running queries: 100
Average number of queries per client: 10
User time 2.83, System time 1.66
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 34692, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 87306, Involuntary context switches 10326
第二、SysBench
SysBench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。它主要包括以下几种方式的测试:
1、cpu性能
2、磁盘io性能
3、调度程序性能
4、内存分配及传输速度
5、POSIX线程性能
6、数据库性能(OLTP基准测试)
目前sysbench主要支持 MySQL,pgsql,oracle 这3种数据库。
一、安装
首先,在 http://sourceforge.net/projects/sysbench 下载源码包。
接下来,按照以下步骤安装:
tar zxf sysbench-0.4.8.tar.gz && cd sysbench-0.4.8 &&./configure && make && make install && strip /usr/local/bin/sysbench
以上方法适用于 MySQL 安装在标准默认目录下的情况,如果 MySQL 并不是安装在标准目录下的话,那么就需要自己指定 MySQL 的路径了。比如我的 MySQL 喜欢自己安装在 /usr/local/mysql 下,则按照以下方法编译:
/configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib && make && make install
当然了,用上面的参数编译的话,就要确保你的 MySQL lib目录下有对应的 so 文件,如果没有,可以自己下载 devel 或者 share 包来安装。
另外,如果想要让 sysbench 支持 pgsql/oracle 的话,就需要在编译的时候加上参数
--with-pgsql
或者
--with-oracle
这2个参数默认是关闭的,只有 MySQL 是默认支持的。
二、开始测试
编译成功之后,就要开始测试各种性能了,测试的方法官网网站上也提到一些,但涉及到 OLTP 测试的部分却不够准确。在这里我大致提一下:
1、cpu性能测试
sysbench --test=cpu --cpu-max-prime=20000 run
cpu测试主要是进行素数的加法运算,在上面的例子中,指定了最大的素数为 20000,自己可以根据机器cpu的性能来适当调整数值。
2、线程测试
sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run
3、磁盘IO性能测试
sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw preparesysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw runsysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw cleanup
上述参数指定了最大创建16个线程,创建的文件总大小为3G,文件读写模式为随机读。
4、内存测试
sysbench --test=memory --memory-block-size=8k --memory-total-size=4G run
上述参数指定了本次测试整个过程是在内存中传输 4G 的数据量,每个 block 大小为 8K。
5、OLTP测试
sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=1000000 --mysql-socket=/tmp/mysql.sock --mysql-user=test --mysql-host=localhost --mysql-password=test prepare
上述参数指定了本次测试的表存储引擎类型为 myisam,这里需要注意的是,官方网站上的参数有一处有误,即 --mysql-table-engine,官方网站上写的是 --mysql-table-type,这个应该是没有及时更新导致的。另外,指定了表最大记录数为 1000000,其他参数就很好理解了,主要是指定登录方式。测试 OLTP 时,可以自己先创建数据库 sbtest,或者自己用参数 --mysql-db 来指定其他数据库。--mysql-table-engine 还可以指定为 innodb 等 MySQL 支持的表存储引擎类型。
第三、JDBHammer
JDBHammer 是一个数据库压力测试工具,它可以模拟指定数量的并发用户进行数据库查询操作并给出测试的结果报表。当前只支持 MySQL 数据库。
发表评论
-
SQL语句的练习
2014-04-18 15:42 838第一题:查询101课程比102课程成绩高的所有学生的学号 ... -
MySql中的常见技术
2014-04-14 23:08 816引用 第一部分:引擎选择 MySQL 存储引擎该如何选择 一、 ... -
SQL语句大全(转链接)
2014-04-12 00:00 921http://www.cnblogs.com/yubinfen ... -
Oracle SID在本机上已经存在,请指定一个不同的SID”的解决办法
2012-08-23 17:36 1333windows 系统: 1、 开始->设置->控制面板-> ... -
PHP环境配置:Apach+Tomcat+mysql+php
2011-11-05 15:22 67491》下载需要的软件: Apache : apa ... -
主键与外键
2011-10-13 20:08 1068一、什么是主键、外键 ... -
编译数据库ODBC
2011-08-17 19:15 1110单独编译~\src\plugins\sqldrivers\od ... -
将xml中的数据导入到数据库
2011-08-07 17:06 1189最简单的读取,把xml的一级子元素当做一条记录插入数据库 ... -
图形安装MySql
2011-08-04 12:41 843http://www.360doc.com/content/1 ... -
MyEclipse连接Hibernate项目
2011-08-04 12:06 889http://hi.baidu.com/bigbig_88/b ... -
Java工作流引擎 JBoss jBPM 3.1.2 演示示例
2011-08-04 01:32 978jBPM是由JBoss开发的工作流和业务流程管理引擎,可以用于 ... -
关于Struts+JBPM+Hibernate+MYsql的结合
2011-08-04 01:28 857一,首先在eclipse里新建 ... -
Qt中combox连接数据库
2011-08-01 00:15 5103示例源码: #include "widget.h& ... -
SQL语句进行插入
2011-07-25 11:31 937Connection conn = null; Prepa ... -
XML 数据库
2011-05-01 14:46 722http://msdn.microsoft.com/en-us ... -
POI+XOM+Java操作Excel与XML之间转换
2011-05-01 12:54 1234http://www.iteye.com/topic/6834 ... -
使用SQL语句查询表中重复记录并删除
2011-04-30 20:33 2185文章一: 假设有一样 ... -
利用oleDB对象,将数据库中全部表转换成XML文件
2011-04-30 19:27 787... -
poi文件下载地址 poi.jar
2011-04-26 11:46 1194http://xiao5461.blog.163.com/bl ... -
最近几天搭建MySql且连接问题总结
2011-04-26 11:19 8761.mysql的默认安装文件在 C:\Program File ...
相关推荐
MySQL 压力测试工具 mysqlslap MySQL 压力测试工具 mysqlslap 是一个功能强大且易于使用的压力测试工具,从 MySQL 5.1.4 版本开始提供。通过模拟多个并发客户端访问 MySQL,以执行测试,使用起来非常简单。 ...
MySQL压力测试工具——sysbench详解 sysbench是一个强大的多线程、多事件驱动的系统和数据库性能测试工具。它不仅可以评估系统的CPU、内存、磁盘I/O等硬件性能,还能针对MySQL数据库进行复杂的基准测试,帮助开发者...
MySQL 压力测试工具 mysqlslap 资料 MySQL 压力测试工具 mysqlslap 是 MySQL 从 5.1.4 版开始带有的一个压力测试工具,通过模拟多个并发客户端访问 MySQL 来执行测试,使用起来非常的简单。 mysqlslap 工具的主要...
MySQL 压力测试工具 sysbench 介绍 sysbench 是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。目前 sysbench 主要支持 MySQL, pgsql, oracle 这 3 种数据库。 ...
MySQL压力测试工具mysqlslap是MySQL数据库管理系统提供的一种性能测试工具,从5.1.4版本开始被引入。它的主要作用是模拟多个并发客户端对MySQL服务器进行访问,从而评估和测试MySQL服务器在高负载条件下的性能表现。...
MySQL压力测试工具,使用PHP编写 请注意:本项目仅用于学习和测试,不要用于违法行为,造成的一切后果由使用者自行承担。 这是一个使用PHP编写MySQL性能测试工具,用于检测数据库的性能,可承载的并发数量等。 经过...
在给定文件中,提到了如何使用数据库压力测试工具来进行这类测试,以及如何设计和实现这些工具。以下是从文件中提取的关键知识点: 1. **数据库压力测试工具的重要性和应用场景**: - 数据库压力测试工具用于验证...
MySQL从5.1.4版开始带有一个压力测试工具mysqlslap,通过模拟多个并发客户端访问mysql来执行测试,使用起来非常的简单。通过mysqlslap –help可以获得可用的选项,这里列一些主要的参数,更详细的说明参考官方手册。...
mysqlslap MySQL压力测试工具 mysql proxy安装配置 mysql 触发器 mysql与MongoDB语法对比 mysql分表的3种方法 MySQL数据库扩展小记 mysql架构方案 MySQL水平分区表实际操作总结 Mysql水平分表 mysql水平分表和垂直...
MySQL性能测试工具是数据库管理员和开发人员用于评估MySQL数据库系统性能的重要工具。这些工具通过模拟大量并发用户执行各种SQL操作,如插入(增)、删除、更新(改)和查询(查),来测量数据库的响应时间、吞吐量...
### 叶金荣_MySQL压力测试经验 #### 一、引言 在IT行业中,数据库作为企业核心系统的基石,其稳定性和性能至关重要。随着业务的发展和技术的进步,对数据库的压力测试变得越来越重要。叶金荣先生是一位在数据库领域...
MySQL压力测试是为了评估数据库在高负载条件下的性能和稳定性,通常包括读写操作的速度、并发处理能力以及资源消耗等指标。以下是一个简单的MySQL压力测试脚本实例,它涉及了数据库表的创建、数据插入以及自定义函数...
SQLSERVER 压力测试工具、mysql压力测试工具、数据库压测工具