影响数据的元素

  • sql 查询速度
  • 网卡流量
  • 服务器硬件
  • 磁盘 IO

超高的 QPS 和 TPS

风险

  • 效率低下的 SQL

大量并发和超高 CPU 使用率

风险

  • 数据库连接数被占满
  • 因 CPU 资源耗尽出现宕机

磁盘 IO

风险

  • 磁盘 IO 性能突然下降(使用更快的磁盘设备)
  • 其他大量消耗磁盘性能的计划任务(调整计划任务,做好磁盘维护)

网卡流量

风险

  • 网卡 IO 被占满

如何避免无法连接数据库的情况

  • 减少从服务器数量
  • 进行分级缓存
  • 避免使用 “select *”进行查询
  • 分离业务网络和服务器网络

大表

  • 记录行数巨大,单表超过千万行
  • 表数据文件巨大,表数据文件超过 10G

对查询影响

  • 慢查询:很难在一定时间内过滤出所需要的数据

对 DDL 影响

  • 修改表结构需要长时间锁表

    • mysql 版本<5.5 建立索引会锁表
    • mysql 版本》=5.5 不会锁表会引起主从延迟
  • 影响正常数据操作

解决方式

分库分表
  • 难点

    • 分表主键选择
    • 分表跨分区数据查询和统计
历史数据归档
  • 减少对前后端业务影响

  • 难点

    • 归档时间点选择
    • 如何进行归档操作

大事务

  • 运行时间比较长,操作的数据比较多的事务

风险

  • 锁定太多数据,造成大量阻塞和锁超时
  • 回滚所需时间长
  • 执行时间长,容易造成主从延迟

解决

  • 避免一次处理太多数据
  • 移除不必要的事务中的 select 操作

事务

  • 事务是数据库系统区别于其他一切文件系统的重要特性之一
  • 事务是一组具有原子性的 SQL 语句,或是一个独立的工作单元

特点

特征 说明
原子性(A) 一个事务的所有操作,或全部成功或全部失败
一致性(C) 事务开始之前和事务结束之后,数据库保持完整性
隔离性(I) 每个读写事务的对象和其他事务的操作对象相互分离,该事务提交前对其他事务都不可见
持久性(D) 事务一旦提交,结果就是永久性,如果宕机也能恢复

隔离级别

  • 串行化(serializable)
  • 可重复读(repeatable read)
  • 已提交读(read commited)
  • 未提交读(read uncommited)

欢迎扫描下方二维码,个人博客,持续关注:

互联网工程师(id:phpstcn),我们一起学习,一起进步