iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Linux上MySQL优化三板斧——CPU、内存、文件系统
  • 593
分享到

Linux上MySQL优化三板斧——CPU、内存、文件系统

CPUdeadlineLinuxmountMySQLNUMA优化内存文件系统电源 2022-05-23 16:05:55 593人浏览 泡泡鱼
摘要

现在Mysql运行的大部分环境都是在linux上的,如何在Linux操作系统上根据mysql进行优化,我们这里给出一些通用简单的策略。这些方法都有助于改进Mysql的性能。 闲话少说,进入正题。 &n

现在Mysql运行的大部分环境都是在linux上的,如何在Linux操作系统上根据mysql进行优化,我们这里给出一些通用简单的策略。这些方法都有助于改进Mysql的性能。

闲话少说,进入正题。

 一、CPU

首先从CPU说起。
你仔细检查的话,有些服务器上会有的一个有趣的现象:你cat /proc/cpuinfo时,会发现CPU的频率竟然跟它标称的频率不一样:

#cat /proc/cpuinfo 
 processor : 5
 model name : Intel(R) Xeon(R) CPU E5-2620 0 @2.00GHz
 ...
 cpu MHz : 1200.000

这个是Intel E5-2620的CPU,他是2.00G * 24的CPU,但是,我们发现第5颗CPU的频率为1.2G。

这是什么原因列?

这些其实都源于CPU最新的技术:节能模式。操作系统和CPU硬件配合,系统不繁忙的时候,为了节约电能和降低温度,它会将CPU降频。这对环保人士和抵制地球变暖来说是一个福音,但是对MySQL来说,可能是一个灾难。
为了保证MySQL能够充分利用CPU的资源,建议设置CPU为最大性能模式。这个设置可以在BiOS和操作系统中设置,当然,在BioS中设置该选项更好,更彻底。由于各种BIOS类型的区别,设置为CPU为最大性能模式千差万别,我们这里就不具体展示怎么设置了。

二、内存

然后我们看看内存方面,我们有哪些可以优化的。

i)我们先看看numa

非一致存储访问结构 (NUMA : Non-UnifORM Memory Access) 也是最新的内存管理技术。它和对称多处理器结构 (SMP : Symmetric Multi-Processor) 是对应的。简单的队别如下:

mysql内存优化

如图所示,详细的NUMA信息我们这里不介绍了。但是我们可以直观的看到:SMP访问内存的都是代价都是一样的;但是在NUMA架构下,本地内存的访问和非本地内存的访问代价是不一样的。对应的根据这个特性,操作系统上,我们可以设置进程的内存分配方式。目前支持的方式包括:

–interleave=nodes
–membind=nodes
–cpunodebind=nodes
–physcpubind=cpus
–localalloc
–preferred=node

简而言之,就是说,你可以指定内存在本地分配,在某几个CPU节点分配或者轮询分配。除非是设置为–interleave=nodes轮询分配方式,即内存可以在任意NUMA节点上分配这种方式以外。其他的方式就算其他NUMA节点上还有内存剩余,Linux也不会把剩余的内存分配给这个进程,而是采用SWAP的方式来获得内存。有经验的系统管理员或者DBA都知道SWAP导致的数据库性能下降有多么坑爹。
所以最简单的方法,还是关闭掉这个特性。
关闭特性的方法,分别有:可以从BIOS,操作系统,启动进程时临时关闭这个特性。
a)由于各种BIOS类型的区别,如何关闭NUMA千差万别,我们这里就不具体展示怎么设置了。
b)在操作系统中关闭,可以直接在/etc/grub.conf的kernel行最后添加numa=off,如下所示:

kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/VolGroup-root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=VolGroup/root rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto rd_LVM_LV=VolGroup/swap rhgb crashkernel=auto quiet KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM  numa=off

另外可以设置 vm.zone_reclaim_mode=0尽量回收内存。
c)启动MySQL的时候,关闭NUMA特性:

nuMactl --interleave=all  mysqld &

当然,最好的方式是在BIOS中关闭。

ii)我们再看看vm.swappiness。

vm.swappiness是操作系统控制物理内存交换出去的策略。它允许的值是一个百分比的值,最小为0,最大运行100,该值默认为60。vm.swappiness设置为0表示尽量少swap,100表示尽量将inactive的内存页交换出去。
具体的说:当内存基本用满的时候,系统会根据这个参数来判断是把内存中很少用到的inactive 内存交换出去,还是释放数据的cache。cache中缓存着从磁盘读出来的数据,根据程序的局部性原理,这些数据有可能在接下来又要被读取;inactive 内存顾名思义,就是那些被应用程序映射着,但是“长时间”不用的内存。
我们可以利用vmstat看到inactive的内存的数量:

#vmstat -an 1 
 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- 
 r b swpd free inact active si so bi bo in cs us sy id wa st 
 1 0 0 27522384 326928 1704644 0 0 0 153 11 10 0 0 100 0 0 
 0 0 0 27523300 326936 1704164 0 0 0 74 784 590 0 0 100 0 0 
 0 0 0 27523656 326936 1704692 0 0 8 8 439 1686 0 0 100 0 0 
 0 0 0 27524300 326916 1703412 0 0 4 52 198 262 0 0 100 0 0

通过/proc/meminfo 你可以看到更详细的信息:

#cat /proc/meminfo | grep -i inact 
 Inactive: 326972 kB 
 Inactive(anon): 248 kB 
 Inactive(file): 326724 kB

这里我们对不活跃inactive内存进一步深入讨论。Linux中,内存可能处于三种状态:free,active和inactive。众所周知,Linux Kernel在内部维护了很多LRU列表用来管理内存,比如LRU_INACTIVE_ANON, LRU_ACTIVE_ANON, LRU_INACTIVE_FILE , LRU_ACTIVE_FILE, LRU_UNEVICTABLE。其中LRU_INACTIVE_ANON, LRU_ACTIVE_ANON用来管理匿名页,LRU_INACTIVE_FILE , LRU_ACTIVE_FILE用来管理page caches页缓存。系统内核会根据内存页的访问情况,不定时的将活跃active内存被移到inactive列表中,这些inactive的内存可以被交换到swap中去。
一般来说,MySQL,特别是InnoDB管理内存缓存,它占用的内存比较多,不经常访问的内存也会不少,这些内存如果被Linux错误的交换出去了,将浪费很多CPU和IO资源。 InnoDB自己管理缓存,cache的文件数据来说占用了内存,对InnoDB几乎没有任何好处。
所以,我们在MySQL的服务器上最好设置vm.swappiness=0。

我们可以通过在sysctl.conf中添加一行:

echo "vm.swappiness = 0" >>/etc/sysctl.conf

并使用sysctl -p来使得该参数生效。

三、文件系统

最后,我们看一下文件系统的优化

i)我们建议在文件系统的mount参数上加上noatime,nobarrier两个选项。

用noatime mount的话,文件系统在程序访问对应的文件或者文件夹时,不会更新对应的access time。一般来说,Linux会给文件记录了三个时间,change time, modify time和access time。
我们可以通过stat来查看文件的三个时间:

stat libnids-1.16.tar.gz 
 File: `libnids-1.16.tar.gz' 
 Size: 72309 Blocks: 152 IO Block: 4096 regular file 
 Device: 302h/770d Inode: 4113144 Links: 1 
 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) 
 Access : 2008-05-27 15:13:03.000000000 +0800 
 Modify: 2004-03-10 12:25:09.000000000 +0800 
 Change: 2008-05-27 14:18:18.000000000 +0800

其中access time指文件最后一次被读取的时间,modify time指的是文件的文本内容最后发生变化的时间,change time指的是文件的inode最后发生变化(比如位置、用户属性、组属性等)的时间。一般来说,文件都是读多写少,而且我们也很少关心某一个文件最近什么时间被访问了。
所以,我们建议采用noatime选项,这样文件系统不记录access time,避免浪费资源。
现在的很多文件系统会在数据提交时强制底层设备刷新cache,避免数据丢失,称之为write barriers。但是,其实我们数据库服务器底层存储设备要么采用RAID卡,RAID卡本身的电池可以掉电保护;要么采用Flash卡,它也有自我保护机制,保证数据不会丢失。所以我们可以安全的使用nobarrier挂载文件系统。设置方法如下:
对于ext3, ext4和 reiserfs文件系统可以在mount时指定barrier=0;对于xfs可以指定nobarrier选项。

ii)文件系统上还有一个提高IO的优化万能钥匙,那就是deadline。

在Flash技术之前,我们都是使用机械磁盘存储数据的,机械磁盘的寻道时间是影响它速度的最重要因素,直接导致它的每秒可做的IO(IOPS)非常有限,为了尽量排序和合并多个请求,以达到一次寻道能够满足多次IO请求的目的,Linux文件系统设计了多种IO调度策略,已适用各种场景和存储设备。
Linux的IO调度策略包括:Deadline scheduler,Anticipatory scheduler,Completely Fair Queuing(CFQ),NOOP。每种调度策略的详细调度方式我们这里不详细描述,这里我们主要介绍CFQ和Deadline,CFQ是Linux内核2.6.18之后的默认调度策略,它声称对每一个 IO 请求都是公平的,这种调度策略对大部分应用都是适用的。但是如果数据库有两个请求,一个请求3次IO,一个请求10000次IO,由于绝对公平,3次IO的这个请求都需要跟其他10000个IO请求竞争,可能要等待上千个IO完成才能返回,导致它的响应时间非常慢。并且如果在处理的过程中,又有很多IO请求陆续发送过来,部分IO请求甚至可能一直无法得到调度被“饿死”。而deadline兼顾到一个请求不会在队列中等待太久导致饿死,对数据库这种应用来说更加适用。
实时设置,我们可以通过

echo deadline >/sys/block/sda/queue/scheduler

来将sda的调度策略设置为deadline。

我们也可以直接在/etc/grub.conf的kernel行最后添加elevator=deadline来永久生效。

总结

CPU方面
关闭电源保护模式

内存:
vm.swappiness = 0
关闭numa

文件系统:
用noatime,nobarrier挂载系统
IO调度策略修改为deadline。

您可能感兴趣的文档:

--结束END--

本文标题: Linux上MySQL优化三板斧——CPU、内存、文件系统

本文链接: https://www.lsjlt.com/news/9368.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用Go语言优化Linux文件存储系统?
    在现代计算机系统中,文件存储系统是非常重要的一部分。对于Linux系统来说,文件存储系统的优化可以提高系统的性能和稳定性。本文将介绍如何使用Go语言来优化Linux文件存储系统。 一、文件系统的基础知识 在Linux系统中,文件系统是用于...
    99+
    2023-08-06
    linux 文件 存储
  • 操作系统文件系统秘籍:优化文件存储和管理
    文件系统是操作系统的重要组成部分,负责管理计算机存储设备中的文件。文件系统为文件提供了一个统一的访问接口,应用程序可以通过这个接口来读写文件。文件系统还负责维护文件的元数据,例如文件名、大小、创建时间等。 优化文件系统可以显著提高系统效...
    99+
    2024-02-11
    文件系统 优化 存储 管理 性能 可靠性
  • MySQL性能全面优化方法参考,从CPU,文件系统选择到mysql.cnf参数优化
    本文整理了一些MySQL的通用优化方法,做个简单的总结分享,旨在帮助那些没有专职MySQL DBA的企业做好基本的优化工作,至于具体的SQL优化,大部分通过加适当的索引即可达到效果,更复杂的就需要具体分析了...
    99+
    2024-04-02
  • Linux系统如何优化文件系统及磁盘检查
    本篇内容主要讲解“Linux系统如何优化文件系统及磁盘检查”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux系统如何优化文件系统及磁盘检查”吧! Linux中数据块是储存数据的基本数据单元...
    99+
    2023-06-10
  • Linux内存文件系统tmpfs的使用方法
    本篇内容主要讲解“Linux内存文件系统tmpfs的使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux内存文件系统tmpfs的使用方法”吧!一、/dev/shm理论默认的Linux...
    99+
    2023-06-13
  • Linux中如何使用tmpfs内存文件系统
    小编给大家分享一下Linux中如何使用tmpfs内存文件系统,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!简介tmpfs是一种虚拟内存文件系统,而不是块设备。是基...
    99+
    2023-06-15
  • 如何在Linux系统上安装Linux内核头文件
    本篇内容主要讲解“如何在Linux系统上安装Linux内核头文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何在Linux系统上安装Linux内核头文件”吧!当你在编译一个设备驱动模块时,你...
    99+
    2023-06-13
  • 优化操作系统文件系统缓存:从基础到实践
    一、文件系统缓存基础 文件系统缓存是一种由操作系统管理的内存区域,用于存储最近访问过的数据块。当应用程序请求读取或写入数据时,操作系统会首先检查缓存中是否有该数据块。如果存在,则直接从缓存中读取或写入数据,这比从磁盘读取或写入数据要快得...
    99+
    2024-02-27
    文件系统缓存、性能优化、linux
  • 操作系统文件系统缓存,优化秘籍与最佳实践
    优化秘籍与最佳实践: 1. 调整文件系统缓存大小: 文件系统缓存的大小可以通过调整内核参数来进行调整。在Linux系统中,可以使用"vm.vfs_cache_size"参数来调整文件系统缓存的大小。在Windows系统中,可以使用"HKL...
    99+
    2024-02-27
    : 文件系统缓存、优化、最佳实践、Linux、Windows
  • linux系统swappiness参数在内存与交换分区间优化
    http://blog.itpub.net/29371470/viewspace-1250975swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swa...
    99+
    2023-06-05
  • Linux文件系统与持久性内存举例分析
    本篇内容主要讲解“Linux文件系统与持久性内存举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux文件系统与持久性内存举例分析”吧!在 Linux 系统中一切皆文件,除了通常所说的...
    99+
    2023-06-15
  • Linux的共享内存与tmpfs文件系统是什么
    本篇内容介绍了“Linux的共享内存与tmpfs文件系统是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言共享内存主要用于进程间通信,...
    99+
    2023-06-16
  • Windows系统虚拟内存的设置优化方法整理[图文]
    首先得明白什么是虚拟内存,以及虚拟内存有什么作用。   在早期,因为内存价格非常昂贵,所以一般电脑上都不会配置太多。但有时候,我们使用的应用程序所需要的内存量会超过了物理内存量,这时,操作系统就会暂时将不需要访问的数据通...
    99+
    2023-05-24
    Windows 虚拟内存 设置 优化 系统 方法
  • 万字长文带你走进MySql优化(系统层面优化、软件层面优化、SQL层面优化)
    文章目录 系统层面优化采用分布式架构使用缓存使用搜索引擎 软件层面优化调整 MySQL 参数配置定期清理无用数据创建索引创建索引普通索引唯一索引全文索引组合索引空间索引主键索引外键索引索引前缀 适合创建索引的场景不适...
    99+
    2023-08-16
    mysql sql 数据库
  • win7系统无法下载4G内存以上的文件解决方法
    现在许多人都喜欢用U盘来传输和拷贝文件,可上在拷贝文件的过程中却发现u盘无法拷贝单个超过或等于4G的大文件,不然就拷贝失败。来看看下文的解决方法吧。 1、右键点击你存放文件的磁盘,点属性,这时你在“文件系统&...
    99+
    2023-05-20
    win7 4G内存 文件
  • Java算法设计:如何在Linux系统中优化文件读写?
    在Linux系统中,文件读写是非常常见的操作。但是,如果不注意优化,文件读写的效率很容易成为系统瓶颈。因此,在Java程序中,优化文件读写是非常重要的。 本文将介绍如何在Linux系统中优化文件读写,包括以下几个方面: 使用缓冲区 J...
    99+
    2023-08-27
    编程算法 文件 linux
  • Memcached缓存技术对于PHP中的文件系统访问的优化
    Memcached是一种基于内存的高速缓存系统,常被用于加速网站及应用程序的访问速度。在PHP中,文件系统访问是一个常见的IO操作,而通过使用Memcached缓存技术,可以显著优化这一操作,提升应用程序的性能。一、什么是Memcached...
    99+
    2023-05-19
    memcached 缓存技术 PHP 文件系统访问
  • ASP文件如何在Linux系统上实现高效的存储和管理?
    随着互联网的不断发展,越来越多的网站采用ASP(Active Server Pages)技术来实现动态网站的开发。而在Linux系统上,如何实现ASP文件的高效存储和管理,是一个备受关注的问题。本文将介绍ASP文件在Linux系统上的存储...
    99+
    2023-11-09
    linux apache 文件
  • 深入探索操作系统文件系统缓存:优化性能和提高效率的秘诀
    1. 文件系统缓存概述 文件系统缓存是操作系统维护的一个高速缓存,用于暂存最近访问过的文件数据和元数据。当应用程序请求读取或写入文件时,操作系统首先检查文件系统缓存中是否有该文件的缓存数据。如果有,则直接从缓存中读取或写入数据,无需访问...
    99+
    2024-02-27
    文件系统缓存、性能优化、I/O性能、内存管理、系统调优
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作