MySQL 和 swapping

本文探讨了MySQL在运行过程中遇到的swap空间问题,并提供了一些可能的解决方案,包括追踪内存使用情况、调整swappiness参数和利用NUMA架构等。

原文地址 MySQL and swapping

在使用 MySQL 过程中你是否遇到过 swap 空间问题?这个问题真的很讨厌,这里有一些可能的解决方案:

  1. 追踪内存使用,尝试使用下面的查询识别瓶颈。堆零的问题(zero in on the problem heap)不是一个简单的工作。在运行期有一些临时表被创建。估计 OS cache 也被系统使用了, MYISAM 表不容易。

    SELECT ( @@key_buffer_size + @@query_cache_size + @@innodb_buffer_pool_size + @@innodb_additional_mem_pool_size + @@innodb_log_buffer_size + 80 * ( @@read_buffer_size + @@read_rnd_buffer_size + @@sort_buffer_size + @@join_buffer_size + @@binlog_cache_size + @@thread_stack + @@tmp_table_size ) ) / (1024 * 1024 * 1024) AS MAX_MEMORY_GB;
    
  2. 配置 swappiness 成 10 或者是 15,默认的是 60.

    cat /proc/sys/vm/swappiness 可以给出你系统上的当前 swappiness 值
    
  3. 设置 Numa interleaving 成 ON,读下面的链接明白 NUMA 架构 和 swapping 之间的相互关系

  • http://blog.jcole.us/2010/09/28/mysql-swap-insanity-and-the-numa-architecture/

  • http://www.percona.com/doc/percona-server/5.5/performance/innodb_numa_support.html

扩展阅读

  • 10 common replication problems
### MySQL 配置方法与最佳实践 #### 一、InnoDB 缓存池大小配置 `innodb_buffer_pool_size` 是影响 MySQL 性能的核心参数之一。该参数定义了 InnoDB 存储引擎用于缓存数据索引的内存区域大小。通常建议将其设置为可用物理内存的 50%-75%,具体取决于系统的其他应用需求以及数据库的工作负载特性[^1]。 对于大容量的数据处理场景,可以进一步增加此值至接近总内存的 80% 左右,但需要注意避免因过度分配而导致的操作系统交换行为(swapping),这会显著降低性能。 #### 二、日志缓冲区配置 另一个重要的配置项是 `innodb_log_file_size` `innodb_log_buffer_size`。较大的重做日志文件能够减少刷新频率并提高写入效率。一般推荐将单个 redo log 文件设为几 GB 的规模,例如 4GB 到 8GB 范围内,视磁盘 I/O 吞吐能力而定。 同时适当增大 `innodb_log_buffer_size` 可以延迟某些操作直接同步到磁盘的需求,默认值可能过低,在高并发事务环境中可考虑调整至几十 MB 至上百 MB 不等。 #### 三、连接数控制 通过修改 `max_connections` 参数来限定允许的最大客户端连接数量也很重要。如果预计会有大量短时间内的请求涌入,则应该合理规划这个数值以防资源耗尽引发崩溃风险;不过也要注意过高设定可能会消耗额外开销从而拖累整体表现。 另外启用线程池功能 (`thread_handling=pool-of-threads`) 对于多核 CPU 架构下的密集型查询尤其有效,它有助于更好地管理多个轻量级任务之间的切换成本。 #### 四、启动脚本简化方式 为了方便日常运维管理工作流程自动化程度更高一些的话可以通过编写 .bat 批处理命令实现一键快速打开关闭服务等功能。比如创建名为 start_mysql.bat 的批处理文件内容如下所示: ```batch @echo off net start mysql exit ``` 同样停止也可以采用类似的 stop_mysql.bat 方法完成相应动作序列化过程[^2]。 以上即是对 MySQL 数据库实例进行高效调优的一些基本指导原则技术手段介绍。当然实际部署过程中还需要密切监控各项指标变化趋势以便动态微调直至达到理想状态为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值