• 数据库tps的思考


    前言:性能测试中经常会提到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 因为空间不足而等待 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    注意:MySQL 常见优化方式之添加索引,原理就是通过提高单位时间内查询数据的数目。值得注意的是:show global status like ‘questions’;查出来的不针对某一个查询语句,而是整体的性能 ,添加了索引后,有可能当前查询没命中对应的表 ,即可能存在整体性能不会提升的情况。

  • 相关阅读:
    基于改进粒子群算法的微电网多目标优化调度(Matlab代码实现)
    C# CAD备忘录
    最重要的传输层
    apache maven安装教程
    控制输入流,从控制台打印到文件中,更改输出的位置
    QT学习_06_UI设计
    结构体的理解
    分布式定时任务调度框架
    Java学习路线(13)——Collection集合类:List集合与Set集合
    [ Linux长征路第六篇 ] Linux使用git上传gitee三板斧
  • 原文地址:https://blog.csdn.net/rainbowzhouj/article/details/126407506