设为首页收藏本站

LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区!

 找回密码
 注册

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 614|回复: 6

伪线上测试 [复制链接]

Rank: 7Rank: 7Rank: 7

签到
37
注册时间
2008-11-27
最后登录
2012-5-8
在线时间
197 小时
阅读权限
100
积分
3075
帖子
502
主题
103
精华
1
UID
632

LT同学

发表于 2011-10-28 21:58:39 |显示全部楼层
本帖最后由 ytjwt 于 2011-10-28 22:01 编辑

分享一下模拟线上环境测试Mysql的一个方法


在我们工作中的测试,一般情况下,分为功能测试与性能测试,当我们进行性能测试,如对闪存卡进行性能测试,对DELL服务器、HP服务器服务器进行测试,首先肯定是在线下通过压力工具如mysqlslapsysbenchtpcc等进行压力测试,然后拿到线上进行长期的测试,但是有时候,我们线下测试很好,但是拿到线上去,有的服务可能会表现很好,但是有的确很差,这样又得下线,极大的影响了我们的实施成本与实施成本,所以就想出在线下测试后,我们模拟线上环境进行一次伪线上压力测试,这样最终的我们的测试结果就会更精准了。

我的思路是:通过一定方法得到线上的查询语句,利用http://www.percona.com/doc/percona-toolkit/的工具。

pt-log-player对与主库同步的非线上从库(确保我们的测试是在有读有写的情况)进行压力测试,已查看最大所能达到的QPS,这样经过一对比我们就能得出一个伪线上的测试结果了。

我实施的步骤如下:

1、  想办法得到查询语句

这有两个方法:

(1)利用tcpdump抓包得到

具体语句如下:

Atcpdump -s 65535 -x -nn -q -tttt -i any -c 100000 port3805 >tcp.txt

B、把抓到的包分解成slow log格式

pt-query-digest--type tcpdump
--no-report --print --watch-server10.73.18.100:3872 tcp.txt >slow.txt

(2)利用SET GLOBAL long_query_time = .000001;把所有的查询都录入到慢日志里,不过这种方式的情况话,在标准Mysql版本中,没有thread id,而percona却有,而我们的切分都是通过thread id来切分的,所以我们必须强制添加thread id

如下:

未添加thread id的

# Time: 111028 21:43:05

# User@Host: elink[elink] @  [10.69.14.40]

# Query_time: 1.090582  Lock_time: 0.000066 Rows_sent: 10  Rows_examined: 10

SET timestamp=1319809385;

SELECT  *  FROM ****;



所以在标准版本,我们需要通过脚本去生成,

添加过thread id的slow log如下

  1. # Time: 111027 17:47:31.596770

  2. # User@Host: fans_r[fans_r] @ 10.75.14.59 []


  3. # Thread_id: 70328550

  4. # Query_time: 0.000000  Lock_time: 0.000000  Rows_sent: 0  Rows_examined: 0

  5. use fans;
复制代码

往slow log添加thread id的脚本见最后

2、利用pt-log-player按Thread_id把慢日志分解成多个可以执行的文件,这样我们能多线程的执行这些分解出来的语句了

pt-log-player
--split Thread_id
--session-files 16 --base-dir ./sessionsslow.txt

3、执行语句

pt-log-player--play ./sessions --base-dir ./results --only-select
h=***,u=***,p=****,P=***,D=****


pt-log-player会最大限度的去执行语句,这样我们就能得到一个很大的压力,如果压力还不够,我们可以在多台前端机器执行pt-log-player –play,最终mysql会达到一个最大的QPS。这样我们就能对比出到底适合不适合线上运行。

除了做测试外,这种伪测试还能给我们的一个最大帮助就是,评估一个端口的承受能力,譬如:我们能把测试出来的QPS与线上目前的QPS比,在与将来需要承受的压力比,我们就知道需要扩容多少台从库以解决压力问题了。



往slow log添加thread id的脚本如下(务必把slow log拷贝其他目录,然后对拷贝的slow log进行操作,请不要操作线上使用的slow log)




  1. #!/bin/bash

  2. function  usage()
  3. {
  4. echo "usage:  sh  $0 -f port.txt"
  5. }

  6. if [[ "$#" ==  0 ]]  
  7.   then
  8.      usage
  9.      exit 1
  10. fi
  11. >tmp_replay_slow_yangting.txt


  12. while getopts f:h: OPTION
  13. do
  14.    case "$OPTION" in
  15.        f)file_name=$OPTARG
  16.        ;;
  17.        h)usage
  18.          exit 0
  19.        ;;
  20.        *)
  21.            usage      
  22.             exit 1
  23.           ;;
  24.    esac
  25. done

  26. line_num=1
  27. while read line_name
  28.    do
  29.       if echo "$line_name"|grep '^# Query_time'
  30.          then
  31.           echo "# Thread_id: $line_num" >>tmp_replay_slow_yangting.txt
  32.       fi
  33.        echo "$line_name">>tmp_replay_slow_yangting.txt
  34.      let line_num++
  35.    done<$file_name

  36. mv tmp_replay_slow_yangting.txt $file_name
复制代码



http://hi.baidu.com/ytjwt/

论坛元老

菲糖果返利网

Rank: 8Rank: 8

注册时间
2011-2-23
最后登录
2012-5-22
在线时间
295 小时
阅读权限
90
积分
24653
帖子
187
主题
7
精华
0
UID
12125
发表于 2011-10-28 22:47:21 |显示全部楼层
学习了...
菲糖果返利网,比价购物新选择,您身边的省钱专家~

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-6-26
最后登录
2012-5-22
在线时间
224 小时
阅读权限
90
积分
18121
帖子
334
主题
5
精华
0
UID
14691
发表于 2011-10-29 18:32:39 |显示全部楼层
路过,瞅瞅。 。 。 。 。 。 。

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-1-5
最后登录
2012-5-22
在线时间
162 小时
阅读权限
90
积分
12764
帖子
540
主题
15
精华
0
UID
11685
发表于 2011-10-30 10:33:03 |显示全部楼层
关注一下。。

使用道具 举报

Rank: 6Rank: 6

注册时间
2010-3-23
最后登录
2012-5-17
在线时间
47 小时
阅读权限
70
积分
2692
帖子
16
主题
5
精华
0
UID
8445
发表于 2012-1-10 17:06:25 |显示全部楼层
你好有个问题
我执行:
tcpdump -s 65535 -x -n -nn -q -tttt -i eth0 -C 100000 port 3310 >tcp.txt
pt-query-digest --type=tcpdump --no-report --print --watch-server=192.168.1.100:3310 tcp.txt>slow.log
后slow.log中的结果为# No events processed.不知哪里出了问题

使用道具 举报

Rank: 7Rank: 7Rank: 7

注册时间
2008-11-27
最后登录
2012-5-8
在线时间
197 小时
阅读权限
100
积分
3075
帖子
502
主题
103
精华
1
UID
632

LT同学

发表于 2012-1-29 13:00:48 |显示全部楼层
tengjh 发表于 2012-1-10 17:06
你好有个问题
我执行:
tcpdump -s 65535 -x -n -nn -q -tttt -i eth0 -C 100000 port 3310 >tcp.txt

你是什么版本的Mysql?
http://hi.baidu.com/ytjwt/

使用道具 举报

Rank: 6Rank: 6

注册时间
2010-3-23
最后登录
2012-5-17
在线时间
47 小时
阅读权限
70
积分
2692
帖子
16
主题
5
精华
0
UID
8445
发表于 2012-2-15 17:52:01 |显示全部楼层
5.1.56,这个与mysql版本有关系吗

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

IT运维专家网感谢红之盟网络提供带宽支持

合作联系: QQ:67888954/MSN:cnseek@msn.com/mail:netseek@linuxtone.org

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2012-5-22 21:17 , Processed in 0.160547 second(s), 12 queries , Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部