CentOS系统参数优化

1、内核相关的参数(/etc/sysctl.conf)

    vm.swappiness = 0  # 这个参数当内存不足时会对性能产生比较明显的影响
    net.ipv4.neigh.default.gc_stale_time = 120

    # see details in https://help.aliyun.com/knowledge_detail/39428.html
    net.ipv4.conf.all.rp_filter = 0
    net.ipv4.conf.default.rp_filter = 0
    net.ipv4.conf.default.arp_announce = 2
    net.ipv4.conf.lo.arp_announce = 2
    net.ipv4.conf.all.arp_announce = 2

    # see details in https://help.aliyun.com/knowledge_detail/41334.html
    net.ipv4.tcp_max_tw_buckets = 5000
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_max_syn_backlog = 1024
    net.ipv4.tcp_synack_retries = 2

    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 1

    kernel.sysrq = 1

 

2、Linux系统内存交换区

    在Linux系统安装时都会有一个特殊的磁盘分区,称之为系统交换分区。

    (1) 如果我们使用free -m在系统中查看可以看到类似下面的内容,其中swap就是交换分区。

        

        当操作系统因为没有足够的内存时就会将一些虚拟内存写到磁盘的交换区中,这样就会发生内存交换。

    (2) 在MySQL服务器上是否要使用交换分区有一些争议:

        在MySQL服务所在的Linux系统上完全禁用交换分区。

        带来的风险:

            a. 降低操作系统的性能。

            b. 容易造成内存溢出,奔溃,或都被操作系统kill掉。

        结论:

            在MySQL服务器上保留交换分区还是很必要的,但是要控制何时使用交换分区

             vm.swappiness = 0 就是告诉Linux内核除非虚拟内存完全满了,否则不要使用交换区。

 

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

    这个文件实际上是Linux PAM也就是插入式认证模块的配置文件。

    打开文件数的限制。

    将这两个配置加到limit.conf文件末尾就可以了:

        * soft nofile 65535

        * hard nofile 65535

               表示对所有用户有效

        soft     指的是当前系统生效的设置

        hard   表明系统中所能设定的最大值

        nofile  表明所限制的资源是打开文件的最大数目

        65535 就是限制的数量

        注意:对于同一资源,soft的设置不能比hard高。

    结论:

        把可打开的文件数量增加到了65535个可以保证可以打开足够多的的文件句柄。

    注意:

        这个文件的修改需要重启系统才能生效。

 

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

    CentOS系统参数优化_第1张图片

    在mysql的工作负载下,cfq(完全公平队列)由于会在队列中插入一些不必要的请求,所以会导致很差的响应时间。

    (1) noop(电梯式调度策略)

        NOOP实现了一个FIFO队列,它像电梯的工作方法一样对I/O请求进行组织,当有一个新的请求到来时,它将请求合并到最近的请求之后,以此来保证请求同一介质。NOOP倾向饿死读而利于写,因此NOOP对于闪存设备RAM嵌入式系统是最好的选择。

    (2) deadline(截止时间调度策略)

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

    (3) anticipatory(预料I/O调度策略)

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

    (4) 改变磁盘调度策略:

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

        

你可能感兴趣的:(mysql)