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