在服务器硬件中,最容易影响数据库性能的是CPU资源和可用内存大小以及I/O。
选择CPU时需要考虑的点:
内存:
使用传统机器磁盘。机械硬盘读取数据的过程:
注:第一步+第二部=磁盘的访问时间。第三步消耗的时间=磁盘的传输速度
所以选择机械硬盘主要参考以下几个点:
RAID:
常用的RAID模式 - RAID 0:
RAID 0是最早出现的RAID模式,也称之为数据条带。是组建磁盘阵列中最简单的一种形式,只需要2块以上的硬盘即可,成本低,可以提高整个磁盘的性能和吞吐量。 RAID 0没有提供冗余或错误修复能力,但是实现成本是最低的
RAID 0 模式结构图:
常用的RAID模式 - RAID 1:
RAID 1又称磁盘镜像,原理是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时会在另一块闲置的磁盘上生成镜像文件,在不影响性能情况下最大限度的保证系统的可靠性和可修复性。
RAID 1 模式结构图:
常用的RAID模式 - RAID 5:
RAID 5又称之为分布式奇偶校验磁盘阵列通过分布式奇偶校验块把数据分散到多个磁盘.上这样如果任何一个盘数据失效,都可以从奇偶校验块中重建。但是如果两块磁盘失效,则整个卷的数据都无法恢复。
RAID 5 模式结构图:
常用的RAID模式 - RAID 10,适合数据库的模式:
RAID 10又称分片的镜像它是对磁盘先做RAID 1之后对两组RAID 1的磁盘再做RAID 0 ,所以对读写都有良好的性能,相对于RAID 5重建起来更简单,速度也更快。
RAID 10 模式结构图:
RAID级别的选择,可以参考下表:
相比机械磁盘固态磁盘有更好的随机读写性能,相比机械磁盘固态磁盘有更好的并发支持,相比机械磁盘固态磁盘更容易损坏
固态磁盘的特点:
PCIe卡的特点:
固态磁盘的使用场景:
SAN(Storage Area Network)和NAS(Network-Attached Storage)是两种外部文件存储设备加载到服务器上的方法
SAN设备通过光纤链接到服务器,设备通过块接口访问,服务器可以将其当做硬盘使用:
SAN的优缺点:
NAS设备使用网络链接,通过基于文件的协议如NFS或SMB来访问。
网络存储适合的场景:
网络对性能的影响:
CPU:
内存:
I/O子系统:
MySQL在不同操作系统需要注意的事项:
内核相关参数(/etc/sysctl.conf
):
net.core.somaxconn=65535
net.core.netdev_max_backlog=65535
net.ipv4.tcp_max_syn_backlog=65535
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.core.wmem_default=87380
net.core.wmem_max=16777216
net.core.rmem_default=87380
net.core.rmem_max=16777216
net.ipv4.tcp_keepalive_time=120
net.ipv4.tcp_keepalive_intvl=30
net.ipv4.tcp_keepalive_probes=3
kernel.shmmax=429496295
vm.swappiness=0
参考:
Linux系统内存交换分区:
在MySQL服务器上是否要使用交换分区有一些争议:
vm.swappiness=0
参数了增加资源限制(/etc/security/limit.conf
),这个文件实际上是Linux PAM也就是插入式认证模块的配置文件。通过我们会在文件末尾加入以下参数来控制打开文件数的限制:
* soft nofile 65535
* hard nofile 65535
说明:
*
表示对所有用户有效soft
指的是当前系统生效的设置,对于同一资源,soft的值不能比hard高hard
表明系统中所能设定的最大值nofile
表示所限制的资源是打开文件的最大数目65535
就是限制的次数由于系统默认的可打开文件句柄的数量是比较小的,所以一般我们都会将MySQL服务所在的操作系统的可打开的文件数量增加到65535个以保证可以打开足够多的文件句柄。需要注意的是,这个文件的修改需要重启系统才生效。
磁盘调度策略(/sys/block/vda/queue/scheduler
):
除了默认的cfq策略外还可以选择以下几种策略:
noop(电梯式调度策略):
NOOP实现了一个FIFO队列,它像电梯的工作方式一样对I/O请求进行组织,当有一个新的请求到来时,它将请求合并到最近的请求之后,以此来保证请求同一个介质。NOOP倾向于饿死读而利于写,因此NOOP对于闪存设备,RAM以及嵌入式是最好的选择。
deadline(介质时间调度策略):
Deadline确保了在一个截至时间内服务请求,这个截至时间是可调整的,而默认读期限短于写期限。这样就防止了写操作因为不能被读取而饿死的现象。Deadline对数据库类应用是最好的选择。
本质上与Deadline一样,但在最后一次读操作后,要等待6ms,才能继续进行对其他I/O请求进行调度。它会在每个6ms中插入新的I/O操作,而会将一些小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量。AS适合于写入较多的环境,比如文件服务器,AS对数据库环境表现很差。
修改磁盘调度策略的命令,例如我将策略改为deadline:
echo deadline > /sys/block/vda/queue/scheduler
服务器所使用的文件系统对服务器的I/O性能是有一定影响的,而文件系统的选择十分依赖于操作系统,例如Windows下就只有FAT和NTFS可供选择:
Linux下则有EXT3、EXT4、XFS,这三种文件系统都是具有日志功能的,这一点对于数据的安全性十分重要。其中XFS性能要比EXT3和EXT4高:
如果使用EXT3和EXT4的话,有几个挂载参数可以了解一下。EXT3/4文件系统的挂载参数可以在/etc/fstab
文件中配置:
data=writeback | ordered | journal
,其中 writeback 是Innodb最好的选择
writeback
意味着只有原数据写入日志,原数据写入和数据写入并不是同步的,这是最快的一种配置,因为Innodb有自己的事务日志,所以选择Innodb是最好的选择ordered
选项只会记录原数据,但提供了一些一致性的保证,在写原数据之前的会先写数据,使他们保持一致,这个选项比writeback
慢一些,但是如果出现崩溃呢更加安全journal
提供了原子日志的一种行为,在数据写入到最终位置之前,将记录到日志中,这个选项对Innodb来说是没有必要的,在这三个选项中journal
是最慢的一个然后我们再来看看另外两个重要的参数,在介绍这两个参数之前,我们需要了解默认情况下Linux操作系统会把文件访问的时间atime做一个记录,文件系统在文件被访问、创建、修改等的时候记录下了文件的一些时间戳。比如:文件创建时间、最近一次修改时间和最近一次访问时间;这在绝大部分的场合都是没有必要的。因为系统运行的时候要访问大量文件,如果能减少一些动作(比如减少时间戳的记录次数等)将会显著提高磁盘 IO 的效率、提升文件系统的性能。如果遇到机器IO负载高或是CPU WAIT高的情况时,可以尝试使用noatime和nodiratime禁止记录最近一次访问时间戳。
所以 noatime 和 nodiratime,是用于禁止记录文件的访问时间和读取目录的时间的,禁用了这两个时间的选项后,可以减少一些,写的操作。系统在读取文件和目录时候,不必写操作来记录以上两个时间。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。