<?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>dasini.net - Journal d'un expert MySQL &#187; MySQL 5.1</title>
	<atom:link href="http://dasini.net/blog/tag/mysql-51/feed/" rel="self" type="application/rss+xml" />
	<link>http://dasini.net/blog</link>
	<description>Repousser les frontières de la connaissance</description>
	<lastBuildDate>Thu, 22 Jul 2010 14:13:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Présentation: Vue d&#8217;ensemble de MySQL 5.1</title>
		<link>http://dasini.net/blog/2009/03/02/presentation-vue-densemble-de-mysql-51/</link>
		<comments>http://dasini.net/blog/2009/03/02/presentation-vue-densemble-de-mysql-51/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 13:41:00 +0000</pubDate>
		<dc:creator>freshdaz</dc:creator>
				<category><![CDATA[Présentation]]></category>
		<category><![CDATA[csv]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[MySQL 5.1]]></category>
		<category><![CDATA[MySQL Cluster]]></category>
		<category><![CDATA[mysqlslap]]></category>
		<category><![CDATA[partitionnement]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xpath]]></category>

		<guid isPermaLink="false">http://dasini.net/blog/?p=474</guid>
		<description><![CDATA[Numéro un pour les applications en ligne, MySQL se positionne maintenant sur le secteur des applications d’entrepôts de données et d’informatique décisionnelle…

http://dasini.net/blog/presentations/?#presentation_mysql51]]></description>
			<content:encoded><![CDATA[<p>Numéro un pour les applications en ligne, MySQL se positionne maintenant sur le secteur des applications d’entrepôts de données et d’informatique décisionnelle…</p>
<p><a title="Présentaion de MySQL 5.1" href="http://dasini.net/blog/presentations/?#presentation_mysql51" target="_self">http://dasini.net/blog/presentations/?#presentation_mysql51</a></p>
<p><a title="Présentaion de MySQL 5.1" href="http://dasini.net/blog/wp-includes/pdf/olivier_dasini_overview_mysql_5.1.pdf" target="_blank">PDF à télécharger</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dasini.net/blog/2009/03/02/presentation-vue-densemble-de-mysql-51/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les nouveautés de MySQL 5.1 &#8212; (part 5/5)</title>
		<link>http://dasini.net/blog/2009/01/04/les-nouveautes-de-mysql-51-part-55/</link>
		<comments>http://dasini.net/blog/2009/01/04/les-nouveautes-de-mysql-51-part-55/#comments</comments>
		<pubDate>Sat, 03 Jan 2009 23:04:44 +0000</pubDate>
		<dc:creator>freshdaz</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[bench]]></category>
		<category><![CDATA[MySQL 5.1]]></category>
		<category><![CDATA[mysqlslap]]></category>

		<guid isPermaLink="false">http://dasini.net/blog/?p=362</guid>
		<description><![CDATA[mysqlslap : un utilitaire de test de charge et de performance

Disponible depuis MySQL 5.1.4, mysqlslap permet d'effectuer des tests de stress et de charge sur votre serveur MySQL. Vous pourrez alors tester les performances de votre SGBDR préféré, après, par exemple, une nouvelle installation, un changement d'architecture ou après avoir modifié des paramètres de configuration.]]></description>
			<content:encoded><![CDATA[<p><!-- 	 	 --><br />
<em>(<a title="Les nouveautés de MySQL 5.1 -- (part 4/5)" href="http://dasini.net/blog/2008/12/13/les-nouveautes-de-mysql-51-part-45/">&lt;- précédent</a>)</em><br />
<!-- 	 	 --></p>
<h2>mysqlslap : un utilitaire de test de charge et de performance</h2>
<p>Disponible depuis MySQL 5.1.4, <em>mysqlslap</em> permet d&#8217;effectuer des tests de stress et de charge sur votre serveur MySQL. Vous pourrez alors tester les performances de votre SGBDR préféré, après, par exemple, une nouvelle installation, un changement d&#8217;architecture ou après avoir modifié des paramètres de configuration.</p>
<p>Créé pour devenir le meilleur ami des administrateurs de bases de données et des développeurs, le client <em>mysqlslap</em> envoie des requêtes au serveur MySQL en créant plusieurs connexions simultanées. A la fin de la simulation, un rapport de diagnostic est crée sur la sortie standard. Vous avez aussi la possibilité de l&#8217;écrire dans un fichier au format CSV utilisable directement avec Calc d&#8217;OpenOffice ou Excel de Microsoft.</p>
<p>Exemple d&#8217;utilisation de <em>mysqlslap</em> avec les options suivantes :</p>
<ul>
<li><strong>user</strong>, <strong>password</strong>, <strong>socket </strong>: autentification classique d&#8217;un client MySQL,</li>
<li><strong>concurrency </strong>: nombre de 	clients effectuant simultanément une requête SELECT,</li>
<li><strong>iterations </strong>: nombre 	d&#8217;itérations du test à faire,</li>
<li><strong>number-of-queries</strong> : 	nombre total de requêtes effectuées lors du test,</li>
<li><strong>engine </strong>: moteur(s) à 	utiliser,</li>
<li><strong>auto-generate-sql</strong> : 	<em>mysqlslap</em> génère automatiquement un jeu de tests,</li>
<li><strong>number-int-cols</strong> : nombre 	de colonnes de type INT à créer,</li>
<li><strong>number-char-cols</strong> : 	nombre de colonnes de type CHAR à créer,</li>
<li><strong>auto-generate-sql-load-type</strong> : permet de spécifier le type de requêtes (lecture, insertion, 	lecture sur la clé primaire, mise à jour ou mixte)</li>
</ul>
<p><!-- 	 	 --></p>
<p>Tests de performances avec des tables MyISAM et innoDB:</p>
<pre>shell&gt; mysqlslap --user=daz --password --socket=/tmp/mysql51.sock
--concurrency=1,100   --iterations=10  --number-of-queries=1000
--engine=myisam,innodb   --auto-generate-sql  --number-int-cols=2
--number-char-cols=3   --auto-generate-sql-load-type=mixed

<!-- 	 	 -->
Benchmark
   Running for engine myisam
   Average number of seconds to run all queries: 1.576 seconds
   Minimum number of seconds to run all queries: 1.539 seconds
   Maximum number of seconds to run all queries: 1.631 seconds
   Number of clients running queries: 1
   Average number of queries per client: 1000
Benchmark
   Running for engine myisam
   Average number of seconds to run all queries: 1.792 seconds
   Minimum number of seconds to run all queries: 1.543 seconds
   Maximum number of seconds to run all queries: 2.107 seconds
   Number of clients running queries: 100
   Average number of queries per client: 10
Benchmark
   Running for engine innodb
   Average number of seconds to run all queries: 2.477 seconds
   Minimum number of seconds to run all queries: 2.430 seconds
   Maximum number of seconds to run all queries: 2.663 seconds
   Number of clients running queries: 1
   Average number of queries per client: 1000
Benchmark
   Running for engine innodb
   Average number of seconds to run all queries: 2.704 seconds
   Minimum number of seconds to run all queries: 0.725 seconds
   Maximum number of seconds to run all queries: 5.272 seconds
   Number of clients running queries: 100
   Average number of queries per client: 10</pre>
<p><em></em><br />
<!-- 	 	 --></p>
<p><!-- 	 	 --></p>
<h2>Conclusion</h2>
<p>Toujours aussi performant, fiable et robuste, certes un peu moins simple à administrer mais tellement plus riche, cette nouvelle version de MySQL devrait faire le bonheur des administrateurs de bases de données et des développeurs. Nous espérons que cet article vous a mis l&#8217;eau à la bouche et vous donnons d&#8217;ors et déjà rendez-vous au prochain numéro pour explorer plus en détail le partitionnement de MySQL.</p>
<p><!-- 	 	 --></p>
<p><em><a title="Les nouveautés de MySQL 5.1 -- (part 1/5)" href="http://dasini.net/blog/2008/11/28/les-nouveautes-de-mysql-51-part-15/">Les nouveautés de MySQL 5.1 &#8212; (part 1/5)</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://dasini.net/blog/2009/01/04/les-nouveautes-de-mysql-51-part-55/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Les nouveautés de MySQL 5.1 &#8212; (part 4/5)</title>
		<link>http://dasini.net/blog/2008/12/13/les-nouveautes-de-mysql-51-part-45/</link>
		<comments>http://dasini.net/blog/2008/12/13/les-nouveautes-de-mysql-51-part-45/#comments</comments>
		<pubDate>Sat, 13 Dec 2008 16:26:56 +0000</pubDate>
		<dc:creator>freshdaz</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[csv]]></category>
		<category><![CDATA[MySQL 5.1]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xpath]]></category>

		<guid isPermaLink="false">http://dasini.net/blog/?p=334</guid>
		<description><![CDATA[Le moteur de stockage CSV n'est pas une vraie nouveauté. Il est disponible depuis MySQL 4.1.4 (MySQL 5.1 pour M.S. Windows). Sa particularité est de stocker les données dans un fichier texte au format CSV (Comma Separated Values) où les données sont séparées par une virgule. Les avantages sont multiples, comme la possibilité d'éditer les données avec un éditeur de texte ou un tableur(Open Office Calc, Excel...) ou encore la possibilité de charger simplement d'énormes volumes de données dans le serveur MySQL.]]></description>
			<content:encoded><![CDATA[<p><!-- 	 	 --><br />
<em>(<a title="Les nouveautés de MySQL 5.1 -- (part 3/5)" href="http://dasini.net/blog/2008/12/06/les-nouveautes-de-mysql-51-part-35/">&lt;- précédent</a>)</em><br />
<!-- 	 	 --></p>
<h2>Le moteur de stockage CSV</h2>
<p>Le moteur de stockage CSV n&#8217;est pas une vraie nouveauté. Il est disponible depuis MySQL 4.1.4 (MySQL 5.1 pour M.S. Windows). Sa particularité est de stocker les données dans un fichier texte au format CSV (<em>Comma</em> <em>Separated</em> <em>Values</em>) où les données sont séparées par une virgule. Les avantages sont multiples, comme la possibilité d&#8217;éditer les données avec un éditeur de texte ou un tableur(Open Office Calc, Excel&#8230;) ou encore la possibilité de charger simplement d&#8217;énormes volumes de données dans le serveur MySQL.</p>
<p>Créer sa table au format CSV est très simple. On reste dans la logique MySQL de création de table : il faut en fait simplement spécifier CSV comme moteur (il n&#8217;est pas possible d&#8217;avoir des index, ni du partitionnement).</p>
<p>Pour créer une table au format CSV:</p>
<pre>CREATE TABLE t_csv (
   id int, nom CHAR(50),
   prenom CHAR(50)
) ENGINE=CSV;</pre>
<h2>Le support de XML/XPath</h2>
<p>A partir de MySQL version 5.1.5, un support basique de XML est implémenté sous la forme de deux fonctions: <strong>ExtractValue</strong> et <strong>UpdateXML</strong>.</p>
<ul>
<li><span style="text-decoration: underline;">ExtractValue</span> permet d&#8217;extraire les valeurs des différentes balises,</li>
</ul>
<ul>
<li><span style="text-decoration: underline;">UpdateXML</span> permet de 	modifier la sortie d&#8217;un document XML.</li>
</ul>
<p>Quelques exemples d&#8217;utilisation de ces deux fonctions avec la table <em>t_xml</em> et le fichier XML suivant (contenu dans le champ texte de la table <span style="text-decoration: underline;">t_xml</span>)</p>
<p>Fichier XML et la table t_xml:</p>
<pre>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
&lt;profil&gt;
   &lt;formation categorie="MySQL" nbr_formation="5"&gt;
      &lt;formateur&gt;Olivier DASINI&lt;/formateur&gt;
      &lt;formateur&gt;Pierre DUMONT&lt;/formateur&gt;
      &lt;Entreprise&gt;Anaska&lt;/Entreprise&gt;
   &lt;/formation&gt;
   &lt;formation categorie="PHP" nbr_formation="5"&gt;
      &lt;formateur&gt;Olivier DASINI&lt;/formateur&gt;
      &lt;formateur&gt;Cyril PIERRE DE GEYER&lt;/formateur&gt;
      &lt;formateur&gt;Romain BOURDON&lt;/formateur&gt;
      &lt;formateur&gt;Julien PAULI&lt;/formateur&gt;
      &lt;Entreprise&gt;Anaska&lt;/Entreprise&gt;
   &lt;/formation&gt;
   &lt;formation categorie="Linux" nbr_formation="10"&gt;
      &lt;formateur&gt;Pierre DUMONT&lt;/formateur&gt;
      &lt;formateur&gt;Fabien ALLARD&lt;/formateur&gt;
      &lt;Entreprise&gt;Anaska&lt;/Entreprise&gt;
   &lt;/formation&gt;
   &lt;formation categorie="Open Office" nbr_formation="3"&gt;
      &lt;formateur&gt;Sarah HAIM&lt;/formateur&gt;
      &lt;Entreprise&gt;Anaska&lt;/Entreprise&gt;
   &lt;/formation&gt;
&lt;/profil&gt;

CREATE TABLE t_xml (
   id int(11) NOT NULL AUTO_INCREMENT,
   texte text,
   PRIMARY KEY (id)
) ENGINE=MyISAM;</pre>
<p align="left">Pour avoir la liste des formateurs :</p>
<p align="left">
<pre>mysql&gt; SELECT EXTRACTVALUE(texte,'/profil/formation/formateur') AS result FROM
t_xml\G
*************************** 1. row ***************************
result: Olivier DASINI Pierre DUMONT Olivier DASINI Cyril PIERRE DE GEYER Romain
BOURDON Julien PAULI Pierre DUMONT Fabien ALLARD Sarah HAIM
1 row in set (0.00 sec)</pre>
<p align="left">
<p align="left">
<p align="left">
<p>Récupérer seulement les formateurs MySQL :</p>
<pre>mysql&gt;SELECT  EXTRACTVALUE(texte,'/profil/formation[contains(@categorie,"MySQL")
]/formateur') AS result FROM t_xml\G
*************************** 1. row ***************************
result: Olivier DASINI Pierre DUMONT
1 row in set (0.09 sec)</pre>
<p align="left">
<p align="left">
<p align="left">
<p>Remplacer <span style="text-decoration: underline;">&lt;formateur&gt;Olivier DASINI&lt;/formateur&gt;</span> par <span style="text-decoration: underline;">&lt;formateur&gt;Freshdaz&lt;/formateur&gt;</span></p>
<p align="left">
<pre>mysql&gt; SELECT UPDATEXML('&lt;profil&gt;&lt;formation categorie="MySQL" nbr_formation="5"&gt;
&lt;formateur&gt;Olivier DASINI&lt;/formateur&gt;&lt;formateur&gt;Pierre DUMONT&lt;/formateur&gt;
&lt;/formation&gt;&lt;/profil&gt;', '/profil/formation/formateur[contains(.,"Olivier")]'
, '&lt;formateur&gt;Freshdaz&lt;/formateur&gt;') AS result\G
*************************** 1. row ***************************
result: &lt;profil&gt;&lt;formation categorie="MySQL" nbr_formation="5"&gt;
&lt;formateur&gt;Freshdaz&lt;/formateur&gt;&lt;formateur&gt;Pierre DUMONT&lt;/formateur&gt;
&lt;/formation&gt;&lt;/profil&gt;
1 row in set (0.00 sec)</pre>
<p><em>(<a title="Les nouveautés de MySQL 5.1 -- (part 5/5)" href="http://dasini.net/blog/2009/01/04/les-nouveautes-de-mysql-51-part-55/">à suivre&#8230; mysqlslap</a>)</em></p>
<p align="left">
]]></content:encoded>
			<wfw:commentRss>http://dasini.net/blog/2008/12/13/les-nouveautes-de-mysql-51-part-45/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Les nouveautés de MySQL 5.1 &#8212; (part 3/5)</title>
		<link>http://dasini.net/blog/2008/12/06/les-nouveautes-de-mysql-51-part-35/</link>
		<comments>http://dasini.net/blog/2008/12/06/les-nouveautes-de-mysql-51-part-35/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 23:27:07 +0000</pubDate>
		<dc:creator>freshdaz</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[general log]]></category>
		<category><![CDATA[MySQL 5.1]]></category>
		<category><![CDATA[MySQL Cluster]]></category>
		<category><![CDATA[slow query log]]></category>

		<guid isPermaLink="false">http://dasini.net/blog/?p=295</guid>
		<description><![CDATA[MySQL propose une solution de haute disponibilité : MySQL Cluster. Cette technologie permet de mettre en place une architecture cluster shared nothing à l'aide de tables au format NDBCluster. Jusqu'à MySQL 5.0, MySQL Cluster ne fonctionnait qu'entièrement en mémoire. Ceci excluait donc certaines bases de données trop volumineuses. La nouvelle version 5.1 lève cette limitation en permettant de mettre les données sur disque.]]></description>
			<content:encoded><![CDATA[<p><!-- 	 	 --><br />
<em>(<a title="Les nouveautés de MySQL 5.1 -- (part 2/5)" href="http://dasini.net/blog/2008/12/03/les-nouveautes-de-mysql-51-part-25/">&lt;- précédent</a>)</em><br />
<!-- 	 	 --></p>
<h2>MySQL Cluster : support des données sur disque</h2>
<p>MySQL propose une solution de haute disponibilité : MySQL Cluster. Cette technologie permet de mettre en place une architecture cluster <em><strong>shared nothing</strong></em> à l&#8217;aide de tables au format <em><strong>NDBCluster</strong></em>. Jusqu&#8217;à MySQL 5.0, MySQL Cluster ne fonctionnait qu&#8217;entièrement en mémoire. Ceci excluait donc certaines bases de données trop volumineuses. La nouvelle version 5.1 lève cette limitation en permettant de mettre les données sur disque.</p>
<p>Pour enregistrer ses données sur le disque, il faut au préalable définir deux nouveaux objets : un <strong>LOGFILE GROUP</strong> et un <strong>TABLESPACE</strong>.</p>
<p><strong>LOGFILE GROUP</strong> : permet gérer les <em><strong>undo log</strong></em> et le <em><strong>crash-recovery</strong></em></p>
<p>Pour créer un logfile group:</p>
<pre>CREATE LOGFILE GROUP lg_1
   ADD UNDOFILE 'undo_1.dat'
   INITIAL_SIZE 16M
   UNDO_BUFFER_SIZE 2M
   ENGINE NDB;
ALTER LOGFILE GROUP lg_1
   ADD UNDOFILE 'undo_2.dat'
   INITIAL_SIZE 12M
   ENGINE NDB;</pre>
<p align="left"><strong>TABLESPACE</strong> : pour stocker les données. A noter que le <em><strong>tablespace</strong></em> utilise le <em><strong>logfile group</strong></em> créé</p>
<p align="left">
<p align="left">On peut maintenant créer la table et l&#8217;associer au <em><strong>tablespace</strong></em></p>
<p align="left">
<p>Création d&#8217;un tablespace:</p>
<pre>CREATE TABLESPACE ts_1
   ADD DATAFILE 'data_1.dat'
   USE LOGFILE GROUP lg_1
   INITIAL_SIZE 32M
   ENGINE NDB;
ALTER TABLESPACE ts_1
   ADD DATAFILE 'data_2.dat'
   INITIAL_SIZE 48M
   ENGINE NDB;</pre>
<p align="left">
<p>Création d&#8217;une table au format NDBCluster avec données sur disque:</p>
<pre>CREATE TABLE 'City' (
   'ID' int(11) NOT NULL AUTO_INCREMENT,
   'Name' char(35) NOT NULL DEFAULT '',
   'Population' int(11) NOT NULL DEFAULT '0',
   PRIMARY KEY ('ID')
) TABLESPACE ts_1
   STORAGE DISK
   ENGINE=NDB;</pre>
<h2>Les tables de journalisation</h2>
<p>MySQL offre la possibilité de journaliser l&#8217;activité du serveur. en activant le <strong>general log</strong>. Il est aussi est possible de journaliser seulement les requêtes lentes (celles qui s&#8217;exécutent en un temps supérieur au seuil que vous aurez préalablement fixé) en activant le <strong>slow_query_log</strong>.</p>
<p>MySQL 5.1 permet toujours de journaliser ces informations dans un fichier, et ajoute la possibilité de le faire en plus dans une table.</p>
<p>Cerise sur le gâteau, la journalisation peut être démarrée ou arrêtée à chaud.</p>
<p>Les commandes <strong>SHOW VARIABLES LIKE &#8216;general_log&#8217;</strong> et <strong>SHOW VARIABLES LIKE &#8216;log_output&#8217;</strong> permettent, respectivement, de savoir si le <strong>general_log</strong> est activé et sous quelle forme.</p>
<p>Pour afficher l&#8217;état du general_log:</p>
<pre>mysql&gt; SHOW VARIABLES LIKE 'general_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log   | OFF   |
+---------------+-------+
1 row in set (0.03 sec)

mysql&gt; SHOW VARIABLES LIKE 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | TABLE |
+---------------+-------+</pre>
<p align="left">
<p align="left">Le <strong>general_log</strong> peut être activé dynamiquement avec la commande <strong>SET</strong> :</p>
<p align="left">
<pre>mysql&gt; SET GLOBAL general_log = 1;
Query OK, 0 rows affected (0.04 sec)</pre>
<p>Le format de sortie peut lui aussi être changé dynamiquement :</p>
<pre>+---------------------+-------------------------+-----------+-----------
+--------------+---------------------------------------+
| event_time          | user_host               | thread_id | server_id
| command_type | argument                              |
+---------------------+-------------------------+-----------+-----------
+--------------+---------------------------------------+
| 2008-02-21 15:51:06 | daz[daz] @ localhost [] |        10 |        51
| Query        | SET GLOBAL log_output = ‘TABLE, FILE' |
| 2008-02-21 15:51:06 | daz[daz] @ localhost [] |        10 |        51
| Query        | SELECT * FROM mysql.general_log       |
+---------------------+-------------------------+-----------+-----------
+--------------+---------------------------------------+
2 rows in set (0.00 sec)</pre>
<pre>mysql&gt; SET GLOBAL log_output = 'TABLE,FILE';
Query OK, 0 rows affected (0.00 sec)</pre>
<p><!-- 	 	 --></p>
<p>Les mêmes opérations sont possibles sur le <strong>slow_query_log</strong> :</p>
<pre>mysql&gt; SHOW VARIABLES LIKE 'slow_query_log';
+----------------+-------+
| Variable_name | Value  |
+----------------+-------+
| slow_query_log | ON    |
+----------------+-------+
1 row in set (0.00 sec)

mysql&gt; SELECT * FROM mysql.slow_log;
+------------+----------------------+-----------+-----------+---------------+-----+
| start_time | user_host query_time | lock_time | rows_sent | rows_examined | db |
      | last_insert_id | insert_id | server_id | sql_text
-----------------------------------------------------------------------------------
| 2008-02-21 15:57:13 | daz[daz] @ localhost [] | 00:00:00 | 00:00:00 | 0 | 0 |
      | test | 0 | 0 | 51 | SELECT * FROM mysql.slow_log |
| 2008-02-21 15:57:38 | daz[daz] @ 640m [192.168.1.106] | 00:00:00 | 00:00:00 | 268 |
      | 268 | mysql | 0 | 0 | 51 | SELECT * FROM information_schema.
      GLOBAL_VARIABLES G |
| 2008-02-21 15:57:43 | daz[daz] @ localhost [] | 00:00:00 | 00:00:00 | 2 | 2 | test |
      | 0 | 0 | 51 | SELECT * FROM mysql.slow_log |
+------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)</pre>
<p><em>(<a title="Les nouveautés de MySQL 5.1 -- (part 4/5)" href="http://dasini.net/blog/2008/12/13/les-nouveautes-de-mysql-51-part-45/">à suivre&#8230; Le moteur de stockage CSV &amp; Le support de XML/XPath</a>)</em></p>
<p align="left">
]]></content:encoded>
			<wfw:commentRss>http://dasini.net/blog/2008/12/06/les-nouveautes-de-mysql-51-part-35/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Les nouveautés de MySQL 5.1 &#8212; (part 2/5)</title>
		<link>http://dasini.net/blog/2008/12/03/les-nouveautes-de-mysql-51-part-25/</link>
		<comments>http://dasini.net/blog/2008/12/03/les-nouveautes-de-mysql-51-part-25/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 00:37:25 +0000</pubDate>
		<dc:creator>freshdaz</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[event scheduler]]></category>
		<category><![CDATA[MySQL 5.1]]></category>
		<category><![CDATA[replication]]></category>
		<category><![CDATA[row based]]></category>
		<category><![CDATA[statement based]]></category>

		<guid isPermaLink="false">http://dasini.net/blog/?p=275</guid>
		<description><![CDATA[Pouvoir automatiser ses tâches de manière fiable et simple est le rêve de tout administrateur de base de données. Le programmateur d'évènements (Event Scheduler) est un planificateur de tâches (CRON-like) embarqué dans MySQL 5.1.]]></description>
			<content:encoded><![CDATA[<p><!-- 	 	 --><br />
<em>(<a title="Les nouveautés de MySQL 5.1 -- (part 1/5)" href="http://dasini.net/blog/2008/11/28/les-nouveautes-de-mysql-51-part-15/">&lt;- précédent</a>)</em><br />
<!-- 	 	 --></p>
<h2>Le programmateur d&#8217;évènements</h2>
<p>Pouvoir automatiser ses tâches de manière fiable et simple est le rêve de tout administrateur de base de données. Le programmateur d&#8217;évènements (<em><strong>Event Scheduler</strong></em>) est un planificateur de tâches (<strong>CRON-like</strong>) embarqué dans MySQL 5.1.</p>
<p>Il est alors possible d&#8217;exécuter, de façon récurrente ou <em>unique</em>, des <em>requêtes</em>, en fonction de la date et de l&#8217;heure.</p>
<p>L&#8217;évènement se crée avec la commande <strong>CREATE EVENT</strong>.</p>
<pre>CREATE EVENT nom_evenement ON SCHEDULE
      &lt;moment&gt; DO &lt;code_sql&gt;</pre>
<p>L&#8217;évènement peut être lancé une seule fois (<strong>AT</strong>) ou de manière répétitive (<strong>EVERY</strong>)</p>
<p><strong>&lt;moment&gt; = AT | EVERY</strong></p>
<p>L&#8217;évènement est constitué d&#8217;un ensemble de requêtes.</p>
<p><strong>&lt;code_sql&gt; = requêtes sql</strong></p>
<p>Créer une vue matérialisée rafraîchie toutes les 10 minutes :</p>
<pre>DELIMITER //
CREATE EVENT vue_materialisee
ON SCHEDULE EVERY 10 MINUTE
DO
BEGIN
   TRUNCATE TABLE _event.City_fra;
   INSERT INTO _event.City_fra
      SELECT * FROM world.City WHERE CountryCode='FRA'
      ORDER BY name;
END//
DELIMITER ;</pre>
<p align="left">
<h2>La réplication par les données (row based)</h2>
<p>MySQL permet de journaliser dans un fichier les requêtes d&#8217;écriture effectuées sur le serveur. Ce fichier, le <em>binary log</em>, stocke ces requêtes en un format binaire (d&#8217;où son nom). Il est indispensable à la réplication, et est également utilisé pour la restauration du serveur.</p>
<p>A partir de MySQL 5.1, le serveur permet de stocker cette information, non plus seulement sous forme de requêtes (<em><strong>statement</strong></em><strong> </strong><em><strong>based</strong></em>) mais également sous forme de lignes (<em><strong>row</strong></em><strong> </strong><em><strong>based</strong></em>). Cette nouvelle fonctionnalité est intéressante, en particulier en cas de réplication de requêtes non déterministes.</p>
<p>La commande <strong>SHOW VARIABLES LIKE &#8216;binlog_format&#8217;</strong> permet de connaître le format du journal binaire</p>
<pre>mysql&gt; SHOW VARIABLES LIKE 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | MIXED |
+---------------+-------+
1 row in set (0.00 sec)</pre>
<p align="left">
<p align="left">
<p align="left">Trois options de journalisation sont disponibles :</p>
<ul>
<li><em><strong>Statement</strong></em><strong> </strong><em><strong>based</strong></em> (mode par défaut) : On journalise la requête <em>telle-quelle</em> (pas son résultat),</li>
<li><em><strong>Row</strong></em><strong> </strong><em><strong>based</strong></em> : On journalise le résultat de la requête,</li>
<li><em><strong>Mixed</strong></em> : MySQL 	choisit entre <em>statement</em> et <em>row</em> en fonction du 	contexte.</li>
</ul>
<p>Le mode de journalisation peut être changé dynamiquement avec la commande <strong>SET</strong></p>
<pre>mysql&gt; SET SESSION binlog_format='ROW';
Query OK, 0 rows affected (0.00 sec)

mysql&gt; SHOW VARIABLES LIKE 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.01 sec)

mysql&gt; SET SESSION binlog_format='STATEMENT';
Query OK, 0 rows affected (0.00 sec)

mysql&gt; SHOW VARIABLES LIKE 'binlog_format';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.01 sec)

mysql&gt; SET SESSION binlog_format='MIXED';
Query OK, 0 rows affected (0.00 sec)

mysql&gt; SHOW VARIABLES LIKE 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | MIXED |
+---------------+-------+
1 row in set (0.01 sec)</pre>
<p><em>(<a title="Les nouveautés de MySQL 5.1 -- (part 3/5)" href="http://dasini.net/blog/2008/12/06/les-nouveautes-de-mysql-51-part-35/">à suivre&#8230; MySQL Cluster &amp; general log, slow query log dans une table</a>)</em></p>
<p align="left">
]]></content:encoded>
			<wfw:commentRss>http://dasini.net/blog/2008/12/03/les-nouveautes-de-mysql-51-part-25/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Les nouveautés de MySQL 5.1 &#8212; (part 1/5)</title>
		<link>http://dasini.net/blog/2008/11/28/les-nouveautes-de-mysql-51-part-15/</link>
		<comments>http://dasini.net/blog/2008/11/28/les-nouveautes-de-mysql-51-part-15/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 10:10:32 +0000</pubDate>
		<dc:creator>freshdaz</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[hash]]></category>
		<category><![CDATA[key]]></category>
		<category><![CDATA[list]]></category>
		<category><![CDATA[MySQL 5.1]]></category>
		<category><![CDATA[partitionnement]]></category>
		<category><![CDATA[range]]></category>

		<guid isPermaLink="false">http://dasini.net/blog/?p=237</guid>
		<description><![CDATA[Que de chemin parcouru depuis ce 5 juillet 1999, date de lancement de MySQL 3.23.0. En plus des objectifs de simplicité d'administration, de hautes performances et de fiabilité, se sont greffées, au fur et à mesure, les fonctionnalités les plus demandées par les utilisateurs. La nouvelle version du SGBDR open-source le plus utilisé, sortie en GA le jeudi 27 novembre 2008, ne déroge pas à ces règles d'or. Numéro un pour les applications en ligne, MySQL se positionne maintenant sur le secteur des applications d'entrepôts de données et d'informatique décisionnelle.]]></description>
			<content:encoded><![CDATA[<p>Que de chemin parcouru depuis ce 5 juillet 1999, date de lancement de MySQL 3.23.0. En plus des objectifs de simplicité d&#8217;administration, de hautes performances et de fiabilité, se sont greffées, au fur et à mesure, les fonctionnalités les plus demandées par les utilisateurs. La nouvelle version du SGBDR open-source le plus utilisé, sortie en GA le jeudi 27 novembre 2008, ne déroge pas à ces règles d&#8217;or. Numéro un pour les applications en ligne, MySQL se positionne maintenant sur le secteur des applications d&#8217;entrepôts de données et d&#8217;informatique décisionnelle.</p>
<p>Le but de cet article est de brasser un large panorama des principales nouveautés de MySQL 5.1, telles que le <a title="Partitioning" href="http://dasini.net/blog/2008/11/28/les-nouveautes-de-mysql-51-part-15/">partitionnement</a>, le <a title="events scheduler" href="http://dasini.net/blog/2008/12/03/les-nouveautes-de-mysql-51-part-25/">programmateur d&#8217;évènements</a>, la <a title="row based replication" href="http://dasini.net/blog/2008/12/03/les-nouveautes-de-mysql-51-part-25/">réplication par les données</a>, ainsi que le support des données sur disque avec MySQL Cluster et le support xml/xpath.</p>
<h2>Le partitionnement</h2>
<p>Une des fonctionnalités phare de cette nouvelle mouture, est la possibilité de partitionner ses tables MySQL. Le partitionnement consiste à fragmenter une table en fonction des données qu&#8217;elle contient. Le but principal est d&#8217;optimiser les performances : le partitionnement peut permettre d&#8217;améliorer les réponses de certaines requêtes. Les données étant stockées dans différentes partitions, l&#8217;optimiseur ne prendra pas en compte les partitions non impactées par la requête (<em>PRUNING</em>).</p>
<p align="left">Un autre objectif est de faciliter certaines tâches de maintenance : les données d&#8217;une partition peuvent être facilement et rapidement effacées, simplement en supprimant la partition.</p>
<p>Enfin, le partitionnement permet de mettre les données et les index sur des disques différents : il est possible de stocker les données et les index sur des disques séparés, pour les tables <em>MyISAM</em>.</p>
<h3>Le partitionnement avec MySQL</h3>
<p>La commande <strong>SHOW VARIABLES LIKE &#8216;have_partitioning&#8217;</strong> est un moyen simple de savoir si votre version de MySQL supporte le partitionnement.</p>
<p align="left">
<pre>mysql&gt; SHOW VARIABLES LIKE 'have_partitioning';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| have_partitioning | YES   |
+-------------------+-------+
1 row in set (0.10 sec)</pre>
<p>L&#8217;opération de partitionnement proprement dite se réalise lors de la création de la table (avec la commande <strong>CREATE TABLE</strong>) ou lors de la modification de sa structure (avec la commande <strong>ALTER TABLE</strong>) en utilisant la clause <strong>PARTITION BY.</strong></p>
<pre>CREATE TABLE ... ENGINE = &lt;engine&gt;
      PARTITION BY &lt;type&gt; ( &lt;expression&gt; )</pre>
<p align="left">Il est a noter que les moteurs <em>Merge</em>, <em>Federated</em>, <em>CSV</em> ne permettent pas le partitionnement.</p>
<pre>&lt;engine&gt; = MyIsam | InnoDB | Archive | Falcon | NDBCluster | Memory</pre>
<p align="left">
<p align="left">MySQL propose 4 types de partitionnement, par intervalle (<strong>RANGE</strong>), par liste (<strong>LIST</strong>), et par hachage (<strong>HASH</strong> ou <strong>KEY</strong>).</p>
<p align="left">
<pre>&lt;type&gt; = RANGE | LIST | HASH | KEY</pre>
<h3>Quelques exemples de partitionnements</h3>
<p>Partitionner sa table est une opération très simple. Le plus délicat est finalement de savoir pourquoi partitionner et comment le faire. Le critère de partitionnement est donc essentiel pour espérer gagner en performance.</p>
<pre><strong>-- <span style="color: #993366;">Partitionnement par intervalle</span></strong>
CREATE TABLE 'City_part_range' (
   'ID' int(11) NOT NULL AUTO_INCREMENT,
   'Population' int(11) NOT NULL DEFAULT '0',  KEY 'ID' ('ID')
) ENGINE=MyISAM
   PARTITION BY RANGE (population) (
   PARTITION p0 VALUES LESS THAN (100),
   PARTITION p1 VALUES LESS THAN (1000),
   PARTITION p2 VALUES LESS THAN (10000),
   PARTITION p3 VALUES LESS THAN (100000),
   PARTITION p4 VALUES LESS THAN (1000000),
   PARTITION p5 VALUES LESS THAN MAXVALUE
);

<strong>-- <span style="color: #993300;">Partitionnement par liste</span></strong>
CREATE TABLE 'Country_part_list' (
   'Code' char(3) NOT NULL DEFAULT '',
   'Continent' tinyint UNSIGNED DEFAULT 1,
   KEY ('Code')
) ENGINE=MEMORY
   PARTITION BY LIST(Continent) (
   PARTITION pCateg1 VALUES IN (1),
   PARTITION pCateg2 VALUES IN (4),
   PARTITION pCateg3 VALUES IN (2,6),
   PARTITION pCateg4 VALUES IN (3,5,7)
);

<strong>-- <span style="color: #993366;">Partitionnement par hash</span></strong>
CREATE TABLE 'City_part_hash' (
   'ID' int(11) NOT NULL AUTO_INCREMENT,
   'Name' char(35) NOT NULL DEFAULT '',
   'CountryCode' char(3) NOT NULL DEFAULT '',
   'District' char(20) NOT NULL DEFAULT '',
   'Population' int(11) NOT NULL DEFAULT '0',
   PRIMARY KEY ('ID')
) ENGINE=InnoDB PARTITION BY HASH (id) PARTITIONS 4;

<strong>-- <span style="color: #993366;">Partitionnement par key</span></strong>
CREATE TABLE 'City_part_key' (
   'ID' int(11) NOT NULL AUTO_INCREMENT,
   'Name' char(35) NOT NULL DEFAULT '',
   'CountryCode' char(3) NOT NULL DEFAULT '',
   'District' char(20) NOT NULL DEFAULT '',
   'Population' int(11) NOT NULL DEFAULT '0',
   PRIMARY KEY ('ID')
) ENGINE=Archive PARTITION BY KEY () PARTITIONS 6;

<em>(<a title="Les nouveautés de MySQL 5.1 -- (part 2/5)" href="http://dasini.net/blog/2008/12/03/les-nouveautes-de-mysql-51-part-25/">à suivre... event scheduler &amp; row based Replication</a>)</em></pre>
<p align="left">
]]></content:encoded>
			<wfw:commentRss>http://dasini.net/blog/2008/11/28/les-nouveautes-de-mysql-51-part-15/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>MySQL Server 5.1.30 GA release</title>
		<link>http://dasini.net/blog/2008/11/27/mysql-server-5130-ga-release/</link>
		<comments>http://dasini.net/blog/2008/11/27/mysql-server-5130-ga-release/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 10:45:04 +0000</pubDate>
		<dc:creator>freshdaz</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[MySQL 5.1]]></category>

		<guid isPermaLink="false">http://dasini.net/blog/?p=227</guid>
		<description><![CDATA[MySQL 5.1 est enfin disponible pour la production]]></description>
			<content:encoded><![CDATA[<p>Enfin !</p>
<p> <img src='http://dasini.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>MySQL 5.1 est enfin disponible pour la production</p>
<p>Parmi les <a title="Les nouveautées de MySQL 5.1" href="http://dasini.net/blog/2008/11/28/les-nouveautes-de-mysql-51-part-15/">nouveautés</a>:</p>
<p>MySQL 5.1 provides a number of new enhancements including:</p>
<p>- <a href="http://dasini.net/blog/2008/11/28/les-nouveautes-de-mysql-51-part-15/">Le partitionnement</a><br />
- <a title="row based replication" href="http://dasini.net/blog/2008/12/03/les-nouveautes-de-mysql-51-part-25/">La réplication Row-based</a><br />
- <a title="events scheduler" href="http://dasini.net/blog/2008/12/03/les-nouveautes-de-mysql-51-part-25/">Les events scheduler</a><br />
- Amélioration du support XML et XPath</p>
<p>&#8230;</p>
<p><a title="Les nouveautés de MySQL 5.1" href="http://dasini.net/blog/2008/11/28/les-nouveautes-de-mysql-51-part-15/">http://dasini.net/blog/2008/11/28/les-nouveautes-de-mysql-51-part-15/</a></p>
<p><a title="MySQL 5.1 GA" href="http://dev.mysql.com/downloads/" target="_blank">http://dev.mysql.com/downloads/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dasini.net/blog/2008/11/27/mysql-server-5130-ga-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
