zoukankan      html  css  js  c++  java
  • mysql优化

    Mysql的优化

    MySQL优化三大方向

    优化MySQL所在服务器内核。

    MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进行参数调整。

    SQL语句以及表优化。

    服务器内核方面优化:

    网络参数配置

       网络参数配置需要修改配置文件/etc/sysctl.conf,可以在配置文件后面添加一下内容:

        net.core.somaxconn=65536 #每个监听端口允许的最大的监听队列长度,这个值应该适当增大。

        net.core.netdev_max_backlog=65536 #当网络端口接收数据包的速率比内核处理数据速度快时,允许发送到对列中的最大包数

        net.ipv4.tcp_max_syn_backlog=65536 #还未获得链接的请求可保持在队列中的数量,当超过这个数目是,链接请求就可能被抛弃

        net.ipv4.tcp_fin_timeout=10 #tcp链接等待时间,调整这个参数目的是为了加快TCP链接回收的速度

        net.ipv4.tcp_tw_reuse=1 #加快TCP链接回收的速度

        net.ipv4.tcp_tw_recycle=1 #加快TCP链接回收的速度

        以下四个参数设置tcp链接接收和发送数据时缓冲区大小的最大值和和默认值,应该将其调整的更大一些。

        net.core.wmem_default=87380

        net.core.wmem_max=16777216

        net.core.rmem_default=87380

        net.core.rmem_max=16777216

        以下三个参数用于减少时效的TCP链接所占用的资源,提升资源回收效率,改的较小一些

        net.ipv4.tcp_keepalive_time=100 #代表TCP发送keepalive探测消息的时间间隔

        net.ipv4.tcp_keepalive_intvl=10 #代表当TCp发送keepalive探测消息未获得确认是重发探测消息的时间间隔

        net.ipv4.tcp_keepalive_probes=3 #代表TCP链接失效之前,最多发送多少keepalive探测消息

    内存相关参数配置

    内存的相关参数同样修改/etc/sysctl.conf文件

        kernel.shmmax=2147483648用于定义单个共享内存段的最大值,这个参数应该设置的足够大,以便共享内存段能容纳下整个InnoDB缓冲池的大小。建议设置成物理内存的一半。

        vm.swappiness=0 表示除非虚拟内存使用完了,否则不用swap分区。

    特定资源限制配置

    这个配置需要修改配置文件/etc/security/limits.conf,主要的就是对打开文件数量的配置,在MySQL的InnoDB存储引擎中,每一张表就对应着2-3个文件,对于允许打开文件的数量适当的增大,可以使MySQL的数据库性能更好。

        打开文件数的配置

        * soft nofile 65535

        * hard nofile 65535

        * 表示对所有用户生效

        soft 代表是当前系统生效的设置

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

        nofile 表示所限制的资源是打开文件的数量

    磁盘调度策略配置

    一般默认情况下,CentOS系统的磁盘调度策略是完全公平队列模式(cfq),这种调度策略对于数据库服务器来说不太适合,而应该使用deadline调度策略。通过以下命令可以修改调度策略:

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

        以上就是一些比较重要的配置MySQL数据库服务器系统参数的调整,调整这些系统参数后,会使MySQL服务器的性能更好,但这并不是全部的系统参数调整。可以参看Linux系统参数调优的相关数据了解更多系统参数调优。

    Mysql参数优化:

    1:MySQL 默认的最大连接数为 100,可以在 mysql 客户端使用以下命令查看
    mysql> show variables like 'max_connections';

    2:查看当前访问Mysql的线程

    mysql> show processlist;

    3:设置最大连接数

    mysql>set global max_connections = 5000;

    最大可设置16384,超过没用

    4:查看当前被使用的connections

    mysql>show global status like 'max_user_connections'

    还有一些其他的优化如字符集,存储引擎设置等。

    MySQL语句性能优化的16条经验

    ① 为查询缓存优化查询

    ② EXPLAIN 我们的SELECT查询(可以查看执行的行数)

    ③ 当只要一行数据时使用LIMIT 1

    ④ 为搜索字段建立索引

    ⑤ 在Join表的时候使用相当类型的列,并将其索引

    ⑥ 千万不要 ORDER BY RAND  ()

    ⑦ 避免SELECT *

    ⑧ 永远为每张表设置一个ID

    ⑨ 可以使用ENUM 而不要VARCHAR

    ⑩ 尽可能的使用NOT NULL

    ⑪ 固定长度的表会更快

    ⑫ 垂直分割

    ⑬ 拆分打的DELETE或INSERT语句

    ⑭ 越小的列会越快

    ⑮ 选择正确的存储引擎

    ⑯ 小心 "永久链接"

  • 相关阅读:
    监控里的主码流和子码流是什么意思
    监控硬盘容量计算
    一个能让你了解所有函数调用顺序的Android库
    电工选线
    oracle linux dtrace
    list all of the Oracle 12c hidden undocumented parameters
    Oracle Extended Tracing
    window 驱动开发
    win7 x64 dtrace
    How to Use Dtrace Tracing Ruby Executing
  • 原文地址:https://www.cnblogs.com/duanlinxiao/p/10543768.html
Copyright © 2011-2022 走看看