Chinaunix首页 | 论坛 | 博客
  • 博客访问: 373093
  • 博文数量: 75
  • 博客积分: 1732
  • 博客等级: 上尉
  • 技术积分: 812
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-11 16:02
个人简介

博客很久没有更新了,原因是大多数时间都忙在研究技术上,却懒得腾时间出来把技术分享,最近在开源力量上开课《Mongodb管理与维护》,让屌丝们从0到精通,敬请关注。本博客技术原创更新滞后一些,找时间更新有关mysql,mongodb等内容,谢谢大家关注。

文章分类

全部博文(75)

文章存档

2021年(1)

2011年(20)

2010年(40)

2009年(7)

2008年(7)

分类: Mysql/postgreSQL

2010-07-06 16:36:20

构 建高性能的MYSQL数据库-sql-bench(单一组件测试)(2009-12-22 10:32:04)

 

 

sql-bench是 mysql自带做基准测试的工具,在mysql目录下有个sql-bench子目录,里面存放着测试程序,这些程序都是perl实现的。下面介绍几个常用 的程序:

# /usr/local/mysql/sql-bench/run-all-tests –server=mysql –user=root –password=123456 –log –fast

以上是全局 测试,包括增删改查等操作,以快速的方式进行事务操作。如果出现以下错误:

install_driver(mysql) failed: Can’t locate DBD/mysql.pm

解决方法是 安装一个DBD-MYSQL包即可,下载地址为:

安装方法:

# wget

# tar zxvf DBD-mysql-2.9005.tar.gz

# cd DBD-mysql-2.9005

# perl Makefile.PL –testdb=test –testuser=root –testpassword=”123456″

# make

# make test

# make install

到此 DBD-MYSQL就安装完成了,当然如果没有出现上面那个错误可以不用操作这些步骤。

# /usr/local/mysql/sql-bench/test-insert –server=mysql –user=root –password=123456

这个命令是 测试数据库的插入性能,默认是插入300000条数据。

# /usr/local/mysql/sql-bench/test-connect –server=mysql –user=root –password=123456

可想而知, 这个命令则是测试数据库连接性能。

# /usr/local/mysql/sql-bench/test-select –server=mysql –user=root –password=123456

这个当然是 测试数据库的查询性能了。

其实 MYSQL自带的还有其他各种测试,这里就不一一介绍了,基本是大同小异,至于测试结果,主要显示是CPU耗费的资源,包括用户,系统的占用情况,当测试 结束后,它会自动将结果以文本文件格式保存到 /usr/local/mysql/sql-bench/output 目录下,方便以后分析。

4、 super smack(单一组件测试)

super smack是一个强大的广受赞誉的压力测试工具,支持MySQL和PostgreSQL数据库。下载地址为:

下载,解压 并安装:

# wget

# tar xvzf super-smack-1.3.tar.gz

# cd super-smack-1.3

# ./configure –prefix=/usr/local/supersmack –with-mysql –with-mysql-lib=/usr/local/mysql/lib –with-mysql-include=/usr/local/mysql/include

# make & make install

配置测试信 息:

# cp /usr/share/smacks/select-key.smack ./select-key.smack

# vi select-key.smack

文件中的信 息,基本就修改用户名和密码即可,保证数据库可以正常操作,下面开始测试:

# /usr/local/supersmack/bin/super-smack -d mysql select-key.smack 10 100

这个命令意 思模拟10个用户,每个用户进行100次事务操作。命令首先会通过执行 gen-data -n 90000 -f %12-12s%n,%25-25s,%n,%d’ ,将输出的信息插入到 /var/smack-data/words.dat文件中。然后在test数据库中创建一个http_auth表,最后将 words.dat文件的信息插入到http_auth表中。测试结果如下:

测试结果分 析:

来自10个 模拟用户,连接时间最长为79ms,最小0ms,平均为16ms,super-smack总共执行了2000个查询,每个查询都小于1毫秒,服务器平均每 秒执行7802.08次select_index型查询。


构建高性能的MYSQL数据库(二) 把那些瓶颈给找出来


一、从哪里入手

     当一台MYSQL服务器搭建完成并可以正常运行时,是不是我们的脚步就停止了,自以为可以开始使用了,对专业人士来说其实还需要更多的相关优化和设置。怎 么去优化?怎么去设置?首先我们得找到它的瓶颈,我现在所了解的有两种方法,一是基准测试,二就是程序分析,他们有着密切的联系,因为有时是一样的。通过 对你的MYSQL性能做基准测试,查找那部分存在问题需要优化,那部分则运行正常,相反程序分析则帮助我们统计MYSQL运行的花费时间和消耗资源。换句 话说:基准测试是MYSQL的各项是否发挥出最大的性能,程序分析则是为什么MYSQL的这个选项会占用更多的性能。

二、基准测试

    针对MYSQL的基准测试有两种测试方法,一个是整站式测试,另一个则是单一组件测试。整站式测试包括除MYSQL以外的其他和MYSQL所管理的程序, 如WEB程序,操作系统,磁盘I/O等等。单一组件是专门针对MYSQL做的测试,包括增删改查速度测试,不同存储引擎测试等等。下面我们将介绍几款相关 的基准测试工具:

1、http_load(整站式测试)

   http_load是运行在linux操作系统上的一个针对网站做压力测试的开源工具。

  下载地址:

  http_load以并行复用的方式运行测试网站服务器的吞吐量和负载,它可以以单个进程去运行,这样不会搞死你的客户端,这也是和大部分压力测试工具所 不同的一点,还有它还可以测试https页面。

   开始安装:   

  1. #wget 
  2. # tar xvzf http_load-12mar2006.tar.gz 
  3. # cd http_load-12mar2006 
  4. # make 
首先创建一个urls.txt文件,里面加入要测试的URL地址,以换行分割,这里需要注意一点就是因为我们讲的是测试MYSQL,所以你的页 面一定要存在MYSQL的操作语句,而且要符合你的标准网站的数据量,如下:
  1. http://killker.com/blog/index.php 
  2. http://killker.com/blog/?p=114 
  3. http://killker.com/blog/?p=102 
现在我们开始测试每秒所能承受的页面访问量(吞吐量,单位时间内的事物处理能力)
  1. #./http_load -paraller 5 -fetches 100 urls.txt 
以上命令意思是同时使用5个进程,随机访问urls.txt中的网站地址,总共访问100次。下面是测试结果:
呵呵~~ 我这个小VPS居然每秒还能同时访问两个页面。(2.59194 fetches/sec)
我们再测试下预期中能承受多大的访问压力(持续一段时间的大量用户并发环境)
  1. #./http_load -rate 2 -seconds 10 urls.txt 
以上命令意思是在以频率为2的访问量持续10秒钟,下面是运行结果:
以下是分析结果:
a、14 fetches, 6 max parallel, 398917 bytes, in 10 seconds
      总共发送了14个请求,最大的并发进程是6个,总共传输398917bytes,运行为10秒
b、28494.1 mean bytes/connection
     每次请求平均传输数据量为28494.1bytes
c、1.4 fetches/sec, 39891.7 bytes/sec
     每秒请求页面平均为1.4,吞吐量为39891.7bytes
d、最后的则是每次请求的响应时间和返回时间,包括平均,最大,最小。
哈哈~~~ 这个工具似乎比apache的ab强多了。
 
2、sysbench(整站式测试)
      sysbench是一款开源的性能测试工具,它不但可以测试服务器的CPU,内存,磁盘I/O,还可以测试各种数据库,包括 MYSQL,ORACLE,POSTGRESQL,那我们要讲的是怎么测试MYSQL。
      sysbench按照指定数量开启线程,每个线程都与MYSQL建立一个连接,建立连接后每个线程都不停地进行事务操作,打开事务,然后进行插入,查询, 更新等操作,提交事务后然后再开启新的事务。所有的事务在连接后都会创建一个sbtest表,所有的操作都是针对这个表,测试结束后会统计一些相关信息, 包括每秒事务处理数,平均响应时间等。
     下载地址:
     解压并编译安装sysbench:
  
  1. # tar -zxvf sysbench-0.4.6.tar.gz 
  2. # cd sysbench-0.4.6.tar.gz 
  3. # ./configure –prefix=/usr/local/sysbench –with-mysql-includes=/usr/local/mysql/include/ –with-mysql-libs=/usr/local/mysql
  4. # make & make install 

    如果在编译过程中出现一下错误信息:

请下载并安装 包:

  1. # wget 
  2. # rpm -ivh MySQL-shared-compat-5.0.41-0.rhel4.i386.rpm 

安装后重新编译安装sysbench即可。

sysbench采用OLTP基准测试的:

  1. # /usr/local/sysbench/bin/sysbench –test=oltp –mysql-table-engine=myisam –mysql-db=test –oltp-table-size=1000000 –mysql-host=localhost –mysql-user=root –mysql-password=123456 –mysql-socket=/tmp/mysql.sock prepare 

以上是为基准测试做准备,它会在指定的test数据库创建一个sbtest表,然后自动插入1000000条数据,下面开始运行测试性能。

  1. # /usr/local/sysbench/bin/sysbench –max-requests=1000 –test=oltp –oltp-table-size=10000 –mysql-db=test –mysql-host=localhost –mysql-user=root –mysql-password=123456 –mysql-socket=/tmp/mysql.sock –oltp-read-only run 

现在是以请求为1000进行10000条数据的事务操作,我的主要是VPS,所以只能把数字变小点测试,以下是测试结果:

测试结果分析:

OLTP测试统计:总共执行了1000次请求事务操作,每秒钟平均为112.71次,读/写请求是14000 次,每秒钟平均为1577.89次,其他运行为2000次,每秒平均是225.41次。

测试完成摘要:总共花费了8.8726s,最终请求数为1000次,每次请求最小花费2.8ms,平均 8.84ms,最大是1262.53ms,接近百分之九十五的是8.21ms

小节总结:作为全方位性能测试工具,sysbench对CPU,内存,磁盘I/O也有很好的性能测试,详细请访问官方文档:

 3、sql-bench(单一组件测试)

   sql-bench是mysql自带做基准测试的工具,在mysql目录下有个sql-bench子目录,里面存放着测试程序,这些程序都是perl实现 的。下面介绍几个常用的程序:

  1. # /usr/local/mysql/sql-bench/run-all-tests –server=mysql –user=root –password=123456 –log –fast 

以上是全局测试,包括增删改查等操作,以快速的方式进行事务操作。如果出现以下错误:

  1. install_driver(mysql) failed: Can’t locate DBD/mysql.pm

解决方法是安装一个DBD-MYSQL包即可,下载地址为:

安装方法:

  1. # wget  
  2. # tar zxvf DBD-mysql-2.9005.tar.gz 
  3. # cd DBD-mysql-2.9005 
  4. # perl Makefile.PL –testdb=test –testuser=root –testpassword="123456" 
  5. # make 
  6. # make test 
  7. # make install 

到此DBD-MYSQL就安装完成了,当然如果没有出现上面那个错误可以不用操作这些步骤。

  1. # /usr/local/mysql/sql-bench/test-insert –server=mysql –user=root –password=123456 

 这个命令是测试数据库的插入性能,默认是插入300000条数据。

  1. # /usr/local/mysql/sql-bench/test-connect –server=mysql –user=root –password=123456 

 可想而知,这个命令则是测试数据库连接性能。

  1. # /usr/local/mysql/sql-bench/test-select –server=mysql –user=root –password=123456  

这个当然是测试数据库的查询性能了。

其实MYSQL自带的还有其他各种测试,这里就不一一介绍了,基本是大同小异,至于测试结果,主要显示是CPU耗费的资源,包括用户,系统的占用情 况,当测试结束后,它会自动将结果以文本文件格式保存到 /usr/local/mysql/sql-bench/output 目录下,方便以后分析。

4、super smack(单一组件测试)

 super smack是一个强大的广受赞誉的压力测试工具,支持MySQL和PostgreSQL数据库。下载地址为:

  

下载,解压并安装:

  1. # wget  
  2. # tar xvzf super-smack-1.3.tar.gz 
  3. # cd super-smack-1.3 
  4. # ./configure –prefix=/usr/local/supersmack –with-mysql –with-mysql-lib=/usr/local/mysql/lib –with-mysql-include=/usr/local/mysql/include 
  5. # make & make install 

配置测试信息:

  1. # cp /usr/share/smacks/select-key.smack ./select-key.smack 
  2. # vi select-key.smack 

文件中的信息,基本就修改用户名和密码即可,保证数据库可以正常操作,下面开始测试:

  1. # /usr/local/supersmack/bin/super-smack -d mysql select-key.smack 10 100 

 这个命令意思模拟10个用户,每个用户进行100次事务操作。命令首先会通过执行 gen-data -n 90000 -f %12-12s%n,%25-25s,%n,%d’ ,将输出的信息插入到 /var/smack-data/words.dat文件中。然后在test数据库中创建一个http_auth表,最后将 words.dat文件的信息插入到http_auth表中。测试结果如下:

测试结果分析:

 来自10个模拟用户,连接时间最长为79ms,最小0ms,平均为16ms,super-smack总共执行了2000个查询,每个查询都小于1 毫秒,服务器平均每秒执行7802.08次select_index型查询。

阅读(2773) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~