1.数据库的容量测试
-
相关性能测试推荐使用sysbench,详情可参考:https://github.com/akopytov/sysbench/blob/master/README.md
- 相关的sysbench选项可以参考:https://github.com/akopytov/sysbench/blob/master/README.md#general-command-line-options
-
容量测试可以在安装sysbench后使用以下命令进行
sysbench oltp_point_select \
--tables=[共有几张数据表] \
--table-size=[每张数据表要灌的数据量,推荐至少为 10000000] \
--db-driver=[pgsql/mysql] \
--pgsql-host=[host] \
--pgsql-port=[port] \
--pgsql-user=[userNmae] \
--pgsql-password=[userPwd] \
--pgsql-db=[dbName] \
prepare
2.写入性能测试case
-
当前sysbench关于写入性能相关的测试case有 read_write、update_index、update_non_index、write_only、insert
-
命令可以参考
sysbench oltp_${
case} \
--tables=${
tables} \
--table-size=${
tb_size} \
--db-ps-mode=disable \
--db-driver=[pgsql/mysql] \
--pgsql-host=${
host} \
--report-interval=[间隔s报告一次结果] \
--pgsql-port=${
port} \
--pgsql-user=${
user} \
--pgsql-password=${
pwd} \
--pgsql-db=${
db} \
--threads=${
threads} \
--time=${
tim} \
--rand-type=uniform
run
3.查询性能 ,多表 join
- 当前sysbench关于查询性能相关的测试case有 read_only、point_select
- 相关命令可以参考第二步
- 当前版本sysbench并不支持多表join,因此我们需要自定义lua测试脚本
- 以下是简单范例,可以根据需求自行修改
- vim oltp_mutli_join.lua
require("oltp_common")
function thread_init()
drv = sysbench.sql.driver()
con = drv:connect()
end
function thread_done()
con:disconnect()
end
function event()
local tableNum1
local tableNum2
local rs
tableNum1 = math.random(1,sysbench.opt.tables)
tableNum2 = math.random(1,sysbench.opt.tables)
local table1 = "sbtest" .. tableNum1
local table2 = "sbtest" .. tableNum2
local id = math.random(1,sysbench.opt.table_size)
-- db_query("begin")
rs = db_query("SELECT a.k FROM " .. table1 .. " a left join " .. table2 .. " b ON a.id = b.id WHERE a.id= " .. id)
-- db_query("commit")
end
- 在自定义脚本中,必须要提供thread_init() thread_done() event()这三个函数
- event()就是要运行的测试函数
- sysbench.opt.tables 则是在运行脚本时传入的–tables 参数,sysbench.opt.table_size是–table_size参数。其它传入的参数都可以通过sysbench.opt来获取
- db_query就是要运行的sql语句,在event()方法中,有一个db_query,则运行中TPS=QPS/1。有n个db_query,则运行中TPS=QPS/n
- 不可以在自定义的lua脚本里面使用print(),否则不会产生结果
- 使用sysbench运行自定义lua脚本