电商双11大促成败关键: 数据库和服务器的稳定
- 源代码相同, web服务器可以横向扩展, 来保证量大时的稳定性
- 数据库无法拷贝数据来实现稳定性, 很难保证完整性和一致性
性能指标
- rt, response time, 响应时间
- pv, , 页面被浏览次数
- tps, transactions per second, 每秒内的事务数(包括用户请求服务器, 服务器内部处理, 服务器返回给用户)
- qps, queries per seconds, 每秒查询率, 一台服务器每秒能够响应的查询次数
影响数据库性能因素
- sql的查询速度(大部分都是由慢查询导致的)
- 服务器硬件
- 网卡流量
- 磁盘IO
大表: 记录行数单表超过千万行, 表数据文件超过10G
- 慢查询耗时长
- 建立索引需要很长时间, <5.5建立索引会锁表, >=5.5引起主从延迟
大事务: 区别与其他文件系统的特性, 具有原子性的sql语句; 运行时间长, 操作数据比较多的事务
- 原子性, 整个事务操作要么全部成功, 要么全部失败
- 一致性, 事务开始之前或结束后数据库完整性没有被破坏
- 隔离性, 一个事务对数据库中数据修改后, 在未提交完成前对于其他事务是不可见的; 未提交读, 已提交读, 可重复读, 可串行化
三大范式
- 1NF, 所有字段都是单一属性, 各个列都是基本数据类型构成, 设计出来是简单的二维表
- 2NF, 只具有一个业务主键, 不存在非主键列只对部分主键的依赖关系(组合主键才有的情况)
- 3NF, 非主属性既不部分依赖也不传递依赖于业务主键
SQL性能获取
- 慢查询日志
-
- slow_query_log 启动或停止慢查询日志
- 通过脚本定时开关, 实现某段时间开启慢查询
- slow_query_log_file 慢查询日志的存储路径及文件
- long_query_time 指定记录慢查询日志sql执行时间阀值(默认10s, 记录所有符合条件的sql, 包括回滚的sql)
- log_queries_not_using_indexs 是否记录未使用索引的sql
- set global xxx=on
- 实时性能获取
-
- information_schema的processlist表
数据库结构优化目的
- 减少数据冗余, 必要的冗余也是必须的
- 避免数据维护中出现更新(依赖其它实体), 插入(多行更新)和删除异常(依赖其它实体)
- 节约数据存储空间
- 提高查询效率
设计表原则
- 减少连表操作
- 减少不必要的冗余