第一章:实例和故事
什么决定了电商双11大促的成败!
企业老板:大量宣传,英明决策和运筹帷幄,带来的大量用户。
运营和产品人员:活动策划和产品设计、图片设计,双十一价格优惠。
程序员:稳定的数据库及服务器环境。
web服务可以方便扩展,数据库不可以,数据库要保证 完整性&一致性。
影响 MySQL 性能的因素
sql查询速度
服务器硬件
网卡流量
磁盘IO
超高的QPS和TPS
QPS:每秒钟处理的查询量
10ms处理1个sql,1s处理100个sql,QPS<=100
100ms处理1个sql,QPS<=10
TPS:
风险:效率低下的SQL
**80%是mysql慢查询造成的**
大量的并发和超高的CPU使用率:
风险:
大量的并发:
数据库连接数被占满 (max_connections默认100)
超高的CPU使用率:
因CPU资源耗尽而出现宕机
磁盘IO:
风险:
磁盘IO性能突然下降(使用更快的磁盘设备)
其他大量消耗磁盘性能的计划任务(调整计划任务,做好磁盘维护)
网卡流量:
风险:
网卡IO被占满(1000Mb/8≈100MB)
如何避免无法连接数据的情况:
1. 减少从服务器的数量
2. 进行分级缓存
3. 避免使用 "select * " 进行查询
4. 分离业务网络和服务器网络
大表
什么样的表可以称之为大表:
记录行数巨大,单标超过千万行
表数据文件巨大,表数据文件超过10G
大表对查询的影响:
慢查询:很难在一定时间内过滤出所需要的数据
大表对DDL操作的影响:
建立索引需要很长的时间
风险:
MySQL版本 < 5.5 建立索引会锁表
MySQL版本 >= 5.5 虽然不会锁表,但会引起主从延迟
修改表结构需要长时间锁表:
风向:
会造成很长时间的主从延迟
影响正常的数据操作
如何处理数据库中的大表
分库分表把大表分成多个小表
难点:
分表主键的选择
分表后跨分区数据的查询和统计
大表的历史数据归档 减少对前后端业务的影响
难点:
归档时间点的选择
如何进行归档操作
大事务
什么是事务- 事务是数据库系统区别于其他一切文件系统的重要特性之一
- 事务是一组具有原子性的SQL语句,或是一个独立的工作单元
事务要符合:原子性、一致性、隔离性、持久性
事务的原子性(ATOMICITY):
定义:一个事物必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败,对于一个事务来说,不可能只执行其中的一部分操作。
事务的一致性(CONSISTENCY):
定义:一致性是指事务将数据库从一种一致性状态转换到另外一种一致性状态,在事务开始之前和事务结束后数据库中的数据的完整性没有被破坏。
事务的隔离性(ISOLATION):
定义:隔离性要求一个事物对数据库中数据的修改,在未提交完成之前对于其他事务是不可见的。 SQL标准中定义的四种隔离级别: 1. 未提交读(READ UNCOMMITED) 2. 已提交读(READ COMMITED) 3. 可重复读(REPEATABLE READ) 4. 可串行化(SERIALIZABLE) 最高隔离级别,读取的每一行都加锁哦,可能会造成锁超时。很少使用,除非是严格一致性,并且可以接受没有并发前提下。 隔离性由低到高:4321 并发性由高到低:1234 Innerdb 默认 可重复读
事务的持久性(DURABILITY):
定义:一旦事务提交,则其所做的修改就会永远保存到数据库中。此时即使系统崩溃,已经提交的修改数据也不会丢失。
什么是大事务:
定义:运行时间比较长,操作的数据比较多的事务。 风险: 锁定太多的数据,造成大量的阻塞和锁超时 回滚时所需要时间比较长 执行时间长,容易造成主从延迟
如何处理大事务:
避免一次处理太多的数据 移除不必要在事务中的SELECT操作
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GivenSir`Blog!
评论