暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用mysqladmin记录MySQL每秒性能输出

数据库驾驶舱 2024-06-04
22

在 MySQL 的日常运维和性能监控中,了解数据库每秒的性能输出至关重要。这不仅有助于我们了解数据库的运行状态,还能帮助我们及时发现和解决潜在问题。本文将介绍如何使用 mysqladmin
工具记录 MySQL 每秒的性能输出,并通过一个脚本实现详细的性能监控。

背景

MySQL 提供了多种工具用于数据库管理和监控,其中 mysqladmin
是一个非常强大的命令行工具。我们可以使用它来执行各种管理任务,如监控数据库状态、重置数据库、刷新表等。在性能监控方面,mysqladmin
提供了详细的数据库状态信息,可以帮助我们了解数据库的实时性能表现。

为了实现每秒性能输出的记录,我们将结合使用 mysqladmin
awk
,编写一个自动化脚本来实时显示数据库的查询情况和 InnoDB 行操作等重要指标。

脚本实现

以下是一个示例脚本,该脚本使用 mysqladmin
每秒记录 MySQL 性能输出,并使用 awk
对结果进行格式化处理,以便更直观地查看关键指标。

# 每秒查询1次,实时输出
mysqladmin -uzabbix -pzabbixpwd extended-status -r -i 1 2>/dev/null|awk -F"|" "BEGIN{ count=0 ;}"'{ if($2 ~ /Variable_name/ && ++count == 1){\
    print "----------|---------|--- MySQL Command Status --|----- Innodb row operation ----|-- Buffer Pool Read --";\
    print "---Time---|---QPS---|select insert update delete|  read inserted updated deleted|   logical    physical";\
}\
else if ($2 ~ /Queries/){queries=$3;}\
else if ($2 ~ /Com_select /){com_select=$3;}\
else if ($2 ~ /Com_insert /){com_insert=$3;}\
else if ($2 ~ /Com_update /){com_update=$3;}\
else if ($2 ~ /Com_delete /){com_delete=$3;}\
else if ($2 ~ /Innodb_rows_read/){innodb_rows_read=$3;}\
else if ($2 ~ /Innodb_rows_deleted/){innodb_rows_deleted=$3;}\
else if ($2 ~ /Innodb_rows_inserted/){innodb_rows_inserted=$3;}\
else if ($2 ~ /Innodb_rows_updated/){innodb_rows_updated=$3;}\
else if ($2 ~ /Innodb_buffer_pool_read_requests/){innodb_lor=$3;}\
else if ($2 ~ /Innodb_buffer_pool_reads/){innodb_phr=$3;}\
else if ($2 ~ /Uptime / && count >= 2){\
  printf(" %s |%9d",strftime("%H:%M:%S"),queries);\
  printf("|%6d %6d %6d %6d",com_select,com_insert,com_update,com_delete);\
  printf("|%6d %8d %7d %7d",innodb_rows_read,innodb_rows_inserted,innodb_rows_updated,innodb_rows_deleted);\
  printf("|%10d %11d\n",innodb_lor,innodb_phr);\
}}'


复制
  • extended-status
    : 显示 MySQL 服务器的扩展状态信息。

  • -r
    --relative
    ): 显示结果与上次结果的差异。使用这个选项,mysqladmin 会在每次刷新时显示自上次刷新以来状态变量的变化值,而不是显示自服务器启动以来的累积值。

  • -i 1
    --sleep=1
    ): 每隔指定的时间(这里是 1 秒)自动刷新显示的信息。

脚本输出

执行上述脚本后,输出结果类似于以下格式:

----------|---------|--- MySQL Command Status --|----- Innodb row operation ----|-- Buffer Pool Read --
---Time---|---QPS---|select insert update delete|  read inserted updated deleted|   logical    physical
 20:45:54 |        1|     0      0      0      0|     0        0       0       0|         0           0
 20:45:55 |        1|     0      0      0      0|     0        0       0       0|         0           0
 20:45:56 |        1|     0      0      0      0|     0        0       0       0|         0           0
 20:45:57 |        1|     0      0      0      0|     0        0       0       0|         0           0
 20:45:58 |        1|     0      0      0      0|     0        0       0       0|         0           0
 20:45:58 |        1|     0      0      0      0|     0        0       0       0|         0           0
 20:45:59 |        1|     0      0      0      0|     0        0       0       0|         0           0
 20:46:01 |        1|     0      0      0      0|     0        0       0       0|         0           0
 20:46:02 |        1|     0      0      0      0|     0        0       0       0|         0           0

复制

总结

通过使用 mysqladmin
awk
,我们可以轻松地实现 MySQL 数据库每秒性能输出的记录和监控。这种方法不仅简单高效,而且可以帮助数据库管理员及时了解数据库的运行状态,从而更好地进行性能优化和故障排查。

「欢迎关注我们的公众号,获取更多技术分享与经验交流。」


文章转载自数据库驾驶舱,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论