前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySql数据库性能诊断工具Mysqltuner.pl

MySql数据库性能诊断工具Mysqltuner.pl

作者头像
DBA实战
修改2024-09-10 15:40:59
980
修改2024-09-10 15:40:59
举报
文章被收录于专栏:DBA实战

简介

MySQLTuner-perl一个常用的数据库性能诊断工具,主要检查参数设置的合理性包括日志文件、存储引擎、安全建议及性能分析。针对潜在的问题,给出改进的建议,是mysql优化的好帮手。

功能概述

1. 性能分析: 分析MySQL服务器的各种性能指标,包括但不限于查询缓存命中率、索引利用率、连接数、线程缓存等。

2.建议优化: 根据分析结果,提供优化建议,如调整MySQL服务器的配置参数,以改善性能和稳定性。

3.数据库健康检查: 检查数据库的健康状态,警告可能存在的问题或风险、表碎片,如慢查询、长时间运行的查询等。

4.MySQL配置参数建议: 建议适合当前数据库负载和硬件环境的MySQL配置参数,以达到更好的性能和效率。

5.版本兼容性: 支持多个版本的MySQL数据库,包括MySQL 3.x到MySQL 8.x,确保在不同版本的数据库上都能提供正确的分析和建议。

6.命令行工具: 作为一个命令行工具,易于在服务器上运行,并能快速生成有用的分析结果和优化建议。

项目地址:

https://github.com/major/MySQLTuner-perl

下载

代码语言:javascript
复制
[root@localhost ~]#wget https://raw.githubusercontent.com/major/MySQLT

执行分析

代码语言:javascript
复制
[root@ mysqltuner-perl]# perl ./mysqltuner.pl --user root --pass='Jesong-123456'
[--] Skipped version check for MySQLTuner script
[OK] Logged in using credentials passed on the command line
[OK] Operating on 64-bit architecture
-------- Storage Engine Statistics -----------------------------------------------------------------
支持的存储引擎:ARCHIVE、BLACKHOLE、CSV、InnoDB、MEMORY、MRG_MYISAM、MyISAM、PERFORMANCE_SCHEMA。其中,FEDERATED 存储引擎未被启用。
InnoDB 表中的数据量为 2.9G,共有 637 张表。
总共有 1 张表存在碎片化问题。
-------- Performance Metrics -----------------------------------------------------------------------
服务器已经运行了333天16小时53分钟5秒,处理了大约209百万个查询(平均每秒7.265个查询),建立了大约1百万个连接,发送了491GB的数据,接收了51GB的数据。
读取和写入操作比例为94%和6%。
二进制日志记录已启用,但 GTID 模式未开启。
物理内存:7.6G,最大可使用的MySQL内存为1.6G。其他进程内存占用为0B。
总缓冲区:全局共168.0M,每个线程1.2M(最大1024个线程)。
Performance_schema 最大内存使用量:249M,Galera GCache 最大内存使用量为0B。
最大内存使用量达到了595.4M(占安装的RAM的7.67%),最大可能内存使用量为1.6G(占安装的RAM的20.92%),与其他进程一起的整体可能内存使用量与可用内存兼容。
慢查询占比为0%(0个慢查询/209百万个查询)。
可用连接的最高使用率为14%(151/1024)。
中止连接占比为0.01%(79/1542314)。
名称解析处于活动状态,对于每个新连接都进行了反向名称解析,可能会影响性能。
MySQL 8.0 已移除了查询缓存。
需要临时表的排序占比为0%(659个临时排序/53百万个排序)。
没有使用索引的连接。
在磁盘上创建的临时表占比为0%(0个在磁盘上/30百万个总数)。
线程缓存命中率为99%(2K创建/1M连接)。
表缓存命中率为99%(207M命中/207M请求)。
table_definition_cache(2000)大于表的数量(963)。
打开文件限制使用率为0%(3/10K)。
立即获取的表锁的占比为100%(2M立即获取/2M锁)。
二进制日志缓存内存访问率为99.42%(2978590内存/2996023总数)。
------- Performance schema ------------------------------------------------------------------------
Performance_schema已经激活,占用了249.3M内存,用于监控数据库性能。
系统模式(Sys schema)已安装,可提供更多关于系统性能的信息。
-------- ThreadPool Metrics ------------------------------------------------------------------------
在ThreadPool方面,指标显示ThreadPool统计被禁用
InnoDB已启用,但存在一些潜在问题需要关注:
InnoDB缓冲池大小为128.0M,而数据大小为2.9G,这表明缓冲池大小可能不足以容纳整个数据集。建议考虑增加缓冲池大小以提高性能。
日志文件大小与缓冲池大小的比例未达到推荐值。根据建议,日志文件大小应该是缓冲池大小的25%,而当前的比例为48.0M * 2 / 128.0M = 75%,建议调整日志文件大小以优化性能。
写日志效率为87.06%,略低于理想值。虽然效率不算太差,但仍有改进空间。可以考虑调整日志文件大小、调整日志写入策略或其他相关配置以提升写日志效率。
-------- Recommendations ---------------------------------------------------------------------------
General recommendations:
    Run ALTER TABLE ... FORCE or OPTIMIZE TABLE to defragment tables for better performance
      ALTER TABLE `crmdb`.`el_crm_history` FORCE; -- can free 114 MiB
    Total freed space after defragmentation: 114 MiB
    230 CVE(s) found for your MySQL release. Consider upgrading your version !
    Configure your accounts with ip or subnets only, then update your configuration with skip-name-resolve=ON
    Be careful, increasing innodb_log_file_size / innodb_log_files_in_group means higher crash recovery mean time
Variables to adjust:
    skip-name-resolve=ON
    innodb_buffer_pool_size (>= 2.9G) if possible.
    innodb_log_file_size should be (=16M) if possible, so InnoDB total log file size equals 25% of buffer pool size.
    innodb_log_buffer_size (> 16M)

需要进行表碎片整理以提高性能,建议使用ALTER TABLE ... FORCE或OPTIMIZE TABLE命令进行碎片整理。例如:ALTER TABLE crmdb.el_crm_history FORCE;这将释放114 MB的空间,提高系统性能。
有230个CVE(通用漏洞和披露)与您的MySQL版本相关,请考虑升级版本以修复这些漏洞。
建议只为IP地址或子网配置帐户,然后使用skip-name-resolve = ON更新配置。这可以提高系统性能,并降低DNS解析的影响。
注意,增加innodb_log_file_size / innodb_log_files_in_group的值会增加崩溃恢复的时间,需要权衡利弊。
建议调整以下变量:
skip-name-resolve = ON
如果可能,增大innodb_buffer_pool_size(> = 2.9G)。
如果可能,将innodb_log_file_size设置为16M,以使InnoDB总日志文件大小等于缓冲池大小的25%。
增加innodb_log_buffer_size的值(> 16M)。

操作示例

代码语言:javascript
复制
远程获取数据库信息
perl mysqltuner.pl --host targetDNS_IP --user admin_user --pass admin_password
输出检测的全部信息(涵盖检测所有选项)
perl mysqltuner.pl --user root --pass='123456' --verbose
perl mysqltuner.pl --user root --pass='123456' --buffers --dbstat --idxstat --sysstat --pfstat --tbstat
漏洞检查
perl ./mysqltuner.pl --user root --pass='123456' --cvefile=vulnerabilities.csv
将结果写入文件中
perl mysqltuner.pl --user root --pass='123456' --buffers --dbstat --idxstat --sysstat --outputfile /tmp/result_mysqltuner.txt
将结果写入文件而不输出信息
perl mysqltuner.pl --user root --pass='123456' --buffers --dbstat --idxstat --sysstat --silent --outputfile /tmp/result_mysqltuner.txt
根据模版自定义报告文件(模版没整出来)
perl mysqltuner.pl --user root --pass='123456' --buffers --dbstat  --silent --reportfile /tmp/result_mysqltuner.txt --template=./template_example.tpl
将csv 文件转储到 results 子目录中
perl ./mysqltuner.pl --user root --pass='123456' --verbose --dumpdir=./mysql

基于 Python 的 HTML 报告 Jinja2

代码语言:javascript
复制
HTML 生成基于 Python/Jinja2
HTML 生成过程
使用 JSON 格式生成 mysqltuner.pl 报告 (--json)
使用 j2 python 工具生成 HTML 报告
Jinja2 模板位于 templates 子目录下
一个基本示例称为 basic.html.j2
安装 Python j2
python -mvenv j2
source ./j2/bin/activate
(j2) pip install j2
使用 Html 报告生成
perl mysqltuner.pl --verbose --json > reports.json
cat reports.json  j2 -f json MySQLTuner-perl/templates/basic.html.j2 > variables.html
或
perl mysqltuner.pl --verbose --json | j2 -f json MySQLTuner-perl/templates/basic.html.j2 > variables.html

基于 AHA 的 HTML 报告

代码语言:javascript
复制
HTML 生成过程
使用标准文本报告生成 mysqltuner.pl 报告
使用 aha 生成 HTML 报告
安装 Aha
按照 Github 存储库中的说明进行操作(https://github.com/theZiz/aha)
GitHub AHA 主仓库
使用 AHA Html 报告生成
perl mysqltuner.pl --verbose --color > reports.txt
aha --black --title "MySQLTuner" -f "reports.txt" > "reports.html"
或
perl mysqltuner.pl --verbose --color | aha --black --title "MySQLTuner" > reports.html

参数详解

代码语言:javascript
复制
连接和认证选项:
--host <hostname>: 连接到远程主机执行测试(默认为 localhost)。
--socket <socket>: 使用不同的套接字进行本地连接。
--port <port>: 连接所使用的端口(默认为 3306)。
--protocol tcp: 强制使用 TCP 连接,而不是套接字。
--user <username>: 用于认证的用户名。
--userenv <envvar>: 包含认证用户名的环境变量的名称。
--pass <password>: 用于认证的密码。
--passenv <envvar>: 包含认证密码的环境变量的名称。
--ssl-ca <path>: 公钥的路径。
--mysqladmin <path>: 自定义 mysqladmin 可执行文件的路径。
--mysqlcmd <path>: 自定义 mysql 可执行文件的路径。
--defaults-file <path>: 自定义的 .my.cnf 文件路径。
--defaults-extra-file <path>: 额外自定义配置文件的路径。
--server-log <path>: 明确指定的日志文件路径(error_log)。
性能和报告选项:
--skipsize: 不枚举表及其类型/大小(默认开启,推荐用于拥有大量表的服务器)。
--json: 将结果输出为 JSON 字符串。
--prettyjson: 将结果输出为格式化的 JSON 字符串。
--skippassword: 不检查用户密码(默认关闭)。
--checkversion: 检查 MySQLTuner 更新(默认不检查)。
--updateversion: 检查 MySQLTuner 更新并在有新版本时更新(默认不检查)。
--forcemem <size>: 安装的RAM数量(以兆字节为单位)。
--forceswap <size>: 配置的交换内存量(以兆字节为单位)。
--passwordfile <path>: 密码文件列表的路径(每行一个密码)。
--cvefile <path>: 用于漏洞检查的 CVE 文件。
--outputfile <path>: 输出到文本文件的路径。
--reportfile <path>: 报告输出到文本文件的路径。
--template <path>: 模板文件的路径。
--dumpdir <path>: 存放信息文件的目录路径。
--feature <feature>: 运行特定的功能(见 FEATURES 部分)。
输出选项:
--silent: 不在屏幕上输出任何内容。
--verbose: 打印所有选项(默认不详细,包括 dbstat、idxstat、sysstat、tbstat、pfstat)。
--color: 以彩色输出。
--nocolor: 不以彩色输出。
--nogood: 移除 "OK" 响应。
--nobad: 移除负面/建议性响应。
--noinfo: 移除信息性响应。
--debug: 打印调试信息。
--noprocess: 假设没有其他进程在运行。
--dbstat: 打印数据库信息。
--nodbstat: 不打印数据库信息。
--tbstat: 打印表信息。
--notbstat: 不打印表信息。
--colstat: 打印列信息。
--nocolstat: 不打印列信息。
--idxstat: 打印索引信息。
--noidxstat: 不打印索引信息。
--nomyisamstat: 不打印 MyIsam 信息。
--sysstat: 打印系统信息。
--nosysstat: 不打印系统信息。
--nostructstat: 不打印表结构信息。
--pfstat: 打印性能模式信息。
--nopfstat: 不打印性能模式信息。
--bannedports: 被禁止的端口(用逗号分隔)。
--server-log: 定义要分析的特定 error_log。
--maxportallowed: 主机上允许的开放端口数。
--buffers: 打印全局和每个线程的缓冲区值。

兼容性

MySQL 8.0、8.2、8.3(完全支持)

Percona Server 8.0、8.2、8.3(完全支持)

MariaDB 10.4、10.5、10.6、10.11、11.0、11.1、11.2(完全支持)

Galera复制(完全支持)

Percona XtraDB 集群(完全支持)

Mysql 复制(部分支持,无测试环境)

MySQL 8.1(不支持,已弃用版本)

Percona Server 5.7(不支持,已弃用版本)

MySQL 5.7(不支持,已弃用版本)

MySQL 5.6 及更早版本(不支持,已弃用版本)

Percona Server 5.6(不支持,已弃用版本)

MariaDB 10.7、10.8、10.9、10.10(不支持,已弃用版本)

MariaDB 10.3 及更早版本(不支持,已弃用版本)

MariaDB 5.5(不支持,已弃用版本)

Windows 支持是部分的

目前现在支持 Windows

在 WSL2(Windows 子系统 Linux)上成功运行 MySQLtuner

https://docs.microsoft.com/en-us/windows/wsl/

不受支持的环境

目前不支持基于云的云

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档