• Bannato Super User

    90 su 100 hai le risorse esaurite. Ovvero lo spazio in esaurimento.
    Ho avuto lo stesso problema per ben 2 volte un mese fà, poi ho fatto un upgrade di spazio e per il momento tutto bene.
    No di spazio ne ho a volontà.

    L'assistenza mi ha appena risposto dicendomi che risultava essere bloccato il web server apache.

    Lo stesso è stato riavviato ma niente tutto bloccato.

    Ho individuato una query che forse da problemi, anzi no dà problemi perché per caricare ci mette tra i 4 e i 5 secondi contro una media di 0,003 delle altre query nel sito

    SELECT club_msg.testo, club_msg.data, club_msg.foto, utenti.nomeutente, utenti.immagine, utenti.privilegi, utenti.firma, utenti.id AS utid, club_msg.id AS postid, utenti.sesso, DATE_FORMAT( club_msg.data,  '%e-%m-%y'  )  AS datapo, DATE_FORMAT( club_msg.data,  '%h:%i'  )  AS orapo
    FROM club_msg LEFT JOIN utenti ON club_msg.nomeutente = utenti.nomeutente
    WHERE club_msg.codice =  '1162749141' ORDER  BY  DATA  DESC LIMIT 0 , 15
    

    avete idea di come ottimizzare? sbaglio qualcosa?Grazie


  • User Attivo

    @mix said:

    No di spazio ne ho a volontà.

    L'assistenza mi ha appena risposto dicendomi che risultava essere bloccato il web server apache.

    Lo stesso è stato riavviato ma niente tutto bloccato.

    Ho individuato una query che forse da problemi, anzi no dà problemi perché per caricare ci mette tra i 4 e i 5 secondi contro una media di 0,003 delle altre query nel sito

    >SELECT club_msg.testo, club_msg.data, club_msg.foto, utenti.nomeutente, utenti.immagine, utenti.privilegi, utenti.firma, utenti.id AS utid, club_msg.id AS postid, utenti.sesso, DATE_FORMAT( club_msg.data,  '%e-%m-%y'  )  AS datapo, DATE_FORMAT( club_msg.data,  '%h:%i'  )  AS orapo
    FROM club_msg LEFT JOIN utenti ON club_msg.nomeutente = utenti.nomeutente
    WHERE club_msg.codice =  '1162749141' ORDER  BY  DATA  DESC LIMIT 0 , 15
    >``` 
    avete idea di come ottimizzare? sbaglio qualcosa?Grazie
     
    aggiungi un indice sul campo club_msg.codice 
    e un altro indice con doppio campo combinato su club_msg.codice e club_msg.data insieme.

  • Bannato Super User

    emm, puoi spiegarmi meglio come? così non riesco a capire cosa fare praticamente...


  • User Attivo

    Ammesso che il problema sia l'eccessivo traffico che sovraccarica il server e non un flusso dati incapace di sostenere grossi carichi di lavoro, il consiglio che ti posso dare io è quello di progettare un sistema informativo che distribuisca i carichi di lavoro nel tempo sempre che tu abbia margini di intervento sul CMS.

    Mi spiego meglio; se ogni volta che si visualizza una pagina, si legge un feed o quant'altro il sistema è costretto ad esequire delle query per la costruzione della pagina dinamica il collasso del sistema è solo questione di tempo. Un aumento drastico di visitatori sommato alla frequenza di lettura degli spiders o eventualmente di aggregatori che attingono al tuo feed manderà la macchina in tilt, è matematico.

    Un upgrade dell'hardware non fa altro che spostare questa soglia di pericolo, che comunque rimane.

    Una delle soluzioni è quella di generare parte dei contenuti necessari alla costruzione della pagina tramite script che si avviano ogni ora (cron jobs) con cui MySQL genera in formato XML i feeds, le mappe del sito e i contenuti del portale che poi vengono inclusi nelle pagine attraverso opportuni parsers, che magari hanno anche funzionalità di caching.

    Ho avuto il tuo stesso problema e l'ho risolto così.


  • Bannato Super User

    In parte il problema lo abbiamo risolto,
    la macchina non va più in stallo, non è proprio istantanea ma è gia un OTTIMO risultato, proprio serio.

    La soluzione che mi hai dato tu già in parte è stata prevista sul mio portale ( uso un CMS autocostruito ) praticamente il cron jobs lo applichiamo solo che non generiamo file xml ma un file .php incluso nel resto del portale.

    Perchè consigli di usare xml?


  • User Attivo

    Nel mio caso uso XML perchè mi costruisco fonti dati che poi richiamo in altre parti del portale magari formattato diversamente, oppure utilizzando alcuni campi in una pagina ed altri in un'altra pagina.

    La sorgente RSS rimane la stessa e gli utilizzi possono essere molteplici. Dipende poi dalle necessità, ma penso che adeguarsi a standard ben precisi possa rivelarsi utile anche in caso di necessità future che magari non prevediamo al momento.


  • User Attivo

    Mi piacerebbe che tu analizzassi il mio portale per avere qualche consiglio in più su dove aplicare il cron jobs.

    Nel nostro lo abbiamo potuto aplicare solo in ancune sezioni della home page non avrei la più pallida idea di come si possa fare nelle altre sezioni.


  • User Attivo

    Cosa è che fa esattamente? Quali sono i dati genera?


  • User Attivo

    Cosa è che fa esattamente? Quali sono i dati genera?

    Non ho capito la tua domanda scusami.


  • User Attivo

    Avevo dato una occhiata al tuo portale (è il primo in firma vero?) e mi stavo chiedendo quali sono i dati che generate con il cron job visto che mi hai detto che lo applicate solo in alcune sezioni. volevo capire meglio


  • User Attivo

    Ok ora e chiaro, si si è il primo in firma, con il cron job creiamo mis e mister spacciatore ( prime due foto in alto ) e la lista dei compleanni.

    Credo che solo questi due si possano fare attraverso il cron job, tu cos'altro faresti?


  • User

    Ciao come sono strutturare le tabelle :
    club_msg e utenti ? La query sembra non troppo complessa ,
    tuttavia il join su nomeutente ( char? ) potrebbe essere pesante.
    Non hai un codice al posto di nomeutente?
    La chiave esterna sulla tabella club_msg è nomeutente?
    Per ottimizzare hai bisogno di ID con indice.
    cmq se mi posti la struttura delle due tabelle posso essere più preciso.


  • Bannato Super User

    Ciao,
    finalmente il problema è stato risolto.

    Tutta colpa di una query. La vecchia query faceva l'ordinamento solo in base alla data e ragruppava solo in base all'utente.

    Ho risolto grazie ad eLLeGi con questa query

    SELECT club_cat.id, club_cat.categoria, club_cat.lastid, club_msg.codice, club_msg.testo, club_main.nome FROM club_cat INNER JOIN club_msg ON club_cat.lastid=club_msg.id INNER JOIN club_main ON club_msg.codice=club_main.codice GROUP BY club_cat.id ORDER BY club_cat.lastdata DESC LIMIT 6


  • User Newbie

    @mix said:

    Ho individuato una query che forse da problemi, anzi no dà problemi perché per caricare ci mette tra i 4 e i 5 secondi contro una media di 0,003 delle altre query nel sito

    >SELECT club_msg.testo, club_msg.data, club_msg.foto, utenti.nomeutente, utenti.immagine, utenti.privilegi, utenti.firma, utenti.id AS utid, club_msg.id AS postid, utenti.sesso, DATE_FORMAT( club_msg.data,  '%e-%m-%y'  )  AS datapo, DATE_FORMAT( club_msg.data,  '%h:%i'  )  AS orapo
    FROM club_msg LEFT JOIN utenti ON club_msg.nomeutente = utenti.nomeutente
    WHERE club_msg.codice =  '1162749141' ORDER  BY  DATA  DESC LIMIT 0 , 15
    >``` 
    avete idea di come ottimizzare? sbaglio qualcosa?Grazie 
    ** Il campo club_msg.codice è indicizzato? e Data?
    
    Ops che pollata che ho fatto :D mi ero fermato a leggere la pagina 1 non avevo visto c'era la pagina 2 :P sorry
     **