Ich kann mich bei phpmyadmin anmelden und Datenbanken sehr schnell sehen. Sobald ich auf einen von ihnen klicke und versuche, die Tabellenliste zu sehen, ist es sehr langsam. Gibt es etwas, das ich vermisse? Ich hatte diese Situation nicht vor dem Update von Ubuntu 10.04 auf Ubuntu 12.04.
Dies liegt daran, dass Sie innoDB -Tabellen mit vielen Zeilen haben. InnoDB speichert nicht die Anzahl der Zeilen in einer Tabelle, sondern MyISAM. Daher ruft PHPMyAdmin für jede InnoDB-Tabelle SELECT count(*) FROM
query auf, was sehr langsam ist, wenn die Anzahl der Zeilen sehr hoch ist. Um dies zu beheben, sollten Sie config.inc.php
file bearbeiten und $cfg['MaxExactCount']
setzen. Dadurch wird count(*)
sql für Tabellen mit weniger MaxExactCount
rows aufgerufen.
Bedeutung Formular phpmyadmin Handbuch
Bei InnoDB-Tabellen wird bestimmt, wie große Tabellen phpMyAdmin die genaue Zeilenanzahl mithilfe von SELECT COUNT ermitteln soll. Wenn die von SHOW TABLE STATUS zurückgegebene ungefähre Zeilenanzahl kleiner als dieser Wert ist, wird SELECT COUNT verwendet, andernfalls wird die ungefähre Anzahl verwendet.
Ich habe ursprünglich @ "Andrew Kondratev" verwendet, ohne das bedingte "if view" -Stück, und dann habe ich mir den Rest dieser Methode genauer angeschaut und festgestellt, dass es fast genau der Code ist, der laufen würde, wenn $force_exact
wäre falsch. Ich habe einen neuen, einfacheren Hack, der nicht so stark bricht und auch für Tabellen funktioniert.
Genau wie bei Andrews Hack:
rpm -ql phpMyAdmin | grep
Table.class.php
(oder Ihr lokales Betriebssystem). ./libraries/Table.class.php
(in meinem Fall /usr/share/phpMyAdmin/libraries/Table.class.php
static public function countRecords
(Zeile 563 in meinem Fall) Fügen Sie am Anfang dieser Funktion Folgendes ein (nach {
):
In meinem Fall haben die "defaults" bereits folgendes:
%Vor%Sie können es jedoch immer zu Ihrer config.inc.php hinzufügen:
%Vor%Ich glaube, das Problem ist in tbl_info.inc.php , wo $ force_exact beim Anzeigen von Tabellen auf true gesetzt wird. IMO, die einzige Zeit, die diese Zahl "genau" sein müsste, ist, wenn Sie versuchen, die letzte Seite zu sehen, und selbst dann wahrscheinlich nicht.
Wenn Sie mehrere Views mit Chargen (& gt; 10 ^ 5) von Datensätzen haben, funktioniert es furchtbar langsam, selbst wenn MaxExactCountViews und MaxExactCount beide auf 100 gesetzt sind.
Finde
'statische öffentliche Funktion countRecords'
in
libraries \ Table.class.php
, setzen Sie folgenden Code am Anfang dieser Methode:
%Vor% Set $GLOBALS['cfg']['MaxExactCountViews']
Wert in der Konfiguration danach. phpMyAdmin zeigt diesen Wert nun immer für alle VIEWS an. Es wird auch viel schneller arbeiten: -)
Ich habe Ihr Problem gelöst, indem Sie die Ausgabe von SHOW TABLE STATUS FROM <DATABASE>
in eine Tabelle mit dem Namen f.i. showtablecache
zwischengespeichert haben, etwa alle 2 Minuten. Sie können dies mit einem Cron-Skript für Ihre Datenbank (en) tun.
Sie könnten dann die Datei /usr/share/phpmyadmin/libraries/database_interface.lib.php
bearbeiten und die langsame SHOW TABLE STATUS FROM ...
durch eine SELECT ... FROM showtablecache WHERE ...
in der neuen Cache-Tabelle ersetzen.
Sie können die phpmyadmin-Quelle auch alleine lassen und eine mysql-proxy-Instanz zwischenschalten, die die Abfrage für Sie neu schreibt. Alles, was Sie dann tun müssen, ist die Variable $ dbport in config-db.php
:)
Die Verwendung von mysql-proxy ist besonders nützlich, wenn Sie dieses Problem mit einem anderen Tool als phpmyadmin haben. Wie eine native, vielleicht proprietäre Workbench-Anwendung. (Datenbank-Workbench von Upscene tut etwas ähnliches (wenn ich mich richtig erinnere))
Abfragen für im Cron-Skript:
%Vor% Also anstelle von SHOW TABLE STATUS FROM <DATABASE>
benutzt du:
Weitere Details zu diesem Fix finden Sie hier: Ссылка
Tags und Links mysql phpmyadmin