在mysql性能调研和分布式数据库测试过程中,需要评估mysql某些方面的性能情况,如果单纯使用mysql自带的性能查看工具和命令,如 mysqladmin、show innoDB status等,显然不能满足需求,无法得到所有的数据,如QPS、latency虽然可以通过参数值来计算得到,但不够自动化,并且如果需要得到大量实验数据时,手工计算是一种笨拙的方式。
使用方式
基本配置
MysqlBench.php需要配置基本信息:
$ip、$username、$password、$port、$database、$table分别对应数据库的ip、用户名、密码、端口、执行操作的database、执行性能测试的表名(可替换为自定义的表名,注意如果column与MysqlBench的不一致,需要自行修改)。
$logfile指定记录操作原始信息的文件,在分析结果时会使用到该文件
$resultfile分析结果保存到的文件
$fd数据库句柄,不用理会
$startID对应query操作时的起始ID
执行测试
可以直接运行php MysqlBench.php –h,查看下帮助信息,如下:
–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的耗时,如:
resultfile为分析结果文件,根据原始信息计算了QPS,平均耗时,latency区间,并可以直接看出是否有长耗时,如:
Result文件可直接ctrl+c & ctrl+v到excel中,如:
通过excel自带工具可生成图表,可以更直观的分析测试结果,如:
概述
功能测试工具AutoSQL用于SQL命令分发以及结果校验,不仅适用分布式数据库,也适合单机mysql,可以认为它就是带校验功能的一个mysql应用。