设为首页 收藏本站
查看: 1033|回复: 0

[经验分享] Mysql工具集

[复制链接]

尚未签到

发表于 2018-10-3 10:53:15 | 显示全部楼层 |阅读模式
  性能测试工具-MysqlBench
  背景
  在mysql性能调研和分布式数据库测试过程中,需要评估mysql某些方面的性能情况,如果单纯使用mysql自带的性能查看工具和命令,如mysqladmin、show innoDB status等,显然不能满足需求,无法得到所有的数据,如QPS、latency虽然可以通过参数值来计算得到,但不够自动化,并且如果需要得到大量实验数据时,手工计算是一种笨拙的方式。
  使用方式
  基本配置
  MysqlBench.php需要配置基本信息:
DSC0000.jpg

  $ip、$username、$password、$port、$database、$table分别对应数据库的ip、用户名、密码、端口、执行操作的database、执行性能测试的表名(可替换为自定义的表名,注意如果column与MysqlBench的不一致,需要自行修改)。
  $logfile指定记录操作原始信息的文件,在分析结果时会使用到该文件
  $resultfile分析结果保存到的文件
  $fd数据库句柄,不用理会
  $startID对应query操作时的起始ID
  执行测试
  可以直接运行php MysqlBench.php –h,查看下帮助信息,如下:
DSC0001.jpg

  –h
  php MysqlBench.php –h:输出帮助信息
  –p
  php MysqlBench.php –p type value num [allNum=?] [log=?] [item=?] [table=?] [startID=?] [logfile=?]:启动压力
  1. type【必选】:目前支持5种方式:insert、update、select、delete、prepareInsert,其中prepareInsert用于快速插入而不关注insert性能状况的情况,一般来说type为prepareInsert时,log参数应该赋值为false,避免日志记录操作。
  2. value【必选】:目前可支持1K、10K、100K、1M、10M,MysqlBench会随机生成对应大小的string并保存在大数据字段中,如默认的content字段,或其他column,这个可自定义。
  3. num【必选】:支持所有正整数,即query的数量。当如果指定了allNum,则num需要不大于allNum。对于insert和prepareInsert操作,采用的是顺序插入的方式,id从$startID到num+$startID;而对于update和select操作,采用随机的方式,随机id范围为$startID到num+$startID,遇到重复的id不跳过;对于delete操作,也是采用随机的方式,但剔除重复的id,随机id范围为$startID到num+$startID,故执行delete请求时,强烈建议指定allNum,且最好allNum>=10*num,已包装重复的id不会太多,影响测试准确些。
  4. allNum【可选】:指定table中一共有多少数据,强烈建议allNum的数量>=10*num,即query的数量至多为总数据量的1/10。默认值allNum=num
  5. log【可选】:是否记录每条query的耗时时间,例如你仅仅想了解select的耗时,那在灌数据的时候,就可以指定log=false。默认值为log=true。耗时信息保存在$logfile中。
  6. item【可选】:指定select大数据字段(1K、1M这些)或小数据字段(几十个字节),仅对select操作有效。默认值为item=large,还可取值small。
  7. table【可选】:指定操作的table名,默认值为基本配置中的$table变量值。
  8. startID【可选】:指定Query的起始id,默认值为基本配置中的$startID的值,多组实验时为了避免干扰,采用不同的id范围时这个参数就能起到隔离的作用。
  9. logfile【可选】:指定log文件名,记录耗时信息。批量执行不同case时,需要指定不同的log文件,否则MysqlBench都会将耗时信息输出到基本配置中的$logfile指定的文件中。
  –t/–d
  php MysqlBench.php –t [table=?] [analyse=?] [ip=?] [port=?] [logfile=?]:清空表
  php MysqlBench.php –d [table=?] [analyse=?] [ip=?] [port=?] [logfile=?]:删除表
  1. table【可选】:指定truncate或drop的table名,默认值为基本配置中的$table变量值。
  2. analyse【可选】:指定是否记录耗时时间。默认值为false。
  3. ip、port【可选】:指定数据库的ip和port,默认值为基本配置中的ip、port对应值,这个在ddbs时有应用,因为dbproxy不支持drop和truncate table操作,故需要穿透直连后端数据库,故ip和port需要另外指定。
  4. logfile【可选】:指定log文件名,记录耗时信息。默认值为基本配置中对应值。
  –a
  php MysqlBench.php [logfile=?] [resultfile=?]:分析logfile文件,产出QPS、latency等数据,输出到resultfile。
  1. logfile【可选】:指定需要分析的log文件名。默认值为基本配置中对应值。
  2. resultfile【可选】:分析结果保存文件,默认值为基本配置中的$resultfile值。
  效果展示
  Logfile文件为原始数据文件,每一行为每个query的耗时,如:
DSC0002.jpg

  resultfile为分析结果文件,根据原始信息计算了QPS,平均耗时,latency区间,并可以直接看出是否有长耗时,如:
DSC0003.jpg

  Result文件可直接ctrl+c & ctrl+v到excel中,如:
DSC0004.jpg

  通过excel自带工具可生成图表,可以更直观的分析测试结果,如:
DSC0005.jpg

  功能测试工具-AutoSQL
  概述
  功能测试工具AutoSQL用于SQL命令分发以及结果校验,不仅适用分布式数据库,也适合单机mysql,可以认为它就是带校验功能的一个mysql应用。
  如何使用
  你只需要根据规定的文件格式组织SQL命令和预期结果,通过php AutoSQL.php command.sql expect.result就可以自动化执行SQL命令,并与预期结果校验。
  命令格式
  通过php AutoSQL.php -h 可以获知AutoSQL工具可以支持的命令列表,如下:
  php AutoSQL.php [command]
  command:
  -h print this usage
  query_file expect_file
  query_file store sql command, file pattern: case_name##sql command##
  expect_file store expected result of query, file pattern: case_name##query fail or not##[NOCHECK##]effect rows[##ORDER(result order)]##false(insert,update,delete,replace) or result num(select)##row1##row2##...##
  -r [-d pathname]: run cases in the path, default is current directory.
  -c [-d logpath]: check run result from log files, default is log directory in current directory
  如上所述,具体说明如下:
  1. 执行单个文件:php AutoSQL.php query_file expect_file,文件格式见下文
  2. 执行某个文件夹下的所有command文件:php AutoSQL.php -r -d pathname,支持绝对路径和相对路径,默认为当前路径
  3. 批量查看case是否执行成功:php AutoSQL.php -c -d logpath,指定logs目录,自动化工具会列出所有fail的test suite和case,并展示在前台,默认为当前路径下的log目录
  文件格式
  query_file
  query_file的格式如下:
  case_name##sql command##
  各个参数说明如下:
  case_name: case名
  sql command:sql命令,sql command的命令格式与mysql官方规定的一致。
  例子:
  case0##delete from singleC;##
  case1##insert singleC (cID) values (30000), (30001);##
  case2##select * from singleC;##
  首先case0清空singleC表,然后case1插入两条记录,然后case2查询表singleC,确认记录是否插入成功
  expect_file
  expect_file的格式如下:
  case_name##query fail or not##[NOCHECK##]effect rows[##ORDER(result order)]##false(insert, update,delete,replace) or result num(select)##row1##row2##...##
  各个参数说明如下:
  case_name:case名,与query_file中的case_name一一对应
  query fail or not:命令预期执行失败与否
  NOCHECK:该选项指明只需判断query是否正常,不判断结果
  effect rows:insert、delete、update、replace操作时受影响的行数,select操作时effect rows为-1
  ORDER(result order):该选项只适合于select操作,配置为ORDER时,select结果要求与预期的结果完全一致,包括顺序。不指定ORDER时,select结果与预期结果内容一致即可,顺序不考虑。
  false(insert,update,delete,replace) or result num(select):select操作时为返回的结果行数,insert、update、delete、replace时为false
  row1##row2##...##:每行的预期内容,一行中每个字段以逗号(,)分隔。
  例子:
  case0##true##NOCHECK##
  case1##true##2##false##
  case2##true##-1##2##30000,,,vincent,100##30001,,,vincent,100##
  case0带NOCHECK,仅判断query是否成功,case1插入两条记录的作用是effected rows为2,case2查询出2两条记录,为case1插入的记录
  帮助
  mail:qablog@baidu.com
  (baiduqa,留下邮箱:qablog@baidu.com)
【本文转自百度测试技术空间】http://hi.baidu.com/baiduqa/blog/item/13920ec01ebde90e0ef477a5.html【关注百度技术沙龙】

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-608953-1-1.html 上篇帖子: linux上安装MySQL-Beryl 下篇帖子: mysql 单引号转义
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表