什么影响了mysql的性能
- 服务器硬件
- 操作系统
- 引擎选择
- 数据库参数的配置
- 表的设计和sql语句
一般来说数据的参数的配置是非常重要的

如何选择CPU
CPU密集型,选择更好的数据库而不是更多的CPU
并发量多的,cpu的数量越多越好
在web中,cpu的数量比性能重要
内存
如果内存的数量大于缓存的话,利用率就不是太高了。
买内存的时候,内存最大的,买相同的内存。
磁盘的配置和选择
机械硬盘
如何选择
- 容量
- 传输速度
- 访问时间
- 转速
- 物理尺寸
RAID
什么是RAID?
将多个小的磁盘,组合成一个大的磁盘!并提供数冗余来保证数据的完整性。
RAID 0


磁盘一旦损坏,数据就找不到了。
读比 RAID 1 快
RAID 1


注意,磁盘坏了,立马更换。
RAID 5


随机写慢,但是读快。适合方从数据库
RAID 10
数据库的最好选择,成本比较高


总结

固态硬盘
优缺点
- 有更好的读写能力
- 更好的支持并发
- 但是更容易损坏
特点

网络存储的使用场景
适合做数据库备份。


网络对性能的影响

Centos 参数优化




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缓存池的大小,注意存放索引








数据库设计对性能的影
- 过分的反范式化为表建立太多的列
- 过分的范式化造成太多的表关联
- 在OLTP中使用不恰当的分区表
- 使用外键保证数据的完整性
- 对有外键的表进行修改时候,mysql都要对外键应用进行检查,这样就带来了额外的锁的开销,降低了数据库的修改效率!
- 建议尽量不使用外键约束,但是在关联键上建立相关的索引还是必须的。
性能优化的顺序
- 数据库接口和sql语句
- 数据库引擎的选择和参数的配置
- 系统选择和优化
- 硬件的升级
网友评论