Was bedeutet "Overhead" in MySQL, was ist daran schlecht und wie kann es behoben werden?

157

einfache Frage, aber es nervt mich jetzt schon eine Weile ....

Was ist "Overhead" in MySQL und sollte ich mir Sorgen machen?

Behebt das Klicken auf "Tabelle optimieren" das Problem?

johnnietheblack
quelle

Antworten:

147

Es scheint, dass der Overhead temporärer Speicherplatz ist, über den die Datenbank einige der Abfragen ausgeführt hat. Sie sollten sich also nur Sorgen machen, wenn dieser wirklich hoch wird.

Sie können "Tabelle optimieren" mit der Defragmentierung Ihrer Festplatte vergleichen.

Ich zitiere:

Jede Datenbank muss im Laufe der Zeit gewartet werden, um ein optimales Leistungsniveau zu erreichen. Das Löschen gelöschter Zeilen, das erneute Sequenzieren, Komprimieren, Verwalten von Indexpfaden, das Defragmentieren usw. wird in MySQL als OPTIMIERUNG und in anderen Datenbanken als andere Begriffe bezeichnet. IBM DB2 / 400 nennt es beispielsweise REORGANIZE PHYSICAL FILE MEMBER.

Es ist so, als würde man das Öl in seinem Auto wechseln oder eine Einstellung vornehmen. Sie denken vielleicht, dass Sie das wirklich nicht müssen, aber wenn Sie dies tun, läuft Ihr Auto viel besser, Sie erhalten eine bessere Kilometerleistung usw. Ein Auto, das viele Kilometer erreicht, muss häufiger eingestellt werden. Eine Datenbank, die stark genutzt wird, erfordert dasselbe. Wenn Sie viele UPDATE- und / oder DELETE-Operationen ausführen und insbesondere wenn Ihre Tabellen Spalten variabler Länge (VARCHAR, TEXT usw.) enthalten, müssen Sie stets auf dem Laufenden bleiben.

Jaspis
quelle
1
@Jasper Sind die Tabellen während der Dauer der Optimierung vollständig gesperrt (können nicht lesen / schreiben)?
Pacerier
4
Woher stammt dieses Zitat? Ich finde viele Ergebnisse in Google.
Ian Hunter
Woher wissen wir, was den Overhead immer wieder verursacht?
Mahen3d
Vielen Dank für das perfekte und einfache Beispiel, unabhängig von den verdammten Fachbegriffen.
Shyammakwana.me
1
Was gilt als "Wirklich hoch"?
TV-C-15
87

Wenn Sie über die Sache , die reden phpMyAdminAnrufe overhead, dann ist es tatsächliche Größe einer Tabelle Daten - Datei in Bezug auf die idealen Größe der gleichen Daten - Datei (als ob , wenn nur aus einer Sicherung gestellt).

MySQLKomprimiert aus Leistungsgründen die Datendateien nicht, nachdem Zeilen gelöscht oder aktualisiert wurden.

Dies overheadist schlecht für den Tabellenscan. Wenn Ihre Abfrage alle Tabellenwerte durchlaufen muss, muss mehr Leerraum angezeigt werden.

Sie können das overheaddurch Ausführen OPTIMIZE TABLEentfernen, das Ihre Tabelle und Indizes komprimiert.

Quassnoi
quelle
7
In der Größe der MySQL-Dokumentation steht "OPTIMIZE TABLE sollte verwendet werden, wenn Sie einen großen Teil einer Tabelle gelöscht haben oder wenn Sie viele Änderungen an einer Tabelle mit Zeilen variabler Länge vorgenommen haben". Dies ist mein Fall, danke :)
boclodoa
8

Overhead ist Data_free einer Tabelle, dh die Anzahl der zugewiesenen, aber nicht verwendeten Bytes. Wir können es mit dem SQL-Befehl SHOW TABLE STATUS finden . Dies ist der freie Speicherplatz in der zugewiesenen Größe für Ihren Tisch.

Shankar Prakash G.
quelle
1

Tabelle optimieren kann sehr problematisch sein. Zum Beispiel, wenn die Tabelle auf einer Site häufig verwendet wird.

http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

Nach dem Löschen eines großen Teils einer MyISAM- oder ARCHIVE-Tabelle oder nach vielen Änderungen an einer MyISAM- oder ARCHIVE-Tabelle mit Zeilen variabler Länge (Tabellen mit VARCHAR-, VARBINARY-, BLOB- oder TEXT-Spalten). Gelöschte Zeilen werden in einer verknüpften Liste verwaltet, und nachfolgende INSERT-Vorgänge verwenden alte Zeilenpositionen wieder. <

Ich glaube, ich habe dieses Verhalten bestätigt. Und es wäre sicherlich sehr nützlich.

Thomas Lindegaard Jensen
quelle