——「高功能MYSQL」读书笔记(第九章)

高功能****MYSQL

MYSQL经典书本,常读常新。

一、硬件优化

在任何一个架构中,硬件服务是服务质量的根底,只有在硬件上足够好,才能进步高质量的服务。对于运转数据库服务的设备而言,首要需求考虑的是在硬件上对设备进行优化。首要是以下四个方面:

1、CPU

CPU应该选用64位,64位操作体系能够给单个进程分配更多的内存,核算较快,高主频、高缓存、高并行处理能力的。

2、内存

内存应该空间足够大,并且主频较高,尽量不必/swap分区来实现内存交换。

3、硬盘

硬盘在确保空间足够的情况下,转速应该够快,这样在硬盘数据的查询速度应该较快,并且能够选用RAID技能来提高存储体系的效能。

4、网络

设备的网卡应该选用规范的千兆网卡,并且在架构上web前端的主机和数据库服务的主机尽量处于同一个局域网内,能够考虑选用端口绑定技能提高安全性混合速度。数据查询流量在确保安全的前提下,能够考虑封闭防火墙等设备,以防止额外的开支。

二、磁盘I/O优化

对于MySQL数据库而言,磁盘I/O的效能直接决议了数据操作的功率。

假如数据库内部数据比较多,能够考虑将数据库的数据独自寄存在一个磁盘分区上。

一起,磁盘I/O还与文件体系有关,因而,也要合理的挑选磁盘分区的文件体系。并且在挂载时,能够挑选noatime选项,不记录拜访时刻,从而增强拜访功率。

在MySQL架构中,大多选用的是读写别离和主从同步的形式,在这种情况下,由于binlog日志操作比较频频,因而能够将其放在SSD或者是一个独自的磁盘分区上。

三、操作体系优化

由于数据库运转在操作体系之上,因而,操作体系也会对数据库运转形成一些影响,因而,假如是在一个体系上独自运转数据库服务时,能够封闭其他的不必要服务,防止消耗体系资源。一起,还要做好数据库和操作体系的资源分配,既要给给数据库预留大部分体系资源,以确保服务的正常供给,一起还要确保数据库服务不会占用过多体系资源,防止操作体系由于得到的资源过少,而间接的导致数据库服务质量下降。

总结:

  • Mysql服务器功能受制于体系最薄弱的环节,磁盘大小,可用内存,cpu资源网络以及连接他们的组件,都会限制住Mysql的功能。

  • mysql中一方面的缺陷常常会将压力施加在另一个体系之上。例如没有内存的时候,或许会刷出缓存来腾出空间,这时候会导致io过高,所以再发现问题的时候,要尽量注意深沉次的问题。

  • 低延时收益于更快的cpu,高吞吐收益于更多的cpu。

  • mysql还有许多后台作业,那些作业也能获益于多cpu。

  • 备库更多需求io而不是cpu,由于主库备份到备库会使串行使命。

  • cpu的电源管理技能会根据cpu的压力而动态的改变CPU的时钟速度,可是有突发的短查询,会有一段时刻来决议cpu是否应该变化,从而导致查询变慢,功能波动。

  • 配置很多内存的最大原因不是由于内存中能够保存很多的数据,而是为了削减io。

  • 随机io从缓存中的收益更大。由于次序io比随机io快,相比之下,随机读写来说,运用内存比运用io快得多。存储引擎中,一个随机读意味着存储引擎有必要执行索引操作,一般从b树查找,而连续一般遍历一个简单的数据结构如链表。

  • 假如有足够的内存,就能够彻底的防止磁盘读取操作,可是写操作是有必要的,可是能够延迟写操作,会集处理,削减io。如多次写入,一次刷新,io兼并。这也是预写日志战略的原因,经过连续写来优化随机io。

  • 作业集是程序真实运用的数据。MySQL中的作业集包括数据和索引,以缓存单位来计数,一个缓存单位是存储引擎作业的数据最小单位。

  • Innodb在默许情况下是16kb,假如要缓存单行数据,事实上,他是缓存了存在该列的页,也就是缓存了16kb的数据。加上索引,或许达到32kb乃至更多。

  • 添加内存并不能真实处理所有的问题,有时候需求加强io,比如存在很多写操作。

从传统磁盘读取数据的进程分为3步

  1. 移动读取磁头到磁盘表面的正确位置上。

  2. 等候磁盘旋转,所有所需的数据在读取磁头下。

  3. 等候磁盘旋转过去,读取磁头读取所需数据。

次序读首要会集在第3步,而随机读首要会集在1,2步。

  • 固态存储虽然有更好的随机读写和次序读写,也更加支撑并发,可是也存在缺陷,需求常常GC并且写入前需求擦除操作还会磨损整个块(SLC技能100000个写周期存储小,MLC10000个写周期存储大)。

  • 闪存一开始运用特别快,后面会由于废物收回而逐渐变慢,最终稳定下来。

  • 像innodb日志文件这样的次序写的作业负载,闪存不能供给多少本钱和功能优势。

  • 假如将mysql的磁盘换成固态,需求调整的配置有:

  1. 添加io线程数,添加并发。

  2. 加大日志。

  3. 制止预读。

  4. 配置刷新算法

  5. 禁用双写,由于有些闪存设备支撑原子写入。确保数据不会出错。

mysql创建了多种类型的文件:

  1. 数据和索引文件。

  2. 事务日志文件。

  3. 二进制日志文件。

  4. 常规日志。

  5. 临时文件和临时表。

  • 运用多个卷寄存这些数据能帮助处理io负载高的问题。可是需求额外的磁盘,本钱太高而效果一般。

  • 二进制日志和数据文件别离的真实又是能够削减一起丢掉数据和日志文件的或许性。

  • 假如存储体系能确保足够安全,利用多磁盘建立一个RAID比运用多磁盘要好得多。

  • 运转不正常的网络也是首要的功能瓶颈之一。

  • 有用的服务器监控工具

  1. vmstat 注意swap两列应该都是0,阐明没有进行内存交换,cpu中的us是cpu运用率。system中的cs是上下文切换次数。不超越100000不忧虑。procs中的r代表多少进程在等cpu,b多少进程在等io。超越5个需求注意。

  2. iostat 检查io

  3. mpstat 检查cpu

注:经过对操作体系的观察,如资源的运用情况和报错日志,在某些情况下更简单发现程序的功能问题。
本书介绍的许多知识都只是“泛泛而谈”,笔者自己也很少对操作体系或硬件进行调优,读者假如有兴趣深入研究操作体系和硬件,那么主张多阅览相关领域的专门作品。