一:有哪些因素影响mysql性能
在一个类似此结构的服务器架构是哪些方面影响该服务器性能:
QPS:每秒钟处理的查询量;sql查询速度,效率低下的sql会随着访问量来严重影响效率;比如10ms处理1个sql,那么QPS<=100
TPS:
并发量&CPU使用率:并发量是指同一时间处理请求的数量,大并发导致数据库连接被占满;超高的cpu资源耗尽而出现宕机;
磁盘IO:磁盘吞吐量;风险磁盘IO性能突然下降或者大量消耗磁盘性能的计划任务(调整计划)
网卡流量:网卡io被占满,(减少从服务器的数量,进行分级缓存,避免selet * 操作,)
二:大表带来的问题
什么样的表算是大表:具体根据业务场景和服务器性能来判断,一般指单标超过千万行或者是单表数据搞过10G;
查询影响:1,慢查询;2,对ddl操作的影响,引起主从延迟
三:大事务带来问题
事务是一组具有原子性的sql语句或是一个独立的工作单元;一般事务有一下四个特性:原子性、一致性、隔离性、持久性。
原子性:一个事务被视为一个执行单元,要么全部成功要么全部失败;
一致性:事务将数据库从一种一致性状态转换到另一种一致性状态,在事务开始之前和事务结束后数据库中的数据完整性没有被破坏;
隔离性:是指一个事务对数据库中数据修改,在未提交完成前对于其它事务是不可见的
四种隔离性: 未提交读(READ UNCOMMITED)
已提交读(READ COMMITED) A事务提交,B事务中可以读取到A事务提交的信息;
可重复读(REPEATABLE READ) 在同一事务中,同一条查询结果始终相同;
可串行化(SERIALIZABLE) 最高的隔离级别
持久性:一旦事务提交,所有的操作就会永久的保存到数据库中;
大事务:运行时间比较长,操作数据比较多的事务
大事务带来的问题:
1.锁定太多数据;
2.回滚所需时间比较长,
3.执行时间长带来主从延迟
处理大事务:
1.避免一次处理太多数据
2.从事务中移除不必要select查询
四:默认隔离级别:可重复读理解
现有表结构:
场景1:A、B开启事务,A在事务中查询,B修改某值后提交事务,A再查询;
结论:即是A事务查询后,以后的每次该查询结果都相同,无论其他事务是否修改后提交;
场景2:A、B事务开启,B事务修改后提交A事务查询;
结论:可重复读,在未提交之前读过,即本事务中无法读取到其他事务更新后的值,但是在其他事务提交之后再初次去读取,可以读取到;
场景3:A、B事务,A事务通过id和version来控制是否更新值,B事务在A事务更新操作之前更新version并提交
结论:当有更新操作时候,更新该记录会忽略之前读取的值而重新获取其他事务已经提交的最新值;
我们曾如此渴望生命的波澜,到后来才发现,人生最曼妙的风景是内心的淡定与从容