MySQL转载部分运维相关

影响Mysql数据库性能的因素

2019-07-14  本文已影响40人  青衣敖王侯

1.写在前面的话

  上半年过去了,恶补了SpringBoot、SpringCloud、SpringSecurity、Nginx、ElasticSearch方面的知识。下半年要恶补的第一块知识是数据库了,虽然平时工作中经常写SQL,但是每次和别人探讨数据库性能、备份、安全、分库分表的知识的时候,还没有体系化的模式。我觉得人不是什么东西都要知道,但是不要什么都不知道,尤其是自己专业领域的知识。
在对Mysql的学习中,先不讲体系知识,而是先思考一下究竟是什么影响了数据库的性能。只有了解了原因才能知道怎么让数据库的性能最大化。所以这也是为什么这篇文章成为我学习Mysql的第一篇文章。
  数据库的重要性不言而喻,这里也不多说了,我们的Web服务器可以很容易横向扩展,数据库因为要保证一致性和稳定性,不能像Web服务器那样轻松的横向扩展。

2.影响数据库性能的因素:

3.大表带来的问题

3.1大表的定义

3.2大表对查询的影响

3.3如何处理数据库中的大表

4.服务器硬件对性能的影响

4.1.如何选择CPU

4.1.1我们的应用是不是CPU密集型

如果是,那么我们需要更好的CPU而不是更多的CPU。

4.1.2系统并发量如何

高并发的情况下,需要更多的CPU。Web类应用往往核心数量比频率更重要

4.2.内存

内存的大小影响数据库性能



4.3.磁盘的配置和选择

4.3.1目前使用到的磁盘

4.3.1.1传统机器硬盘

存储空间大、价格低、使用最多、最常见、读写较慢
读取数据的过程分为3个步骤
1.移动磁头到磁盘表面上的正确位置
2.等待磁盘旋转,使得所需的数据在磁头之下
3.等待磁盘旋转过去,所有所需的数据都被磁头读出
如何选择传统机器硬盘?根据数据大小,选择存储容量,不过目前存储容量不是多大问题,传输速度很重要,也就是读取步骤中第三步的速度;访问时间也是重要因素,对应第二步;物理尺寸越小,会越快,但是容量也会受限。

4.3.1.2使用RAID增强传统机器硬盘的性能

RAID是磁盘荣冗余队列的简称,简单来说RAID的作用就是可以把多个容量较小的磁盘组成一组容量更大的磁盘,并提供数据冗余来保证数据完整性的技术。


RAID0
RAID1
RAID5
RAID10

4.3.1.3使用固态存储SSD和PCIe卡

相比于机械磁盘有以下特点:
1.更好的随机读写性能
2.更好的支持并发
3.但是更容易损坏
目前的固态硬盘已经支持SATA接口了,但是呢其速度会受到SATA接口的影响。如下图所示:



同时SATA接口的SSD支持RAID技术~
PCIe卡,也就是FushionIO有以下特点:
1.无法使用SATA接口,需要独特的驱动和配置
2.价格相对于SSD要贵,但是性能比SSD更好
那么固态存储适用于什么场景呢?
1.适用于存在大量随机I/O的场景,所谓随机IO是因为数据库中的热数据大于了内存才发生的。
2.适用于解决单线程负载的IO瓶颈。假设我们只有一块SSD,那么我们应该把这个SSD放在从服务器上还是主服务器上呢?答案是从服务器上,因为从服务的数据复制是单线程的,而主库上的复制是多线程的。如果在主库上放SSD还会损害SSD,这点尤为注意。

4.3.1.4使用网络存储NAS和SAN

什么是SAN和NAS?有人说NAS倒过来就是SAN,嗯,说的有道理不扯了SAN(Storage Area Network)和NAS(Network-Attached Storage)是两种外部文件存储设备加载到服务器上的方法
SAN设备通过光纤连接到服务器,设备通过块接口访问,服务器可以将其当做硬盘使用,如下图所示:

SAN
SAN适合大量顺序读写,但是随机读写慢,不如本地RAID磁盘
NAS设备使用网络连接,通过基于文件的协议如NFS或SMB来访问。
SAN和NAS由于随机读写慢,所以适用于数据库备份,而不是直接用来做数据库的访问。
网络性能其实对数据库影响蛮大的。因为数据库服务器和Web服务器之间会进行网络传输,网络的延迟和带宽对都是影响因素。有人说数据库服务器和Web服务器在内网,应该问题不大。但是如下图所示,假设1000M带宽,Web服务器50个,每个读取2M数据,带宽就没了~~

所以,建议采用高性能和高带宽的网络接口设备和交换机,对多个网卡进行绑定,增强可用性和带宽,尽可能的进行网络隔离来减少网络对性能的影响。

4.3.1.5硬件性能总结

对于CPU的选择

5.操作系统对性能的影响

推荐一篇文章:https://www.cnblogs.com/lms0755/p/9053119.html
这里我们讲解一些CentOS系统参数的优化

5.1内核相关参数(/etc/sysctl.conf)

5.2增加资源限制(/etc/security/limit.conf)

这个文件实际上是Linux PAM也就是插入式认证模块的配置文件。可以用打开文件数的限制,如下图所示:



注意同一资源soft不能比hard高。把可打开的文件数量增加到了65535个以保证可以打开足够多的文件句柄。

5.3磁盘调度策略(/sys/block/devname/queue/scheduler)

cat /sys/block/sda/queue/scheduler 可以看到磁盘的调度策略

5.3.1 电梯时调度策略

NOOP实现了一个FIFO队列,当一个新的请求到来时,它将请求合并到最近的请求之后,以此来保证请求同一介质。NOOP倾向饿死读而利于写,因此NOOP对于闪存设备、RAM及嵌入式系统是最好的选择。

5.3.2截止时间调度策略

deadline确保了在一个截止时间内服务请求,这个截止时间是可调度的,而默认读期限短于写期限。这样就防止了写操作因为不能被读取而饿死的现象,Deadline对数据库类应用是最好的选择。

5.3.3预料IO调度策略

本质上与Deadline一样,但在最后一次读操作后,要等待6ms,才能继续进行对其他IO请求进行调度。它会在每个6ms中插入新的IO操作,而会将一些小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量。AS适合于写入较多的环境,比如文件服务器,AS对数据库环境表现很差。


image.png

6.文件系统对性能的影响

Linux中建议使用XFS~

上一篇下一篇

猜你喜欢

热点阅读