影响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千万
- 表数据文件巨大,超过10G
带来的风险
-
对查询的影响
举个例子: 从超巨数据中,查找区分度不高的数据,将导致大量的磁盘I/O,有可能导致数据库hang死 ,从而产生大量的慢查询,需要特别关注解决。
-
对DDL的影响
建立索引 耗时特别长, 风险: MySQL 5.5 以前的版本,建立索引会锁表 。 5.5以后的版本虽然不会引起锁表,但会引起主从延迟。
修改表结构的话,需要长时间锁表 ,风险:1. 主从延迟 2. 影响正常的数据操作
如何处理呢?
1. 分库分表 (分表主键如何选择,分表后跨分区的查询和统计如何解决) 慎重!!!
2. 对历史数据进行归档 (归档时间点的选择 、如何高效的归档)
大事务带来的风险
事务 : ACID
原子性 atomicity | 一致性 consistency | 隔离性 isolation | 持久性 durability
来源:CSDN
作者:小小工匠
链接:https://blog.csdn.net/yangshangwei/article/details/104103852