影响数据库性能的几个方面:
1.服务器硬件
2.服务器系统
3.数据库存储引擎的选择
4.数据库参数配置
5.数据库结构设计和SQL语句
数据库存储引擎的选择:
MyISAM:不支持事务,表级锁
InnoDB:事务级存储引擎,完美支持行级锁,事务的ACID特性
磁盘的配置和选择
使用传统机器硬盘
使用RAID增强传统机器硬盘性能
什么是RAID
RAID是磁盘冗余队列简称:简单来说RAID的作用就是可以吧多个容量较小的磁盘组成
一组容量更大的磁盘,并提供数据冗余来保证数据完整性的技术
【RAID0】是最早出现的RAID模式,也称之为数据条带,是组建磁盘整列中最简单的一种形式,
只需要2块以上的磁盘即可,成本低,可以提高整个磁盘的性能和吞吐量,
但是RAID没有提供冗余或错误修复能力,但是实现成本是最低的
【RAID1】又称为磁盘镜像,原理是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入
一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,在不影响性能情况的最大限度的保证系统的可靠性和可修复性。
【RAID5】又称之为分布式奇偶校验磁盘阵列,通过分布式奇偶校验块把数据分散到多个磁盘上,
这样如果任何一个盘数据失败,都可以从奇偶校验快中重建,但是如果两块磁盘失效,
责整个卷的数据都无法恢复。
【RAID10】又称分片的镜像,他是对磁盘先做RAID1之后对两组RAID1的磁盘再做RAID0,
所以对读写都有良好的性能,相对于RAID5重建起来更简单,速度也更快。
RAID级别的选择:
使用固态存储SSD和PCIe卡
使用网络存储NAS和SAN
SAN设备通过光前连接到服务器,设备通过块接口访问,服务器可以将其当做硬盘使用
特点:大量顺序读写,读写I/O,缓存,I/O合并,随机读写慢,不如本地RAID磁盘
NAS设备使用网络连接,通过基于文件的协议如NFS和SMB来访问
使用场景:数据库备份
网络对性能的影响:
建议:
采用高性能和高宽带的网络接口设备和交换机
对多个网卡进行绑定,增强可用性和宽带
尽可能的进行网络隔离
服务器硬件对性能的影响
CPU:
64位CPU一定要在64位系统下,
对于并发比较高的场景CPU数量比频率重要
对于CPU密集型场景和复杂SQL则频率越高越好
内存
选择主板所能使用的最高频率的内存
内存的大小对性能很重要,所以尽可能的大
【MYSQL体系结构】
客户端 - > 连 接 管 理 器
↓ ↑
查询缓存 <- 查询解析 MYSQL服务层
↓
查询优化器
存储引擎层:innodb,myisam,xtradb,CSV,memory......
注意:存储引擎是针对表的而不是针对库的(一个库中不同表可以使用不同存储引擎)
【MyISAM】
MYSQL 5.5之前版本默认存储引擎是 MyISAM
MyISAM存储引擎表室友MYD和MYI组成
特性:并发性与锁级别
表损坏修复
check table tablename
repair table tablename
限制:
mysql5.0之前默认表大小4.0G
mysql5.0之后默认支持256T
适用场景:
非事务型应用
只读类应用
空间类应用
【Innodb】
Innodb使用表空间进行数据存储
特性:Innodb是一种事务性存储引擎
完全支持事务的ACID特性
Redo Log 和 Undo Log
支持行级锁
行级锁可以最大程度的支持并发
行级锁是由存储引擎层实现的
什么是锁
锁对主要作用是管理共享资源的并发访问
锁用于实现事务的隔离性
锁的类型
共享锁(读锁)
独占锁(写锁)
锁的粒度
表级锁
行级锁
如何选择正确的存储引擎
参考条件:
事务
备份
崩溃恢复
存储引擎的特有特性
数据库结构设计的步骤
需求分析:全面了解产品设计的存储需求
存储需求
数据处理需求
数据的安全性和完整性
逻辑设计:设计数据的逻辑存储结构
物理设计:根据所使用的数据库特点进行表结构设计
关系型数据库:OCACLE,SQLserver,Mysql,postgresSql
非关系型数据库:mongo,Redis,Hadoop
存储引擎:Innodb
数据库设计的第一范式
数据库表中的所有字段都只具有单一属性
单一属性的列是由基本的数据类型所构成的
设计出来的表都是简单的二维表
数据库设计的第二范式
要求表中只具有一个业务主键,也就是说符合第二范式的表中不能存在非主键列对只对部分主键的依赖关系
数据库设计的第三范式
指每一个非主属性既不部分依赖于也不传递依赖于业务逐渐,也就是在第二范式的基础上消除了
非主属性对主键的传递依赖