介绍
Mytop 是一个开源的命令行工具,用于监控 MySQL 性能,它是由名为 Top 的 Linux 系统监控工具所启发的,在外观和感觉方面与它类似。 Mytop 连接到 MySQL 服务器,并定期运行显示流程列表
和显示全球状态
命令。 然后将信息汇总成一个有用的格式。 使用 MySQL 监控工具,我们可以监控 (实时) MySQL 线索、查询和运行时间,以及查看用户在哪个数据库上运行查询,哪个数据库是慢查询,等等。
在本教程中,我们将讨论如何安装,配置和使用mytop。
前提条件
在您开始使用本教程之前,您应该有以下内容:
- CentOS 7 64 位 Droplet (也适用于 CentOS 6)
- 具有 sudo 特权的非根用户. 要设置此类型的用户,请遵循 CentOS 7 初始服务器设置 教程。 所有命令将作为此用户运行。
- MySQL 服务器在 Droplet 上运行。 要安装 MySQL,请遵循 如何在 CentOS 上安装 Linux, Apache, MySQL, PHP (LAMP) 堆栈文章的第 2 步。
步骤 1 - 安装Mytop
让我们来安装Mytop所需的包。
首先,我们需要在服务器上安装 EPEL (Extra Packages for Enterprise Linux) yum 存储库。EPEL 是一个 Fedora Special Interest Group,它创建、维护和管理一组高质量的企业 Linux 的开源附加软件包。
百分之七:
1sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
百分之六:
1sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
在继续之前,请检查使用下列功能是否启用了 EPEL repo:
1sudo yum repolist
如果启用,您将看到输出中列出的下列 Repo:
1epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64
接下来,让我们使用 yum 插件 protectbase来保护基础包免受 EPEL 的侵害。
1sudo yum install yum-plugin-protectbase.noarch -y
**protectbase 插件的目的是保护某些 yum 存储库免受来自其他存储库的更新。
现在我们已经准备好安装mytop包,运行以下命令来安装它:
1sudo yum install mytop -y
这将安装神话包以及其所有依赖,主要是 perl 模块。
步骤 2 - 配置神话
在使用 mytop 之前,为 mytop 创建一个名为 .mytop
的自定义配置文件。
1sudo nano /root/.mytop
然后将下列内容添加到文件中,然后保存和退出。
1[label /root/.mytop]
2host=localhost
3db=mysql
4delay=5
5port=3306
6socket=
7batchmode=0
8color=1
9idle=1
此配置文件将被用来当您将mytop直接作为root运行时,以及当您将其以sudo
命令在其前面运行时作为非root sudo用户。
您可以根据您的需求对此配置文件进行更改,例如,延迟
选项指定显示更新之间几秒的时间。如果您希望每3秒更新神话显示器,您可以使用/root/.mytop
来编辑文件。
1sudo nano /root/.mytop
更改如下:
1[label /root/.mytop]
2delay=3
idle
参数指定是否允许在神话显示屏中列出闲置(睡眠)线程,默认情况是显示闲置线程,如果省略闲置线程,默认排序顺序会被扭转,以便最长的运行查询出现在列表的顶部。
1[label /root/.mytop]
2idle=0
您可以参阅Mytop的手动页面以获取配置文件中的所有参数的信息 - 它包含每个参数的描述。
1man mytop
您可以输入q
来退出手册。
步骤 3 – 连接到Mytop
在本节中,我们将讨论如何连接到mytop,并使用它来查看MySQL查询。
Mytop 需要访问数据库的凭证,可以通过提示,在命令行或存储在配置文件中。 为了更好的安全性,我们将使用 `--prompt' 选项来 mitop,该选项每次都会要求密码。
1sudo mytop --prompt
您还可以使用多个命令行参数使用mytop
命令。 请参阅手册页面以获取完整列表。 例如,如果您想使用不同的 mysql 用户(如 sammy)连接到mytop,请运行命令:
1sudo mytop -u sammy --prompt
若要仅连接和监控特定数据库,可以使用以下命令:
1sudo mytop -d databasename --prompt
要停止神话并返回你的壳提示,键入q
。
步骤 4 – 查看和解释神话显示器
在本节中,我们将看到如何解释神话显示和该工具提供的不同功能。
一旦我们使用mytop --prompt
连接到mytop,我们将被带到 thread view。
1[secondary_label Output of mytop]
2MySQL on localhost (5.5.41-MariaDB) up 0+00:05:52 [01:33:15]
3 Queries: 148 qps: 0 Slow: 0.0 Se/In/Up/De(%): 09/00/00/00
4 qps now: 2 Slow qps: 0.0 Threads: 6 ( 5/ 0) 67/00/00/00
5 Key Efficiency: 2.0% Bps in/out: 14.7/320.7k Now in/out: 192.5/731.8k
6
7 Id User Host/IP DB Time Cmd Query or State
8 -- ---- ------- -- ---- --- ----------
9 2 root localhost mysql 0 Query show full processlist
10 16 root localhost 0 Sleep
11 17 root localhost testdb 0 Query SELECT * FROM dept_emp
12 18 root localhost testdb 0 Query SELECT * FROM dept_emp
13 19 root localhost testdb 0 Query SELECT * FROM dept_emp
14 20 root localhost testdb 0 Query SELECT * FROM dept_emp
如果您在另一个视图中,您可以通过键入t
返回此视图。
上面的显示屏分为两个部分. 顶部四行包括 Header,可以通过按 SHIFT-H来打开或关闭。
- 联合国 第一行识别服务器的主机名及其运行的MySQL版本. 右侧显示 MySQL 服务器进程的上行时间, 单位为天数+小时: 分钟: 秒格式以及当前时间 。
- 二行显示服务器处理过的查询总数(我们的情况是148个),每秒平均查询次数,慢查询次数,以及选择,插入,更新,删除查询的百分比.
- 第三行显示自上次我顶级刷新以来的实时值. 我的顶部正常的刷新(延后)时间为5秒,因此如果在刷新后最后5秒内运行了100个查询,那么"qps now"的号码将是20. 第一个字段是每秒查询的次数("qps now: 2"). 第二个值是每秒慢查询的次数. `线程:6 (5/0)'段表示共有6个连接线程,5个活动线程(一个正在睡觉),线程缓存有0个线程. 第三行中最后一个字段显示查询百分比,和上行一样,但自上行后我的顶部刷新.
- 第4行显示密钥缓冲效率(密钥如何经常从缓冲器读取而不是从磁盘读取)和MySQL发送和接收的字节数,无论是总体还是上个我的顶周期.
关键效率:2.0QQ显示2%的密钥是从缓冲器而不是从磁盘读取的。
Bps in/out:14.7/320.7k'显示,自启动以来,MySQL的平均入境流量为14.7kbps,出境流量为320.7kbps。 " 现在进出 " 再次显示流量,但自从我上次刷新时起。 (英语)
显示的第二部分列出了当前的 MySQL 线程,按其闲置时间排序(最少闲置的第一)。您可以按 O 来扭转排序顺序,如有需要. 线程 ID、用户名、用户正在连接的主机、用户连接的数据库、闲置时间的秒数、线程正在运行的命令(或线程的状态)和查询信息的第一部分都显示在这里。 如果线程处于 Query状态(即Cmd
显示了 Query),那么下一列Query或状态
将显示正在运行的查询的第一部分。 如果命令状态是 Seple或 Idle,那么Query或状态
列通常将是空的。在我们的示例中,上面带有id2 **
的输
现在我们已经理解了神话的基本显示,我们将看到如何使用它来收集有关MySQL线程和查询的更多信息。
1[secondary_output Output of mytop]
2MySQL on localhost (5.5.41-MariaDB) up 0+00:13:10 [23:54:45]
3 Queries: 2.8k qps: 4 Slow: 51.0 Se/In/Up/De(%): 45/00/00/00
4 qps now: 17 Slow qps: 0.0 Threads: 52 ( 51/ 0) 96/00/00/00
5 Key Efficiency: 100.0% Bps in/out: 215.4/ 7.6M Now in/out: 2.0k/16.2M
6
7 Id User Host/IP DB Time Cmd Query or State
8 -- ---- ------- -- ---- --- ----------
9 34 root localhost testdb 0 Query show full processlist
10 1241 root localhost 1 Sleep
11 1242 root localhost testdb 1 Query SELECT * FROM dept_emp
12 1243 root localhost testdb 1 Query SELECT * FROM dept_emp
13 1244 root localhost testdb 1 Query SELECT * FROM dept_emp
14 1245 root localhost testdb 1 Query SELECT * FROM dept_emp
15 1246 root localhost testdb 1 Query SELECT * FROM dept_emp
16 1247 root localhost testdb 1 Query SELECT * FROM dept_emp
在上面所示的神话 thread view(默认视图)中,查询被缩小. 要查看整个查询,您可以按 F,然后它会问:
1Full query for which thread id:
例如,输入‘1244’,然后它会显示以下内容:
1Thread 1244 was executing following query:
2
3SELECT * FROM dept_emp WHERE ...
4
5-- paused. press any key to resume or (e) to explain --
我们可以输入e
来解释查询,这将解释正在运行的查询,以便我们可以确定查询是否优化。EXPLAIN是理解和优化麻烦的MySQL查询最强大的工具之一。
1EXPLAIN SELECT * FROM dept_emp:
2
3*** row 1 ***
4 table: dept_emp
5 type: ALL
6 possible_keys: NULL
7 key: NULL
8 key_len: NULL
9 ref: NULL
10 rows: 332289
11 Extra: NULL
12-- paused. press any key to resume --
您可以按任何键退出此模式,或键入t
,返回默认线程视图。
另一个可用的视图是命令视图. 若要访问命令视图,请键入 c
。
1Command Total Pct | Last Pct
2 ------- ----- --- | ---- ---
3 select 1782 55% | 100 8%
4 show status 723 22% | 533 45%
5 show processlist 708 22% | 532 45%
6 change db 2 0% | 0 0%
7 show variables 1 0% | 0 0%
8 Compression 0 0% | 0 0%
命令
列显示正在运行的命令或查询类型。总
列代表服务器启动以来运行该类型的命令的总数,而Pct
列显示的百分比相同。
我们在本教程中讨论了mytop的一些重要和有用的功能. 还有许多其他可用. 要查看完整的选项列表,您可以在mytop运行时按下 **?**键。
结论
您现在应该有一个很好的了解如何使用神话来监控您的MySQL服务器. 它也是寻找问题SQL查询和优化它们的起点,从而提高服务器的整体性能。