Datenbankgröße mit SQL ermitteln

Jeder der eine oder mehrere Datenbanken betreibt, sollte neben der Performance auch die belegten und benötigten Ressourcen im Blick haben. Mit einer einfachen Abfrage kann man sich direkt vom MySQL Server die Speicherbelegung anzeigen lassen.

SELECT 
  table_schema AS 'Datenbankname',
  Round( SUM( data_length ) / 1024 / 1024, 3 ) AS 'Daten (MB)',
  Round( SUM( index_length ) / 1024 / 1024, 3 ) AS 'Index (MB)',
  Round( Sum( data_length + index_length ) / 1024 / 1024, 3 ) AS 'Gesamt (MB)',
  Round( Sum( data_free ) / 1024 / 1024, 3 ) AS 'Freier Speicher (MB)'
FROM information_schema.tables
GROUP BY table_schema ; 

Das Resultat sieht dann in etwa so aus …

+--------------------+------------+------------+-------------+----------------------+
| Datenbankname      | Daten (MB) | Index (MB) | Gesamt (MB) | Freier Speicher (MB) |
+--------------------+------------+------------+-------------+----------------------+
| shopdb             |   2457.729 |   1218.272 |    3676.002 |                4.000 |
| testdb             |      0.460 |      0.324 |       0.784 |                0.000 |
| information_schema |      0.000 |      0.008 |       0.008 |                0.000 |
| logging            |   1239.394 |    702.597 |    1941.991 |                0.000 |
| mysql              |      0.492 |      0.087 |       0.579 |                0.000 |
+--------------------+------------+------------+-------------+----------------------+
5 rows in set (0.00 sec)

(Die Abfrage stammt von http://www.artfulsoftware.com/infotree/queries.php und wurde von mir leicht angepasst.)

MySQL System Error Codes nachschlagen

Die Fehlermeldungen von MySQL enthalten oft einen Fehlercode am Ende der Meldung. z.B.

ERROR 1 (HY000): Can't create/write to file '/tmp/xxxx' (Errcode: 13)

Es handelt sich hier um den Fehlercode des Systems (OS). Diesen kann man sich z.B. mit dem Befehl perror erklären lassen. Die Verwendung ist denkbar einfach – einfach den oder die gesuchten Fehlercodes als Parameter übergeben.

$ perror 13
OS error code 13: Permission denied

Der oben aufgeführte Fehler liegt also an mangelnden Schreibrechten auf das Verzeichnis /tmp/xxxx.

Kommt der Fehler von einem MySQL Cluster so muss man zusätzlich den Parameter –ndb anhängen.

Debugging von PHP Scripten

Jeder der schon einmal mit etwas komplexeren PHP Scripten zu tun hatte, kennt das Problem: Welchen Wert hat die Variable an dieser Stelle des Scripts oder mit welche Variablen stehen denn überhaupt einer Funktion zur Verfügung?

Nun hat man verschiedene Möglichkeiten der Sache Herr zu werden. Man kann nun einfach hergehen und an der gewünschten Stelle ein:
[php]// beliebiger Code

echo $varibale;

// weiterer Code[/php]
Nur merkt hat man hier schnell einige Extra Zeilen Code um alle nötigen Variablen abzudecken.

Eine Variante die ich gern einsetze ist folgende:
[php]function debug() {
print("<pre>");
print_r($GLOBALS);
print("</pre>");
}[/php]
Diese Funktion einfach in eine „Basis Klasse“ oder Funktionsbibliothek geschrieben und gut ist! Im Anschluß wird diese Funktion einfach an der gewünschten Stelle aufgerufen und man erhält alle Informationen über Variablen, Objekte und Arrays an dieser Position.

Ich hoffe dieser Tipp kann auch anderen weiterhelfen.