美文网首页
MySQL性能优化(操作系统和数据库配置层面)

MySQL性能优化(操作系统和数据库配置层面)

作者: 宁静的猫 | 来源:发表于2020-01-09 11:40 被阅读0次

    1、操作系统层面的优化(以centos为例)

    系统配置文件/etc/sysctl.conf:

    net.core.somaxconn=65535  #端口监听队列最大长度
    net.core.netdev_max_backlog=65535
    net.ipv4.tcp_max_syn_backlog=65535
    net.ipv4.tcp_fin_timeout=10 #加快tcp连接回收的速度
    net.ipv4.tcp_tw_reuse=1
    net.ipv4.tcp_tw_recycle=1
    net.core.wmem_default=87380 #tcp缓冲区大小
    net.core.wmem_max=16777216
    net.core.rmem_default=87380
    net.core.rmem_max=16777216
    net.ipv4.tcp_keepalive_time=120#减少失效连接占用tcp资源
    net.ipv4.tcp_keepalive_intvl=30
    net.ipv4.tcp_keepalive_probes=3
    kernel.shmmax=4294967295 #内存相关参数
    vm.swappiness=0 # 除非内存交换区完全满了,否则不使用交换区
    

    系统配置文件/etc/security/limit.conf(需要重启才可生效):

    * soft nofile 65535 #控制文件打开数量限制
    * hard nofile 65535
    

    系统配置文件/sys/block/devname/queue/scheduler

    echo deadline > /sys/block/sda/queue/scheduler #磁盘调度策略
    

    2、MySQL服务器层面的优化

    a、配置文件路径

    首先获取MySQL配置文件的路径:

    mysqld --help --verbose | grep -A 1 "Default options"
    

    返回MySQL读取配置文件的顺序如下:

    /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
    

    b、配置参数作用域

    全局参数

    set global 参数名=参数值;
    set @@global.参数名:=参数值;
    

    会话参数

    set [session] 参数名=参数值;
    set @@session.参数名:=参数值;
    

    c、内存配置参数

    每个连接(线程)的缓冲区

    sort_buffer_size #排序缓冲区,排序时会立即分配
    join_buffer_size #连接缓冲区,为每一个连接配分
    read_buffer_size #myisam使用
    read_rnd_buffer_size #索引缓冲区
    

    各种缓冲池内存

    Innodb_buffer_pool_size #Innodb缓冲池, 总内存-每个线程需要内存*连接数-系统保留内存
    key_buffer_size #myisam使用,用于缓存索引
    select sum(index_length) from information schema.tables where engine='myisam' #查看myisam表索引的大小
    

    4、I/O相关配置

    Innodb:

    Innodb_log_file_size #单个事务日志的大小
    Innodb_log_files_in_group #事务日志文件的个数,一般不用配置
    Innodb_log_buffer_size #事务日志缓冲区
    Innodb_flush_log_at_trx_commit # 0:每秒进行一次log写入cache,并flush 到磁盘;1:每次事务提交时log写入cache,并flush到磁盘;2(建议):每次事务提交时log写入cache,每秒执行一次flush到磁盘
    Innodb_flush_method=O_DIRECT #Innodb与文件系统交互的方式,通知OS,不要缓存和预读,关闭操作系统缓存,避免二次缓存
    Innodb_file_per_table=1 #Innodb为每个表建立单独的表空间
    Innodb_doublewrite=1 #开启双写缓存,避免页(16K)没有写完整导致的数据损坏
    

    MyISAM:

    delay_key_write #OFF:每次写操作后刷新键缓冲中的脏块到磁盘;ON:只有指定了delay_key_write选项的表使用延迟刷新;ALL:对所有MyISAM使用延迟键写入
    

    5、安全相关配置

    expire_logs_days #指定自动清理binlog的天数
    max_allowed_packet #控制MySQL可以接收的包的大小,主从复制应该一样
    skip_name_resolve #禁用DNS查找
    sysdate_is_now #确保sysdate()返回确定性日期
    read_only #禁止非super权限的用户写权限
    skip_slave_start #禁止slave自动恢复
    sql_mode #设置MySQL所使用的SQL模式
    

    6、其他常用配置参数

    sync_binlog #控制MySQL如何向磁盘刷新binlog
    tmp_table_size 和 max_heap_table_size #控制内存临时表大小
    max_connections #控制允许的最大连接数,一般2000
    

    相关文章

      网友评论

          本文标题:MySQL性能优化(操作系统和数据库配置层面)

          本文链接:https://www.haomeiwen.com/subject/grksactx.html