熟悉Linux的同学都很喜欢top命令,可以让我们很方便快捷的一键获取系统运行状态。除了系统状态,很多人可能也希望能一键获得数据库的运行状态,很多人会用show profile或者performance_schema数据库获取各种信息。但是很方便和直接。
本文虫虫给大家介绍一个命令行工具ps-top,可从MySQL 5.6+的performance_schema数据库中收集信息,并使用该信息实时显示服务器负载。数据以表或文件名显示,实时显示在选择,插入,更新或删除活动时候信息情况;视图显示用户活动,显示使用相同用户名连接的不同主机的数量以及这些用户的活动视图;关于互斥、锁表和sql阶段计时的统计信息视图。
安装
和一般的golang工具一样,ps-top安装很简单,直接用go get就可以下载、编译,安装好:
- go get -u github.com/sjmudd/ps-top/cmd/ps-top或
- go get -u github.com/sjmudd/ps-top/cmd/ps-stats
这样就会直接安装下载工具及其依赖项,安装后的二进制文件在$GOPATH/bin/目录。如果该路径在系统PATH设置中,则无需指定任何特定路径即可直接运行程序。
访问MySQL
可以通过以下方法之一访问MySQL:
- 默认使用文件~/.my.cnf。
- 制定cnf文件,通过--defaults-file=/path/to/.my.cnf。
- 使用--host=somehost --port=999 --user=someuser --password=somepass连接到主机
- 通过本机socket连接 --socket=/path/to/mysql.sock --user=someuser --password=somepass
- 如果未指定,则用户默认为的内容$USER。如果未指定端口,则默认为3306。
可以通过命令行选项--use-environment ps-top或者ps-stats,则在环境变量中查找MYSQL_DSN的账号信息去连接Mysql。MYSQL_DSN格式为式:
- user:pass@tcp(host:port)/performance_schema
这样就避免在命令行中直接显示账号和密码,防止信息泄露。
MySQL/MariaDB配置
performance_schema数据库必须配置为支持ps-top。默认情况下,在MySQL上会启用此功能。MariaDB> = 10.0.12上则禁用此功能。因此,需额外配置启用,在/etc/my.cnf中,设置:
- performance_schema = 1
然后重新启动MariaDB才能生效。
ps-top和ps-stats需要问performance_schema表的SELECT权限。如果无法访问所需表,它们将不会运行。
setup_instruments:查看mutex_latency或stages_latency 根据需要修改改配置,保证用户有权限执行此操作。如果服务器,--read-only或者没有足够的权限来更改这些表,则这些视图可能为空。如果在启动时成功更新了表,则停止ps-top之前,该setup_instruments配置会将其恢复为原始设置。
视图
ps-top和ps-stats可以显示7个不同的数据视图,这些视图默认情况下每秒更新一次。这7个视图为:
table_latency:表等待执行操作的时间显示活动。
table_ops:按MySQL执行的活动数显示活动。
file_io_latency:显示MySQL在文件I/O上花费的时间。
table_lock_latency:根据表锁显示顺序
user_latency:根据用户运行查询的时间或用户与MySQL的连接数显示排序。它提供了一些信息,还显示了总的空闲时间,因为这表明可能有过长的空闲查询,如果有堆积,这里的值之和可能很有趣。
mutex_latency:按互斥锁延迟显示排序。
SQL Stages_latency:在不同的SQL查询阶段中按时间显示排序。
可以更改轮询间隔并在模式之间进行切换。
快捷键
在ps-top模式下,以下按键可以让ps-top在不同模式浏览或更改其行为。
h ?:显示帮助。
- · 将轮询间隔减少1秒(最少1秒)
- + 将轮询间隔增加1秒
- q-退出
- t:在显示自重置ps-top开始以来显示统计信息或您显式重置它们(使用'z')[REL]或显示从MySQL收集的统计信息之间切换[ABS]。
- z:重置统计信息。那就是您看到的与"重置"统计信息有关的计数器。
:更改显示模式:延迟,操作,文件I/O,锁定,用户,互斥,阶段和存储模式。 - 左箭头:切换到上一个屏幕
- 向右箭头:切换至下一个屏幕
标准输出模式
ps-stats和,ps-top都具有与相同的视图输出,会定时发送到stdout。默认视图为table_io_latency。可以使用与vmstat相同的方法来调整收集间隔和收集数据的次数。第一个参数是delay(默认为1秒),第二个参数是要进行的迭代次数,如果未提供,则为一直运行。该模式旨在用于使用stdout作为输出媒体来监视ps-top并从中收集数据。
相关的命令行选项包括:
- --count=
限制迭代次数(默认值:永久运行) - --interval=
设置默认轮询间隔(以秒为单位) - --limit=
限制输出的行数(不包括标题) - --stdout 将输出发送到stdout(不是屏幕)
- --view=
确定要在ps-时查看的视图顶部开始(默认:table_io_latency)可能的值:table_io_latency,table_io_ops,file_io_latency,table_lock_latency, user_latency,mutex_latency和stages_latency。 - --totals 仅显示总计行,而不显示明细。
总结
本文我们介绍了一个golang撰写的命令行工具,用来以top形式方式很方便的获取Myql的一些运行状态,适合广大运维和DBA作为一个称手的工具,大家也可以作为golang语言学习范例项目。