简单了解数据库在繁忙时的系统状态;以及对性能有影响的一些因素
基本概念
并发量:同一时间处理的请求的数量
同时连接数:同一连接数一般比同一处理的请求书要高,因为有很多连接处于sleep状态。
QPS:每秒钟处理的查询量;每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力。
TPS: Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数。TPS包括一条消息入和一条消息出,加上一次用户数据库访问。(业务TPS = CAPS × 每个呼叫平均TPS)
影响数据库的因素
sql查询速度
网卡流量
服务器硬件
磁盘IO
超高的QPS和TPS
风险:效率低下的sql
大量的并发和超高的CPU使用率
风险:
大量的并发:数据库的连接数被占满 (max_connections 默认100)
超高的CPU使用率: 因cpu资源耗尽而出现宕机
磁盘IO
风险:磁盘IO性能突然下降(其他大量消耗磁盘性能的计划任务,调整计划任务,做好磁盘维护)
网卡流量
风险: 网卡IO被占满(1000Mb/8 ~= 100MB)
解决方法:
减少从服务器的数量
进行分级缓存
避免使用* select * *进行查询
分离业务网络和服务器网络
大表带来的问题
大表
记录行数巨大,单表超过千万行
表数据文件巨大,表数据文件超过10G
大表对查询的影响:
慢查询:很难再一定得时间内过滤出所需要的数据
大表对DDL操作的影响
建立索引需要很长的时间
风险
Mysql版本
Mysql版本>=5.5 虽然不会锁表但会引起主从延迟
修改表结果需要长时间锁表
会造成长时间的主从延迟
影响正常的数据操作
风险
如何处理大表
分库分表:把一张大表分成多个小表
难点:
分表主键的选择
分表后跨分区数据的查询和统计
大表的历史数据归档:减少对前后端业务的影响
归档时间点的选择
如何进行归档操作
难点:
大事务带来的问题
什么是事务
定义
事务是数据库系统区别与其他一切文件系统的重要特性之一;事务是一组具有原子性的sql语句,或是一个独立的工作单元;符合原子性、一致性、隔离性、持久性。
原子性(atomicity):
一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分。
一致性(consistency):
数据库总是从一个一致性的状态转换到另外一个一致性的状态。如果事务最终没有提交,所有事务中所做的修改也不会保存到数据库中。(转账之前与转账以后金额的总和不变)
隔离性(isolation):
通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。(转账未提交之前,别的用户看到的金额仍然是之前的金额)
持久性(durability)
一点事务提交,则其所做的修改就会永久保存到数据库中。即使系统崩溃,已经提交的修改数据也不会丢失。
什么大事务
定义
运行时间比较长,操作的数据比较多的事务
风险:
锁定太多的数据,造成大量的阻塞和锁超时。
回滚时所需时间比较长
执行时间长,容易造成主从延迟
如何处理大事务
避免一次处理太多的数据
移出不必要在事务中的select操作
领取专属 10元无门槛券
私享最新 技术干货