<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Deec.it &#187; mysql tuning</title>
	<atom:link href="http://www.deec.it/tag/mysql-tuning/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.deec.it</link>
	<description>Le Guide Pratiche Dell&#039;Informatica</description>
	<lastBuildDate>Sun, 04 Sep 2011 16:52:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MySQL Tuning</title>
		<link>http://www.deec.it/2010/02/06/mysql-tuning/</link>
		<comments>http://www.deec.it/2010/02/06/mysql-tuning/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 22:00:38 +0000</pubDate>
		<dc:creator>Luca</dc:creator>
				<category><![CDATA[How-to]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[mysql tuning]]></category>
		<category><![CDATA[ottimizzare mysql]]></category>
		<category><![CDATA[performance mysql]]></category>

		<guid isPermaLink="false">http://www.deec.it/?p=1666</guid>
		<description><![CDATA[



Con l&#8217;installazione di default la configurazione del servizio mysql viene impostata ad un livello &#8220;standard&#8221; che va piu&#8217; o meno bene su tutti i server.
In questo articolo vedremo come ottimizzare il valore associato alle variabili presenti nella configurazione, ottimizzandola in base alla memoria e all&#8217;hardware disponibile sul nostro server.
key_buffer_size
Indica la quantita&#8217; di indici (i file [...]]]></description>
			<content:encoded><![CDATA[<!-- AdSense Now! V1.77 -->
<!-- Post[count: 3] -->
<div class="adsense adsense-leadin" style="text-align:center;margin: 12px;"><script type="text/javascript"><!--
google_ad_client = "pub-5841373120371067";
/* 468x60, creato 22/09/09 M&amp;P */
google_ad_slot = "8731175604";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div><p>Con l&#8217;installazione di default la configurazione del servizio mysql viene impostata ad un livello &#8220;standard&#8221; che va piu&#8217; o meno bene su tutti i server.<br />
In questo articolo vedremo come ottimizzare il valore associato alle variabili presenti nella configurazione, ottimizzandola in base alla memoria e all&#8217;hardware disponibile sul nostro server.</p>
<p><strong>key_buffer_size</strong></p>
<p>Indica la quantita&#8217; di indici (i file con estensione MYI) delle tabelle di tipo MYISAM mantenuti in memoria.<br />
L&#8217;ideale sarebbe quello di poter contenere in RAM tutti i file di questo tipo.<br />
Il valore attribuito a questa variabile non deve superare la meta&#8217; di tutta la RAM dedicata al servizio mysqld.<br />
Se non potete mettere in memoria tutti i file MYI potrete fare questa ottimizzazione:</p>
<p>Accedete nella console di mysql ed eseguite questa query</p>
<blockquote><p>show status like &#8216;%key_read%&#8217;;</p></blockquote>
<p>Dividete il valore di key_read_requests per key_read;<br />
Il risultato deve essere maggiore di 100.</p>
<p>Si imposta nella sezione [mysql] ad es.</p>
<blockquote><p>[mysqld]<br />
key_buffer_size = 64M</p></blockquote>
<p><strong>table_cache</strong></p>
<p>Quando mysql accede ad una tabella, la carica in cache. La migliore delle situazioni sarebbe quella di avere una cache talmente grande da contenere<br />
tutte le tabelle aperte in un dato momento.<br />
Per verificare quante tabelle sono aperte in un determinato istante eseguiamo questa query</p>
<blockquote><p>show status like &#8216;open_tables&#8217;;</p></blockquote>
<p>Analizzando questo valore nel tempo, possiamo valutare i picchi massimi</p>
<p>Possiamo verificare anche quante tabelle sono state aperte dall&#8217;esecuzione del servizio mysql</p>
<blockquote><p>show status like &#8216;opened_tables&#8217;;</p></blockquote>
<p>Avremo modo cosi&#8217; di capire se open_tables e&#8217; &#8220;attendibile&#8221; oppure momentaneamente superiore/inferiore alla media.</p>
<p>Si imposta nella sezione [mysql] ad es.</p>
<p>[mysqld]<br />
table_cache  = NUMERO</p>
<p><strong>thread_concurrency</strong></p>
<p>Questa variabile limita il numero di thread avviati simultaneamente. Il valore da impostare e&#8217; questo</p>
<p>2 * (numero di CPU)</p>
<p>Si imposta nella sezione [mysql] ad es.</p>
<p>[mysqld]<br />
thread_concurrency  = 4</p>
<p><strong>read_rnd_buffer_size</strong></p>
<p>Viene utilizzata a seguito di una query che prevede un ordinamento delle righe, il classico ORDER BY per intenderci.<br />
E&#8217; consigliabile impostare 1Kb per ogni MB di memoria destinata al servizio mysqld.</p>
<p>Si imposta nella sezione [mysql] ad es.</p>
<p>[mysqld]</p>
<p>read_rnd_buffer_size = 256k</p>
<p><strong>tmp_table_size</strong></p>
<p>Il valore associato a questa variabile indica la dimensione massima delle tabelle temporanee create in memoria.<br />
Si riferisce alle tabelle di tipo MyIsam e quando e&#8217; insufficente la tabella verra&#8217; creata sul disco, con conseguente perdita di performance.<br />
Eseguendo questo comando</p>
<blockquote><p>mysqladmin -uroot -pPASSWORD processlist -i1</p></blockquote>
<p>si puo&#8217; verificare se ci sono tabelle temporanee gestite lentamente. Se dovesse essere questo il caso, e&#8217; necessario (memoria permettendo) aumentare tmp_table_size</p>
<p>Si imposta nella sezione [mysql] ad es.</p>
<p>[mysqld]</p>
<p>tmp_table_size = 96M</p>
<p><strong>innodb_buffer_pool_size</strong></p>
<p>Come tmp_table_size ma per le tabelle di tipo InnoDB. Si puo&#8217; impostare questo valore pari al 70/80% della memoria dedicata al servizio mysql</p>
<p><strong>skip-innodb</strong></p>
<p>Se non state utilizzando tabelle di tipo innodb, aggiungete questa direttiva nella sezione [mysqld] della configurazione del servizio</p>
<p><strong>Utilizzare la cache per le query</strong></p>
<p>Per abilitare la cache sulle query impostare</p>
<blockquote><p>query-cache-type = 1</p>
<p>query-cache-size = 16777216</p>
<p>(questo valore e&#8217; espresso in byte)</p></blockquote>
<p>Adesso nella console di mysql eseguite questo:</p>
<blockquote><p>show status like &#8216;%qcache%&#8217;;</p></blockquote>
<p>e guardate il valore di</p>
<blockquote><p>Qcache_free_memory<br />
Qcache_lowmem_prunes</p></blockquote>
<p><em>Qcache_free_memory</em> indica la memoria disponibile che potra&#8217; essere ancora utilizzata per la cache.<br />
Il valore di <em>Qcache_lowmem_prunes</em> viene aumentato ogni qualvolta che viene rimossa una query dalla cache. Se vedete aumentare questo valore molto rapidamente, dovrete aumentare query-cache-size.</p>
<p><em>N.B. query_cache_limit indica la dimensione massima del risultato di una query. Se viene superato quella query non sara&#8217; inserita nella cache</em></p>
<p>Per ripulire la cache bastera&#8217; eseguire questo comando dalla console di mysql</p>
<blockquote><p>RESET QUERY CACHE</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.deec.it/2010/02/06/mysql-tuning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

