Posso accedere a phpmyadmin e vedere i database molto velocemente. Una volta che clicco su uno di essi e provo a vedere l'elenco delle tabelle, è molto lento. C'è qualcosa che mi manca? Non avevo questa situazione prima di aggiornare da Ubuntu 10.04 a Ubuntu 12.04.phpmyadmin apre molto lentamente le liste di tabelle MySQL
risposta
Questo perché le tabelle innoDB contengono molte righe. InnoDB non memorizza il numero di righe in una tabella ma MyISAM lo fa. Quindi, per ogni tabella InnoDB, PHPMyAdmin richiama la query SELECT count(*) FROM
che è molto lenta se il numero di righe è molto alto. Per risolvere questo problema, è necessario modificare il file config.inc.php
e impostare $cfg['MaxExactCount']
. Ciò invocherà count(*)
sql per le tabelle che contengono meno MaxExactCount
righe.
$cfg['MaxExactCount'] = 20000;
Senso manuale forma phpmyadmin
Per le tabelle InnoDB, determina per come tavoli grandi phpMyAdmin dovrebbe ottenere l'esatto conteggio fila utilizzando SELECT COUNT. Se il conteggio approssimativo delle righe restituito da SHOW TABLE STATUS è inferiore a questo valore, verrà utilizzato SELECT COUNT, altrimenti verrà utilizzato il conteggio approssimativo.
predefinito 'MaxExactCount' è 20000, proviamo anche a diminuire a 2000, non ha funzionato :( – user1859451
oh, trovo il comando lento."MOSTRA TABLE STATUS FROM' db_staging' "; phpmyadmin eseguirà questo comando durante il caricamento dell'elenco delle tabelle. Ci vogliono 7 secondi per terminare questo comando. – user1859451
Ho dovuto impostare $ cfg ['MaxExactCount'] su 0 affinché funzionasse come 20000 non funzionava. ** $ cfg ['MaxExactCount'] = 0 **; – IvanD
Nel caso in cui si dispone di diverse opinioni con lotti (> 10^5) di record funziona terribilmente lento anche quando MaxExactCountViews e MaxExactCount entrambi impostati a 100.
Trova
'static countRecords funzioni pubbliche
in
librerie \ Table.class.php
, inserire codice riportato di seguito all'inizio di questo metodo:
if ($is_view == true && isset($GLOBALS['cfg']['MaxExactCountViews'])) {
/* dirty hack to avoid performance issue with views when ['cfg']['MaxExactCount'] and ['cfg']['MaxExactCountViews'] does not help it */
$tmp_tables = PMA_DBI_get_tables_full($db, $table);
PMA_Table::$cache[$db][$table] = $tmp_tables[$table];
PMA_Table::$cache[$db][$table]['ExactRows'] = $GLOBALS['cfg']['MaxExactCountViews'];
return (int) $GLOBALS['cfg']['MaxExactCountViews'];
}
Set $GLOBALS['cfg']['MaxExactCountViews']
valore in config dopo. phpMyAdmin ora mostrerà sempre questo valore per tutte le VISUALIZZAZIONI. Funzionerà anche molto più velocemente :-)
Ho usato questo trucco senza l'istruzione condizionale. Ho avuto lo stesso problema facendo 'select count (*) da db.table' dopo aver fatto clic sulle tabelle. Con 16-25 milioni di righe in tabelle innodb, questo è un no-no. – TommyTheKid
Il modo in cui ho risolto il problema è stato il caching dell'output di SHOW TABLE STATUS FROM <DATABASE>
in una tabella denominata f.i.showtablecache
, dire ogni 2 minuti. Puoi farlo con qualche script cron per i tuoi database.
È quindi possibile modificare il file /usr/share/phpmyadmin/libraries/database_interface.lib.php
e sostituire il SHOW TABLE STATUS FROM ...
lento con uno SELECT ... FROM showtablecache WHERE ...
nella nuova tabella della cache.
Si potrebbe anche lasciare la sorgente phpmyadmin da sola e inserire un'istanza mysql-proxy tra quella che riscrive la query. Tutto quello che devi fare è cambiare la variabile $ dbport in config-db.php
:)
Utilizzare mysql-proxy per questo è particolarmente utile se si ha questo problema con uno strumento non open source diverso da phpmyadmin. Come alcune applicazioni native, magari proprietarie del banco di lavoro.(Database Workbench da Upscene fa qualcosa di simile (se ricordo bene))
Richieste nello script cron:
START TRANSACTION;
DELETE FROM showtablecache WHERE database_ = '<DATABASE>';
INSERT INTO showtablecache
SELECT
'<DATABASE>'
, TABLE_NAME
, ENGINE
, VERSION
, ROW_FORMAT
, TABLE_ROWS
, AVG_ROW_LENGTH
, DATA_LENGTH
, MAX_DATA_LENGTH
, INDEX_LENGTH
, DATA_FREE
, AUTO_INCREMENT
, CREATE_TIME
, UPDATE_TIME
, CHECK_TIME
, TABLE_COLLATION
, CHECKSUM
, CREATE_OPTIONS
, TABLE_COMMENT
FROM
INFORMATION_SCHEMA.TABLES
WHERE
table_schema = '<DATABASE>';
COMMIT;
Così, invece di SHOW TABLE STATUS FROM <DATABASE>
si utilizza:
SELECT
Name_ AS `Name`,
Engine_ AS `Engine`,
Version,
Row_format_ AS `Row_format`,
Rows_ AS `Rows`,
Avg_row_length,
Data_length,
Max_data_length,
Index_length,
Data_free,
Auto_increment_ AS `Auto_increment`,
Create_time,
Update_time,
Check_time,
Collation_ AS `Collation`,
Checksum,
Comment_ AS `Comment`,
Create_options
FROM
showtablecache
WHERE
Database_ = <DATABASE>;
Maggiori dettagli su questa correzione qui: http://blog.cppse.nl/fix-slow-phpmyadmin
I pos ted una correzione per una situazione generale in cui la tua ricerca information_schema.tables
Open \ config.inc.php e aggiungere questi due riga di codice a esso:
$cfg['MaxExactCount'] = 0;
$cfg['MaxExactCountViews'] = 0;
E naturalmente si può saltare la seconda riga se non ci sono viste nel database.
Meglio RISOLTO mai! phpmyadmin è superveloce! Grazie... –
Inizialmente ho utilizzato la risposta "Andrew Kondratev", senza le condizioni condizionali "if view", quindi ho iniziato a guardare più da vicino il resto del metodo e ho capito che era quasi esattamente il codice che sarebbe stato eseguito se $force_exact
era falso . Ho un nuovo hack più semplice che non si rompe abbastanza e funziona anche per le tabelle .
Proprio come con trucco di Andrew:
- Trova dove le vite di installazione, come ad esempio
rpm -ql phpMyAdmin | grep Table.class.php
(o il vostro sistema operativo equivalente locale). - EDIT:
./libraries/Table.class.php
(nel mio caso/usr/share/phpMyAdmin/libraries/Table.class.php
- Cercare
static public function countRecords
(linea 563 nel mio caso) Inserire il seguente nella parte superiore di tale funzione (dopo il
{
):/* Tommy's Hack from http://goo.gl/HMTnLc */ $force_exact = false; /* End Tommy's Hack - USE AT YOUR OWN RISK! */
Nel mio caso le "impostazioni predefinite" hanno già le seguenti:
config.default.php: * @global integer $cfg['MaxExactCount'] config.default.php:$cfg['MaxExactCount'] = 0; config.default.php: * @global integer $cfg['MaxExactCountViews'] config.default.php:$cfg['MaxExactCountViews'] = 0;
Tuttavia, è sempre possibile aggiungere al vostro config.inc.php:
$cfg['MaxExactCountViews'] = 0;//disable trying to count the number of rows in any view $cfg['MaxExactCount'] = 0;//disable correcting the InnoDB estimates
Credo che il problema è in realtà più in tbl_info.inc.php dove si imposta $ force_exact true durante la visualizzazione di tabelle. IMO, l'unica volta che quel numero dovrebbe essere "esatto" è se stavi cercando di visualizzare l'ultima pagina, e anche allora probabilmente no.
- 1. struttura tabelle mysql - una tabella molto grande o tabelle separate?
- 2. phpMyAdmin e grandi tabelle
- 3. Visual Python funziona molto lentamente
- 4. MinGW "make" inizia molto lentamente
- 5. mysql ottimizza le tabelle
- 6. Cosa fanno "Relazioni interne" in phpMyAdmin per le tabelle MyISAM?
- 7. django, phpmyadmin e mysql?
- 8. Multiple TextViews si aggiornano molto lentamente
- 9. mysql che separa le tabelle
- 10. React nativo funziona molto lentamente su Android
- 11. lapply e do.call funzionano molto lentamente?
- 12. MySQL Workbench vs phpMyAdmin
- 13. Apre il database e visualizza le tabelle in sqlite3?
- 14. Perché le righe stimate sono molto diverse nei risultati di phpmyadmin?
- 15. WebStorm viene eseguito molto molto molto lentamente e genera continuamente l'errore di memoria
- 16. La validazione discreta di Jquery funziona molto lentamente ASP.Net MVC3
- 17. Come saltare l'ordinamento delle tabelle in phpmyadmin
- 18. phpMyAdmin "Nessun database selezionato" MySQL
- 19. phpMyAdmin equivale a MySQL per Redis?
- 20. Android: due istanze di Text-to-Speech lavorare molto lentamente
- 21. Il programma di esempio Spark funziona molto lentamente
- 22. Le compilazioni di debug vengono compilate molto più lentamente rispetto alla versione
- 23. django-pipeline - La pagina si carica molto lentamente
- 24. Cambia porta del server Mysql in Phpmyadmin
- 25. MySQL molto lento interrogazione
- 26. Come troncare le tabelle correttamente?
- 27. MYSQL: diff tra tabelle
- 28. phpmyadmin mostra numeri o blob per le colonne di chiamata utf8_bin di mysql?
- 29. Come esportate le tabelle da phpMyAdmin come formato di tabella di testo normale?
- 30. MySQL molto lento ciclo
Elimina e installa il pacchetto php5-mysql – Tachyons
Questo particolare database ha una tabella innoDB con molte righe? –
sì, usiamo un sacco di tabelle innoDB, alcune di loro hanno milioni di righe. – user1859451