MySQL:MySQL 性能问题排查思路

数据库性能指标

QPS

  • QPS,Queries Per Second,意思是“每秒查询率”;
  • 是一台服务器每秒可以相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

TPS

  • TPS,Transactions Per Second,也就是事务数/秒。
  • TPS 是软件测试结果的测量单位;
  • client 在发送请求时开始计时,收到 server 响应后结束计时,以此来计算使用的时间和完成的事务个数。

数据库性能差的表现

效率低下的 SQL

  • 超高的 QPS 与 TPS

大量的并发

  • 数据链接数被占满(max_connection 默认100,通常把链接数设置得大一些)。
    • 并发量,表示同一时刻数据库服务器处理的请求数量数据库。

超高的CPU使用率

  • CPU资源耗尽出现宕机。

磁盘IO性能忽然降低

  • 大量消耗磁盘性能的计划任务。
    • 解决:更快磁盘设备、调整计划任务、作好磁盘维护。

避免连接不了数据库问题

  • 减小从服务器的数量(从服务器会从主服务器复制日志)服务器

  • 进行分级缓存(避免前端大量缓存失效)网络

  • 避免使用 select * 进行查询session

  • 分离业务网络和服务器网络多

影响 MySQL 性能的几个方面

  • 服务器硬件。

  • 服务器系统(系统参数优化)。

  • 存储引擎。
    • MyISAM: 不支持事务,表级锁。
    • InnoDB: 支持事务,支持行级锁,事务 ACID。
  • 数据库参数配置。

  • 数据库结构设计和SQL语句。(重点优化)

大表问题

大表带来的问题

  • 大表:
    • 记录行数巨大,单表超 1000万;
    • 表数据文件巨大,超过 10G;
  • 大表的危害

    • 慢查询:
      • 很难在短期内过滤出须要的数据;
    • 查询字区分度低:
      • 在大数据量的表中筛选一部分数据,会产生大量的磁盘 I/O,导致下降磁盘效率;
  • 大表对 DDL 的影响
    • 创建索引须要很长时间:
      • MySQL -v<5.5 创建索引会锁表
      • MySQL -v>=5.5 创建索引会形成主从延迟(mysql创建索引,先在组上执行,再在库上执行)
    • 修改表结构须要长时间的锁表:
      • 会形成长时间的主从延迟(‘480秒延迟’)

如何处理数据库上的大表

  • 分库分表把一张大表分红多个小表
  • 难点:
    • 分表主键的选择
    • 分表后跨分区数据的查询和统计

大事务问题

  • 大事务的定义:运行时间长,操做数据比较多的事务;

大事务的危害

  • 锁定数据太多,回滚时间长,执行时间长。
  • 锁定太多数据,形成大量阻塞和锁超时;
  • 回滚时所需时间比较长,且数据仍然会处于锁定;
  • 若是执行时间长,将形成主从延迟,由于只有当主服务器所有执行完写入日志时,从服务器才会开始进行同步,形成延迟。

大事务问题解决思路

  • 避免一次处理太多数据,能够分批次处理;
  • 移出没必要要的 SELECT 操做,保证事务中只有必要的写操做。