打造扛得住的数据库架构读书笔记(二)

影响MySql的性能的因素
1)服务器硬件
1.CPU资源(目前不支持多个CPU对同一SQL并发处理)
如果并发比较多,CPU数量其实很重要。
2.可用内存大小(对性能的影响有限)
MyISAM会将索引缓存到内存中,数据通过操作系统来缓存。
InnoDB会同时在内存中缓存数据和索引。
3.磁盘I/O性能和系统
磁盘的配置和选择:传统机器硬盘(空间大,读写速度慢),RAID增强传统机器硬盘的性能(RAID的作用是把多个容量较小的磁盘组成一组容量更大的磁盘,并提供数据冗余来保证数据完整性,可以让很多磁盘驱动器同时工作,提高吞吐量),固态存储SSD(闪存)和PCIe卡(比机械磁盘有着更好的随机读写性能,有更好的并发支持,但是比机械磁盘容易损坏,也支持RAID),网络存储NAS和SAN(外部文件存储设备加载到服务器上的方法,NAS通过光纤接入,可以看做本地磁盘,适合做数据库备份)。

2)操作系统对性能的影响
推荐centOS(Linux)
内核相关参数(/etc/sysctl.conf)
net.core.somaxconn = 65536 TCP 监听个数
net.ipv4.tcp_fin_timeout = 10 减少等待时间,加快TCP连接的回收次数
net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recyle = 1

kernel.shammax = 4294967295
Linux 内核参数中最重要的参数之一,用于定义单个共享内存段的最大值。应该设置的足够大,以便能在一个共享内存段下容纳下整个Innodb缓冲池的大小。
vm.swappiness = 0
这个参数当内存不足时会对性能产生比较明显的影响。避免内存交换。告诉Linux内核除非虚拟内存沾满了,否则就不适用交换分区。

增加资源限制(/etc/security/limit.conf)
*soft nofile 65535
*hard nofile 65535
*表示对所有用户有效,nofile表示所限制的资源是打开文件的最大数目。

磁盘调度策略(/sys/block/devname/queue/scheduler)
NOOP对于闪存设备,RAM及嵌入式系统是最好的选择。
Deadline对数据库类应用是最好的选择。
anticipatory适合写入较多的服务器,比如文件服务器。

文件系统
Linux有XFS,EXT3,EXT4,都有日志功能,推荐使用XFS。

MySql本身对于性能的影响。
在这里插入图片描述
存储引擎是针对表的,不同表可以使用不同的存储引擎。

MyISAM
MyISAM存储引擎表由MYD,数据和MYI,索引组成。
表锁(读取和写入互斥,对于读写混合操作并发性并不是太好)
支持表损坏修复
不支持事务

支持全文索引
支持数据压缩

限制:
5.0版本之前默认表最大为4G,需要修改参数。
5.0版本之后单表大小最大为256TB。

适用:非事务应用,只读类应用,空间类应用(GPS数据,空间函数)。

InnoDB
InnoDB适用表空间进行数据存储,参数 innodb_file_per_table
ON:独立表空间,每个表单独存储:tablename.ibd
OFF:系统表空间,ibdataX。

系统表空间和独立表空间要如何选择?
系统表空间无法简单的收缩文件大小,删除了一些数据也不会使表大小减小。系统表空间会产生IO瓶颈。
独立表空间可以同时向多个文件刷新数据。强烈建议使用独立表空间。

事务性存储引擎,支持ACID特性。
为了支持ACID特性,Innodb存储引擎有两个log。
Redo Log 重做日志和Undo Log 回滚日志。
Redo Log为了实现持久性,undo_Log 主要为了实现回滚功能。
redo log中存储的是已经提交的事务,undo log中存储的是未提交的事务。

支持行级别锁。行级别锁支持的并发数目更多。

锁是用来管理共享资源的并发访问,用于实现事务的隔离性。
共享锁(读锁) 独占锁(写锁,排他)
阻塞:一个锁要等待另一个锁执行完毕后才能继续执行。
死锁:两个或者两个以上事务相互占用对方等待的资源。

在5.7版本之后Innodb也支持空间函数和全文索引,InnoDB适合大多数OLTP应用。

CSV存储引擎
数据以文本方式存储在文件中(csv格式)。
.csv 文件存储表内容,.csm 文件存储表的元数据如表的状态和数据量。
.frm 文件存储表结构信息。
不支持索引,不适合大表,不适合在线处理。

适合做为数据交换的中间表
电子表格-csv-mysql。

猜你喜欢

转载自blog.csdn.net/bianhao92115/article/details/86581753
今日推荐