mysqltuner 脚本来优化我的 mysql 数据库

mysqltuner 脚本来优化我的 mysql 数据库

我有一个运行 php eshop 的专用服务器。

该服务器基于 Debian 7.8 64Bit 构建,具有 12 个核心和 64GB RAM。我尝试使用 mysqltuner 脚本来优化我的 mysql 数据库。

当前 query_cache_size 设置为 256MB。我不确定是否应该按照建议继续增加这个数字。

另外,A) 您能告诉我为什么每天的查询缓存修剪次数(111209)如此之高吗?我该如何减少这个数字?B) 为什么表缓存命中率只有 56% 我该如何实现更好的缓存命中率?

MySQLTuner 1.4.0 - 海登少校

错误报告、功能请求和下载请访问http://mysqltuner.com/

使用“--help”运行以获取更多选项和输出过滤

[确定] 使用来自 Debian 维护帐户的凭据登录。

[OK] 当前正在运行支持的 MySQL 版本 5.5.43-0+deb7u1-log

[OK] 在 64 位架构上运行

-------- 存储引擎统计 ----------------------------------------------------------

[--] 状态:+ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM

[--] MyISAM 表中的数据:34M(表:157)

[--] InnoDB 表中的数据:422M(表:4)

[--] PERFORMANCE_SCHEMA 表中的数据:0B(表:17)

[!!] 碎片表总数:14

-------- 安全建议 ----------------------------------------------------------

[确定] 所有数据库用户都已分配密码

-------- 性能指标 ------------------------------------------------- [--] 运行时间:12 小时 49 分 55 秒(2M q [59.876 qps]、138K conn、TX:6B、RX:476M)

[--] 读取/写入:76%/24%

[--] 总缓冲区:全局 32.3G + 每个线程 2.8M(最多 600 个线程)

[确定] 最大可能的内存使用量:33.9G(已安装 RAM 的 53%)

[确定] 慢速查询:0% (0/2M)

[OK] 可用连接的最高使用率:1% (9/600)

[确定] 键缓冲区大小/总 MyISAM 索引:16.0M/36.1M

[OK] 密钥缓冲区命中率:100.0% (1B 缓存/17K 读取)

[OK] 查询缓存效率:70.2%(1M 缓存/2M 选择)

[!!] 每天查询缓存修剪次数:111209

[OK] 需要临时表的排序:0% (223 个临时排序/70K 个排序)

[!!] 无索引执行的连接:5298

[确定] 磁盘上创建的临时表:18%(磁盘上 13K/总计 72K)

[OK] 线程缓存命中率:99%(已创建 9 个/138K 个连接)

[OK] 表缓存命中率:56% (239 打开 / 423 已打开)

[确定] 使用的打开文件限制:0%(403 / 1M)

[OK] 立即获取表锁:99% (1M 立即/1M 锁)

[确定] InnoDB 缓冲池/数据大小:32.0G/422.7M

[确定] InnoDB 日志等待:0

-------- 建议 -----------------------------------------------------------------

一般建议:

Run OPTIMIZE TABLE to defragment tables for better performance

MySQL started within last 24 hours - recommendations may be inaccurate

Increasing the query_cache size over 128M may reduce performance

Adjust your join queries to always utilize indexes

需要调整的变量:

query_cache_size (> 256M) [see warning above]

join_buffer_size (> 256.0K, or always use indexes with joins)

答案1

您必须减少连接max_connections数,直到 12 小时内 138K 内只有 9 个同时连接(定义为 600)。如果足够,则默认为 151 个连接。

您必须将key_buffer_sizeMYISAM 索引至少增加到两倍(64MB,256MB 可防止将来出现问题)才能将所有索引放入内存中。

您可以将 InnoDB 缓冲池减少到合理的 2GB 而不是 32GB,而只存在 422MB 的数据。

答案2

您必须使用以下方法来了解数据库的状况: https://www.percona.com/software/percona-toolkit

Percona Toolkit for MySQL 是一套高级命令行工具(由我们自己的 Percona MySQL 支持人员使用),用于执行各种难以手动执行或过于复杂的 MySQL 服务器和系统任务,包括:通过检查主数据和副本数据的一致性来验证 MySQL 复制的完整性;高效地存档行;查找重复的索引;总结 MySQL 服务器;分析来自日志和 tcpdump 的查询;在出现问题时收集重要的系统信息

无论如何,这是我以前最喜欢的脚本之一:
https://github.com/daniel-nichter/hackmysql.com/blob/master/mysqlreport/mysqlreport

相关内容