mardi 25 février 2014

Script shell pour afficher le pourcentage de fullscan MySQL

Ce script a pour but de donner une idée de la santé de MySQL (indexation principalement).
Plus le pourcentage est important, plus les requêtes font des lectures sur le disque (pas bien !), on considère qu'il ne faut pas dépasser 20%

Bien sûr les données ne sont valable que lorsqu'il y a un peu de charge sur MYSQL

#! /bin/bash
# superformance.blogspot.com

USER=root
PASS=pass
DB=db

TEMP_FILE=/tmp/$$.tmp
trap "rm $TEMP_FILE; exit" SIGHUP SIGINT SIGTERM
SOCK=/var/lib/mysqlmysql.sock
L_Handler_read_rnd_next=0
L_Handler_read_rnd=0
L_Handler_read_first=0
L_Handler_read_next=0
L_Handler_read_key=0
L_Handler_read_prev=0


while true; do
    # fullscan percentage
    mysql -u ${USER} -p${PASS} --connect-timeout=5 -NBe \
    "show global status like 'handler%'" > /tmp/$$.tmp

    V_Handler_read_rnd_next=$(grep -E -w \
        "Handler_read_rnd_next" /tmp/$$.tmp | awk '{print $2}')
    V_Handler_read_rnd=$(grep -E -w \
        "Handler_read_rnd" /tmp/$$.tmp | awk '{print $2}')
    V_Handler_read_first=$(grep -E -w \
        "Handler_read_first" /tmp/$$.tmp | awk '{print $2}')
    V_Handler_read_next=$(grep -E -w \
        "Handler_read_next" /tmp/$$.tmp | awk '{print $2}')
    V_Handler_read_key=$(grep -E -w \
        "Handler_read_key" /tmp/$$.tmp | awk '{print $2}')
    V_Handler_read_prev=$(grep -E -w \
        "Handler_read_prev" /tmp/$$.tmp | awk '{print $2}')

    Handler_read_rnd_next=$(echo "$V_Handler_read_rnd_next - \
        $L_Handler_read_rnd_next" | bc)
    Handler_read_rnd=$(echo "$V_Handler_read_rnd - \
        $L_Handler_read_rnd" | bc)
    Handler_read_first=$(echo "$V_Handler_read_first - \
        $L_Handler_read_first" | bc)
    Handler_read_next=$(echo "$V_Handler_read_next - \
        $L_Handler_read_next" | bc)
    Handler_read_key=$(echo "$V_Handler_read_key - \
        $L_Handler_read_key" | bc)
    Handler_read_prev=$(echo "$V_Handler_read_prev - \
        $L_Handler_read_prev" | bc)

    div=$( echo "$Handler_read_rnd_next + $Handler_read_rnd + \
        $Handler_read_first + $Handler_read_next + \
        $Handler_read_key + $Handler_read_prev" | bc)

    if [ $div == 0 ]; then
       echo "0%"
    else
       echo $( echo "scale=2;(($Handler_read_rnd_next + \
        $Handler_read_rnd) / $div)* 100" | bc -l )"%"
    fi

    L_Handler_read_rnd_next=$V_Handler_read_rnd_next
    L_Handler_read_rnd=$V_Handler_read_rnd
    L_Handler_read_first=$V_Handler_read_first
    L_Handler_read_next=$V_Handler_read_next
    L_Handler_read_key=$V_Handler_read_key
    L_Handler_read_prev=$V_Handler_read_prev

    unset V_Handler_read_rnd_next
    unset V_Handler_read_rnd
    unset V_Handler_read_first
    unset V_Handler_read_next
    unset V_Handler_read_key
    unset V_Handler_read_prev

    sleep 5
done