一、概念
并发量:同一时间处理的请求的数量
同时连接数:同一时间建立连接的个数(可能存在连接数很多,但发送请求的连接很少的情况)
QPS:每秒处理的查询量
TPS: 每秒传输的事物处理个数
二、影响数据库性能的因素
影响数据库的因素:服务器硬件、磁盘IO、网卡流量、sql查询速度
MySQL不支持多cpu的并发计算,也就是说每个sql只能用到一个cpu
磁盘IO:
· 磁盘IO性能突然下降(使用更快的磁盘设备)
· 其它大量消耗磁盘性能的计划任务(调整计划任务,做好磁盘维护)
教训:最好不要在主库上进行数据库备份
超高QPS和TPS:
风险:效率低下的SQL
大量的并发:
数据库连接数被占满(max_connections默认100)
超高的cpu使用率:
因CPU资源耗尽而出现宕机
网卡流量:
网卡IO被占满(1000Mb/8 ≈100Mb)
如何避免无法连接数据库的情况:
1. 减少从服务器的数量
2. 进行分级缓存
3. 避免使用"select *"进行查询
4. 分离业务网络和服务器网络
什么样的表可以称之为大表:
· 记录行数巨大,单表超过千万行
· 表数据文件巨大,表数据文件超过10G
当然,这要视实际情况而定,若果是日志表只进行insert和select操作,就算超过千万行也是可以的
大表带来的问题:
1. 慢查询:很难在一定的时间内过滤出所需要的数据
2. DDL:
. 建立索引需要很长的时间
风险:
MySQL版本 < 5.5 建立索引会锁表
MySQL版本 >= 5.5 虽然不会锁表但会引起主从延迟
. 修改表结构需要长时间锁表
风险:
会造成长时间的主从延迟
如何处理数据库中的大表?
1. 分库分表把一张大表分成多个小表
难点:
· 分表主键的选择
· 分表后跨分区数据的查询和统计
风险:
影响前后端业务
2.大表的历史数据归档
好处:可以减少对前后端业务的影响
难点:
· 归档时间点的选择
· 如何进行归档操作
什么是事务?
1. 事务是数据库系统区别于其它一切文件系统的重要特性之一
2. 事务是一组具有原子性的SQL语句,或是一个独立的工作单元
事务特性:
1. 原子性(ATOMICITY)
定义:一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么
全部提交成功,要么全部失败,对于一个事务来说,不可能只执行其中的一部分操作
2. 一致性(CONSISTENCY)
定义:一致性是指事务将数据库从一种一致性状态转换到另外一种一致性状态,在事务开始之前
和事务结束后数据库中数据的完整性没有被破坏。
3. 隔离性(ISOLATION)
定义:隔离性要求一个事务对数据库中数据的修改,在为提交完成前对于其它事务是不可见的。
SQL标准中定义的四种隔离级别:
· 未提交读(READ UNCOMMITED)
· 已提交读(READ COMMITED)
· 可重复读(REPEATABLE READ) -- 默认
· 可串行化(SERIALIZABLE)
隔离性由低到高
并发性由高到低
4. 持久性(DURABILITY)
定义:一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,已经提交的
修改数据也不会丢失。
什么是大事务?
定义:运行时间比较长,操作的数据比较多的事务。
风险:
· 锁定太多的数据,造成大量的阻塞和锁超时
· 回滚所需时间比较长
· 执行时间长,容易造成主从延迟
如何处理大事务?
1. 避免一次处理太多的数据
2. 移除不必要在事务中的SELECT操作