<?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>Cap Data Team SGBD Blog : Oracle, SQL Server, MySQL, Sybase... &#187; tables temporaires</title>
	<atom:link href="http://blog.capdata.fr/index.php/tag/tables-temporaires/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.capdata.fr</link>
	<description>Le blog technique sur les bases de données de CAP DATA Consulting</description>
	<lastBuildDate>Wed, 01 Feb 2012 17:21:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MySQL et les tables temporaires internes</title>
		<link>http://blog.capdata.fr/index.php/mysql-et-les-tables-temporaires-internes/</link>
		<comments>http://blog.capdata.fr/index.php/mysql-et-les-tables-temporaires-internes/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 16:04:34 +0000</pubDate>
		<dc:creator>Cédric PEINTRE</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[blob]]></category>
		<category><![CDATA[engine]]></category>
		<category><![CDATA[max_heap_table_size]]></category>
		<category><![CDATA[tables temporaires]]></category>
		<category><![CDATA[temporary tables]]></category>
		<category><![CDATA[text]]></category>
		<category><![CDATA[tmp_table_size]]></category>

		<guid isPermaLink="false">http://blog.capdata.fr/?p=293</guid>
		<description><![CDATA[MySQL créé des tables temporaires automatiquement lors de certaines sélections de données, en particulier lors de l&#8217;utilisation des clauses ORDER BY ou GROUP BY.
Le détail des cas de création de tables temporaires est disponible dans la documentation MySQL :

http://dev.mysql.com/doc/refman/5.1/en/internal-temporary-tables.html

Ces tables temporaires sont créées en mémoire par défaut, dans la limite de la taille définie par [...]]]></description>
			<content:encoded><![CDATA[<p>MySQL créé des tables temporaires automatiquement lors de certaines sélections de données, en particulier lors de l&#8217;utilisation des clauses <em>ORDER BY</em> ou<em> GROUP BY</em>.</p>
<p>Le détail des cas de création de tables temporaires est disponible dans la documentation MySQL :</p>
<ul>
<li><a href="http://dev.mysql.com/doc/refman/5.1/en/internal-temporary-tables.html" target="_blank">http://dev.mysql.com/doc/refman/5.1/en/internal-temporary-tables.html</a></li>
</ul>
<p>Ces tables temporaires sont créées en mémoire par défaut, dans la limite de la taille définie par le paramètre <strong><em>tmp_table_size</em> </strong>[taille par défaut dépendante de l'OS]. Au delà de cette limite, la table temporaire est créée sur disque. Attention toutefois, si la valeur du paramètre <em>max_heap_table_size</em> [16M par défaut] est inférieure à celle de <em>tmp_table_size</em>, alors les tables temporaires en mémoire seront limitées à <em>max_heap_table_size</em>. Pour simplifier les choses, positionnez les deux paramètres à la même valeur.</p>
<p>Il est évidemment plus performant de provoquer le maximum de création en mémoire en positionnant la valeur du paramètre<em> tmp_table_size</em> à une taille relativement importante (16M à 32M).<br />
Attention toutefois au débordement mémoire, en effet, cette taille peut potentiellement être consommée par chaque thread connecté !</p>
<p>La colonne <em>Extra </em>de la commande <em>EXPLAIN </em>pour une requête de type <em>SELECT </em>permet d&#8217;obtenir une information sur la création d&#8217;une éventuelle table temporaire.<br />
Dans ce cas (utilisation d&#8217;un<em> GROUP BY</em>), une table temporaire sera créée :</p>
<p style="text-align: center;">*************************** 1. row ***************************<br />
id: 1<br />
select_type: SIMPLE<br />
table: t_evenement<br />
type: ALL<br />
possible_keys: NULL<br />
key: NULL<br />
key_len: NULL<br />
ref: NULL<br />
rows: 14988<br />
Extra: <strong>Using temporary</strong>; Using filesort</p>
<p>En revanche, cette commande ne permet pas de savoir si la table temporaire est créée sur disque ou en mémoire, pour cela, il faudra s&#8217;appuyer sur les compteurs MySQL évoqués dans la suite de l&#8217;article.</p>
<p>Le graphe suivant présente un état des tables temporaires créées en mémoire et sur disque pour notre instance de production  :</p>
<div id="attachment_378" class="wp-caption aligncenter" style="width: 549px"><a href="http://www.capdata.fr/support-DBA-oracle-sqlserver-mysql-sybase.htm"><img class="size-full wp-image-378  " src="http://blog.capdata.fr/wp-content/uploads/2010/01/temporay_tables.jpg" alt="Tables temporaires" width="539" height="376" /></a><p class="wp-caption-text">Tables temporaires MySQL</p></div>
<p>Les compteurs MySQL utilisés pour relever ces valeurs sont<code> <em>Created_tmp_table</em> et <em>Created_tmp_disk_tables</em>.</code> Il n&#8217;est malheureusement pas possible de connaitre la taille consommée en mémoire ou sur disque par ces tables temporaires.</p>
<p>Ici, la quasi totalité des tables temporaires est créée sur disque. La taille maximum d&#8217;une table temporaire en mémoire est pourtant positionnée à une valeur relativement importante (48M).</p>
<p><strong>Le fait d&#8217;augmenter la valeur du <em>tmp_table_size</em> ne changera rien dans ce cas ! Explications :</strong></p>
<p>MySQL utilise le moteur de stockage <a href="http://dev.mysql.com/doc/refman/5.1/en/memory-storage-engine.html" target="_blank"><em>MEMORY </em></a>pour la création des tables temporaires internes. Ce moteur se comporte quasiment comme <em>MyISAM</em>, cependant, une  contrainte  de ce moteur vient perturber le fonctionnement des tables temporaires internes : <strong>Il n&#8217;est pas possible d&#8217;utiliser des colonnes de type BLOB ou TEXT pour les tables <em>MEMORY</em>.</strong></p>
<p>De ce fait, si MySQL doit créer une table temporaire pour un ordre <em>SELECT </em>contenant ces types de colonne, elle sera automatiquement créée sur disque.</p>
<p>Deux possibilités s&#8217;offrent à vous dans ce cas :</p>
<ul>
<li>Limiter l&#8217;utilisation des colonnes de type BLOB ou TEXT</li>
<li>Monter un système de fichier mémoire pour le stockage des tables temporaires interne MySQL</li>
</ul>
<p>[ Cédric P ]<strong>Continuez votre lecture sur le blog :</strong>
<ul class="similar-posts">
<li><a href="http://blog.capdata.fr/index.php/que-faire-des-warning-aborted-connection-avec-mysql/" rel="bookmark" title="25 mars 2010">Que faire des &laquo;&nbsp;[Warning] Aborted connection&nbsp;&raquo; avec MySQL ?</a> (Cédric PEINTRE) [MySQL]</li>
<li><a href="http://blog.capdata.fr/index.php/how-to-reduire-la-taille-du-journal-de-transactions-sur-disque/" rel="bookmark" title="11 juillet 2011">How-To: réduire la taille du journal de transactions sur disque</a> (David BAFFALEUF) [SQL Server]</li>
<li><a href="http://blog.capdata.fr/index.php/openrowset-episode-1/" rel="bookmark" title="13 juillet 2011">OPENROWSET, épisode 1</a> (David BAFFALEUF) [SQL Server]</li>
<li><a href="http://blog.capdata.fr/index.php/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees/" rel="bookmark" title="30 mai 2011">Error 8976 / 8978, problèmes de chaînage, comment récupérer les données</a> (David BAFFALEUF) [SQL Server]</li>
<li><a href="http://blog.capdata.fr/index.php/how-to-reduire-lenveloppe-de-tempdb/" rel="bookmark" title="7 juillet 2011">How-To : réduire l&#8217;enveloppe de tempdb</a> (David BAFFALEUF) [SQL Server]</li>
</ul>
<p><!-- Similar Posts took 3.314 ms -->
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fmysql-et-les-tables-temporaires-internes%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fmysql-et-les-tables-temporaires-internes%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.capdata.fr/index.php/mysql-et-les-tables-temporaires-internes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

