QPS 即每秒查询率
TPS 即秒事務處理量
影响数据库的因素
- sql 查询速度
- 服务器硬件
- 磁盘IO
- 网卡流量
超高的QPS和TPS
风险:效率低下的sql
大量的并发和超高的CPU使用率
风险:
大量的并发: 数据库连接数倍占满 (max_connections默认100)
超高的cpu使用率: 因CUP资源耗尽而出现宕机
磁盘IO
风险:
磁盘IO性能突然下降(使用更快的磁盘设备)
其他大量消耗磁盘性能的计划任务 (调整计划任务,做好磁盘维护)
网卡流量
风险:网卡IO被占满 (1000mb/s ~ 100mb)
如何避免无法连接数据库情况:
- 减少从服务器的数量
- 进行分级缓存
- 避免使用 “select *” 进行查询
- 分离业务网络和服务器网络
大表带来的问题
大表:
记录条数超过千万行
表数据文件巨大,表数据文件超过10g
慢查询:很难在一定时间内过滤出所需要的数据
对DDL操作(就是对数据库内部的对象进行创建、删除、修改的操作语言)的影响: 建立索引需要很长的时间
风险:
mysql < 5.5 建立索引会锁表
mysql >=5.5 虽然不会锁表但会引起主从延迟
修改表结构需要长时间锁表
风险:
会造成长时间的主从延迟
影响正常的数据操作(因为堵塞,很容易会使连接数占满)
解决方法:
分库分表把一张表分成多个小表
难点:
分表主键的选择
分表后跨分区数据的查询和统计大表的历史数据归档 减少对前后端业务的影响
难点:
归档时间点的选择
如何进行归档操作
什么是大事物
运行时间比较长,操作的数据比较多的事物
风险:
- 锁定太多的数据,造成大量的阻塞和锁超时
- 回滚时所需时间比较长
- 执行时间长,容易造成主从延迟
如何处理大事务
- 避免一次处理太多的数据
- 移除不必要在事物中的 SELECT操作
影响性能的几个方面
- 服务器硬件
- 服务器操作系统
- 数据库存储引擎的选择 myisam、innodb
- 数据库参数配置 【影响最大】
- 数据库机构设计和sql语句 (尽力屏蔽慢查询)
cup资源和可用内存大小
当我们热数据(指访问频率高、对业务和应用关键的数据。这些数据通常需要快速、高效地访问和处理,因此需要存储在高性能、低延迟的存储设备上,如SSD固态硬盘、内存等) 远远超过可用内存大小时IO系统就会成为瓶颈
如果选择cup
- 我们系统是否是cup密集型(指应用程序大部分时间都使用CPU来做计算),如果是,就需要cup越多越好
- 如果我们系统的并发量多或吞吐量多,就需要cup越多越好
- mysql版: 如果是5.6以上对多核cup (16或32核cup)优化有很大的改善
注意:
64位cup使用32位的服务器版本,32位操作系统就对mysql性能造成影响
常用mysql存储引擎中
MyISAM -> 索引 -> 内存
MyISAM -> 数据 -> os
innodb -> 索引 -> 内存
innodb -> 数据 -> 内存
注意:
内存不是越多越好,对性能的影响也是有限的,并不能无限啊增加性能
内存的主频,频率越高速度越快,主板支持的最大内存频率
总结
cup
- 64位cpu一定要工作在64位系统下
- 对于并发较高的场景cpu的数量比频率重要
- 对于CPU密集性场景和复杂sql则频率越高越好
内存
- 选择主板所能使用的最高频率的内存
- 内存的大小对性能很重要,所以尽可能大
硬盘
IO子系统 pcie->ssd->raid10->磁盘->san