傲腾内存 可以用ghost系统_如何实时监控mysql内存命中率?用脚本就可以了!

概述

偷个懒,分享一个mysql实时监控内存命中率的脚本,先看下其内存结构(假设使用innodb引擎)

498282bcac861d0482247996de746ebd.png

计算公式

查询缓存命中率 = (Qcache_hits - Qcache_inserts) / Qcache_hits * 100%

# mysql -e "show status like 'Qcache_%s'" | grep -E 'hits|inserts'

索引命中率 = (Key_read_requests - Key_reads) / Key_read_requests * 100%

# mysql -e "show status like 'Key_read%s'"

缓冲池命中率 = (Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests * 100%

# mysql -e "show status like 'Innodb_buffer_pool_read%s'"
9d27361e660e948f47b6666c0f586f90.png

监控脚本

#!/bin/sh# Get the key value of input arguments format like '--args=value'.function get_key_value(){ echo "$1" | sed 's/^-[cif]=[0-9]*$//' }function usage(){cat << EOFUsage: $0 [options] -? Show this help message. -i interval The delay between updates in seconds. Default to 1. -c count the number of updates. Default to 1.EOF}function parse_options(){while [ $# -gt 0 ]; do case "$1" in -c) shift COUNT="$1" ;; -i) shift INTERVAL="$1" RETVAL=$? ;; *) usage exit 1 ;; esac  shift done}INTERVAL=1COUNT=1LOOP=0PAGESIZE=20 # 每页显示的行数PRINTHEAD=0 # 打印页眉辅助变量parse_options "$@"[ $COUNT -eq 0 ] && LOOP=1## COUNT为0时无限循环(LOOP=1)# COUNT大于0时循环COUNT次(LOOP=0)#while [ $LOOP -eq 1 -o $COUNT -gt 0 ]; do # for query cache VAR=$(mysql -e "show status like 'Qcache_%s'" | awk '/hits/{print $2} /inserts/{print $2}') TOTAL=$(echo $VAR | awk '{print $1}') MISS=$(echo $VAR | awk '{print $2}') if [ $TOTAL -eq 0 ]; then RESULT1=0 else RESULT1=$(echo "scale=2; 100 * ($TOTAL - $MISS) / $TOTAL" | bc) fi  # for index cache VAR=$(mysql -e "show status like 'Key_read%s'" | awk '/Key_reads/{print $2} /Key_read_requests/{print $2}') TOTAL=$(echo $VAR | awk '{print $1}') MISS=$(echo $VAR | awk '{print $2}') if [ $TOTAL -eq 0 ]; then RESULT2=0 else RESULT2=$(echo "scale=2; 100 * ($TOTAL - $MISS) / $TOTAL" | bc) fi  # for InnoDB buffer pool VAR=$(mysql -e "show status like 'Innodb_buffer_pool_read%s'" | awk '/Innodb_buffer_pool_reads/{print $2} /Innodb_buffer_pool_read_requests/{print $2}') TOTAL=$(echo $VAR | awk '{print $1}') MISS=$(echo $VAR | awk '{print $2}') if [ $TOTAL -eq 0 ]; then RESULT3=0 else RESULT3=$(echo "scale=2; 100 * ($TOTAL - $MISS) / $TOTAL" | bc) fi  if [ $PRINTHEAD -eq 0 ]; then printf "+-------|-------|-------+" printf "|%6s|%6s|%6s |" "qc" "ic" "ibp" printf "+-------|-------|-------+" fi printf "|%6.2f|%6.2f|%6.2f |" $RESULT1 $RESULT2 $RESULT3 COUNT=$((COUNT-1)) PRINTHEAD=$((($PRINTHEAD + 1) % $PAGESIZE)) sleep $INTERVALdone

输出:

50228547bfe3b6e34204b42f5ac8eb57.png

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下!

e7a2234b48ad80b50fa3664f9791fccf.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值