Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    79

    [MySQL Server] Problemi di carico e possibili soluzioni

    Ciao a tutti,
    sto avendo dei grossissimi problemi di carico sul mio server.
    Vi descrivo brevemente le mia situazione, ho un sistema di ecommerce che utilizza mysql come database MySQL. Disponibilita' e tariffe vengono aggiornate dall'esterno tramite webservices che generano un carico enorme e spesso bloccano tutto.
    Non potendo intervenire direttamente sul webservice in quanto non ho documentazione e cmq sarebbe un macello devo fare qualcosa tramite mysql.
    Ho pensato alle seguenti alternative:
    • settare una replicazione master-master e far effettuare gli aggiornamenti sul database non utilizzato dal cms.
    • creare un nuovo webservice che scavalchi quello originale, faccia il caching degli aggiornmenti e li propaghi direttamente nel database in modo piu' efficiente e quando il carico non e' eccessivo.
    • una combinazione delle prime due


    Che ne dite? Potrebbe funzionare? Avete soluzioni alternative?


    Thanks,
    Haran

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    1) no
    2) no
    3) no

    ps webservice=merda, ma questo è assodato.

    ---
    Inizia a riformulare così.

    a) cosa fanno esattamente i webservice?
    b) che tipo di comandi esegue la macchina?
    c) che tipo di macchina è?
    d) perchè la macchina rallenta? E cosa intendi per "rallentamenti"?
    e) quanto rallenta?

    a e b puoi individuarli o "a mano" o con un proxy

    d è deriva dai precedenti

    e) è fondamentale. qualsiasi ottimizzazione DEVE partire da una metrica, da dati oggettivi, altrimenti finirà in merda.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    79
    Ok, provo a riformulare:

    1) il web service incriminato aggiorna un'unica tabella con vari prezzi per singolo prodotto. A complicate le cose c'e' il fatto che i prezzi cambiano di giorno in giorno. Oggi A puo' costare 5 e domani 6. Per questo motivo ogni oggetto in vendita viene ripetuto nella tabella per ogni giorno dell'anno. A complicare ulteriormente le cose, il genio che ha fatto il sistema ha definito il campo data come char (ad es. 20110707 sta per 7 luglio 2011).

    2) i comandi eseguiti sul database sono principalmente UPDATE, INSERT ed un mare di SELECT

    3) Server LAMP (Debian 64) con 12GB di ram

    4) quando vengono effettuati aggiornamenti dei prezzi per periodi lunghi mysql si sblocca per il troppo carico e la macchina si pianta. A volte mi tocca resettarla.

    ho provato ad utilizzare degli indici che mi consentissero di velocizzare gli aggiornamenti ma il risultato non e' sufficiente.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da Haran78
    Ok, provo a riformulare:

    1) il web service incriminato aggiorna un'unica tabella
    Allora primo aspetto. Le scritture non si parallelizzano con un'architettura master-slave, master-master o come vuoi.
    Quindi se hai moltissime modifiche hai un problema, ed eventualmente devi shardare
    con vari prezzi per singolo prodotto. A complicate le cose c'e' il fatto che i prezzi cambiano di giorno in giorno. Oggi A puo' costare 5 e domani 6. Per questo motivo ogni oggetto in vendita viene ripetuto nella tabella per ogni giorno dell'anno. A complicare ulteriormente le cose, il genio che ha fatto il sistema ha definito il campo data come char (ad es. 20110707 sta per 7 luglio 2011)
    per ordine
    La variazione non mi sembra grave.
    Neppure la codifica della data

    2) i comandi eseguiti sul database sono principalmente UPDATE, INSERT ed un mare di SELECT
    Devi essere un pochino più preciso.
    perchè le select le puoi suddividere su più server, mentre update ed insert no
    3) Server LAMP (Debian 64) con 12GB di ram
    Serve qualcosa di più preciso.
    - myisam?
    - innodb?
    posta il my.cnf direttamente

    4) quando vengono effettuati aggiornamenti dei prezzi per periodi lunghi mysql si sblocca per il troppo carico e la macchina si pianta. A volte mi tocca resettarla.
    E' un pochino troppo generico.
    Devi verificare quali sono i processi mysql in esecuzione (ad esempio con mysqladmin processlist status), verificando il motivo per cui sono in attesa
    ho provato ad utilizzare degli indici che mi consentissero di velocizzare gli aggiornamenti ma il risultato non e' sufficiente.
    qui serve la descrizione della tabella, cardinalità totale, e cardinalità dei raggruppamenti dei singoli campi (per decidere la selettività)

    ---
    Riassumendo, da quanto posso "intuire", hai un problema di parallelismo del mix scritture-letture.
    Va innanzitutto capito se hai tante scritture piccole, o poche grandi (esempio di poche grandi: update qualcosa set prezzo=prezzo*1.1)

    Se ne hai poche e grandi conviene fare dei cicli per spezzare le insert troppo numerose in chunk, in modo da lasciar spazio per l'esecuzione concorrente di altri comando.

    Se ne hai tante e piccole bisogna innanzitutto usare innodb per limitare i lock (e magari mysql 5.5 o 5.6, che scalano ancor meglio).
    Poi, possibilmente, shardare logicamente o a livello applicativo le scritture
    Poi bisogna configurare bene innodb.
    Eventualmente modificare l'hardware.
    ---
    Ovviamente dò per scontato l'attivazione dello slowquery, e se avete soldi da spendere e tempo da dedicare passare a mariadb o a un mysql patchato da percone per avere una risoluzione migliore sulle query.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.