我应该根据 MySQL Tuner 结果优化啥?
Posted
技术标签:
【中文标题】我应该根据 MySQL Tuner 结果优化啥?【英文标题】:What all should I be optimizing based on MySQL Tuner results?我应该根据 MySQL Tuner 结果优化什么? 【发布时间】:2017-03-08 12:10:58 【问题描述】:-------- 日志文件推荐 ------------------------------
[--] 日志文件:/var/log/mysqld.log(4K)
[OK] 日志文件 /var/log/mysqld.log 存在
[OK] 日志文件 /var/log/mysqld.log 可读。
[OK]日志文件/var/log/mysqld.log不为空
[OK] 日志文件 /var/log/mysqld.log 小于 32 Mb
[!!] /var/log/mysqld.log 包含 21 个警告。
[OK] /var/log/mysqld.log 不包含任何错误。
[--] 在 /var/log/mysqld.log 中检测到 3 个启动
[--] 1) 170307 19:53:17 [注意] /usr/libexec/mysqld: 准备连接。
[--] 2) 170307 19:50:51 [注意] /usr/libexec/mysqld: 准备连接。
[--] 3) 170307 19:47:30 [注意] /usr/libexec/mysqld: 准备连接。
[--] 在 /var/log/mysqld.log 中检测到 3 次关闭
[--] 1) 170307 19:53:17 [注意] /usr/libexec/mysqld: 关机完成
[--] 2) 170307 19:50:51 [注意] /usr/libexec/mysqld: 关机完成
[--] 3) 170307 19:47:29 [注意] /usr/libexec/mysqld: 关机完成
-------- 存储引擎统计 ------------------------------
[--] 状态:+CSV +InnoDB +MRG_MYISAM
[--] MyISAM 表中的数据:33M(表:29)
[--] InnoDB 表中的数据:368M(表:52)
[OK] 碎片表总数:0
-------- 安全建议 ------------------
[!!] 用户“@jobzmachine”是一个匿名帐户。
[!!] 用户“@localhost”是一个匿名帐户。
[!!] 用户“@jobzmachine”未设置密码。
[!!] 用户“@localhost”没有设置密码。
[!!] 用户“@jobzmachine”使用用户名作为密码。
[!!] 用户 '@localhost' 使用用户名作为密码。
[!!] 用户 'backup@%' 没有特定的主机限制。
[!!] 用户 'search@%' 没有特定的主机限制。
[!!]没有基本密码文件列表!
-------- CVE 安全建议 ------------------------------
--
[--] 由于 --cvefile 选项未定义而跳过
-------- 性能指标 ------------------
[--] Up for: 3m 12s (23K q [123.125 qps], 133 conn, TX: 77M, RX: 2M)
[--] 读取/写入:84% / 16%
[--] 二进制日志被禁用
[--] 物理内存:31.2G
[--] MySQL 最大内存:1.6G
[--]其他进程内存:2.3G
[--] 总缓冲区:1.2G 全局 + 2.7M 每个线程(最大 151 个线程)
[--] P_S 最大内存使用量:0B
[--] Galera GCache 最大内存使用量:0B
[OK] 达到的最大内存使用量:1.4G(已安装 RAM 的 4.61%)
[OK] 最大可能的内存使用量:1.6G(已安装 RAM 的 5.04%)
[OK] 与其他进程的总体可能内存使用量与可用内存兼容
[OK] 慢查询:0% (0/23K)
[OK] 可用连接的最高使用率:66% (101/151)
[!!] 中止的连接:13.53% (18/133)
[!!] 由于互斥量争用,默认情况下可能禁用查询缓存。
[OK]查询缓存效率:78.2%(11K缓存/15K选择)
[OK] 每天查询缓存修剪次数:0
[OK] 需要临时表的排序:0%(0 个临时排序/505 个排序)
[!!] 不使用索引执行的连接:1
[!!] 在磁盘上创建的临时表:48%(磁盘上 142 / 总共 292)
[!!] 线程缓存命中率:24%(创建 101 / 133 个连接)
[OK] 表缓存命中率:88%(56打开/63打开)
[OK] 使用的打开文件限制:1% (17/1K)
[OK] 立即获取表锁:100%(5K 立即/5K 锁)
-------- 性能架构 ------------------
[--] 性能架构已禁用。
[--] P_S使用的内存:0B
[--] 未安装系统架构。
-------- 线程池指标 ------------------------------
[--] 线程池统计已禁用。
-------- MyISAM 指标 ------------------------------
[!!] 使用的密钥缓冲区:18.2%(已使用 24M / 134M 缓存)
[OK] 密钥缓冲区大小/MyISAM 索引总数:128.0M/20.6M
[OK] 读取键缓冲区命中率:100.0%(缓存 393K / 0 次读取)
[OK] Write Key 缓冲区命中率:100.0%(1K 缓存/0 次写入)
-------- InnoDB 指标 ------------------------------
[--] InnoDB 已启用。
[--] InnoDB 线程并发:8
[!!] 每个表的 InnoDB 文件未激活
[OK] InnoDB 缓冲池/数据大小:1.0G/368.2M
[!!] InnoDB 日志文件大小 / InnoDB 缓冲池大小 (0.9765625 %) 的比率:5.0M * 2/1.0G 应该等于 25%
[--] InnoDB Buffer Pool Chunk Size 未在您的版本中使用或定义
[OK] InnoDB 读取缓冲区效率:99.95%(5772058 次点击/总共 5774714 次)
[!!] InnoDB 写入日志效率:77.58%(256 次点击/总共 330 次)
[OK] InnoDB 日志等待:0.00%(0 次等待 / 586 次写入)
-------- AriaDB 指标 ------------------------------
[--] AriaDB 已禁用。
-------- TokuDB 指标 ------------------------------
[--] TokuDB 已禁用。
-------- XtraDB 指标 ------------------------------
[--] XtraDB 已禁用。
-------- RocksDB 指标 ------------------------------
[--] RocksDB 已禁用。
-------- 蜘蛛指标 ------------------------------
[--] 蜘蛛被禁用。
-------- 连接指标 ------------------------------
[--] 连接被禁用。
-------- Galera Metrics ------------------------------
[--] Galera 被禁用。
-------- 复制指标 ------------------------------
[--] Galera 同步复制:否
[--] 此服务器没有复制从属服务器。
[--] 这是一个独立的服务器。
-------- 推荐 ------------------
一般建议:
将警告行控制到 /var/log/mysqld.log 文件中
删除匿名用户帐户 - 有 2 个匿名帐户。
使用以下 SQL 语句为用户设置密码 (SET PASSWORD FOR 'user'@'SpecificDNSorIp' = PASSWORD('secure_password'); )
为 user@host 设置安全密码(SET PASSWORD FOR 'user'@'SpecificDNSorIp' = PASSWORD('secure_password'); )
将 user@% 的主机限制为 user@SpecificDNSorIp
MySQL 在过去 24 小时内启动 - 建议可能不准确
减少或消除未关闭的连接和网络问题
调整您的连接查询以始终利用索引
做调整的时候,做tmp_table_size/max_heap_table_
大小相等
减少没有 LIMIT 子句的 SELECT DISTINCT 查询
不应为 MySQL 和 MariaDB 5.5 及更低版本激活性能
考虑从https://github.com/mysql/mysql-sys 安装系统架构
要调整的变量:
query_cache_type (=0)
join_buffer_size(> 128.0K,或始终使用连接索引)
tmp_table_size (> 32M)
max_heap_table_size (> 32M)
thread_cache_size (> 16384)
performance_schema = OFF 禁用 PFS
innodb_file_per_table=开启
innodb_log_file_size * 如果可能的话,innodb_log_files_in_group 应该等于缓冲池大小的 1/4 (=512M)。
【问题讨论】:
【参考方案1】:MySQL 在过去 24 小时内启动 - 建议可能不准确
只需 3 分钟!没有足够的时间收集很多有用的信息。
但是,通常您不能“调整性能问题”。如果您有缓慢的查询,让我们看看它们,加上相关表的SHOW CREATE TABLE
。
[OK] InnoDB 缓冲池/数据大小:1.0G/368.2M
你有一个相当小的数据集;你认为它会增长吗?
您的GRANTs
可以让黑客轻松控制您的计算机。
其余的建议大多是次要的——到目前为止。
【讨论】:
【参考方案2】:在你的 .cfg/.ini 中
thread_cache_size = 100 Current suggested cap to avoid thread creation thrashing. NOT >16384 as suggested by tuner.
在 24 小时正常运行后需要 MySQLTUNER 以获得更有意义的分析/结果。
【讨论】:
以上是关于我应该根据 MySQL Tuner 结果优化啥?的主要内容,如果未能解决你的问题,请参考以下文章