什么影响了mysql的性能
服务器硬件
操作系统
引擎选择
数据库参数的配置
表的设计和sql语句
一般来说数据的参数的配置是非常重要的
20180827224542.png
如何选择CPU
CPU密集型,选择更好的数据库而不是更多的CPU
并发量多的,cpu的数量越多越好
在web中,cpu的数量比性能重要
内存
如果内存的数量大于缓存的话,利用率就不是太高了。
买内存的时候,内存最大的,买相同的内存。
磁盘的配置和选择
机械硬盘
如何选择
容量
传输速度
访问时间
转速
物理尺寸
RAID
什么是RAID?
将多个小的磁盘,组合成一个大的磁盘!并提供数冗余来保证数据的完整性。
RAID 0
什么是 RAID 0
RAID 0的实现方式
磁盘一旦损坏,数据就找不到了。
读比 RAID 1 快
RAID 1
RAID 1
RAID 1 示例图
注意,磁盘坏了,立马更换。
RAID 5
什么是RAID 5
示例图
随机写慢,但是读快。适合方从数据库
RAID 10
数据库的最好选择,成本比较高
介绍
示例图
总结
enter description here
固态硬盘
优缺点
有更好的读写能力
更好的支持并发
但是更容易损坏
特点
固态硬盘的特点
网络存储的使用场景
适合做数据库备份。
SNA和NAS
NAS
网络对性能的影响
建议
Centos 参数优化
enter description here
决定每个端口最大的监听长度,默认很小,对负载很大的数据是不行的
接受包的速率比内核处理快的时候,准许往队列中发送包的最大的数据木
enter description here
MySQL
mysql引起的介绍
MYISAM
特性1:
并发性与锁级别
MYISAM 使用的是表级锁,而不是行级锁!这就导致读取和写入是相斥的,对续写能敌的处理不是很好,并发性不好,但是对于只读的话,还是不错的。
特性2:
表损坏(意外关闭造成的损坏)和修复
check table 检查
repair table 修复
特性3
支持全文索引
可以建立前缀索引
可以进行压缩
当数据只读的时候,只能读不能写
限制:
版本小于5.0,单表最大是4G
版本大于5.0,单表最大事256T
实用场景:
非事物应用
只读类应用(压缩)
空间类应用(GPS,空间函数)
INNODB
5.5版本之后默认成Innodb数据库引擎
有自己的表空间,使用表空间进行存储
为每一个表建立独立的表空间
系统表空间和独立表空间如何选择
系统表空间容易造成空间浪费,会有I/O瓶颈
独立表空间,可以向多个文件删除。
建议: 使用独立表空间
数据库5.6版本默认的是独立表空间
系统空间变成独立表空间的办法
导出数据
停止服务,修改参数,并且删除Innodb相关参数
重启服务,重建Innodb独立表空间
导入数据
特性 1:
是事物特性表
完全支持ACID特性
Redo log 和undo log(独立存在的,可以将其放入到SSD,来提高数据库性能)
undo log未提交的事物
Redo log 已经提交的事物
什么是锁?
管理资源并发访问
一个人提交数据,另一个人阻塞
实现事物的隔离性
锁类型?
共享锁(读锁)
独占锁(写锁)
锁的粒度
锁的最小单位,如行级锁,表级锁
阻塞和死锁?
阻塞
一个锁需要等另一个锁资源释放
死锁
两个锁资源互相占用。这个课由系统自动处理,但是如果是大量的数据的话,就不好了。
特性3 :
状态检查
show engine innodb status
注意要隔离30s,
可以检查缓存、读写、循环次数、log信息、缓存池、内存信息等。
适用场景:
使用大多数的OLTP应用
5.6支持了全文索引和空间函数
CVS引擎
特点:
以文件形式存储的
.cvs 表内容
csm 表状态
frm 表结构
特点:
1.以csv格式进行存储
2.不能出现null的列
3.不支持索引
4.可以对文件直接编辑
适用场景
数据中间交换表,如电子表格等
Archive引擎
特点:
1.缓存所有的写,并对缓存进行压缩。更加节约磁盘I/O和内存
2.数据已ARZ后缀访问文件
特点2:
1.只支持insert和select操作
2.支持行级锁
3.只允许在自增id上建立索引
适用场景:
日志和数据采集
memory数据库引擎
特点:
1.数据保存在内存中
2.支持HASH(等值查找)和BTress(范围查找)索引
3.所有字段都是定长
4.不支持大字段
5.是一个表级锁,并发不好!
适用场景
1.映射表,如邮编和地区
2.保存数据分析产生的中间表
3.用于缓存周期性聚合数据表
不能用于主从复制,因为每次主服务器上都会从新生成!副从服务器上的就不能用了。
federated
特点:
提供了mysql服务器访问远程服务器的方法
本地不存放数据,数据都在远程数据库里存放着
本地保存表结构和远程的服务器信息
当前的数据库默认是禁止的
适用场景
偶尔的统计拆分可以使用。
如何选择数据库引擎
一般选择Innodb就可以了。
参考条件 :事物、备份、特性、崩溃恢复
建议:不同的数据库引擎,尽量不要混合使用
MySql服务器配置
内存配置的相关参数
sotr_buffer_size
确定可以使用内存的上限,确定mysql每个链接使用的内存
join_buffer_size
链接缓存区的大小,一个查询关联多个表,那么就会给每个关联分配一个机制
read_buffer_size
MYSIM全局扫描时候,分配的读取缓存区的大小。
read_rnd_buffer_size
索引缓存区的大小
要注意确认为操作系统留多少内存。
如何分配缓存池内存
Innodb_buffer_prol_size 定义Innodb使用缓存池的大小
算法:
池的大小 --> 总内存-(线程内存*连接数)-系统内存。
key_buffer_size :MYSIM缓存池的大小,注意存放索引
enter description here
enter description here
mysql 安全参数的配置
MYSQL安全参数2
Mysql安全参数3
enter description here
其他参数的配置
其他参数的配置2
数据库设计对性能的影
过分的反范式化为表建立太多的列
过分的范式化造成太多的表关联
在OLTP中使用不恰当的分区表
使用外键保证数据的完整性
对有外键的表进行修改时候,mysql都要对外键应用进行检查,这样就带来了额外的锁的开销,降低了数据库的修改效率!
建议尽量不使用外键约束,但是在关联键上建立相关的索引还是必须的。
性能优化的顺序
数据库接口和sql语句
数据库引擎的选择和参数的配置
系统选择和优化
硬件的升级