Mysql优化之配置

本文详细介绍MySQL性能优化步骤,包括SQL语句、表结构、配置、服务器及硬件优化。涵盖Linux内核参数调整、资源限制、磁盘调度策略,MySQL内存、I/O、安全配置及常用参数设置,适用于高负载数据库环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql优化顺序:sql语句优化 ==》 表结构优化 ==》Mysql配置优化 ==》 服务器系统优化 ==》硬件优化

Linux CentOs服务器配置优化

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

  • net.core.somaxconn 端口监听队列的长度,默认值比较小,可以改为2048或更大;
  • net.core.netdev_max_backlog 接收数据包的速率高于内核处理的速率时,允许队列的数目;
  • net.ipv4.tcp_max_syn_backlog 类似上一条的一种队列的数目,因为超过数目就会被抛弃,应改大一些;

    # 加速释放tcp连接相关,tcp连接太多会导致连接上不数据库

  • net.ipv4.tcp_fin_timeout tcp连接处理的等待时间
    在一个高访问的服务器,有很多tcp连接是等待状态,应把此项的值改小一点,加速释放tcp连接,就不会造成阻塞
  • net.ipv4.tcp_tw_reuse=1 作用同是加速释放tcp连接
  • net.ipv4.tcp_tw_recycle=1 作用同是加速释放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=120
  • net.ipv4.tcp_keepalive_intvl=30
  • net.ipv4.tcp_keepalive_probes=3

  # 单个共享内存段的最大值,mysql服务器应设置为足够大,以便能够容纳整个的Innodb缓冲池的大小

  • kernel.shmmax=足够大
  • vm.swappiness=0 设置除非虚拟内存完全满了,否则不要使用交换区

 

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

  • * soft nofile 65535 // 添加到配置文件末尾,需要重启操作系统
  • * hard nofile 65535 // 添加到配置文件末尾,需要重启操作系统

 

* 磁盘调度策略(/sys/block/devname/queue/scheduler)应使用deadline最佳

 

Mysql配置优化

查看配置:

# show variables like '{like}'

配置参数:

# set global configName=configValue 设置全局的配置
# set session configName=configValue 设置Session级的配置

* 内存配置相关的参数

    # 下面4个选项应该合理设置,过大或过小都不好

  • sort_buffer_size
  • join_buffer_size
  • read_buffer_size
  • read_rnd_buffer_size

    # Innodb 缓存池,建议系统内存75%以上

  • innodb_buffer_pool_size

    # MyIsam 索引缓存池,就算系统全使用innodb存储引擎,也需要分配内存空间

  • key_buffer_size

 

* Innodb I/O相关配置参数

  • innodb_log_file_size
  • innodb_log_files_in_group

    #

  • innodb_log_buffer_size=128M
  • innodb_flush_log_at_trx_commit=??
    0 => 每秒进行一次log写入cache,并flush log到磁盘
    1【默认】 => 在每次事务提交执行log写入cache,并flush log到磁盘
    2【建议】=> 每次事务提交,执行log写入cache,没秒执行一次flush log到磁盘
  • innodb_flush_method=O_DIRECT
  • innodb_file_per_table=1
  • innodb_doublewrite=1

 

* Myisam I/O相关配置

  • delay_key_write=??
    OFF => 每次写操作后刷新键缓冲中的脏块到磁盘
    ON => 只对在建表时指定了delay_key_write选项的表使用延迟刷新
    ALL => 对所有MYISAM表都使用延迟键写入

 

* 安全相关的配置参数

  • 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模式
     

* 其它常用配置参数

  • sync_binlog 控制Mysql如何向磁盘刷新binlog
  • tmp_table_size 和 max_heap_table_size 控制内存临时表大小
  • max_connections 控制允许的最大连接数,默认100

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值