个人笔记--数据库性能

数据库设计:

三范式

1NF.做到每列不可拆分(确保原子性)  

如: 中国北京 不行  中国  北京 更好些

2NF.确保一个表只做一件事情

如:学生信息表 就提供学生信息 不要加上啥女友 房子 父母之类的其他列  非要写上这些 再写一张扩张表就行了

3NF.在满足2NF,消除表中的传递依赖

A-->B  B-->C   则A-->C   要消除C (追求空间最省)

如:id【A】  售价 数量【B】  总价【C】  -->可以消除总价(节省空间 但是要计算总结会消耗多余的时间)

 

反三范式(追求时间最省)

满足3NF的要求 但是实际开发时 为了满足一些用户的特殊需求  在开发时再重新加入冗余字段 

名词解释:

我们在日常工作中经常会听到QPS/TPS这些名词,也会经常被别人问起说你的系统吞吐量有多大。这个问题从业务上来讲,可以理解为应用系统每秒钟最大能接受的用户访问量。或者每秒钟最大能处理的请求数;

QPS: 每秒钟处理完请求的次数;注意这里是处理完。具体是指发出请求到服务器处理完成功返回结果。可以理解在server中有个counter,每处理一个请求加1,1秒后counter=QPS。
TPS:每秒钟处理完的事务次数,一般TPS是对整个系统来讲的。一个应用系统1s能完成多少事务处理,一个事务在分布式处理中,可能会对应多个请求,对于衡量单个接口服务的处理能力,用QPS比较多。
并发量:系统能同时处理的请求数
RT:响应时间,处理一次请求所需要的平均处理时间

计算关系:

QPS = 并发量 / 平均响应时间
并发量 = QPS * 平均响应时间

影响数据库的因素:

1.SQL查询速度
2.服务器硬件
3.网卡流量
4.磁盘IO
5.大表和大事务

1.超高的QPS和TPS

风险:

效率低下的sql 

2.大量的并发和超高的CPU使用率

风险:

大量的并发-->数据库连接数被占满(max_connections 默认100)
超高的CPU使用率-->因CPU资料耗尽而出现宕机

3.磁盘IO

风险:

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

4.网络流量

风险:

网卡IO被占满(1000Mb/8大约等于100MB)

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

1.减少从服务器的数量
2.进行分级缓存
3.避免使用"select *"进行查询
4.分离业务网络和服务器网络

大表:

1.会出现慢查询

2.建立索引需要很长时间

风险:

MySQL版本<5.5建立索引会锁表
MySQL版本>=5.5会引起主从延迟

大事务:

定义:运行时间比较场,操作的数据比较多的事务。

风险:

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

CPU选择:

目前mysql不支持多cpu对同一sql进行并发处理

所以更好的cpu比更多cpu好—>cpu密集型

如果要提高系统吞吐量(web类应用)—> 更多cpu—>5.6以后的版本

 

 

 

 

研究:交换分区。

 

 

 

 

 

 

 

索引:

 

查看索引:

 

 

 

 

 

对系统性能进行测量,就称为MySQL基准测试。

 

 

猜你喜欢

转载自www.cnblogs.com/kz2017/p/9009581.html