Newsgroup: it.comp.os.linux.ubuntu
Titolo: MYsql performante

Salve,
dovrei tirare su un server lamp ma la cosa principale ï¿œ MYSQL sia molto 
performante, perchï¿œ avrï¿œ a che fare con una gran mole di dati e accessi.
C'ï¿œ qualche accorgimento da tenere.
Qualche soluzione ad-hoc?
Qualche consiglio.
Grazie
Max


Secondo me non ï¿œ una cosa a cui si possa rispondere facilmente e in 
breve. L'argomento ï¿œ estremamente complesso. La velocitï¿œ di un server 
MYSQL (ma direi di ogni tipo di database in generale) dipende dal motore 
di salvataggio (vedi ad esempio 
http://dev.mysql.com/doc/refman/5.5/en/storage-engines.html
), dal tipo 
di tabelle, dalla struttura del database e dalle query (vedi ad esempio 
http://forge.mysql.com/wiki/Top10SQLPerformanceTips
) che tu sceglierai 
di implementare; ogni scelta comporterï¿œ vantaggi e svantaggi. Tu stesso 
dovrai sperimentare
le diverse scelte e testarne i risultati.

 le diverse scelte e testarne i risultati.
Considerando che il database ï¿œ giï¿œ stato creato, si potranno apportare 
poche modifiche, comunque giï¿œ una cosa su cui lavorare.
Invece a livello di hardware?
Cos'ï¿œ piï¿œ importante avere?
Su che tipo di FileSystem montare mysql, piï¿œ i dati o piï¿œ gli eseguibili?
Considerando che devo allestire una macchina LAMP.
Su cosa puntare?
Grazie
Max

Max ha scritto:

RAM e dischi SAS,io punterei su quello

 Su che tipo di FileSystem montare mysql
Curioso: facendo una rapida ricerca, noto che i pareri sono
contrastanti. Si va da chi considera la scelta davvero
decisiva, tanto da suggerisce di allestire all'uopo un server
di test e di ripetere i test prima di ogni aggiornamento del
kernel, per evitare regressioni prestazionali anche importanti
col fs scelto, a chi non si cura che minimamente della questione,
concentrandosi su altro.
Però mi sembra che quasi tutti consiglino un fs con delayed
allocation per la tmpdir: così certi file possono evitare
del tutto la scrittura fisica su disco.
-- 
Bye, Lem
Ceterum censeo ISLAM esse delendum
_____________________________________________________________________
Non sprecare i cicli idle della tua CPU. Usali per qualcosa di utile.
http://orbit.psi.edu/
 
http://www.worldcommunitygrid.org/index.jsp
 
http://boinc.berkeley.edu/projects.php

 del tutto la scrittura fisica su disco.
Quale FS utilizza questa tecnologia?
Io vorrei tirare su una UBUNTU server, ma potrei anche optare per 
qualcos'altro.
Qualche consiglio?
Grazie
max

 Quale FS utilizza questa tecnologia?
Ext4, per esempio.
Anche xfs, ma almenom fino a qualche tempo fa xfs era molto
sconsigliato come fs per database (rasava a zero i blocchi che
non fosse riuscito a recuperare col ripristino del journal).
Pure btrfs, ma è un po' acerbo ancora.
Poi, in generale, HFS+, Reiser4, ZFS...


 max
XFS ad esempio. Ma bada perï¿œ che anche sul FS non si puï¿œ dare una 
risposta univoca perchï¿œ ogni FS eccelle in un aspetto e poi fa schifo in 
un altro (velocitï¿œ in scrittura, velocitï¿œ in lettura, velocitï¿œ in 
ricerca, integritï¿œ dei dati..). Sarï¿œ noioso a ripetermi, ma ogni scelta 
da fare ï¿œ sempre un compromesso sulla base delle proprie esigenze (dai 
un'occhiata qui ad esempio: 
http://www.linuxinsight.com/first_benchmarks_of_the_ext4_file_system.html
).
Per inciso, quando tu dici che avrai a che fare "con una gran mole di 
dati e di accessi", non dai l'idea di cos'ï¿œ per te una gran mole. 100 
MB? 1GB? Io sul mio iSeries ad esempio ho una tabella che ormai ha 
superato i 20GB. Con una semplice select risponde in pochissimi secondi, 
ma se comincio a pretendere di fare DISTINCT, funzioni aggregate, 
subquery... faccio notte. Ma piuttosto che cambiare macchina, uso 
tabelle temporanee dove vado a fare una prima scrematura di dati, e poi 
ci applico le query piï¿œ complesse. Vedi che le soluzioni sono sempre le 
piï¿œ disparate possibili. Sperimenta!

 col fs scelto,
il FS puoi anche toglierlo ed usare quello RAW.
Mi pare che in questo caso si renda necessario l'uso diu InnoDB.
-- 
Wikipedia Admin: "wikipedia non è un blog"
Iosif Stalin: "i compagni hanno scambiato il partito per un circolo di
discussione"

 Qualche soluzione ad-hoc?
performante, in lettura o in scrittura?
Ad ogni modo, se il server è una macchina dedicata, si suggerisce di
impostare innodb_buffer_pool_size all'80% della RAM presente sul
sistema.
Ci sono poi altri parametri che possono esser taroccati un pochetino
(cerca perché non ricordo tutto).
Si può anche optare per  un filesystem RAW.
Si può clusterizzare e mettere il server dietro a un proxy SQL o dietro
a un load balancer.
Si può cambiare il design dell'architettura e usare quindi memcached
per quanto riguarda la velocità in scrittura la questione è un po' più
spinosa IMHO....



A me interessa la velocitï¿œ di interrogazione (quindi lettura presumo).
Il database ï¿œ costituito da circa 4-6 gb ma ï¿œ destinato a crescere e la 
tabella principale raccoglie il 50% dei dati e non so come ottimizzarla, 
quindi punto tutto sulla configurazione e sull'Hardware.
Escluderei per il momento la possibilitï¿œ di utilizzare piï¿œ macchine.
Sulla macchina attuale innodb_buffer_pool_size ha un valore di 8388608 e 
la macchina ha 3gb ram. Siccome non ï¿œ indicato, cosa vuoldire 8gb o 8mega?
Ciao
Max

 vuoldire 8gb o 8mega?
sembrerebbe 8 MB :-)
"I’ve seen a lot of clients which came through extreme sufferings
leaving it at default value (8M)."
come puoi vedere in questo link, questa persona ha un buffer pool di
12G... porca vacca:
http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/
A quel che vedo supporta anche la notazione <xx>G o <xx>M
Per cui potresti scrivere 2G, oppure 2500M... e fare le tue prove.
http://www.mysqlperformanceblog.com/?s=mysqld+my.cnf+innodb_buffer_pool_size


 Max
Luca

ordine di magnitudine più veloce
È irrilevante nel discorso, ma in italiano si dice "un ordine di grandezza".


esportare i db di MYSQL in sql
fermare
eliminare: ibdata1, ib_logfilexx
settare (my.ini):
innodb_file_per_table=1
avviare
importare
questo perche il db mysql usa un solo file per i db innodb
altre cose
la tabella non deve avere campi binari (blob)
i blob li metti AL TROVE
id,fk, blob
ottieni una relazione 1:1 o 1:n
se gli dici voglio id = 15000 un istante e lo hai
in qesta tabella NON si fanno ricerche e' LENTA,
quindi meno campi megio e'
ad esempio fai un anagrafica e le foto stanno nella tabella foto_anagrafica

 ok con che rete la colleghi al server web ?
local socket.
che ne so io come ha configurato il sistema ^_^ Ovviamente anche questo
avrà la sua influenza.
