MySQL-性能优化概述

喜夏-厌秋 提交于 2020-01-29 09:35:52


在这里插入图片描述

影响MySQL性能的几大因素

通常来说 ,有以下几点

慢SQL(重点) 、 主机的硬件资源(CPU、内存、磁盘I/O等)、网卡流量等等


  • 超高的QPS和 TPS

    QPS(Queries Per Second 每秒处理的查询量) : 假设处理一个SQL 需要 10ms , 1s 最多也就处理100个,那么QPS < = 100 ,如果 100ms处理一个呢? 那 QPS <=10 ,可以推断出SQL的执行效率队QPS的影响很重要。 根据经验,

    TPS(Transactions Per Second,事务数/秒,这个完整的事务包括了用户请求服务器,服务器内部处理,服务器返回信息给用户三个过程)

    QPS和TPS高,说明应用的负载较高.

    MySQL数据库中的QPS和TPS的计算方法

    Questions = SHOW GLOBAL STATUS LIKE 'Questions';
    Uptime = SHOW GLOBAL STATUS LIKE 'Uptime';
    QPS=Questions/Uptime
    
    -----------------------
    
    Com_commit = SHOW GLOBAL STATUS LIKE 'Com_commit';
    Com_rollback = SHOW GLOBAL STATUS LIKE 'Com_rollback';
    Uptime = SHOW GLOBAL STATUS LIKE 'Uptime';
    TPS=(Com_commit + Com_rollback)/Uptime
    

  • 高并发和高CPU使用率

    高并发–>数据库连接池被用光的几率大增 (max_connections默认100),超过的话,就会看到500子类的错误了

    高CPU使用率—>响应慢,甚至导致宕机


  • 磁盘I/O

    磁盘I/O的性能突然下降—>使用更快的磁盘设备

    其他大量消耗磁盘性能的计划任务等 —> 可预期的高峰期,调整计划任务的执行时间


  • 网卡流量

    比如我们常说的千兆网卡, 这里的千兆 其实是 小b , 1Byte = 8 bit . bit 小b Byte 大B

    1000Mb / 8 约等于 100MB (我们熟悉的带宽)

    网卡被占满的风险增加 ,被占满的话,肯定访问不到数据库了 ,如何避免呢?

    通常来说,

    1. 减少slave节点的数量,避免大量的复制,占用带宽
    2. 合理的使用多级缓存,避免大量缓存失效,请求到DB
    3. 避免使用 select * 查询
    3. 分离业务网络和服务器网络等等


大表带来的风险

啥叫大表? 粗略的定义 ,可以从两个维度去考虑,仅供参考

  1. 记录超过1千万
  2. 表数据文件巨大,超过10G

带来的风险

  • 对查询的影响

    举个例子: 从超巨数据中,查找区分度不高的数据,将导致大量的磁盘I/O,有可能导致数据库hang死 ,从而产生大量的慢查询,需要特别关注解决。

  • 对DDL的影响

    建立索引 耗时特别长, 风险: MySQL 5.5 以前的版本,建立索引会锁表 。 5.5以后的版本虽然不会引起锁表,但会引起主从延迟。

    修改表结构的话,需要长时间锁表 ,风险:1. 主从延迟 2. 影响正常的数据操作

    如何处理呢?

    1. 分库分表 (分表主键如何选择,分表后跨分区的查询和统计如何解决) 慎重!!!
    2. 对历史数据进行归档 (归档时间点的选择 、如何高效的归档)


大事务带来的风险

事务 : ACID

原子性 atomicity | 一致性 consistency | 隔离性 isolation | 持久性 durability

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!