返回顶部
首页 > 资讯 > 数据库 >Linux系统中MySQL优化技巧有哪些
  • 692
分享到

Linux系统中MySQL优化技巧有哪些

2023-06-28 13:06:43 692人浏览 八月长安
摘要

今天小编给大家分享一下linux系统中MySQL优化技巧有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.禁止操作系统

今天小编给大家分享一下linux系统中MySQL优化技巧有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Linux系统中MySQL优化技巧有哪些

1.禁止操作系统更新文件的atime属性

atime是Linux/UNIX系统下的一个文件属性,每当读取文件时,操作系统都会将读操作时间回写到磁盘上。对于读写频繁的数据库文件来说,记录文件的访问时间一般没有任何用处,却会增加磁盘系统的负担,影响I/O性能!因此,可以通过设置文件系统的mount熟悉,阻止操作系统写atime信息,减轻磁盘I/O负担。方法如下:

(1)修改文件系统配置文件/etc/fstab,指定noatime选项:

 UUID=33958004-e8a7-4135-844f-707a5537e86a /data                   ext4  noatime     0    1

(2)重新mount文件系统使其修改生效:

 [root@Mysql-01 ~]# mount -o remount /data

2.调整I/O调度算法

详细说明请参考前面文章提到的I/O调度算法的选择

(1)查看当前系统支持的I/O调度算法:

 [root@mysql-01 ~]# dmesg | grep -i scheduler io scheduler noop reGIStered io scheduler anticipatory registered io scheduler deadline registered io scheduler cfq registered (default) [root@Mysql-01 ~]#

(2)查看当前设备(/dev/sda)使用的I/O调度算法:

 [root@MySQL-01 ~]# cat /sys/block/sda/queue/scheduler     noop anticipatory deadline [cfq] [root@MySQL-01 ~]#

(3)修改当前设备使用的I/O调度算法,普通磁盘可以选择Deadline,SSD我们可以选择使用NOOP或者Deadline

 [root@MySQL-01 ~]# echo "deadline" >> /sys/block/sda/queue/scheduler [root@MySQL-01 ~]# cat /sys/block/sda/queue/scheduler                 noop anticipatory [deadline] cfq [root@MySQL-01 ~]#

永久修改I/O调度算法,可以通过修改内核引导参数,增加elevator=调度算法名

 [root@MySQL-01 ~]# vim /boot/grub/menu.lst

更改后的内容:

 [root@MySQL-01 ~]# grep "deadline" /boot/grub/menu.lst               kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=UUID=c0618639-a967-4601-bca7-cc3b99c5c332 elevator=deadline rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM [root@MySQL-01 ~]#

3.NUMA架构优化

从系统架构来看,目前的商用服务器大体可以分为三类:

(1)对称多处理器架构(Symmetric Multi-Processor,SMP)

(2)非一致存储访问架构(Non-Uniform Memory Access,NUMA)

(3)海量并行处理架构(Massive Parallel Processing,MPP)

一般服务器是SMP或者NUMA架构的较多。我这里只详细说明NUMA架构,至于其他的童鞋们可以自行查阅资料_

NUMA把一台计算机分成多个节点(node),每个节点内部拥有多个CPU,节点内部使用共有的内存控制器,节点之间是通过互联模块进行连接和信息交互,因此节点的所有内存对于本节点所有的CPU是等同的,而对于其他节点中的所有CPU都是不同的。因此每个CPU可以访问整个系统内存,但是访问本地节点的内存速度最快(不需要经过互联模块),访问非本地节点的内存速度较慢(需要经过互联模块),即CPU访问内存的速度与节点的距离有关,距离称为Node Distance。如下图:

Linux系统中MySQL优化技巧有哪些

显示当前NUMA的节点情况:

Linux系统中MySQL优化技巧有哪些

 [root@localhost ~]# nuMactl --hardware available: 2 nodes (0-1) node 0 cpus: 0 2 4 6 node 0 size: 16338 MB node 0 free: 136 MB node 1 cpus: 1 3 5 7 node 1 size: 16384 MB node 1 free: 66 MB node distances: node   0   1   0:  10  20   1:  20  10 [root@localhost ~]# free -m              total       used       free     shared    buffers     cached Mem:         32060      31856        204          0        362      13016 -/+ buffers/cache:      18477      13582 Swap:         7999          6       7993 [root@localhost ~]#

Linux系统中MySQL优化技巧有哪些

当前服务器上有两个节点Node 0和Node 1,Node 0的本地内存约为16GB,Node 1的本地内存约为16GB,可以看出系统一共有32GB内存

节点之间的距离(Node Distance)是指节点1访问节点0上的内存需要付出的代价的一种表现形式。在上述例子中,Linux节点本地内存声明距离为10,非本地内存声明距离20.

NUMA的内存分配策略分为以下4种:

(1)缺省default:总是在本地节点分配(分配在当前进程运行的节点上)

(2)绑定bind:强制分配到指定节点上

(3)交叉interleave:在所有节点或者指定节点上交叉分配内存

(4)优先preferred:在指定节点上分配,失败则在其他节点分配

显示当前系统NUMA策略:

Linux系统中MySQL优化技巧有哪些

 [root@localhost ~]# numactl --show policy: default preferred node: current physcpubind: 0 1 2 3 4 5 6 7 cpubind: 0 1 nodebind: 0 1 membind: 0 1 [root@localhost ~]#

Linux系统中MySQL优化技巧有哪些

因为NUMA默认的内存分配策略是优先在进程所在CPU的本地内存中分配,会导致CPU节点之间内存分配不均衡,当某个CPU节点内存不足时,会导致SWAP发生,而不是从远程节点分配内存,这就是Swap Insanity现象。

MySQL是单进程多线程架构的数据库,当NUMA采用默认的内存分配策略时,MySQL进程会被并且仅仅会被分配到NUMA的一个节点上去。假设MySQL进程被分配到Node 1运行,这个节点的本地内存是8GB,而MySQL配置了14GB内存,MySQL分配的14GB内存中,超过节点本地内存部分(14GB-8GB=6GB)Linux系统宁愿使用Swap也不会使用其他节点的物理内存。在这种情况下,能观察到系统虽然总共可用的物理内存还很多,但是MySQL进程已经开始使用Swap了。

MySQL对NUMA的特性支持不好,如果单机只运行一个MySQL实例,可以选择关闭NUMA,关闭的方式有两种:

(1)硬件层,在BiOS中设置关闭

(2)OS内核层,启动时设置numa=off

修改/etc/grub.conf,添加numa=off

 [root@MySQL-01 ~]# vim /etc/grub.conf [root@MySQL-01 ~]# grep 'numa' /etc/grub.conf         kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=UUID=c0618639-a967-4601-bca7-cc3b99c5c332 elevator=deadline rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM numa=off [root@MySQL-01 ~]#

或者通过numactl命令将NUMA的内存分配策略修改为interleave

 /usr/bin/numactl --interleave=all /usr/local/mysql-5.1.66/bin/mysqld_safe --defaults-file=/usr/local/mysql-5.1.66/my.cnf

这样就指定了MySQL启动时内存的分配策略是interleave

如果单机运行多个MySQL实例,可以将不同MySQL实例绑定到不同的CPU节点上,同时配置合适的MySQL内存参数,并且采用绑定的内存分配测试,强制在本地节点分配内存。

4.vm.swappiness调整

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

我们可以利用vmstat看到inactive的内存的数量:

Linux系统中MySQL优化技巧有哪些

 [root@MySQL-01 ~]# vmstat -an 1 5 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----  r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st  0  0   4892 1194972 234208 492404    0    0     5    38   32   83  0  1 99  0  0  0  0   4892 1194964 234208 492420    0    0     0     0   24   29  0  0 100  0  0  0  0   4892 1194964 234208 492420    0    0     0     0   12   21  0  0 100  0  0  0  0   4892 1194964 234208 492420    0    0     0     0   20   24  0  0 100  0  0  0  0   4892 1194964 234208 492420    0    0     0     0   13   21  0  0 100  0  0 [root@MySQL-01 ~]#

Linux系统中MySQL优化技巧有哪些

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

 [root@MySQL-01 ~]# cat /proc/meminfo | grep -i inact Inactive:         234188 kB Inactive(anon):     3228 kB Inactive(file):   230960 kB [root@MySQL-01 ~]#

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中添加一行(如果你的内核版本是2.6.32-303.el6及以后,请设置vm.swappiness = 1):

 [root@MySQL-01 ~]# echo "vm.swappiness = 0" >>/etc/sysctl.conf [root@MySQL-01 ~]# sysctl -p

另外一种做法是innodb启用大内存页,也和上述方法有相同的效果。具体请参考前面文章提到的InnoDB启用大内存页。

5.CPU优化

检查CPU是否开启了节能选项

Linux系统中MySQL优化技巧有哪些

 [root@localhost ~]# grep -E '^model name|^cpu MHz' /proc/cpuinfo model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz cpu MHz         : 2266.602 model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz cpu MHz         : 2266.602 model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz cpu MHz         : 2266.602 model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz cpu MHz         : 2266.602 model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz cpu MHz         : 2266.602 model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz cpu MHz         : 2266.602 model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz cpu MHz         : 2266.602 model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz cpu MHz         : 2266.602 [root@localhost ~]#

Linux系统中MySQL优化技巧有哪些

如果发现CPU的频率跟它标称的频率不一样,那么就是开启了节能模式。

可以使用下面命令关闭:

 for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_Governor; do [ -f $CPUFREQ ] || continue; echo -n perfORMance > $CPUFREQ; done

节能模式:操作系统和CPU硬件配合,系统不繁忙的时候,为了节约电能和降低温度,它会将CPU降频。对MySQL来说,可能是一个灾难。 为了保证MySQL能够充分利用CPU的资源,建议设置CPU为最大性能模式。这个设置可以在BIOS和操作系统中设置,当然,在BIOS中设置该选项更好。

以上就是“Linux系统中MySQL优化技巧有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: Linux系统中MySQL优化技巧有哪些

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

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

猜你喜欢
  • Linux系统中MySQL优化技巧有哪些
    今天小编给大家分享一下Linux系统中MySQL优化技巧有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.禁止操作系统...
    99+
    2023-06-28
  • Linux系统优化技巧有哪些
    以下是一些常见的Linux系统优化技巧:1. 关闭不需要的服务:通过停用不需要的服务可以释放系统资源,提高性能和安全性。2. 使用轻...
    99+
    2023-09-27
    Linux
  • Win8系统的优化技巧有哪些
    以下是一些Win8系统的优化技巧:1. 禁用动态磁贴:动态磁贴可以消耗系统资源并导致电池寿命减少。通过右键单击开始屏幕上的磁贴,选择...
    99+
    2023-08-26
    Win8
  • 优化MySQL有哪些技巧
    不知道大家之前对类似优化MySQL有哪些技巧的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完优化MySQL有哪些技巧你一定会有所收获的。    ...
    99+
    2024-04-02
  • MySQL优化技巧有哪些
    本篇内容主要讲解“MySQL优化技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL优化技巧有哪些”吧!SQL 优化已经成为衡量程序猿优秀与否的硬...
    99+
    2024-04-02
  • linux上优化mysql有哪些好的技巧
    下文主要给大家带来linux上优化mysql有哪些好的技巧,希望这些内容能够带给大家实际用处,这也是我编辑linux上优化mysql有哪些好的技巧这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。&n...
    99+
    2024-04-02
  • 优化MySQL的技巧有哪些
    这篇文章主要介绍优化MySQL的技巧有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SQL执行慢的原因网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了等硬件问题没有索引或者索引...
    99+
    2024-04-02
  • mysql join优化的技巧有哪些
    优化MySQL JOIN操作可以提高查询性能,以下是一些常见的优化技巧:1. 使用合适的索引:确保参与JOIN的列都有合适的索引,这...
    99+
    2023-10-23
    mysql join
  • Mysql索引优化技巧有哪些
    Mysql索引优化的一些技巧包括: 使用合适的数据类型:选择合适的数据类型来存储数据,避免使用过大或者不必要的数据类型,能够减小...
    99+
    2023-10-28
    Mysql
  • MySQL查询优化技巧有哪些
    使用索引:确保数据库表的字段都有合适的索引,这样可以加快查询的速度。避免查询所有字段:只选择需要的字段进行查询,避免查询过多无用字...
    99+
    2024-04-09
    MySQL
  • mysql sql优化的技巧有哪些
    以下是一些MySQL SQL优化的常见技巧: 使用索引:为频繁使用的列创建索引,以提高查询性能。可以使用EXPLAIN语句来分析查...
    99+
    2024-04-09
    mysql
  • Linux系统导航技巧有哪些
    今天就跟大家聊聊有关Linux系统导航技巧有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。无论你是在文件系统中四处查看、寻找文件还是尝试进入重要目录,Linux 都可以...
    99+
    2023-06-05
  • MySQL调试与优化技巧有哪些
    这篇文章给大家分享的是有关MySQL调试与优化技巧有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。MySQL 服务器硬件和操作系统调节:1. 拥有足够的物理内存来把整个Inn...
    99+
    2024-04-02
  • mysql数据库有哪些优化技巧
    小编给大家分享一下mysql数据库有哪些优化技巧,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.为查询缓存优化你的查询大多数的...
    99+
    2024-04-02
  • SQL优化技巧有哪些
    这篇文章主要讲解了“SQL优化技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL优化技巧有哪些”吧!一、索引优化索引的数据结构是 B+Tree,...
    99+
    2024-04-02
  • JavaScript优化技巧有哪些
    这篇文章主要介绍“JavaScript优化技巧有哪些”,在日常操作中,相信很多人在JavaScript优化技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaSc...
    99+
    2024-04-02
  • Linux系统下MySQL服务器的优化技巧
    本篇内容介绍了“Linux系统下MySQL服务器的优化技巧”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!磁盘问题正如前面所述,磁盘寻道是一个...
    99+
    2023-06-16
  • Linux系统中使用sudo小技巧有哪些
    这篇文章将为大家详细讲解有关Linux系统中使用sudo小技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实用小技巧1) !! 和 ! -1用法:想要允许授权的普通用户作为root用户来执行一个命...
    99+
    2023-06-28
  • 笔记本电脑中msconfig系统配置优化技巧有哪些
    这篇文章将为大家详细讲解有关笔记本电脑中msconfig系统配置优化技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、打开开始菜单,点击右边的运行。或者按“win+r”唤出运行。二、在运行窗口内...
    99+
    2023-06-28
  • win7系统常用的注册表优化技巧有哪些
    小编给大家分享一下win7系统常用的注册表优化技巧有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!打开注册表编辑器:按住键盘的“Win+R”快捷组合键 或者 点击开始菜单,选择运行,打开“运行”命令对话窗口。接着输入R...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作