mysql性能调优

May 8, 2018


性能调优

1、选择合适的cpu

2、内存的重要性

3、硬盘对数据库性能的影响

4、合理设置RAID

5、操作系统的选择也很重要

6、不同文件系统对数据库的影响

7、选择合适的基准测试工具

cpu的选择

随着InnoDB 1.2起就把Master Thread中的一些逻辑,例如purge 回收无效的undo log页独立放在一个线程中进行处理了,经测试表明InnoDB 1.2版本在多核CPU环境下效率更高。同时可以增大innodb_read_io_threads和innodb_write_io_threads,从而有效利用CPU的多核性能。

数据库的应用类型:

OLTP(Online Transaction Processing 在线事务处理)和 OLAP(Online Analytical Processing 在线分析处理) OLAP多用在数据仓库或数据集中,一般需要执行复杂的SQL语句来进行查询,OLTP多用在日常的事务处理应用中,如银行交易、在线商品交易、Blog、网络游戏等应用。相对于OLAP ,OLTP类型的数据库的容量较小。

InnoDB存储引擎一般应用于OLTP的数据库应用,这种应用的特点:

  • 用户操作的并发量大
  • 事务处理数据一般比较短
  • 查询语句较为简单,一般走索引
  • 复杂的查询较少

OLTP类型的数据库对CPU的要求并不是很高,因为复杂的查询可能需要执行比较、排序、连接等非常耗时CPU的操作,而OLTP中复杂查询较少,可以说OLAP是CPU密集型操作,而OLTP是IO密集型操作。

内存的重要性

InnoDB存储引擎既缓存数据,又缓存索引,并且将它们缓存于一个很大的缓存池中,即InnoDB Buffer Pool。因此内存大小直接影响数据库的性能。

数据和索引的总大小为18G,下面的图显示随着内存的大小,TPS也不断增大,知道内存为20G时以及达到了峰值。

props

如何判断当前数据库的内存是否已经达到瓶颈?可以通过查看当前服务器的状态,比较物理磁盘的读取和内存读取的比例来判断缓冲池的命中率,通过InnoDB存储引擎的缓冲池的命中率不小于99%

show global status like ‘innodb%read%’\G:

props

即使缓冲池的大小已经大于数据库文件的大小,也不意味着没有磁盘操作。数据库的缓冲池只是一个用来进行存放热点数据,后台的线程还负责将脏页异步写入到磁盘,此外每次事务提交时还需要将日志写入重做日志文件中。

硬盘对数据库性能的影响

由于数据库中的数据都是持久化到文件中,而操作这些数据时都是需要load到内存中,以及从内存中写入到文件中,都会有磁盘I/O的,而这磁盘I/O效率直接影响到数据库的性能

机械硬盘

操作磁盘的时间消耗在 寻道+磁头旋转

机械硬盘支持随机访问,但是需要消耗长时间的磁头转动和寻道来定位数据,而顺序访问省去了寻道时间,因此顺序访问速度远高于随机访问

固态硬盘

闪存的固态硬盘,其内部由闪存(Flash Memory)组成的,闪存低延迟性、低功耗、以及防震性,通过并联多块闪存进一步提高数据传输的吞吐量。

闪存不需要使用机械硬盘那样的磁盘进行旋转和定位查找数据,可以提供一致的随机访问时间

另一方面闪存中的数据是不可以更新的,只能通过扇区的覆盖重写,而在覆盖重写之前需要执行非常耗时的擦除操作,擦除就是将某个块通常为128K或256K上的数据删除,然后 再重新写入新的数据,因此对于固态硬盘在数据库中的应用,应好好利用其读取的性能,避免过多的写入操作。

合理设置RAID

RAID的基本思想就是把多个相对便宜的磁盘组合起来,使性能达到甚至超过一个价格昂贵、容量巨大的磁盘

RAID作用:

增强数据集成度 增强容错功能 增加处理量和容量

根据不同的磁盘组合方式,常见组合为 RAID0、RAID1、RAID5

RAID0:将多个磁盘合并成一个磁盘,不会有冗余,并行I/O,速度快,其将数据按磁盘的个数进行分段,同时将这些数据写进这些盘中。在所有组合中,RAID0是最快的 由于没有冗余功能,如果一个磁盘损坏,在该磁盘上的所有数据都会丢失

props

RAID1:有两组以上的N个磁盘相互为镜像,在一个多线程环境下,具有很好的读取速度,但是写入速度有降低,除非主磁盘和镜像同时损坏,否则只要一个磁盘正常 即可维持运作,可靠性高。在向主硬盘写数据时,也会同步一份到镜像硬盘中。当主硬盘损坏时,镜像硬盘则替代主硬盘的工作,在RAID级别上,其RAID1数据安全性 是最好的,但是无论用多少块磁盘作为RAID1,仅算一个磁盘容量,其磁盘利用率是最低的。

props

RAID5:是一种存储性能、数据安全、存储成本兼顾的存储解决方案。

不对存储的数据进行备份,而是把数据和相对应的奇偶信息存储在组成RAID5的各个磁盘上,并且分别在不同的磁盘上。当某个磁盘损坏后,利用剩下的 数据和相对应的奇偶信息去恢复被损坏的数据,读取速度和RAID0相当,但是写入速度相当慢(使用Write Back提高性能),由于多个数据对应一个奇偶信息,空间利用率 比RAID1高,保障程度没有镜像高。

props

RAID10和RAID01:RAID10是先镜像再分区数据,将所有硬盘分为两个组,视为RAID0,然后将这两组合各自视为RAID1运作。RAID10有不错的读取速度而且拥有比RAID0更高 的数据保护性。 RAID01是先分区再将数据镜像到两组硬盘。 相比RAID10有着更快的读写速度,但是也有可能停止工作。RAID10缺点是需要较多的硬盘。

对数据库应用来说,RAID10是最好的选择,它同时兼顾了RAID1和RAID0的特性,但是当一个磁盘失效时性能还是会受到很大的影响。

props