- 前言
- 读者对象
- 如何阅读本书
- 勘误和支持
- 致谢
- 第 1 篇 高性能网站构建
- 第 1 章 深入理解 DNS 原理与部署 BIND
- 第 2 章 全面解析 CDN 技术与实战
- 第 3 章 负载均衡和高可用技术
- 第 4 章 配置及调优 LVS
- 第 5 章 使用 HAProxy 实现 4 层和 7 层代理
- 第 6 章 实践 Nginx 的反向代理和负载均衡
- 第 7 章 部署商业负载均衡设备 NetScaler
- 第 8 章 配置高性能网站
- 第 9 章 优化 MySQL 数据库
- 第 2 篇 服务器安全和监控
- 第 10 章 构建企业级虚拟专用网络
- 第 11 章 实施 Linux 系统安全策略与入侵检测
- 第 12 章 实践 Zabbix 自定义模板技术
- 第 13 章 服务器硬件监控
- 第 3 篇 网络分析技术
- 第 14 章 使用 tcpdump 与 Wireshark 解决疑难问题
- 第 15 章 分析与解决运营商劫持问题
- 第 16 章 深度实践 iptables
- 第 4 篇 运维自动化和游戏运维
- 第 17 章 使用 Kickstart 完成批量系统安装
- 第 18 章 利用 Perl 编程实施高效运维
- 第 19 章 精通 Ansible 实现运维自动化
- 第 20 章 掌握端游运维的技术要点
- 第 21 章 精通手游运维的架构体系
最佳实践 49:MySQL 配置项优化
下面是几个需要首先关注的 MySQL 性能调优的配置项。如果忽略了这些配置,那么很快就会遇到性能问题。
- innodb_buffer_pool_size:在使用 InnoDB 引擎的环境中,在安装完成后,这个是第一个需要关注的配置项目。缓冲池是数据和索引被缓存的地方,这个值的设置要尽可能大。典型的配置值是 5~6GB(8GB RAM),20~25GB(32GB RAM),100~120GB(128GB RAM)。
- innodb_log_file_size:redo log 的大小。redo log 被用来保证写入的速度和故障恢复。建议设置为 innodb_log_file_size=512MB,但对于写入频繁的数据库,这个值应该调整成 innodb_log_file_size=4GB。
- max_connections:如果经常遇到 Too many connections 错误,说明 max_connections 值过小。一种常见的情况是,应用程序没有正确关闭连接,导致默认的 151 个数据库连接被很快用光。但如果该值设置过大(1000 或者以上),MySQL 收到的并发请求数很大,那么它可能会失去响应。在这种情况下,应用程序层的连接池技术会对这个问题有所帮助。例如 PHP MySQL 的 pconnect 方法,Tomcat 的 JDBC 连接池等。
InnoDB 是自 MySQL 5.5 版本后的默认存储引擎,它被更频繁地使用到。这是需要对 InnoDB 引擎特别设置的原因。
- innodb_file_per_table:用于控制对于不同的表是否使用独立.ibd 文件。设置为 ON 时,它可以在丢弃表或者截断表时能够回收存储空间。在 MySQL 5.6 以后,这个默认值就是 ON。这种情况下,就不需要再做任何额外设置了。在 5.6 版本前,在加载数据文件前,应该设置成 ON,因为这个配置项仅仅对新创建的表有效。
- innodb_flush_log_at_trx_commit:默认值是 1,意味着 InnoDB 是与 ACID 完全兼容的,如果考虑数据安全性是第一需求,那么需要保持这个值为 1。在这种情况下,额外的系统 fsync 调用对于低速硬盘来说,是一个巨大的系统开销。设置为 2 时,在数据安全性方面稍有下降,因为此时每隔 1s 才把事务写入到 redo log 中。在某些数据完整性要求不高的情况下,可以设置为 2 或者 0。
- query_cache_size:建议在一开始就设置为 0,完全禁用查询缓存。
- slow_query_log:设置为 1,启用慢查询日志。慢查询日志是记录执行时间超过指定时间(long_query_time)的 MySQL 查询,是分析和优化 MySQL 的最重要文件。
- long_query_time:默认值是 10,建议修改成 1。在大部分应用中,超过 1 秒的查询基本可以判断为需要关注的执行语句。
- slow_query_log_file:指定慢查询日志的记录文件位置。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论