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.