前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用Mytop监控MySQL性能

如何使用Mytop监控MySQL性能

原创
作者头像
一步
修改2018-10-29 18:27:51
2.6K0
修改2018-10-29 18:27:51
举报

介绍

Mytop是一个用于监控MySQL性能的开源命令行工具。它受到名为top的Linux系统监视工具的启发,在外观和感觉上类似于它。Mytop连接到MySQL服务器并定期运行show processlistshow global status命令。然后,它以有用的格式汇总信息。使用mytop,我们可以(实时)监控MySQL线程,查询和正常运行时间,以及查看哪个用户正在运行哪些数据库查询,哪些是慢查询等等。所有这些信息都可用于优化MySQL服务器性能。

在本教程中,我们将讨论如何安装,配置和使用mytop。

先决条件

在开始学习本教程之前,您应该具备以下条件:

  • CentOS 7 64位腾讯CVM(也适用于CentOS 6)
  • 具有sudo权限的非root用户。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 在Droplet上运行的MySQL服务器。

第1步 - 安装Mytop

让我们安装mytop所需的软件包。

首先,我们需要在服务器上安装EPEL(Enterprise Linux的额外软件包)yum存储库。EPEL是一个Fedora特别兴趣小组,负责为Enterprise Linux创建,维护和管理一套高质量的开源附加软件包。运行以下命令以在服务器上安装和启用EPEL存储库:

在CentOS 7上:

代码语言:javascript
复制
sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

在CentOS 6上:

代码语言:javascript
复制
sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

在继续之前,请使用以下命令验证是否已启用EPEL存储库:

代码语言:javascript
复制
sudo yum repolist

如果启用,您将在输出中看到以下repo:

代码语言:javascript
复制
epel/x86_64                                                            Extra Packages for Enterprise Linux 7 - x86_64

接下来,让我们使用yum插件protectbase保护基本包不受EPEL攻击。

代码语言:javascript
复制
sudo yum install yum-plugin-protectbase.noarch -y

protectbase插件的目的是保护某些yum存储库免受来自其他存储库的更新。即使未受保护的存储库具有更高版本,受保护存储库中的包也不会被非受保护存储库中的包更新或覆盖。

现在我们准备安装mytop包了。运行以下命令进行安装:

代码语言:javascript
复制
sudo yum install mytop -y

这将安装mytop包及其所有依赖项,主要是perl模块。

第2步 - 配置Mytop

在使用mytop之前,请为mytop创建一个名为.mytop的自定义配置文件。运行命令:

代码语言:javascript
复制
sudo nano /root/.mytop

并在文件中添加以下内容并保存并退出。

代码语言:javascript
复制
host=localhost
db=mysql
delay=5
port=3306
socket=
batchmode=0
color=1
idle=1

当您以root用户身份直接运行mytop时,以及使用前面的sudo命令作为非root sudo用户运行mytop时,将使用此配置文件。

您可以根据需要对此配置文件进行更改。例如,该delay选项指定显示刷新之间的时间量(以秒为单位)。如果您希望每3秒刷新一次mytop显示,则可以使用以下命令编辑该/root/.mytop文件

代码语言:javascript
复制
sudo nano /root/.mytop

并更改以下内容:

代码语言:javascript
复制
delay=3

idle参数指定是否允许空闲(休眠)线程出现在mytop显示屏幕的列表中。默认是显示空闲线程。如果省略空闲线程,则会颠倒默认排序顺序,以便最长运行的查询显示在列表顶部。如果您希望这样做,请编辑该/root/.mytop文件并更改以下内容:

代码语言:javascript
复制
idle=0

您可以参考mytop的手册页以获取有关配置文件中所有参数的信息 - 它包含每个参数的说明。要访问手册页,请使用以下命令:

代码语言:javascript
复制
man mytop

您可以键入q以退出手册。

第3步 - 连接到Mytop

在本节中,我们将讨论如何连接到mytop并使用它来查看MySQL查询。

Mytop需要凭据才能访问数据库,可以通过提示,命令行提供,也可以存储在配置文件中。为了更好的安全性,我们将使用--prompt选项至mytop,每次都要求输入密码。 让我们使用以下连接到mytop:

代码语言:javascript
复制
sudo mytop --prompt

并在提示符下输入MySQL root密码。您还可以在mytop命令中使用多个命令行参数。请参阅手册页以获取完整列表。例如,如果要使用其他mysql用户(如sammy)连接到mytop,请运行以下命令:

代码语言:javascript
复制
sudo mytop -u sammy --prompt

要仅连接和监视特定数据库,可以使用以下命令:

代码语言:javascript
复制
sudo mytop -d databasename --prompt

要退出mytop并返回到shell提示符,请键入q

第4步 - 查看和解释Mytop显示

在本节中,我们将了解如何解释mytop显示以及该工具提供的不同功能。

一旦我们使用mytop --prompt连接到mytop,然后我们将进入线程视图。它将显示类似于:

代码语言:javascript
复制
MySQL 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秒,因此如果在刷新后的最后5秒内运行了100个查询,那么该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的入站流量平均为14.7kbps,出站流量为320.7kbps。Now in/out再次显示流量,但自上次mytop刷新以来。

显示的第二部分列出了当前的MySQL线程,根据它们的空闲时间(最少空闲的第一个)进行排序。如果需要,可以按O来反转排序顺序。用户连接的线程id,用户名,主机,用户连接的数据库,空闲时间的秒数,线程执行的命令(或线程的状态),以及查询的第一部分信息都显示在这里。如果线程处于Query状态(即Cmd显示Query),则下一列Query or State将显示正在运行的查询的第一部分。如果命令状态是睡眠空闲,则Query or State列通常是空白的。在上面的示例输出中,id为2的线程实际上是mytop运行show processlist查询以收集信息。ID为16的线程正在休眠(不处理查询,但仍然连接)。ID为17的线程在testdb数据库上运行SELECT查询。

现在我们已经了解了mytop的基本显示,我们将看到如何使用它来收集有关MySQL线程和查询的更多信息。我们来看看下面的mytop显示:

代码语言:javascript
复制
[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,它会询问:

代码语言:javascript
复制
Full query for which thread id:

输入要查看的查询的线程ID。例如,输入1244。然后它将显示以下内容:

代码语言:javascript
复制
Thread 1244 was executing following query:
​
SELECT * FROM dept_emp WHERE ...
​
-- paused. press any key to resume or (e) to explain --

我们可以输入e来解释查询。这将解释正在运行的查询,以便我们可以确定查询是否已优化。EXPLAIN是理解和优化麻烦的MySQL查询的最强大的工具之一。例如:

代码语言:javascript
复制
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。它看起来类似于以下内容:

代码语言:javascript
复制
           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查询并优化它们的起点,从而提高了服务器的整体性能。

更多Linux教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Use Mytop to Monitor MySQL Performance》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 先决条件
  • 第1步 - 安装Mytop
  • 第2步 - 配置Mytop
  • 第3步 - 连接到Mytop
  • 第4步 - 查看和解释Mytop显示
  • 结论
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档