关于sysbench自定义lua脚本性能测试,这些你知道吗?
一、前言
我们经常有这样的需求,表定义或者表定义数据已经有了,需要评估某些语句的的性能,比如有如下表:
DROP TABLE IF EXISTS `testiptable`;
CREATE TABLE `testiptable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ipaddr` varchar(20) DEFAULT NULL,
`rectime` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8;
此时我们需要评估某个实例写入的性能,该如何进行呢?
目前业界常用的mysql性能评估工具,最流行、对mysql最亲和的就是sysbench。sysbench除了自带的lua脚本,比如oltp_read_write.lua、oltp_insert.lua等等,当然,sysbench还支持今天我们重点要介绍的自定义脚本。
insert的关键的语句如下:
insert into testiptable(ipaddr, rectime) values(‘192.168.10.121’, ‘2020-03-29 09:20:18’),(‘192.168.10.121’, ‘2020-03-29 10:20:18’);
注:测试写入性能的时候,会进行多线程和批量insert。
sysbench执行,一般函数:thread_init、event、thread_done,这三个函数分别对应线程初始化、线程执行事件、线程结束执行操作。Sysbench执行时会按照thread_init-> event-> thread_done顺序进行。
二、脚本定义
2.1 线程初始化和线程结束脚本
function thread_init(thread_id)
drv = sysbench.sql.driver()
con = drv:connect()
end
注:thread_init函数最重要的就是驱动连接。
function thread_done()
con:disconnect()
end
注:thread_done函数主要是执行完成
函数内部没有local标识的变量,脚本内都可以使用,如con和drv后续的脚本内部都可以使用。
2.2 线程执行事件
sysbench.cmdline.options = {
bulk_inserts = {"Number of values to to insert", 1}
}
sysbench.cmdline.options,可以在执行脚本时将输入参数传入脚本。我们在写入时需要进行批量insert, 通过--bulk_inserts=xx来设置批量修改。
注意:大括号中前面是说明,后面是默认值。如果不输入参数,脚本自动按照默认值执行。除了能传递数字,还可以传递bool型的true和false,如:
sysbench.cmdline.options = {
skip_trx= {"skip transaction", false}
}
我们来看一下数据insert部分函数是如何实现的:
function execute_inserts(thread_id)
local ipaddr
local rectime
local sql = "insert " ..tablename.." (ipaddr,rectime) values"
for i=1,sysbench.opt.bulk_inserts do
ipaddr = string.format("192.168.%d.%d",sysbench.rand.pareto(10,40),sysbench.rand.pareto(1,250))
rectime = os.date("%Y-%m-%d %H:%M:%S",os.time())
sql = sql .. string.format("('%s','%s')",ipaddr,rectime)
if ( i ~= sysbench.opt.bulk_inserts) then
sql = sql .. ","
end
end
con:query(sql)
end
注:con:query(sql),该语句作用为执行数据库语句。
function event(thread_id)
execute_inserts(thread_id)
end
三、脚本执行
sysbench ./insert.lua --mysql-user=root --mysql-password='Test_123' --mysql-db=test --report-interval=1 --events=0 --time=180 --mysql-host=192.168.0.139 --bulk_inserts=100 run
注:如果不输入--bulk_inserts=100,脚本默认--bulk_inserts=1。
四、总结
Sysbench自定义脚本,主要要实现event逻辑,可以通过sysbench.cmdline.options列表进行命令行传参。
- 点赞
- 收藏
- 关注作者
评论(0)