熟悉linux的同学都喜欢top命令,它可以让我们轻松快速的一键获取系统运行状态。除了系统状态,很多人可能还想一键获取数据库的运行状态。很多人会使用showprofile或者performance_schema数据库来获取各种信息。但它既方便又直接。本文介绍一个命令行工具ps-top,它可以从MySQL5.6+的performance_schema数据库中收集信息,并利用这些信息实时显示服务器负载情况。数据显示为表格或文件名,选择、插入、更新或删除活动时实时显示信息;视图显示用户活动,显示同一用户名连接的不同主机的数量和这些用户的活动视图;关于互斥,锁表统计视图和sql阶段时序。安装和一般的golang工具一样。ps-top的安装非常简单。您可以直接使用goget下载、编译和安装它:goget-ugithub.com/sjmudd/ps-top/cmd/ps-top或goget-ugithub。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-environmentps-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或者没有足够的权限来更改这些表,这些视图可能是空的。如果表在启动时成功更新,此setup_instruments配置将在停止ps-top之前将其恢复为原始设置。视图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:按互斥延迟显示排序。SQLStages_latency:显示在不同SQL查询阶段按时间排序。您可以更改轮询间隔并在模式之间切换。快捷键在ps-top模式下,以下键允许ps-top在不同模式下浏览或更改其行为。h?:显示帮助。将轮询间隔减少1秒(最少1秒)+将轮询间隔增加1秒显示从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-top启动时要查看的视图(默认值: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语言学习项目的范例。
