前言:性能测试中经常会提到qps、tps、RT,但它的对象是接口,那么mysql的qps/tps 与mysql 查询快慢是否有关系?
QPS的定义
Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
TPS的定义
TPS是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。
一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。
客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
- Tps每秒处理的事务数
1.用户请求服务
2.服务器自己的内部处理
3.服务器返回给用户 - 解释
这三个过程是一个完整的事务(具有原子性的特征),
每秒能完成N个这三个事务过程,Tps(每秒的事务数)也就是N - 举例子
如果访问一个页面会请求服务器3次,那么一次访问,会产生一个“T”,产生3个“Q”
计算方法
(1)QPS(每秒Query量)
QPS = Questions(or Queries) / seconds
mysql > show global status like 'Question%';
eg:MySQL数据库QPS的计算方式为:
show global status like 'questions';
show global status like 'uptime';
qps=questions/uptime
(2)TPS(每秒事务量)
TPS = (Com_commit + Com_rollback) / seconds
mysql > show global status like 'Com_commit';
mysql > show global status like 'Com_rollback';
(3)key Buffer 命中率
mysql>show global status like 'key%';
key_buffer_read_hits = (1-key_reads / key_read_requests) * 100%
key_buffer_write_hits = (1-key_writes / key_write_requests) * 100%
(4)InnoDB Buffer命中率
mysql> show status like 'innodb_buffer_pool_read%';
innodb_buffer_read_hits = (1 - innodb_buffer_pool_reads / innodb_buffer_pool_read_requests) * 100%
(5)Query Cache命中率
mysql> show status like 'Qcache%';
Query_cache_hits = (Qcahce_hits / (Qcache_hits + Qcache_inserts )) * 100%;
(6)Table Cache状态量
mysql> show global status like 'open%';
比较 open_tables 与 opend_tables 值
(7)Thread Cache 命中率
mysql> show global status like 'Thread%';
mysql> show global status like 'Connections';
Thread_cache_hits = (1 - Threads_created / connections ) * 100%
(8)锁定状态
mysql> show global status like '%lock%';
Table_locks_waited/Table_locks_immediate=0.3% ##如果这个比值比较大的话,说明表锁造成的阻塞比较严重
Innodb_row_lock_waits innodb ##行锁,太大可能是间隙锁造成的
(9)复制延时量
mysql > show slave status
查看延时时间
(10) Tmp Table 状况(临时表状况)
mysql > show status like 'Create_tmp%';
Created_tmp_disk_tables/Created_tmp_tables ## 比值最好不要超过10%,如果Created_tmp_tables值比较大,
可能是排序句子过多或者是连接句子不够优化
(11) Binlog Cache 使用状况
mysql > show status like 'Binlog_cache%';
如果Binlog_cache_disk_use值不为0 ,可能需要调大 binlog_cache_size大小
(12) Innodb_log_waits 量
mysql > show status like 'innodb_log_waits';
Innodb_log_waits值不等于0的话,表明 innodb log buffer 因为空间不足而等待
注意:MySQL 常见优化方式之添加索引,原理就是通过提高单位时间内查询数据的数目。值得注意的是:show global status like ‘questions’;查出来的不针对某一个查询语句,而是整体的性能 ,添加了索引后,有可能当前查询没命中对应的表 ,即可能存在整体性能不会提升的情况。