一、测试方法
采用sysbench模拟并发oltp请求:
sysbench --test=tests/db/oltp.lua --oltp_tables_count=10 --oltp-table-size=100000 --rand-init=on --num-threads=64 --oltp-read-only=off --report-interval=10 --rand-type=uniform --max-time=1800 --max-requests=0 run
二、具体几种测试模式
1、一直关闭QC(query cache的简写,下同),即 query_cache_size = 0, query_cache_type = 0
测试过程中,一直都没有和query cache lock相关的状态出现,结果tps:2295.34
2、启用QC,但QC size 设置为 0,即:query_cache_size = 0,query_cache_type = 1
测试过程中,一直有 Waiting for query cache lock 状态出现,结果tps:2272.52
3、启用QC,但QC size为0,但启动时立刻关闭QC,即初始化时 query_cache_size = 0,query_cache_type = 1,启动后立刻修改 query_cache_type = 0
测试过程中,也一直有 Waiting for query cache lock 状态出现,结果tps:2311.54
4、关闭QC,但启动后立刻启用QC,即初始化时 query_cache_size = 0,query_cache_type = 0,启动后立刻修改 query_cache_type = 1
这时,会提示报错信息:
失败:ERROR 1651 (HY000): Query cache is disabled; restart the server with query_cache_type=1 to enable it
也就是说,如果一开始就关闭 QC 的话,是没办法在运行过程中动态再启用QC的。
5、启用QC,并设置QC size为256M,即 query_cache_size = 256M,query_cache_type = 1
这种情况下,在测试过程中一直有 Waiting for query cache lock 状态出现,并且结果tps也很差,只有 1395.39(几个案例中最差的一种)
6、启用QC,设置QC size为256M,但启动后立刻关闭QC,即 query_cache_size = 256M,query_cache_type = 1,启动后立刻修改 query_cache_type = 0
这种情况下,在测试过程中也一直有 Waiting for query cache lock 状态出现,结果tps:2295.79(在这个模式下,如果设置 query_cache_type = 2,效果也不佳)
第三种模式下,虽然看起来tps还不错,但毕竟上面只是简单模拟测试,实际情况下如果有频繁的query cache lock的话,tps肯定不会太好看。