问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

Linux上MySQL优化提升性能 哪些可以优化的关闭NUMA特性

发布网友 发布时间:2022-04-22 19:49

我来回答

2个回答

热心网友 时间:2022-04-07 18:57

Linux上MySQL优化提升性能,可以优化关闭NUMA特性如下:
这些其实都源于CPU最新的技术:节能模式。操作系统和CPU硬件配合,系统不繁忙的时候,为了节约电能和降低温度,它会将CPU降频。
为了保证MySQL能够充分利用CPU的资源,建议设置CPU为最大性能模式。这个设置可以在BIOS和操作系统中设置,当然,在BIOS中设置该选项更好,更彻底。
然后我们看看内存方面,我们有哪些可以优化的。
i)
我们先看看numa
非一致存储访问结构
(NUMA

Non-Uniform
Memory
Access)
也是最新的内存管理技术。它和对称多处理器结构
(SMP

Symmetric
Multi-Processor)
是对应的。
我们可以直观的看到:SMP访问内存的都是代价都是一样的;但是在NUMA架构下,本地内存的访问和非
本地内存的访问代价是不一样的。对应的根据这个特性,操作系统上,我们可以设置进程的内存分配方式。目前支持的方式包括:
--interleave=nodes
--membind=nodes
--cpunodebind=nodes
--physcpubind=cpus
--localalloc
--preferred=node
简而言之,就是说,你可以指定内存在本地分配,在某几个CPU节点分配或者轮询分配。除非
是设置为--interleave=nodes轮询分配方式,即内存可以在任意NUMA节点上分配这种方式以外。其他的方式就算其他NUMA节点上还有内
存剩余,Linux也不会把剩余的内存分配给这个进程,而是采用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.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。

热心网友 时间:2022-04-07 20:15

 一、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) 是对应的。简单的队别如下:
  如图所示,详细的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 scheler,Anticipatory scheler,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/scheler
  来将sda的调度策略设置为deadline。
  我们也可以直接在/etc/grub.conf的kernel行最后添加elevator=deadline来永久生效。
  CPU方面:
  关闭电源保护模式
  内存:
  vm.swappiness = 0
  关闭numa
  文件系统:
  用noatime,nobarrier挂载系统
  IO调度策略修改为deadline。
Linux上MySQL优化提升性能,哪些可以优化关闭NUMA特性?

关闭特性的方法,分别有:可以从BIOS,操作系统,启动进程时临时关闭这个特性。a)由于各种BIOS类型的区别,如何关闭NUMA千差万别,我们这里就不具体展示怎么设置了。b)在操作系统中关闭,可以直接在/etc/grub.conf的kernel行最后添加numa=off,如下所示:kernel/vmlinuz-2.6.32-220.el6.x86_64roroot=...

ASO优化如何做好?

首先,要了解ASO优化的基本知识,包括关键词优化、标题优化、描述优化、评论优化等。其次,要熟悉应用商店的排名算法,了解影响排名的因素,例如应用的下载量、评价、搜索关键词的使用频率等。然后,根据算法和用户行为,进行关键词优化、标题优化、描述优化等操作,提高应用在搜索结果中的排名。同时,可以通过增加应用下载量、提高应用评价等方式,提高应用的综合排名。最后,要持续关注数据变化,根据数据反馈进行调整优化,以保持应用的高排名。柚鸥ASO优化就做的蛮不错的;专注应用商店下载量优化、评分优化、关键词排名优化;柚鸥网络-全球ASO优化服务商专注ASO优化已11年!(效果说话不到效果不收费)【基础优化】协助客户针对app情况在各大应用商店进行标题,副标题,关键词,描述等优...

Linux上MySQL优化提升性能,哪些可以优化关闭NUMA特性?

Linux 进程通过 C 标准库中的内存分配函数 malloc 向系统申请内存,但是到真正与内核交互之间,其实还隔了一层,即内存分配管理器(memory allocator)。常见的内存分配器包括:ptmalloc(Glibc)、tcmalloc(Google)、jemalloc(FreeBSD)。MySQL 默认使用的是 glibc 的 ptmalloc 作为内存分配器。内存分配器采用的...

linuxmysqld

Linux上MySQL优化提升性能,可以优化关闭NUMA特性如下:这些其实都源于CPU最新的技术:节能模式。操作系统和CPU硬件配合,系统不繁忙的时候,为了节约电能和降低温度,它会将CPU降频。为了保证MySQL能够充分利用CPU的资源,建议设置CPU为最大性能模式。这个设置可以在BIOS和操作系统中设置,当然,在BIOS中设置该...

Linux内核:内存——NUMA架构的优缺点

默认的内存分配策略可能导致内存不均衡,当一个节点内存不足时,Linux倾向于使用本地内存不足部分的swap空间,而非其他节点,这被称为swap insanity。对于像MySQL这样的单进程多线程数据库,如果配置不当,可能导致性能问题。解决办法是关闭NUMA,可以通过BIOS设置或修改启动参数来实现。在选择IO调度器时,应...

计算机底层原理-NUMA的原理与局限

对于Memory Access这种非常异常频繁的底层操作来说增加profile入口的性能损耗是极大的。在 关于CPU Cache程序应该知道的那些事 的评论中我也提到过,这个道理和为什么Linux没有全局监控CPU L1/L2 Cache命中率工具的原因是一样的。当然优化不会就此停步。上文提到的 Carrefour算法 和Linux社区的Auto NUMA ...

MySQL在高内存、IO利用率上的几个优化点

一、mysql层面优化设置0是事务log(ib_logfile0、ib_logfile1)每秒写入到log buffer,1是时时写,2是先写文件系统的缓存,每秒再刷进磁盘,和0的区别是选2即使mysql崩溃也不会丢数据。脏页写的线程数,加大该参数可以提升写入性能.mysql5.5以上才有。当系统中 脏页 所占百分比超过这个值,INNODB就会...

mysql和postgresql的区别

第二是mysql的innodb引擎,可以充分优化利用系统所有内存,超大内存下PG对内存使用的不那么充分,第三点,MySQL的复制可以用多级从库,但是在9.2之前,PGSQL不能用从库带从库。第四点,从测试结果上看,mysql 5.5的性能提升很大,单机性能强于pgsql,5.6应该会强更多.第五点,对于web应用来说,...

JVM中垃圾回收相关参数介绍:大页和NUMA参数+GC日志相关参数

但它会调整MaxHeapSize等参数以优化内存密集任务。例如,AggressiveHeap参数会根据内存大小调整堆大小,以及启用Parallel GC回收,限制Minor GC等。其他参数如验证对象地址、类卸载并发执行等也都有相应的默认值和控制选项。通过理解这些参数,开发者可以更有效地管理和优化JVM内存使用,提升性能。

JDK8到JDK17有哪些吸引人的新特性?

JDK8至今的升级过程中,包含了众多新特性,如Java平台模块化系统(Jigsaw)、垃圾回收器的优化(如ZGC和G1的改进)、诊断和监控工具的增强(JFR和JMC)、以及更简洁的语法和API。这些新特性旨在提升性能,简化开发,并解决旧版本存在的问题。Java模块化(Jigsaw):JDK9引入的模块化系统,对Java生态系统...

以C++为核心语言的高频交易系统是如何做到低延迟的? 文章分析

NUMA架构与ccNUMA: 通过非一致性内存访问(NUMA)设计,Linux将硬件资源划分为节点,以优化内存访问速度,尽量减少跨节点的访问,提升性能。rdtsc指令: 使用读取时间戳寄存器(rdtsc)监控CPU运行时间,确保高精度计时,减少延迟。内存管理: 使用glibc的malloc,通过预先分配内存池和内存对齐,减少动态内存分配的...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
熟的白木耳能隔夜吃吗 屋后种什么乔木树最旺 居民的人均可支配收入 什么是居民可支配收入 ...每天还是很想他,有时候一想他就掉眼泪,怎么办呢? 我的狗狗永远离开我了,我该怎么办? 朋友很喜欢狗,但她的狗狗很老了,已经过世了,我该怎么安慰他? 谢谢了... 新奥迪a6机油怎么检查 宠物老死了你会救治吗? 奥迪的机油尺怎么看 前面刘海有许多碎发怎么办??? linux numa是什么东西 新长的碎发太多,怎么办? Linux上MySQL优化提升性能,哪些可以优化关闭NUMA特性? 头上碎发太多,发型太乱怎么办? 如何判断一个多核机器(Linux)是否为NUMA结构 新长的碎发太多怎么办? 碎刘海怎么扎法 刘海碎发太多怎么扎 为什么会有很多碎发刘海? 打理发型时,额头发缝很多小碎发怎么处理才比较好看呢? 刘海碎头发多怎么处理才能显脸小? 碎发太多了应该怎么办? 前面有好多碎头发怎么办 为什么会有很多碎发刘海 我们该如何处理? 碎发很多怎么解决? 头发有很多碎发怎么办? 碎发太多,如何打理显得整齐? 前额碎头发太多怎么办 用这个小妙招 轻松清理无烦恼 华为手机连接奔驰车怎么设置? 圆形吸顶灯罩如何拆下.是那种无卡子,外面不上螺丝的那种灯罩.而且左旋右旋都无法拧动的. 刘海周围碎发怎么办 如何关闭 linux numa 空气刘海剪厚了 打薄以后都是碎头发 怎么弄 NUMA结构的系统,kernel在那个节点? 剪刘海时很多碎发粘在脸上,怎么清理? 为什么头顶上有很多碎发刘海也是 现在国内使用最多的linux是什么版本的? 在Linux 上,编写一个每秒接收 100万UDP数据包的程序究竟有多难 linux 怎么安装mysql 5.7.18 oracle 10g要不要关闭numa 请问CPU的频率的大小主要影响什么 “钻石级别VS/H”是什么意思? 钻石的颜色?H色vvs是什么级别啊? RTD模块是什么意思 钻石戒指颜色H是什么样子的? RTD模块,什么是RTD模块 买了个钻戒,上面写的颜色级别是H,净度级别是VS,请问这是属于什么级别的钻,是不是好钻,还是一般的钻。 GPS测量中RTD模式是什么意思 它与RTK模式有什么区别? dcs中的RTD模块接线及动作原理 NTC和RTD有什么分别,是什么样的一个概念?
  • 焦点

最新推荐

猜你喜欢

热门推荐