phpmyadmin öffnet MySQL-Tabellenlisten sehr langsam

8

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.

    
user1859451 25.12.2012, 03:09
quelle

6 Antworten

7

Öffnen Sie die Datei \ config.inc.php und fügen Sie diese zwei Codezeilen hinzu:

%Vor%

Und natürlich können Sie die zweite Zeile überspringen, wenn Sie keine Ansichten in der Datenbank haben.

    
Shahroq 30.04.2014 17:52
quelle
6

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.

%Vor%

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.

    
Shiplu Mokaddim 25.12.2012 03:27
quelle
2

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:

  • Finden Sie heraus, wo die Installation läuft, z. B. rpm -ql phpMyAdmin | grep Table.class.php (oder Ihr lokales Betriebssystem).
  • BEARBEITEN: ./libraries/Table.class.php (in meinem Fall /usr/share/phpMyAdmin/libraries/Table.class.php
  • Suche nach static public function countRecords (Zeile 563 in meinem Fall)
  • Fügen Sie am Anfang dieser Funktion Folgendes ein (nach { ):

    %Vor%
  • 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.

    
TommyTheKid 14.11.2014 17:55
quelle
1

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: -)

    
Andrew Kondratev 11.03.2013 02:21
quelle
1

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 :)

zu ändern

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:

%Vor%

Weitere Details zu diesem Fix finden Sie hier: Ссылка

    
Ray Burgemeestre 25.03.2013 21:00
quelle
0

Ich habe einen Fix für eine allgemeine Situation gepostet, in der Sie information_schema.tables

abfragen

Langsame Abfrage von information_schema.tables

    
Populus 09.05.2013 19:00
quelle

Tags und Links