Wie kann ich bestimmen, Wann eine InnoDB-Tabelle das Letzte mal geändert wurde?
Habe ich Erfolg hatte in der Vergangenheit die Speicherung der (stark) verarbeiteten Ergebnisse einer Datenbankabfrage in memcached, mit der letzten update-Zeit des zugrunde liegenden Tabellen(N) als Teil des cache-Schlüssels. Für MyISAM-Tabellen, zuletzt geändert Zeit zur Verfügung steht, in SHOW TABLE STATUS
. Leider ist das in der Regel NULL für InnoDB-Tabellen.
In MySQL 4.1, die ctime für eine InnoDB in seiner SHOW TABLE STATUS
Linie war in der Regel seine tatsächliche Letzte update-Zeit, aber das scheint nicht wahr zu sein für MySQL 5.1.
Es ist ein DATETIME-Feld in der Tabelle, aber es nur zeigt, wenn eine Zeile geändert wurde - es nicht die Löschung der Zeit von einer Zeile, die nicht mehr da ist! Also, ich kann wirklich nicht verwenden MAX(update_time)
.
Hier ist der wirklich interessante Teil. Ich habe eine Anzahl der Replikate, die ich tun, liest aus. Kann ich herausfinden, den Zustand der Tabelle, die sich nicht auf, wenn die änderungen tatsächlich angewendet wurden?
Mein Fazit nach der Arbeit an diesem für eine Weile ist, dass es nicht möglich sein, diese Informationen zu bekommen, wie Billig, wie ich möchte. Ich bin wahrscheinlich die Daten im cache, bis zu der Zeit, dass ich erwarte, dass die Tabelle zu ändern (es wird einmal täglich aktualisiert), und lassen Sie die Abfrage-cache helfen, wo es kann.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist MySQL-Fehler 14374, Fünfzehn tausend vier hundert acht und dreißig, und die zugrunde liegenden InnoDB Fehler 2681.
Habe ich zwei Vorschläge (andere als das patchen von MySQL).
innodb_file_per_table
), stat die zugrunde liegende Datei. Sie schreiben, könnte eine MySQL-Funktion/Erweiterung, dies zu tun. Dies kann lag etwas, aufgrund von Datenbank-caching.Würd ich persönlich schlage vor, die zweite, als seine viel mehr tragbar und hängt nicht von Implementierungsdetails (wie
innodb_file_per_table
).Wenn Sie nicht wirklich interessiert, wenn die Datenbank geändert wurde, sondern wollen wissen, ob oder nicht eine Datenbank-Tabelle verändert wurde, die Sie in Aussehen sollte MySQL PRÜFSUMME TABELLE
Hoffe, das hilft.
Ich würde vorschlagen, das hinzufügen einer weiteren Spalte der Tabelle und lassen MySQL nachzuverfolgen, Wann die Tabelle zuletzt geändert wurde, so etwas wie dieses: