MySQL性能优化
一:影响数据库的性能因素
1、超高的QPS与TPS
风险:效率低下的sql
2、大量的并发和超高的CPU使用率
风险:
大量的并发:数据库连接数被占满(max_connections默认100)
超高的CPU使用率:因CPU资源耗尽而出现宕机
3、磁盘IO
风险
磁盘IO性能突然下降(使用更快的磁盘设备)
其它大量消耗磁盘性能的计划任务(调整计划任务,做好磁盘维护)
4、网卡流量
风险:网卡IO被占满
如何避免无法连接数据库的情况
1、减少从服务器的数量
2、进行分级缓存
3、避免使用“SELECT*”进行查询
4、分离业务网络和服务器网络
二、大表带来的问题
大表:①记录行数巨大,单表超过千万行
②表数据文件巨大,表数据文件超过10G
1、对查询的影响
慢查询:很难在一定的时间内过滤出所需要的数据
2、对DDL操作的影响
建立索引需要很长的时间
风险:
MySQL版本 < 5.5建立索引会锁表
MySQL版本 >= 5.5 虽然不会锁表但会引起主从延迟
3、如何处理数据库中的大表
①分库分表把一张大表分成多个小表
难点:
分表主键的选择
分表后跨分区数据的查询和统计
②大表的历史数据归档 减少对前后端业务的影响
难点:
归档时间点的选择
如何进行归档操作
三、大事务带来的问题
事务:数据库系统区别于其它一切文件 系统的重要特征之一;事务是一组具有原子性的SQL语句,或是一个独立的工作单元;
①原子性:一个事务必须被视为一个不可分割的最下工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败,对于一个事务来说,不可能执行其中的一部分操作;
②一致性:是指事务将数据库从一种一致性状态转换到另外一种一致性状态,在事务开始之前和事务结束后数据库中数据的完整性没有被破坏;
③隔离性:
四种隔离级别:A未提交读(READ UNCOMMITED);B已提交读(READ COMMITED); C可重复读(REPEATABLE READ); D可串行化(SWRIALIZABLE);
④持久性:一旦事务提交,则其所作的修改就会永久保存到数据库中。此时即使系统崩溃,已经提交的修改数据也不会丢失。
⑤大事务:运行时间比较长,操作的数据比较多的事务。
风险:锁定太多的数据,造成大量的阻塞和锁超时回滚时所需要时间比较长 执行时间长,容易造成主从延迟
⑥如何处理大事务
A避免一次处理太多的数据; B移除不必要在事务中的SELECT操作