Back to top

Autore Topic: Performance e indici tabelle  (Letto 1396 volte)

Offline workino

  • Nuovo arrivato
  • *
  • Post: 3
    • Mostra profilo
Performance e indici tabelle
« il: 03 Set 2012, 12:04:58 »
Salve a tutti,
stiamo utilizzando Joomla 2.5.6 per un sito molto grande e durante il funzionamento abbiamo incontrato seri problemi di performance. Praticamente il db tende a consumare troppe risorse per sopperire alla mancanza degli indici e quindi anche per fare delle semplici liste il processore tende ad andare al 100% per troppo tempo.

Una volta analizzate le query tramite il debug delle slow_query di mysql sono riuscito a mettere alcuni degli indici mancanti con immediato increemento delle prestazioni del sito.

E' possibile che siano saltati la maggior parte degli indici? o peggio non sono stati proprio previsti?

Altra cosa, una delle query fa un GROUP BY per tutte le colonne presenti nella tabella *_categories che ovviamente non erano indicizzate in modo corretto o addirittura non erano proprio indicizzate.

Non so che pensare... E' un problema noto?




Grazie per qualsiasi risposta.
Workino

mau_develop

  • Visitatore
Re:Performance e indici tabelle
« Risposta #1 il: 03 Set 2012, 12:20:11 »
basta che scarichi un pacchetto, apri la query di installazione e guardi se imposta gli index, se li imposta è un problema solo tuo.

Quello delle query è invece come come problema, joomla CMS non fa certo economia di query ma Joomla CMS ha un senso.... poi per altro c'è Joomla Platform.

Se io dovessi sviluppare qualcosa dove è prioritario la velocità del db sceglierei di usare nosql ...

M.

Offline workino

  • Nuovo arrivato
  • *
  • Post: 3
    • Mostra profilo
Re:Performance e indici tabelle
« Risposta #2 il: 03 Set 2012, 12:33:54 »
Grazie della risposta ma il nostro problema è proprio sul core di Joomla e non solo sugli add-on.


query di esempio:


SELECT a.id, a.title, a.alias, a.title_alias, a.introtext, a.checked_out, a.checked_out_time, a.catid, a.created, a.created_by, a.created_by_alias, CASE WHEN a.modified = 0 THEN a.created ELSE a.modified END as modified, a.modified_by, uam.name as modified_by_name,CASE WHEN a.publish_up = 0 THEN a.created ELSE a.publish_up END as publish_up,a.publish_down, a.images, a.urls, a.attribs, a.metadata, a.metakey, a.metadesc, a.access, a.hits, a.xreference, a.featured, LENGTH(a.fulltext) AS readmore,CASE WHEN badcats.id is not null THEN 0 ELSE a.state END AS state,c.title AS category_title, c.path AS category_route, c.access AS category_access, c.alias AS category_alias,CASE WHEN a.created_by_alias > ' ' THEN a.created_by_alias ELSE ua.name END AS author,ua.email AS author_email,contact.id as contactid,parent.title as parent_title, parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias,ROUND(v.rating_sum / v.rating_count, 0) AS rating, v.rating_count as rating_count,c.published, CASE WHEN badcats.id is null THEN c.published ELSE 0 END AS parents_published
FROM oflrq_content AS a
LEFT JOIN oflrq_content_frontpage AS fp ON fp.content_id = a.id
LEFT JOIN oflrq_categories AS c ON c.id = a.catid
LEFT JOIN oflrq_users AS ua ON ua.id = a.created_by
LEFT JOIN oflrq_users AS uam ON uam.id = a.modified_by
LEFT JOIN (
SELECT contact.user_id, MAX(contact.id) AS id, contact.language
FROM oflrq_contact_details AS contact
WHERE contact.published = 1
GROUP BY contact.user_id, contact.language) AS contact ON contact.user_id = a.created_by
LEFT JOIN oflrq_categories as parent ON parent.id = c.parent_id
LEFT JOIN oflrq_content_rating AS v ON a.id = v.content_id
LEFT OUTER JOIN (SELECT cat.id as id FROM oflrq_categories AS cat JOIN oflrq_categories AS parent ON cat.lft BETWEEN parent.lft AND parent.rgt WHERE parent.extension = 'com_content' AND parent.published != 1 GROUP BY cat.id ) AS badcats ON badcats.id = c.id
WHERE a.access IN (1,1) AND CASE WHEN badcats.id is null THEN a.state ELSE 0 END = 1 AND (a.catid = 14 OR a.catid IN (
SELECT sub.id
FROM oflrq_categories as sub
INNER JOIN oflrq_categories as this ON sub.lft > this.lft AND sub.rgt < this.rgt
WHERE this.id = 14)) AND (a.publish_up = '0000-00-00 00:00:00' OR a.publish_up <= '2012-08-30 09:13:41') AND (a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2012-08-30 09:13:41')
GROUP BY a.id, a.title, a.alias, a.title_alias, a.introtext, a.checked_out, a.checked_out_time, a.catid, a.created, a.created_by, a.created_by_alias, a.created, a.modified, a.modified_by, uam.name, a.publish_up, a.attribs, a.metadata, a.metakey, a.metadesc, a.access, a.hits, a.xreference, a.featured, a.fulltext, a.state, a.publish_down, badcats.id, c.title, c.path, c.access, c.alias, uam.id, ua.name, ua.email, contact.id, parent.title, parent.id, parent.path, parent.alias, v.rating_sum, v.rating_count, c.published, c.lft, a.ordering, parent.lft, fp.ordering, c.id, a.images, a.urls
ORDER BY    CASE WHEN a.publish_up = 0 THEN a.created ELSE a.publish_up END  DESC ,  a.created LIMIT 0, 10
E' vero che joomla non si risparmia sulle query e il problema con poco traffico non ce se ne accorge neanche ma se il traffico aumenta ecco lì che il problema si presenta ritrovandosi centinaia di query in coda con conseguente blocco del sito.


mau_develop

  • Visitatore
Re:Performance e indici tabelle
« Risposta #3 il: 03 Set 2012, 12:43:59 »
è proprio sul core di Joomla e non solo sugli add-on.
-------------------------------------------------------------------------
non ho parlato di addon o meglio.... c'è la platform e poi il resto sono tutti add-on solo che sono forniti nativamente da joomla per ottenere un cms.
Per ottenere il cms hanno stabilito che le query devono funzionare così... ma per ottenere un cms.
Se devi sviluppare altro devi usare la platform non il cms... se invece ti serve il CMS e un database di enormi dimensioni... forse joomla non è adatto.

M.

Offline workino

  • Nuovo arrivato
  • *
  • Post: 3
    • Mostra profilo
Re:Performance e indici tabelle
« Risposta #4 il: 03 Set 2012, 12:48:34 »
Il fatto che noi lo usiamo come CMS per gli articoli dei giornalisti.
Quindi tutto il back-end ci dà una mano per semplificare il lavoro e soprattutto la gestione.


Torno però alla mia annotazione iniziale. Come mai il team di Joomla (per quanto riguarda i componenti/moduli/plugin) non ottimizzano gli indici o meglio non ottimizzano le query proprio?


Non servirebbe molto per far si che il core rispondesse con delle tempistiche nettamente minori.




mau_develop

  • Visitatore
Re:Performance e indici tabelle
« Risposta #5 il: 03 Set 2012, 12:57:25 »
te l'ho già detto... joomla ti da la platform e ci sviluppi ciò che vuoi poi per il grande pubblico e per ragioni di feedback nei test la rilascia usandola per costruire un cms.
Per le normali funzionalità che deve avere un cms le query vanno benissimo altrimenti gli ecommerce..i rea etc non girerebbero.
Se usi il debug vedi che fa query per costruire tutta l'applicazione, gli ordinamenti dei contenuti etc perchè è quello l'oggetto finale.

..comunque si, anche secondo me sono ridondanti ma comunque l'appz va benissimo.

Una soluzione può essere usare altro per gestire quelle liste ed embeddare il contenuto in joomla con un wrapper.

M.

 



Web Design Bolzano Kreatif