MySQL中的mysqladmin有什么用

66次阅读
没有评论

共计 4558 个字符,预计需要花费 12 分钟才能阅读完成。

本篇内容介绍了“MySQL 中的 mysqladmin 有什么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

  如果对 MySQL 的性能测试工具,比如 sysbench 做压力测试就可以看到我们关注的性能指标 QPS,TPS, 压测过程中的性能变化一目了然。

  而在平时的工作中,如果也想看这个指标的值,使用 sysbench 就不合适了。所以我们得先了解下 TPS,QPS 是怎么计算的,没有 sysbench 这些工具,我们能不能算出来。

  首先性能指标值我们是可以算出来的,我们通过 show status 能够得到一个实时变化的状态,里面的数值基本上都是累计值,我们可以通过设定频度来换算,由此得到一个近乎实时的状态数据。

 
这个时候 mysqladmin 就上场了,不光能够很方便的查看参数情况,比如 mysqladmin var, 很方便的查看参数等。mysqladmin
shutdown 来停库,mysqladmin flush-hosts,mysqladmin
flush-privileges 来刷新权限,或者使用 mysqladmin pro 来查看线程情况。而如果需要查看 QPS, 就需要使用 show
status 的结果了。

比如我前后间隔一秒来得到一个状态值。

show status like queries
+—————+———+
| Variable_name | Value  |
+—————+———+
| Queries  | 9978587 |
+—————+———+ 间隔 1 秒查看
show status like queries
+—————+———+
| Variable_name | Value  |
+—————+———+
| Queries  | 9978588 |
+—————+———+ 如果要计算出这个值,我们可以使用 mysqladmin extended-status 来得到,不过这是个累计值,如果想得到一个差值,还是有选项 -r - i 来辅助,比如循环调用 -r, 间隔 1 秒 -i,

  比如我们看一个指标 innodb_pages_read 就可以使用如下的方式来查看。

# mysqladmin -r -i 1  extended-status|grep Handler_read_rnd_next
| Handler_read_rnd_next  | 6814  
| Handler_read_rnd_next  | 399   
| Handler_read_rnd_next  | 399   
| Handler_read_rnd_next  | 399

  那么查看 TPS 呢,其实公式就很简单了,如下:

TPS = (Com_commit + Com_rollback) / Seconds

  如果把这些指标值都整合起来,查看就会方便许多了,比如下面的方式,可以查看多个指标值。

mysqladmin  -r -i 1  extended-status \
|grep Questions\|Queries\|Innodb_rows\|Com_select \|Com_insert \|Com_update \|Com_delete

但是效果似乎还是可以更近一步,我看了这方面的大牛的脚本,还是很有意思的。

mysqladmin  -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;\
}

运行的结果如下:

# sh aa.sh
  ————-  23:07:24  ————-
 Com_delete  6   
 Com_insert  4953706   
 Com_select  2672   
 Com_update  4   
 Innodb_buffer_pool_read_requests  67500881   
 Innodb_rows_deleted  10   
 Innodb_rows_inserted  8464857   
 Innodb_rows_read  46945213   
 Innodb_rows_updated  3   
 Queries  9978553   
 Questions  2454058   
  ————-  23:07:25  ————-
 Com_delete  0   
 Com_insert  0   
 Com_select  0   
 Com_update  0   
 Innodb_buffer_pool_read_requests  0   
 Innodb_rows_deleted  0   
 Innodb_rows_inserted  0   
 Innodb_rows_read  0   
 Innodb_rows_updated  0   
 Queries  1   
 Questions  1

再来放两个大,一个是使用 awk 来深度定制,这个效果牛了。

mysqladmin  -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);\
}}

脚本很长,结果很炫。

# sh aa.sh
———-|———|— MySQL Command Status –|—– Innodb row operation —-|– Buffer Pool Read —
—Time—|—QPS—|select insert update delete|  read inserted updated deleted|  logical  physical
 23:10:47 |  193|  64  1  2  0| 12296  1  2  0|  1755  0
 23:10:48 |  129|  44  0  2  0| 11184  0  2  0|  1582  0
 23:10:49 |  89|  33  0  1  0| 11898  0  1  0|  1667  0

还有简化版

mysqladmin  extended-status -i1|awk BEGIN{local_switch=0;print QPS 
Commit Rollback  TPS  Threads_con Threads_run
\n——————————————————- }
  $2 ~ /Queries$/  {q=$4-lq;lq=$4;}
  $2 ~ /Com_commit$/  {c=$4-lc;lc=$4;}
  $2 ~ /Com_rollback$/  {r=$4-lr;lr=$4;}
  $2 ~ /Threads_connected$/  {tc=$4;}
  $2 ~ /Threads_running$/  {tr=$4;
  if(local_switch==0)
  {local_switch=1; count=0}
  else {
  if(count 10)
 
{count=0;print ——————————————————-
\nQPS  Commit Rollback  TPS  Threads_con Threads_run
\n——————————————————- }
  else{
  count+=1;
  printf %-6d %-8d %-7d %-8d %-10d %d \n , q,c,r,c+r,tc,tr;
  }
  }
}

# sh aa.sh
QPS  Commit Rollback  TPS  Threads_con Threads_run
——————————————————-
108  0  3  3  46  2
173  0  1  1  47  2
69  0  0  0  47  2

“MySQL 中的 mysqladmin 有什么用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-01发表,共计4558字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)