Heute halten wir uns recht einfach und sprechen über die Thematik der Speicherplatzbelegung von InnoDB Tabellen. Eine schlichte Kontrolle der reellen Nutzung ist hier einerseits wegen einem globalen Speicher für alle Tabellen aller DBs nicht möglich. Und wenn man die files_per_table Option aktiv hat, können auch noch reservierte, ‘freie’ Speicherbereiche in den Daten z.B. ein Summierung des Verzeichnis beeinflussen.
Daher müsste man von Tools wie z.B. phpMyAdmin gebraucht machen, um dies einmal kontrollieren zu können. Aber mit Zugriff auf das MySQL kann man auch über die Statusausgabe der Tabellen den benötigten Platz einsehen und errechnen. In der Übersicht der Informationen sind hier die Felder Data_length und Index_length entscheident.
Wenn man nun als Admin einmal schnell die Belegung über die Konsole abfragen möchten, könnte man sich mit folgenden Skript dafür helfen. Es wird mit der jeweligen Datenbank als Parameter aufgerufen und setzt einen Zugang zum MySQL mittels .my.cnf voraus:
#!/bin/bash DATABASE=$1 TMPFILE="/tmp/$DATABASE-size" mysql -e "show table status from $DATABASE;" > $TMPFILE NAME=`head -n 1 $TMPFILE | sed -r 's/\t/\n/g' | grep -n Name | cut -d':' -f 1` DATA=`head -n 1 $TMPFILE | sed -r 's/\t/\n/g' | grep -n Data_length | cut -d':' -f 1` INDEX=`head -n 1 $TMPFILE | sed -r 's/\t/\n/g' | grep -n Index_length | cut -d':' -f 1` echo -e "Name\t\tData_length in MB\t\tIndex_length in MB" tail -n+2 $TMPFILE | awk '{print $'$NAME'"\t\t"$'$DATA'/1024/1024"\t\t"$'$INDEX'/1024/1024}' echo echo echo -en "Sum in MB\t: " for LINE in `tail -n+2 $TMPFILE | awk '{print $'$DATA'"\n"$'$INDEX'}'`; do COUNT=$[$COUNT+$LINE] done echo $(($COUNT/1024/1024))









0 Responses to “Korrekte Speicherbelegung von InnoDB Tabellen”