Joomla.it Forum
Non solo Joomla... => Database => : gimsi 31 Jul 2008, 11:44:59
-
Ciao a tutti :)
Da un pò di tempo, la mia installazione è molto lenta e mette in crisi il mysql che spesso occupa anche il 98% della CPU del server.
Ho notato abilitando il log_slow_queries e usando il mysqldumpslow che ho una query particolarmente lenta che è questa:
SELECT m.*, sum(case when p.published=N then N else N end) as cnt
FROM jos_menu AS m
LEFT JOIN jos_menu AS p ON p.parent = m.id
WHERE m.menutype='S' AND m.published='S' AND m.access <= 'S'
GROUP BY m.id ORDER BY m.parent, m.ordering
Ho aggiunto alla tabella jos_menu (che ha 345 elementi) un indice con i campi menutype, published e access.
Il tempo di esecuzione medio è passato da 7 secondi a 2,5.
Il miglioramento c'è stato ma non è ancora un sito veloce e il mysql ha ancora dei picchi molto alti di utilizzo della CPU.
Cos'altro potrei fare?
Grazie
-
ciao.. benvenuto
prova ad ottimizzare il database.
ciao
-
ho già provato con l'OPTIMIZE TABLE con phpMyAdmin, c'è un modo più adatto?
-
no.
probabilmente hai un sito web molto grosso che richiede molto database. Una soluzione potrebbe essere quella di eliminare un pò di cose che magari non servono.
quanto è grande tutto il db?
-
il db ha una dimensione di 11 MB circa, le due tabelle che mi sembrano più onerose sono jos_content con quasi 3800 entries e jos_content_frontpage che ne ha quasi 1500.
Non so se può essere utile per capire il problema ma la tabella jos_session si "rompe" abbastanza spesso.
Intanto grazie per l'aiuto
-
il database non è molto grosso.
ti consiglio a questo punto di chiedere informazioni al tuo host, loro sapranno essere più precisi.
ciao
-
provata a svuotare la cache del sito?
-
non uso la cache del sito, ho dovuto disattivarla perché il menù compariva completamente in disordine. E' anche questo uno strano sintomo. Potrebbe essere perché il DB deriva da una migrazione da mambo? (però i problemi sono iniziati 8 mesi dopo)
-
no, escludo la migrazione
-
scusami ma è la singola query ad impiegare 2,5 sec o è perchè viene lanciata più di una volta? ad ogni modo per curiosità che driver usi? mysql o mysqli? io ho notato che cè parecchia differenza tra i due
-
Si, era la singola query ad impiegare 2,5 secondi.
Mi pare che il problema si sia risolto da quando ho aggiunto una serie di nuovi indici alla tabella jos_menu.
KEY `componentid` (`componentid`,`menutype`,`published`,`access`),
KEY `menutype` (`menutype`),
KEY `menutype_2` (`menutype`,`published`,`access`),
KEY `parent` (`parent`),
KEY `ordering` (`ordering`),
KEY `parent_2` (`parent`,`id`)
in particolare l'indice parent_2 con parent e id, mi pare che abbia sortito l'effetto maggiore (forse perché usato nella clausola di JOIN).
Grazie a tutti del prezioso supporto
-
ok perfetto
ciao
-
attento aggiunger troppi indici ad una tabella non è una ocsa consigliabile in quanto aumenta il carico di lavoro necessario agli aggiornamenti della tabella stessa, prova a controllare i dati inseriti nelle tabelle inquestione