
{"id":1227,"date":"2012-03-30T19:38:38","date_gmt":"2012-03-30T18:38:38","guid":{"rendered":"http:\/\/dasini.net\/blog\/?p=1227"},"modified":"2012-04-11T16:39:24","modified_gmt":"2012-04-11T15:39:24","slug":"mysql-5-6-rocks","status":"publish","type":"post","link":"https:\/\/dasini.net\/blog\/2012\/03\/30\/mysql-5-6-rocks\/","title":{"rendered":"MySQL 5.6 rock !"},"content":{"rendered":"<p>Encore un bench (c&rsquo;est la saison :))<\/p>\n<p>Comme d&rsquo;habitude, mon but n&rsquo;est pas de conna\u00eetre les possibilit\u00e9s maximales du serveur (d&rsquo;autres le font mieux que moi), mais plut\u00f4t d&rsquo;avoir une id\u00e9e assez pr\u00e9cise de leurs comportements respectifs dans un environnement le plus proche possible de ma prod.<\/p>\n<p>Pour ce test, les candidats sont, Percona 5.5, MariaDB 5.3 &amp; 5.5, MySQL 5.5 et la derni\u00e8re milestone de MySQL 5.6. L&rsquo;id\u00e9e est de voir comment se comporte les diff\u00e9rentes versions dans un contexte I\/O bounds ie un faible hit ratio du buffer pool (ou du moins le plus bas possible), en d&rsquo;autres termes, simuler le comportement du serveur MySQL dans un environnement o\u00f9 la quantit\u00e9 de donn\u00e9es est \u00e9norme (comme \u00e0 Viadeo).<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"text-decoration: underline;\">Les r\u00e8gles du bench<\/span><\/p>\n<p>sysbench, options read only complex, 128 connexions concurrentes<\/p>\n<p>Moteur InnoDB, 30 millions de lignes, 6.7 Go de donn\u00e9es<\/p>\n<p>Pas de warmup, le disque doit \u00eatre sollicit\u00e9 au maximum.<\/p>\n<p>Les tests ont \u00e9t\u00e9 lanc\u00e9 10 fois sur chaque version, avec restart du serveur entre chaque run.<\/p>\n<p>Les confs sont proche cad les param\u00e8tres communs \u00e0 toutes les versions ont les m\u00eames valeurs, les autres, leur valeur par d\u00e9faut<\/p>\n<p>&nbsp;<\/p>\n<p>La moyenne donne les r\u00e9sultats suivants:<\/p>\n<p><span style=\"text-decoration: underline;\">95 centile (en ms)<\/span><\/p>\n<ul>\n<ul>\n<li>Percona 5.5.12: <strong>101.142<\/strong><\/li>\n<li>MariaDB 5.3.5 *: <strong>94.926<\/strong><\/li>\n<li>MariaDB 5.5.20: <strong>104.02<\/strong><\/li>\n<li>MySQL 5.5.22: <strong>103.644<\/strong><\/li>\n<li>MySQL 5.6.4: <strong>66.586<\/strong><\/li>\n<\/ul>\n<\/ul>\n<p>&nbsp;<\/p>\n<div><a href=\"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-includes\/images\/percentil.png\" target=\"_blank\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-includes\/images\/percentil.png?resize=320%2C283\" alt=\"dasini.net - 95 centile\" width=\"320\" height=\"283\" \/><\/a><\/div>\n<p>Ce que je trouve int\u00e9ressant dans ces r\u00e9sultats:<\/p>\n<p>Les 3 versions de la branche 5.5 ont des r\u00e9sultats \u00e9quivalents. Certes MariaDB est encore en beta, mais je fais le pari que Monty program fera ce qu&rsquo;il faut pour que la 1\u00e8re GA soit dispo pour la<a title=\"Percona Live: MySQL Conference And Expo 2012\" href=\"http:\/\/www.percona.com\/live\/mysql-conference-2012\/\" target=\"_blank\"> <em>Percona MySQL User Conference<\/em><\/a> du mois d&rsquo;Avril.<\/p>\n<p>MariaDB 5.3 \u00e0 de bons r\u00e9sultats, cependant \u00e9tant bas\u00e9e sur la branche 5.1 de MySQL, sa configuration est diff\u00e9rente des autres versions. C&rsquo;est la seule version de ce test avec 1 seul buffer_pool, ce qui est int\u00e9ressant pour le temps d&rsquo;ex\u00e9cution mais tr\u00e8s p\u00e9nalisant pour la scalabilit\u00e9 ie augmentation du nombre de requ\u00eates concurrentes (cf r\u00e9sultats du bench TPS ci-apr\u00e8s)<\/p>\n<p>Mais le r\u00e9sultat le plus marquant est celui de la version 5.6 de MySQL qui explose la branche 5.5 avec 40% de temps en moins !!!<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"text-decoration: underline;\">Nombre de transactions par seconde<\/span><\/p>\n<ul>\n<li>Percona 5.5.12: <strong>3401.152<\/strong><\/li>\n<li>MariaDB 5.3.5 *: <strong>2912.667<\/strong><\/li>\n<li>MariaDB 5.5.20: <strong>3185.623<\/strong><\/li>\n<li>MySQL 5.5.22: <strong>3436.611<\/strong><\/li>\n<li>MySQL 5.6.4: <strong>3601.915<\/strong><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<div><a href=\"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-includes\/images\/tps.png\" target=\"_blank\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-includes\/images\/tps.png?resize=320%2C283\" alt=\"dasini.net - transactions par seconde\" width=\"320\" height=\"283\" \/><\/a><\/div>\n<p>L\u00e0, MariaDB 5.3 est en retrait, ce qui est normal du fait de son unique buffer pool.<\/p>\n<p>MariaDB 5.5 est \u00e0 la tra\u00eene par rapport \u00e0 MySQL et Percona 5.5.<\/p>\n<p>Le meilleur r\u00e9sultat est l\u00e0 encore MySQL 5.6 qui non seulement \u00e0 les meilleurs temps de r\u00e9ponse (cf r\u00e9sultats du benche 95 centile au dessus) mais en plus \u00e0 le meilleur d\u00e9bit des 5 candidats.<\/p>\n<p>&nbsp;<\/p>\n<p>Je n&rsquo;ai pas encore eu le temps de me pencher sur le pourquoi du comment, mais si cela ce confirme par la suite, je tire d&rsquo;ores et d\u00e9j\u00e0 mon chapeau aux \u00e9quipes MySQL d&rsquo;Oracle pour leur excellent travail, d&rsquo;autant plus que ces \u00e9volutions b\u00e9n\u00e9ficieront \u00e0 MariaDB &amp; Percona, dans un futur que j&rsquo;esp\u00e8re tr\u00e8s proche.<\/p>\n<p><a title=\"MySQL 5.6 rock suite\" href=\"http:\/\/dasini.net\/blog\/2012\/04\/05\/mysql-5-6-rock-suite\/\">2\u00e8me partie de l&rsquo;article &#8230;<\/a><\/p>\n<p><span style=\"text-decoration: underline;\">Divers<\/span><\/p>\n<pre>sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=40000000 \\\r\n--oltp-test-mode=complex --max-requests=0 --max-time=600 \\\r\n--num-threads=128 --oltp-read-only\r\n\r\ninnodb_buffer_pool_instances\u00a0\u00a0\u00a0 4 (1 pour MariaDB 5.3)\r\ninnodb_buffer_pool_size\u00a0\u00a0\u00a0 34359738368\r\ninnodb_doublewrite\u00a0\u00a0\u00a0 ON\r\ninnodb_file_per_table\u00a0\u00a0\u00a0 ON\r\ninnodb_flush_log_at_trx_commit\u00a0\u00a0\u00a0 2\r\ninnodb_log_buffer_size\u00a0\u00a0\u00a0 8388608\r\ninnodb_log_file_size\u00a0\u00a0\u00a0 152043520\r\ninnodb_log_files_in_group\u00a0\u00a0\u00a0 2\r\ninnodb_version\u00a0 1.1.8-24.1 \/ 1.2.4 (ou <span class=\"Apple-style-span\" style=\"color: #000000; font-family: arial,sans,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px; background-color: #ffffff;\">XtraDB 1.1.6-20.1<\/span>)\r\n\r\ngeneral_log\u00a0\u00a0\u00a0 OFF\r\nlog_bin\u00a0\u00a0\u00a0 OFF\r\nslow_query_log\u00a0\u00a0\u00a0 OFF<\/pre>\n<p>&nbsp;<\/p>\n<pre>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n           Name: sbtest\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Engine: InnoDB\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Version: 10\r\n\u00a0\u00a0\u00a0\u00a0 Row_format: Compact\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Rows: 30000237\r\n\u00a0Avg_row_length: 224\r\n\u00a0\u00a0\u00a0 Data_length: 6741295104\r\nMax_data_length: 0\r\n\u00a0\u00a0 Index_length: 477085696\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 Data_free: 6291456\r\n\u00a0Auto_increment: 33800371\r\n\u00a0\u00a0\u00a0 Create_time: 2012-03-29 18:42:34\r\n\u00a0\u00a0\u00a0 Update_time: NULL\r\n\u00a0\u00a0\u00a0\u00a0 Check_time: NULL\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 Collation: utf8_swedish_ci<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Comme d&rsquo;habitude, mon but n&rsquo;est pas de conna\u00eetre les possibilit\u00e9s maximales du serveur (d&rsquo;autres le font mieux que moi), mais plut\u00f4t d&rsquo;avoir une id\u00e9e assez pr\u00e9cise de leurs comportements respectifs dans un environnement le plus proche possible de ma prod.<\/p>\n<p>pour ce test, les candidats sont, Percona 5.5, MariaDB 5.3 &#038; 5.5, MySQL 5.5 et la derni\u00e8re milestone de MySQL 5.6. L&rsquo;id\u00e9e est de voir comment se comporte les diff\u00e9rentes versions dans un contexte I\/O bounds ie un faible hit ratio du buffer pool (ou du moins le plus bas possible), en d&rsquo;autres termes, simuler le comportement du serveur MySQL dans un environnement o\u00f9 la quantit\u00e9 de donn\u00e9es est \u00e9norme (comme \u00e0 Viadeo).<\/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":[81,167,8,181],"tags":[],"class_list":["post-1227","post","type-post","status-publish","format-standard","hentry","category-bench","category-mariadb","category-mysql","category-percona-server-2"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9LfWW-jN","jetpack-related-posts":[{"id":1245,"url":"https:\/\/dasini.net\/blog\/2012\/04\/05\/mysql-5-6-rock-suite\/","url_meta":{"origin":1227,"position":0},"title":"MySQL 5.6 rock suite","author":"Olivier DASINI","date":"5 avril 2012","format":false,"excerpt":"Voici la suite du post MySQL 5.6 rock, dans lequel je test MySQL 5.5 & 5.6, MariaDB 5.3 & 5.5 et Percona server 5.5. Pour cet article, toujours un bench. Le contexte est assez proche, \u00e0 la diff\u00e9rence pr\u00e8s que cette fois les serveurs sont test\u00e9s en lecture (65%) et\u2026","rel":"","context":"Dans &quot;bench&quot;","block_context":{"text":"bench","link":"https:\/\/dasini.net\/blog\/category\/bench\/"},"img":{"alt_text":"dasini.net - 95 centile for R\/W i\/o bounds","src":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-includes\/images\/dasini.net_bench_mysql_95percentil.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1375,"url":"https:\/\/dasini.net\/blog\/2013\/02\/21\/mysql-5-6\/","url_meta":{"origin":1227,"position":1},"title":"MySQL 5.6","author":"Olivier DASINI","date":"21 f\u00e9vrier 2013","format":false,"excerpt":"Cela fait quelques jours maintenant que MySQL 5.6 est disponible pour la production. Un impressionnant travail a \u00e9t\u00e9 effectu\u00e9 par les \u00e9quipe d'Oracle, voici un petit r\u00e9sum\u00e9 des principales \u00e9volution vu par Peter Zaitsev. L'\u00e9v\u00e9nement dans l'\u00e9v\u00e9nement, c'est la \"pol\u00e9mique\" sur les performances de la 5.6, par rapport \u00e0 MySQL\u2026","rel":"","context":"Dans &quot;MariaDB&quot;","block_context":{"text":"MariaDB","link":"https:\/\/dasini.net\/blog\/category\/mariadb\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1487,"url":"https:\/\/dasini.net\/blog\/2014\/01\/07\/update-db-set-age-age-1-where-productmysql\/","url_meta":{"origin":1227,"position":2},"title":"UPDATE db SET age = age + 1 WHERE product=&rsquo;MySQL&rsquo;","author":"Olivier DASINI","date":"7 janvier 2014","format":false,"excerpt":"2013 \u00e0 \u00e9t\u00e9 une ann\u00e9e tr\u00e8s riche en ce qui concerne l\u2019\u00e9cosyst\u00e8me MySQL \/ MariaDB \/ Percona Server. Voici un petit r\u00e9cap technique (incomplet) pour les 3 acteurs majeurs: MySQL @Oracle MariaDB & SkySQL Percona","rel":"","context":"Dans &quot;MariaDB&quot;","block_context":{"text":"MariaDB","link":"https:\/\/dasini.net\/blog\/category\/mariadb\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1496,"url":"https:\/\/dasini.net\/blog\/2015\/09\/14\/meetup-mysql-a-paris\/","url_meta":{"origin":1227,"position":3},"title":"Meetup MySQL \u00e0 Paris","author":"Olivier DASINI","date":"14 septembre 2015","format":false,"excerpt":"Ce jeudi 17 septembre 2015, \u00e0 l'initiative du MySQL User Group France (lemug.fr), je vais pr\u00e9senter un retour d'exp\u00e9rience sur une migration MySQL 5.5 vers 5.6 dans les locaux de Dailymotion \u00e0 Paris.","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":1501,"url":"https:\/\/dasini.net\/blog\/2015\/09\/25\/slides-du-meetup\/","url_meta":{"origin":1227,"position":4},"title":"Slides du meetup","author":"Olivier DASINI","date":"25 septembre 2015","format":false,"excerpt":"Le 17 septembre j'ai \u00e9t\u00e9 invit\u00e9 par le MySQL User Group Fr pour parler d'un retour d'exp\u00e9rience sur une migration MySQL 5.5 vers 5.6. Voici ma pr\u00e9sentation: http:\/\/www.slideshare.net\/freshdaz\/upgrade-to-mysql-56-without-downtime","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":1163,"url":"https:\/\/dasini.net\/blog\/2012\/01\/09\/ameliorations-de-loptimiseur-dans-mariadb\/","url_meta":{"origin":1227,"position":5},"title":"Am\u00e9liorations de l&rsquo;optimiseur dans MariaDB","author":"Olivier DASINI","date":"9 janvier 2012","format":false,"excerpt":"Les \u00e9quipes de MariaDB ont \u00e9norm\u00e9ment travaill\u00e9es sur l'optimiseur de la version 5.3, notamment en permettant une r\u00e9elle utilisation des sous-requ\u00eates. Voici un effet visuel de ces optimisations: Avec MySQL 5.5, l'utilisation de tables d\u00e9riv\u00e9es (type de sous-requ\u00eates dans la clause FROM d'un SELECT), donne le plan d'ex\u00e9cution suivant:","rel":"","context":"Dans &quot;bench&quot;","block_context":{"text":"bench","link":"https:\/\/dasini.net\/blog\/category\/bench\/"},"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\/1227","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=1227"}],"version-history":[{"count":15,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/1227\/revisions"}],"predecessor-version":[{"id":1241,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/1227\/revisions\/1241"}],"wp:attachment":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/media?parent=1227"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/categories?post=1227"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/tags?post=1227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}