作者:yaunye | 来源:互联网 | 2024-11-24 13:13
mysqladmin是MySQL的一个重要客户端工具,除了用于常规的数据库管理操作如关闭数据库外,还能够帮助我们深入了解MySQL的运行状态。本文将重点介绍如何使用mysqladmin extended-status(简称ext)来监控MySQL的性能指标。
通过执行mysqladmin extended-status命令,用户可以获得类似于show global status的输出,显示MySQL的所有性能指标。由于大多数指标为累计值,为了获取当前的实时状态,可以通过计算两次查询之间的差异值来实现。mysqladmin extended-status命令提供了一个方便的选项-r(--relative),配合-i(--sleep)设置刷新频率,可以方便地查看实时变化的数据。例如,下面的命令每秒更新一次MySQL的性能指标:
mysqladmin -uroot -r -i 1 -pxxx extended-status
此外,结合grep命令,我们可以筛选出特定的性能指标,例如查询次数、插入次数等:
mysqladmin -uroot -r -i 1 -pxxx extended-status | grep 'Questions|Queries|Innodb_rows|Com_select|Com_insert|Com_update|Com_delete'
为了使输出更加直观,还可以使用awk命令添加时间戳,并进一步美化输出格式。例如,下面的命令不仅显示了时间,还对关键性能指标进行了格式化输出:
mysqladmin -uroot -p -h127.0.0.1 -P3306 -r -i 1 ext | awk -F'|' '{if($2 ~ /Variable_name/){print "<-----" strftime("%H:%M:%S") "----->";} if($2 ~ /Questions|Queries|Innodb_rows|Com_select|Com_insert|Com_update|Com_delete|Innodb_buffer_pool_read_requests/){print $2 $3;}}'
对于更复杂的输出需求,可以编写更为复杂的awk脚本,以获得更加详细和友好的输出结果。下面是一个示例脚本,它不仅显示了基本的时间和QPS(每秒查询数),还包括了各种SQL操作的统计以及InnoDB行操作和缓冲池读取的详细情况:
mysqladmin -P3306 -uroot -p -h127.0.0.1 -r -i 1 ext | 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);}}'
以上脚本的输出示例:
---|---|--- MySQL Command Status ---|--- Innodb row operation ---|--- Buffer Pool Read ---
--Time--|--QPS--|select insert update delete|read inserted updated deleted|logical physical
10:37:13 | 2231| 274 214 70 0| 4811 160 71 0| 4146 0
10:37:14 | 2972| 403 256 84 23| 2509 173 85 23| 4545 0
10:37:15 | 2334| 282 232 66 1| 1266 154 67 1| 3543 0
10:37:15 | 2241| 271 217 66 0| 1160 129 66 0| 2935 0
10:37:17 | 2497| 299 224 97 0| 1141 149 95 0| 3831 0
10:37:18 | 2871| 352 304 74 23| 8202 226 73 23| 6167 0
10:37:19 | 2441| 284 233 82 0| 1099 121 78 0| 3292 0
10:37:20 | 2342| 279 242 61 0| 1083 224 61 0| 3366 0