
{"id":237,"date":"2008-11-28T11:10:32","date_gmt":"2008-11-28T10:10:32","guid":{"rendered":"http:\/\/dasini.net\/blog\/?p=237"},"modified":"2008-12-04T12:25:55","modified_gmt":"2008-12-04T11:25:55","slug":"les-nouveautes-de-mysql-51-part-15","status":"publish","type":"post","link":"https:\/\/dasini.net\/blog\/2008\/11\/28\/les-nouveautes-de-mysql-51-part-15\/","title":{"rendered":"Les nouveaut\u00e9s de MySQL 5.1 &#8212; (part 1\/5)"},"content":{"rendered":"<p>Que de chemin parcouru depuis ce 5 juillet 1999, date de lancement de MySQL 3.23.0. En plus des objectifs de simplicit\u00e9 d&rsquo;administration, de hautes performances et de fiabilit\u00e9, se sont greff\u00e9es, au fur et \u00e0 mesure, les fonctionnalit\u00e9s les plus demand\u00e9es par les utilisateurs. La nouvelle version du SGBDR open-source le plus utilis\u00e9, sortie en GA le jeudi 27 novembre 2008, ne d\u00e9roge pas \u00e0 ces r\u00e8gles d&rsquo;or. Num\u00e9ro un pour les applications en ligne, MySQL se positionne maintenant sur le secteur des applications d&rsquo;entrep\u00f4ts de donn\u00e9es et d&rsquo;informatique d\u00e9cisionnelle.<\/p>\n<p>Le but de cet article est de brasser un large panorama des principales nouveaut\u00e9s 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&rsquo;\u00e9v\u00e8nements<\/a>, la <a title=\"row based replication\" href=\"http:\/\/dasini.net\/blog\/2008\/12\/03\/les-nouveautes-de-mysql-51-part-25\/\">r\u00e9plication par les donn\u00e9es<\/a>, ainsi que le support des donn\u00e9es sur disque avec MySQL Cluster et le support xml\/xpath.<\/p>\n<h2>Le partitionnement<\/h2>\n<p>Une des fonctionnalit\u00e9s phare de cette nouvelle mouture, est la possibilit\u00e9 de partitionner ses tables MySQL. Le partitionnement consiste \u00e0 fragmenter une table en fonction des donn\u00e9es qu&rsquo;elle contient. Le but principal est d&rsquo;optimiser les performances : le partitionnement peut permettre d&rsquo;am\u00e9liorer les r\u00e9ponses de certaines requ\u00eates. Les donn\u00e9es \u00e9tant stock\u00e9es dans diff\u00e9rentes partitions, l&rsquo;optimiseur ne prendra pas en compte les partitions non impact\u00e9es par la requ\u00eate (<em>PRUNING<\/em>).<\/p>\n<p align=\"left\">Un autre objectif est de faciliter certaines t\u00e2ches de maintenance : les donn\u00e9es d&rsquo;une partition peuvent \u00eatre facilement et rapidement effac\u00e9es, simplement en supprimant la partition.<\/p>\n<p>Enfin, le partitionnement permet de mettre les donn\u00e9es et les index sur des disques diff\u00e9rents : il est possible de stocker les donn\u00e9es et les index sur des disques s\u00e9par\u00e9s, pour les tables <em>MyISAM<\/em>.<\/p>\n<h3>Le partitionnement avec MySQL<\/h3>\n<p>La commande <strong>SHOW VARIABLES LIKE &lsquo;have_partitioning&rsquo;<\/strong> est un moyen simple de savoir si votre version de MySQL supporte le partitionnement.<\/p>\n<p align=\"left\">\n<pre>mysql&gt; SHOW VARIABLES LIKE 'have_partitioning';\r\n+-------------------+-------+\r\n| Variable_name     | Value |\r\n+-------------------+-------+\r\n| have_partitioning | YES   |\r\n+-------------------+-------+\r\n1 row in set (0.10 sec)<\/pre>\n<p>L&rsquo;op\u00e9ration de partitionnement proprement dite se r\u00e9alise lors de la cr\u00e9ation 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>\n<pre>CREATE TABLE ... ENGINE = &lt;engine&gt;\r\n      PARTITION BY &lt;type&gt; ( &lt;expression&gt; )<\/pre>\n<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>\n<pre>&lt;engine&gt; = MyIsam | InnoDB | Archive | Falcon | NDBCluster | Memory<\/pre>\n<p align=\"left\">\n<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>\n<p align=\"left\">\n<pre>&lt;type&gt; = RANGE | LIST | HASH | KEY<\/pre>\n<h3>Quelques exemples de partitionnements<\/h3>\n<p>Partitionner sa table est une op\u00e9ration tr\u00e8s simple. Le plus d\u00e9licat est finalement de savoir pourquoi partitionner et comment le faire. Le crit\u00e8re de partitionnement est donc essentiel pour esp\u00e9rer gagner en performance.<\/p>\n<pre><strong>-- <span style=\"color: #993366;\">Partitionnement par intervalle<\/span><\/strong>\r\nCREATE TABLE 'City_part_range' (\r\n   'ID' int(11) NOT NULL AUTO_INCREMENT,\r\n   'Population' int(11) NOT NULL DEFAULT '0',  KEY 'ID' ('ID')\r\n) ENGINE=MyISAM\r\n   PARTITION BY RANGE (population) (\r\n   PARTITION p0 VALUES LESS THAN (100),\r\n   PARTITION p1 VALUES LESS THAN (1000),\r\n   PARTITION p2 VALUES LESS THAN (10000),\r\n   PARTITION p3 VALUES LESS THAN (100000),\r\n   PARTITION p4 VALUES LESS THAN (1000000),\r\n   PARTITION p5 VALUES LESS THAN MAXVALUE\r\n);\r\n\r\n<strong>-- <span style=\"color: #993300;\">Partitionnement par liste<\/span><\/strong>\r\nCREATE TABLE 'Country_part_list' (\r\n   'Code' char(3) NOT NULL DEFAULT '',\r\n   'Continent' tinyint UNSIGNED DEFAULT 1,\r\n   KEY ('Code')\r\n) ENGINE=MEMORY\r\n   PARTITION BY LIST(Continent) (\r\n   PARTITION pCateg1 VALUES IN (1),\r\n   PARTITION pCateg2 VALUES IN (4),\r\n   PARTITION pCateg3 VALUES IN (2,6),\r\n   PARTITION pCateg4 VALUES IN (3,5,7)\r\n);\r\n\r\n<strong>-- <span style=\"color: #993366;\">Partitionnement par hash<\/span><\/strong>\r\nCREATE TABLE 'City_part_hash' (\r\n   'ID' int(11) NOT NULL AUTO_INCREMENT,\r\n   'Name' char(35) NOT NULL DEFAULT '',\r\n   'CountryCode' char(3) NOT NULL DEFAULT '',\r\n   'District' char(20) NOT NULL DEFAULT '',\r\n   'Population' int(11) NOT NULL DEFAULT '0',\r\n   PRIMARY KEY ('ID')\r\n) ENGINE=InnoDB PARTITION BY HASH (id) PARTITIONS 4;\r\n\r\n<strong>-- <span style=\"color: #993366;\">Partitionnement par key<\/span><\/strong>\r\nCREATE TABLE 'City_part_key' (\r\n   'ID' int(11) NOT NULL AUTO_INCREMENT,\r\n   'Name' char(35) NOT NULL DEFAULT '',\r\n   'CountryCode' char(3) NOT NULL DEFAULT '',\r\n   'District' char(20) NOT NULL DEFAULT '',\r\n   'Population' int(11) NOT NULL DEFAULT '0',\r\n   PRIMARY KEY ('ID')\r\n) ENGINE=Archive PARTITION BY KEY () PARTITIONS 6;\r\n\r\n<em>(<a title=\"Les nouveaut\u00e9s de MySQL 5.1 -- (part 2\/5)\" href=\"http:\/\/dasini.net\/blog\/2008\/12\/03\/les-nouveautes-de-mysql-51-part-25\/\">\u00e0 suivre... event scheduler &amp; row based Replication<\/a>)<\/em><\/pre>\n<p align=\"left\">\n","protected":false},"excerpt":{"rendered":"<p>Que de chemin parcouru depuis ce 5 juillet 1999, date de lancement de MySQL 3.23.0. En plus des objectifs de simplicit\u00e9 d&rsquo;administration, de hautes performances et de fiabilit\u00e9, se sont greff\u00e9es, au fur et \u00e0 mesure, les fonctionnalit\u00e9s les plus demand\u00e9es par les utilisateurs. La nouvelle version du SGBDR open-source le plus utilis\u00e9, sortie en GA le jeudi 27 novembre 2008, ne d\u00e9roge pas \u00e0 ces r\u00e8gles d&rsquo;or. Num\u00e9ro un pour les applications en ligne, MySQL se positionne maintenant sur le secteur des applications d&rsquo;entrep\u00f4ts de donn\u00e9es et d&rsquo;informatique d\u00e9cisionnelle.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"footnotes":""},"categories":[8],"tags":[27,61,62,241,59,60,63],"class_list":["post-237","post","type-post","status-publish","format-standard","hentry","category-mysql","tag-hash","tag-key","tag-list","tag-mysql","tag-mysql-51","tag-partitionnement","tag-range"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9LfWW-3P","jetpack-related-posts":[{"id":227,"url":"https:\/\/dasini.net\/blog\/2008\/11\/27\/mysql-server-5130-ga-release\/","url_meta":{"origin":237,"position":0},"title":"MySQL Server 5.1.30 GA release","author":"Olivier DASINI","date":"27 novembre 2008","format":false,"excerpt":"MySQL 5.1 est enfin disponible pour la production","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":474,"url":"https:\/\/dasini.net\/blog\/2009\/03\/02\/presentation-vue-densemble-de-mysql-51\/","url_meta":{"origin":237,"position":1},"title":"Pr\u00e9sentation: Vue d&rsquo;ensemble de MySQL 5.1","author":"Olivier DASINI","date":"2 mars 2009","format":false,"excerpt":"Num\u00e9ro un pour les applications en ligne, MySQL se positionne maintenant sur le secteur des applications d\u2019entrep\u00f4ts de donn\u00e9es et d\u2019informatique d\u00e9cisionnelle\u2026 http:\/\/dasini.net\/blog\/presentations\/?#presentation_mysql51","rel":"","context":"Dans &quot;Pr\u00e9sentation&quot;","block_context":{"text":"Pr\u00e9sentation","link":"https:\/\/dasini.net\/blog\/category\/presentation\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":275,"url":"https:\/\/dasini.net\/blog\/2008\/12\/03\/les-nouveautes-de-mysql-51-part-25\/","url_meta":{"origin":237,"position":2},"title":"Les nouveaut\u00e9s de MySQL 5.1 &#8212; (part 2\/5)","author":"Olivier DASINI","date":"3 d\u00e9cembre 2008","format":false,"excerpt":"Pouvoir automatiser ses t\u00e2ches de mani\u00e8re fiable et simple est le r\u00eave de tout administrateur de base de donn\u00e9es. Le programmateur d'\u00e9v\u00e8nements (Event Scheduler) est un planificateur de t\u00e2ches (CRON-like) embarqu\u00e9 dans MySQL 5.1.","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":11,"url":"https:\/\/dasini.net\/blog\/2008\/10\/27\/mysql-50-un-sgbdr-mature-part-14\/","url_meta":{"origin":237,"position":3},"title":"MySQL 5.0 : Un SGBDR mature ? &#8212; (part 1\/4)","author":"Olivier DASINI","date":"27 octobre 2008","format":false,"excerpt":"MySQL est le SGBD Open Source le plus populaire au monde. Sa cinqui\u00e8me version, sortie en octobre 2005, permet de mieux r\u00e9pondre aux probl\u00e9matiques d'entreprise. Au menu des nouveaut\u00e9s fonctionnelles :","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":179,"url":"https:\/\/dasini.net\/blog\/2008\/11\/20\/retour-sur-la-conference-mysql-sun-du-mercredi-19-novembre-2008\/","url_meta":{"origin":237,"position":4},"title":"Retour sur la conf\u00e9rence MySQL \/ SUN du mercredi 19 novembre 2008","author":"Olivier DASINI","date":"20 novembre 2008","format":false,"excerpt":"C'est dans un grand hotel parisien qu'a eu lieu la 2\u00e8me conf\u00e9rence MySQL fran\u00e7aise. Pour r\u00e9sumer, que du bonheur :)","rel":"","context":"Dans &quot;Conf\u00e9rence&quot;","block_context":{"text":"Conf\u00e9rence","link":"https:\/\/dasini.net\/blog\/category\/conference\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":334,"url":"https:\/\/dasini.net\/blog\/2008\/12\/13\/les-nouveautes-de-mysql-51-part-45\/","url_meta":{"origin":237,"position":5},"title":"Les nouveaut\u00e9s de MySQL 5.1 &#8212; (part 4\/5)","author":"Olivier DASINI","date":"13 d\u00e9cembre 2008","format":false,"excerpt":"Le moteur de stockage CSV n'est pas une vraie nouveaut\u00e9. Il est disponible depuis MySQL 4.1.4 (MySQL 5.1 pour M.S. Windows). Sa particularit\u00e9 est de stocker les donn\u00e9es dans un fichier texte au format CSV (Comma Separated Values) o\u00f9 les donn\u00e9es sont s\u00e9par\u00e9es par une virgule. Les avantages sont multiples,\u2026","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/237","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/comments?post=237"}],"version-history":[{"count":15,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/237\/revisions"}],"predecessor-version":[{"id":277,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/237\/revisions\/277"}],"wp:attachment":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/media?parent=237"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/categories?post=237"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/tags?post=237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}