<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<atom:link href="http://dimitrik.free.fr/blog/rss.xml" rel="self" type="application/rss+xml" />
<title>DimitriK's (dim) Weblog</title>
<link>http://dimitrik.free.fr/blog/index.html</link>
<description>http://dimitrik.free.fr</description>
<language>en-US</language>
<copyright>Copyright 2013</copyright>
<lastBuildDate>Thu, 30 May 2013 21:28:32 +0200</lastBuildDate>
<pubDate>Thu, 30 May 2013 21:28:32 +0200</pubDate>
<generator>http://thingamablog.sf.net</generator>

<item>
<title>MySQL Performance: Percona Live &amp; Few Perf Stories..</title>
<description>&lt;p&gt;
      It's now &lt;strike&gt;two&lt;/strike&gt;.. &lt;strike&gt;three&lt;/strike&gt;.. four weeks 
      since Percona MySQL Conference was finished.. - and there are still many 
      things and new ideas running in my mind inspired by this great MySQL 
      tech + community event (regardless many public holidays and spring 
      vacations in May (which is also the reason why I'm late with this 
      article ;-)). There was a lot of things to learn from others, tons of 
      stuff to share, and as well enjoy long and deep discussions with many 
      MySQL users/ hackers/ gurus/ mentors/ devs/ etc.. etc.. We were very 
      proud to speak about MySQL 5.6 GA during this conference, and also 
      present the first labs release of the future MySQL 5.7 version (and you 
      may already download and play with it, or compile yourself from sources 
      which are always here).. - don't miss presentation made by Tomas about 
      all &lt;a href=&quot;http://www.youtube.com/watch?v=OpHTV59I1gs&quot;&gt;MySQL Innovation&lt;/a&gt; 
      happening today @Oracle! And if MySQL 5.6 for today is the best MySQL 
      release ever, you can be sure we will yet more surprise you with MySQL 
      5.7, just trust me ;-))&lt;br&gt;&lt;br&gt;My talk during this conference was about 
      MySQL 5.6 Performance, and I'd like to thank all who attended it - thank 
      you for your interest in MySQL and in what we're doing! There is yet 
      more to come, so stay tuned! ;-) My special thanks to Domas who was 
      seating in the first line and making me laugh all the time (while I'm 
      usually never taking things too seriously - with Domas it was yet more 
      easier ;-)). Well, you may find slides of my presentation on Percona 
      site or directly from &lt;a href=&quot;http://dimitrik.free.fr/Presentations/MySQL_Perf-PerconaLive_2013-dim.pdf&quot;&gt;here&lt;/a&gt;..&lt;br&gt;&lt;br&gt;As 
      promised, I've also polled every person I've discussed with about most 
      important MySQL Performance problems they are meeting currently on their 
      production or dev environments.. - the results were very surprising:&lt;br&gt;
    &lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;
        For majority of people their own &amp;quot;dev team&amp;quot; creating the most of their 
        performance troubles ;-))
      &lt;/li&gt;
      &lt;li&gt;
        Then there are many people having actually performance issues, but 
        they are just not aware about ;-) -- my only advice here is very 
        simple: use a right monitoring tool to see what is going on your 
        system and your MySQL server..
      &lt;/li&gt;
      &lt;li&gt;
        And there are many as well who are taking care about everything, so 
        speaking to them I saw all our future problems, and what is great that 
        we are already working on it ;-)
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;br&gt;
    So, again, thanks to all! It was really amazing and very productive time! 
    Hope to see you all again during MySQL Connect as well (and next Percona 
    Conferences of course ;-))&lt;br&gt;&lt;br&gt;Then, during any MySQL Conference it's 
    really fun to collect many true stories related to MySQL history 
    (specially from old MySQLers).. - it helps to better understand the whole 
    story, who is right and who is wrong, and who you should blame and who you 
    shouldn't.. - piece by piece you're obtaining a full picture of this huge 
    puzzle.. Probably one day someone will take a time to write a book based 
    on such memories and for sure it'll be a great and teachable reading ;-))&lt;br&gt;&lt;br&gt;But 
    well, let's stay focused on MySQL Performance, which is my primary 
    interest ;-)) and it'll be pity to not to continue started recently a 
    series of fun stories around MySQL, so I'd like to add also few more ones 
    from me.. - and you'll see it's not an off-topic ;-))&lt;br&gt;&lt;br&gt;

    &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;1&quot; border=&quot;0&quot; width=&quot;100%&quot;&gt;
      &lt;tr bgcolor=&quot;#BDCCE3&quot;&gt;
        &lt;td&gt;
          &lt;h3&gt;
            &amp;#160; &lt;b&gt;MySQL Black Horse&lt;/b&gt;
          &lt;/h3&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
    &lt;br&gt;
    The story is starting on the time of MySQL 5.4 (the improved performance 
    release of joined efforts from MySQL and Sun teams).. On that time there 
    was not yet any useful instrumentation implemented within MySQL/InnoDB 
    code, and finding and fixing sources of contentions and bottlenecks was 
    yet more difficult task than today (thanks to Performance Schema, since 
    version 5.5 MySQL internals became much more transparent ;-)) -- but on 
    time of MySQL 5.4 such a finding was mostly based on the code analyze made 
    by perf engineers, their expectations of &amp;quot;potential impact&amp;quot; of one or 
    another code part, and then a patch with proposed &amp;quot;fix&amp;quot;.. &amp;quot;Fixed&amp;quot; binary 
    was then tested on various benchmarks to see if the effect was positive or 
    not.. - and believe me, there was many right stuff rejected just because 
    the test result was negative (while in fact fixing of one contention 
    simply making sometimes another contention(s) more hot, making an overall 
    result worse.. - while if we continue to dig in the same direction, we may 
    fix further contention(s) as well, and finally fix a whole part of a 
    problem!) - but on that time only &amp;quot;one shot&amp;quot; changes were accepted, and 
    then again rejected, because a combination then of several supposed to be 
    &amp;quot;right fixes&amp;quot; produced a negative result on benchmarks again (for a big 
    surprise of all of us... ;-))&lt;br&gt;&lt;br&gt;So, during that time we progressed 
    &amp;quot;eyes widely closed&amp;quot; ;-)) and then, after some time of reflection, Mikael 
    started to produce so called &amp;quot;perf builds&amp;quot; - tarballs of MySQL source code 
    with various patches applied on it. There was in total over a hundred of 
    perf builds, one more different than others.. - and I was happy to test 
    them all on SPARC servers to compare and analyze them as in depth as on 
    this time it was possible (we expected a lot from DTrace, but there was 
    yet a need to add probes within the code to analyze &amp;quot;home made&amp;quot; lock and 
    sync solutions implemented within Innodb)... So, comparing, analyzing, 
    re-thinkingn and analyzing again was our &amp;quot;favorite&amp;quot; activity those days 
    ;-))&lt;br&gt;&lt;br&gt;The traces with test results on most of such perf builds you 
    may still find within my blog articles during &lt;a href=&quot;http://dimitrik.free.fr/blog/archives/2009/07/mysql-performance-54-and-new-performance-builds.html&quot;&gt;2009&lt;/a&gt; 
    &lt;a href=&quot;http://dimitrik.free.fr/blog/archives/2009/08/mysql-performance-xtradb6-others-dbstress.html&quot;&gt;year&lt;/a&gt;. 
    There were many builds the results I've published and they mostly looked 
    promising... - But there was a one &amp;quot;special&amp;quot; perf build which results I've 
    never published.. - on my tests it was way better in performance comparing 
    to 5.4, but was rejected due some &amp;quot;unexpected behaviors&amp;quot;.. I've called it 
    &amp;quot;black horse&amp;quot; in my internal reports, and always tested it against any 
    other proposed improvements in MySQL code. Even over a time we started to 
    forget what exactly changes were applied within this build, I was still 
    expecting than one day it'll drive us in a right direction ;-))&lt;br&gt;&lt;br&gt;And 
    this day happened! - it was during 5.5.4 development ;-) On that time 
    MySQL and InnoDB code contained all kind of &amp;quot;goodies&amp;quot; supposed to improve 
    performance a lot, but in fact it was still worse than our &amp;quot;famous black 
    horse&amp;quot;.. ;-)) - and once again we were out of ideas, I came back with 
    &amp;quot;black horse&amp;quot; results and profiling pattern.. And this made Mikael 
    thinking hard to try to remember what exactly we finally changed long time 
    ago... - which is then resulted in impressive performance improvements we 
    demonstrated on MySQL 5.5 ;-))&lt;br&gt;&lt;br&gt;But what is amazing in the story 
    that MySQL 5.5 is simply &lt;b&gt;reached&lt;/b&gt; the &amp;quot;black horse&amp;quot; level.. - while 
    only since MySQL 5.6 it was finally &lt;b&gt;out-passed&lt;/b&gt; truly far away! ;-))&lt;br&gt;&lt;br&gt;

    &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;1&quot; border=&quot;0&quot; width=&quot;100%&quot;&gt;
      &lt;tr bgcolor=&quot;#BDCCE3&quot;&gt;
        &lt;td&gt;
          &lt;h3&gt;
            &amp;#160; &lt;b&gt;The very first NDB Benchmark&lt;/b&gt;
          &lt;/h3&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
    &lt;div&gt;
      &lt;br&gt;
      Reading all recent MySQL Cluster related articles, specially by &lt;a href=&quot;http://www.flamingspork.com/blog/2013/05/13/the-mysql-cluster-storage-engine/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=the-mysql-cluster-storage-engine&quot;&gt;Stewart&lt;/a&gt; 
      and &lt;a href=&quot;http://mikaelronstrom.blogspot.com/2013/05/year-of-anniversaries.html&quot;&gt;Mikael&lt;/a&gt;, 
      remaining me the story which was not mentioned by no one until now 
      (while Mikael was, probably, the most directly concerned ;-)) The story 
      was starting in February 2002 when the &amp;quot;MySQL Cluster&amp;quot; name was not yet 
      even pronounced, and there was just &amp;quot;NDB Cluster&amp;quot; software developed by 
      Alzato.. They came to Sun Benchmark Center to test it and demonstrate 
      that NDB is able to reach &lt;b&gt;1M TPS&lt;/b&gt; (yes, 1M transactions per 
      second!) on Read-Only workload and over 200K TPS on Read-Write.. It was 
      yet 2002, and our biggest SPARC server on that time had only 72CPUs 
      running on 900Mhz.. - and they planned to use specifically this one. 
      However, regarding these high ambitions, all this testing looked like a 
      full disaster.. But we wanted to help them as much as we can, so finally 
      this testing arrived in my hands.. But I was yet far to imagine all 
      dramatic events waited on me ;-))&lt;br&gt;&lt;br&gt;So far, they started to install 
      their NDB &amp;quot;software&amp;quot;.. - and I'm calling it &amp;quot;software&amp;quot;, because at this 
      stage it was yet far from something that you'd call a &amp;quot;product&amp;quot;.. - 
      while in Benchmark Center I've got a habit to meet customers having 
      something &lt;b&gt;already&lt;/b&gt; properly working and mainly coming to 
      understand their bottlenecks, to tune, and then improve yet more better 
      a working code (or simply get an idea about HW sizing, etc..) - but the 
      case of NDB was probably the &amp;quot;most fun&amp;quot; I've ever seen until that time.. 
      - the code was so poor that the problem #1 initially was just to get it 
      compiled properly! and then to avoid to crash with a core dump on a 
      simple probe test.. ;-))&lt;br&gt;&lt;br&gt;My disappointment was so big that it was 
      impossible to hide it.. I've finally expressed it to Alzato by 
      explaining that we're wasting our time debugging a crappy code instead 
      to leave this powerful HW to other customers which are, opposite to NDB, 
      having an already working stuff and just waiting for a platform 
      availability to test it..&lt;br&gt;&lt;br&gt;I'm skipping here all dramatic moments 
      of the story, and will just say you that the most of NDB future was 
      played here.. And a probability that there will be no future at all was 
      really very high.. ;-))&lt;br&gt;&lt;br&gt;But well, since the first days of our 
      common work I've started to add into NDB code various event counters and 
      collect live stats from NDB internals via my &lt;a href=&quot;http://dimitrik.free.fr&quot;&gt;dim_STAT&lt;/a&gt; 
      monitoring tool (which I've always used and continue to use it right 
      now).. With such a monitoring we were able then to fix all crashes and 
      core dumping first, and then understand all the bottlenecks present in 
      the code!.. - combined with long discussions about NDB design and why 
      the proposed code may work or will never work ;-)&lt;br&gt;&lt;br&gt;Here is a 
      historic photo where yet 11 years younger Mikael trying to break my 
      arguments why the NDB design is far from optimal ;-)&lt;br&gt;&lt;br&gt;&lt;img src=&quot;http://dimitrik.free.fr/56_black/afb600404f75ae091b25a53e5880118f.jpeg&quot; height=&quot;296&quot; width=&quot;447&quot;&gt;&lt;br&gt;&lt;br&gt;So, 
      step by step, day by day we were able to improve performance more and 
      more..
    &lt;/div&gt;
    &lt;div&gt;
      
    &lt;/div&gt;
    &lt;div&gt;
      Till the Day-D when we finally made a huge jump in performance and 
      reached &lt;b&gt;1.5M TPS(!)&lt;/b&gt; on Read-Only workload! - still not yet using 
      all available CPUs on the server.. - obtained TPS level was so high 
      (specially for those days) that even for me it was hard to believe it if 
      I did not add my own counters within NDB code by myself ;-))&lt;br&gt;&lt;br&gt;Here 
      is the famous snapshot with dim_STAT graphs reflecting the reached TPS 
      level:&lt;br&gt;&lt;br&gt;&lt;img src=&quot;http://dimitrik.free.fr/56_black/screenshot.png&quot; height=&quot;444&quot; width=&quot;600&quot;&gt;&lt;br&gt;&lt;br&gt;To 
      be sure the result is not random and not hitting any regressions over a 
      time, we left the test workload running more than 12 hours over a 
      night.. - and as you can see from the graph, when in the morning we were 
      back in the office, the test was still running and showing the same near 
      1.5M TPS result.. That was really amazing.. And I've expected that now 
      by using all 72CPU of the server we'll beat all imagination levels with 
      2M or even 3M TPS (to be honest, from the beginning nobody really 
      expected to see 1M TPS.. - this was like &amp;quot;top of all expectations&amp;quot;, so 
      showing 1.5M TPS was still a big surprise for everybody ;-))&lt;br&gt;&lt;br&gt;So, 
      what was a TPS limit when all 72CPUs are used?.. - for my big surprise 
      this question remained without answer.. - the goal of 1M TPS was 
      reached, and for Mikael the testing was finished.. - and the same day 
      the whole team packed their baggages and left the office.. ;-))&lt;br&gt;&lt;br&gt;Few 
      years later Alzato was acquired by MySQL, and MySQL Cluster was born.. 
      And today's over(!) 20M TPS obtained on MySQL Cluster even on Read+Write 
      workload is no more a subject of surprise for anyone.. But the main 
      performance victory in NDB milestones for me will be still these 1.5M 
      TPS obtained 11 years ago in Paris ;-))&lt;br&gt;&lt;br&gt;~/~&lt;br&gt;&lt;br&gt;Over a time 
      you're always finishing by realize that the most surprising stuff in the 
      life is the life itself...&lt;br&gt;
    &lt;/div&gt;
    &lt;div&gt;
      
    &lt;/div&gt;
    &lt;div&gt;
      Rgds,&lt;br&gt;-Dimitri
    &lt;/div&gt;</description>
<link>http://dimitrik.free.fr/blog/archives/05-01-2013_05-31-2013.html#168</link>
<guid>http://dimitrik.free.fr/blog/archives/05-01-2013_05-31-2013.html#168</guid>

<category>MySQL</category>

<pubDate>Thu, 30 May 2013 21:14:23 +0200</pubDate>
</item>

<item>
<title>MySQL Performance: What are your top-5 performance issues?..</title>
<description>&lt;p&gt;
      
    &lt;/p&gt;
    &lt;table cellspacing=&quot;5&quot; border=&quot;0&quot; cellpadding=&quot;5&quot; width=&quot;95%&quot;&gt;
      &lt;tr&gt;
        &lt;td valign=&quot;top&quot;&gt;
          &lt;img height=&quot;239&quot; src=&quot;http://dimitrik.free.fr/56_top5/118x239-speaking.png&quot; width=&quot;118&quot;&gt;
          
        &lt;/td&gt;
        &lt;td valign=&quot;top&quot;&gt;
          I have a &lt;a href=&quot;https://www.percona.com/live/mysql-conference-2013/sessions/mysql-56-performance-benchmarks-tuning-and-%E2%80%9Cbest%E2%80%9D-practices&quot;&gt;talk 
          about MySQL 5.6 Performance&lt;/a&gt; related stuff during Percona Live 
          (this Wednesday, 24 April 2:00pm - 2:50pm @ Ballroom A). But my main 
          interest during this Conference is to exchange with you as much as 
          possible about what kind of performance problems you meet generally 
          and &lt;b&gt;what are your top-5 performance issues&lt;/b&gt; in MySQL workloads 
          you have today right now? (ordered by priority)..&lt;br&gt;&lt;br&gt;Come to 
          discuss it live -- we have also:&lt;br&gt;

          &lt;ul&gt;
            &lt;li&gt;
              &lt;a href=&quot;https://www.percona.com/live/mysql-conference-2013/sessions/bof-mysql-56-deep-dive&quot;&gt;MySQL 
              5.6 Deep Dive&lt;/a&gt; BoF session on Tuesday, 23 April 6:00pm - 
              7:00pm @ Ballroom H -- open discussion
            &lt;/li&gt;
            &lt;li&gt;
              don't miss &lt;a href=&quot;https://www.percona.com/live/mysql-conference-2013/sessions/mysql-56-whats-new-innodb&quot;&gt;InnoDB 
              talk&lt;/a&gt; by Sunny (Tue, 23 April 4:50pm - 5:40pm @ Ballroom E)
            &lt;/li&gt;
            &lt;li&gt;
              and &lt;a href=&quot;https://www.percona.com/live/mysql-conference-2013/sessions/mysql-56-redefining-replication&quot;&gt;talk 
              about MySQL Replication&lt;/a&gt; by Luis (Thu, 25 April 11:00am - 
              11:50am @ Ballroom D)
            &lt;/li&gt;
          &lt;/ul&gt;
          We all will be there ;-)&lt;br&gt;&lt;br&gt;As well there are several &lt;a href=&quot;https://www.percona.com/live/mysql-conference-2013/content/welcome-reception-expo-hall&quot;&gt;evening&lt;/a&gt; 
          &lt;a href=&quot;https://blogs.oracle.com/MySQL/entry/celebrate_with_oracle_s_mysql&quot;&gt;events&lt;/a&gt; 
          first day, &lt;a href=&quot;https://www.percona.com/live/mysql-conference-2013/content/community-dinner&quot;&gt;second&lt;/a&gt;, 
          and &lt;a href=&quot;https://www.percona.com/live/mysql-conference-2013/content/community-networking-reception-expo-hall-mysql-community-awards-lightning-talks&quot;&gt;third&lt;/a&gt; 
          - if you prefer to discuss it around a beer ;-))&lt;br&gt;&lt;br&gt;While you 
          may also left a comment about your top-5 issues here, and then let's 
          talk about..&lt;br&gt;&lt;br&gt;Rgds,&lt;br&gt;-Dimitri
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;</description>
<link>http://dimitrik.free.fr/blog/archives/04-01-2013_04-30-2013.html#167</link>
<guid>http://dimitrik.free.fr/blog/archives/04-01-2013_04-30-2013.html#167</guid>

<category>MySQL</category>

<pubDate>Sun, 21 Apr 2013 21:41:30 +0200</pubDate>
</item>

<item>
<title>MySQL Performance: Analyzing benchmarks, part 4: TRX list</title>
<description>&lt;p&gt;
      This article inspired by &lt;a href=&quot;http://www.mysqlperformanceblog.com/2013/04/12/trx-descriptors-mysql-performance-improvements-in-percona-server-5-5-30-30-2/&quot;&gt;benchmark 
      results&lt;/a&gt; published by Alexey @Percona related to the &amp;quot;trx_list&amp;quot; 
      modifications came with &lt;a href=&quot;http://www.percona.com/redir/downloads/Percona-Server-5.5/LATEST/source/Percona-Server-5.5.30-rel30.2.tar.gz&quot;&gt;latest 
      Percona Server 5.5&lt;/a&gt;. I was particularly curious about this feature, 
      because the exactly the same solution was rejected by Sunny two years 
      ago while analyzed this kind of problems (described within presented bug 
      report and others)..&lt;br&gt;&lt;br&gt;But well, one real test result is better 
      than many discussions, so let's see what kind of results I will get on 
      my own server. I'll test the same OLTP_RO Point-Select workload using 8 
      tables (by running 8 Sysbench processes in parallel). I'd say that this 
      kind of load was initially pretty problematic for MySQL 5.6, as queries 
      here are very short and running particularly fast. So, the idea of 
      Read-Only transaction feature coming in 5.6 initially because of this 
      workload, before being useful in other cases as well.&lt;br&gt;&lt;br&gt;So, lets 
      try the first case when transactions are not used and user sessions are 
      using auto-commit (which is automatically will use Read-Only 
      transactions in 5.6). The following graph is representing OLTP_RO 
      Point-Select test on 16cores (MySQL server is running within a taskset 
      with 16cores HT-enabled):&lt;br&gt;&lt;br&gt;&lt;b&gt;MySQL 5.6 -vs- Percona 5.5 
      @16cores-HT :&lt;/b&gt;&lt;br&gt;&lt;img width=&quot;935&quot; height=&quot;523&quot; src=&quot;http://dimitrik.free.fr/56_trx_list/screenshot_1.png&quot;&gt;&lt;br&gt;&lt;u&gt;Observations&lt;/u&gt; 
      :&lt;br&gt;
    &lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;
        Percona Server 5.5 is still hitting kernel_mutex contention here
      &lt;/li&gt;
      &lt;li&gt;
        While MySQL 5.6 is hitting now trx_sys_mutex contention here, which is 
        much lower also and near invisible comparing to kernel_mutex waits on 
        the InnoDB mutex waits graph...
      &lt;/li&gt;
      &lt;li&gt;
        Percona Server is reaching near 200K QPS here (seems like my server is 
        not as fast as tested by Alexey to show higher QPS)..
      &lt;/li&gt;
      &lt;li&gt;
        while MySQL 5.6 is not far from 300K QPS within the same workload..
      &lt;/li&gt;
      &lt;li&gt;
        so, looks to me like Sunny was right ;-)
      &lt;/li&gt;
      &lt;li&gt;
        or probably we will have more details once Percona will release their 
        5.6 code tree? - let's see..
      &lt;/li&gt;
      &lt;li&gt;
        however, the advantage of 5.6 on this test is pretty clear and doesn't 
        need any comment ;-)
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;br&gt;
    Now, let's bring to the same picture also MySQL 5.5 and MariaDB 5.5.&lt;br&gt;&lt;br&gt;&lt;b&gt;MySQL 
    5.6/ MySQL 5.5/ MariaDB 5.5/ Percona 5.5 @16cores-HT :&lt;/b&gt;&lt;br&gt;&lt;img height=&quot;518&quot; width=&quot;944&quot; src=&quot;http://dimitrik.free.fr/56_trx_list/screenshot_3.png&quot;&gt;&lt;br&gt;&lt;u&gt;Observations&lt;/u&gt; 
    :&lt;br&gt;

    &lt;ul&gt;
      &lt;li&gt;
        Percona 5.5 has a clear advantage here over MySQL 5.5 and MariaDB 5.5
      &lt;/li&gt;
      &lt;li&gt;
        kernel_mutex contention is dominating on all 5.5 based engines
      &lt;/li&gt;
      &lt;li&gt;
        while MySQL 5.6 is just out-passing them all..
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;br&gt;
    However, more work is needed in 5.6 to get a rid of this trx_sys_mutex 
    contention, because on 32cores it kills performance and we are hitting QPS 
    drop rather increase. And again, have to lower this contention by using a 
    bigger &amp;quot;spin delay&amp;quot; value (96 here) to avoid getting things even worse.. 
    However MySQL 5.6 is still better here than Percona 5.5:&lt;br&gt;&lt;br&gt;&lt;b&gt;MySQL 
    5.6 / Percona 5.5 @32cores :&lt;/b&gt;&lt;br&gt;&lt;img height=&quot;527&quot; width=&quot;903&quot; src=&quot;http://dimitrik.free.fr/56_trx_list/screenshot_2.png&quot;&gt;&lt;br&gt;And 
    if we enable HT here the result will be only worse:&lt;br&gt;&lt;br&gt;&lt;b&gt;MySQL 5.6 
    @32cores, HT=off / on :&lt;/b&gt;&lt;br&gt;&lt;img height=&quot;524&quot; width=&quot;895&quot; src=&quot;http://dimitrik.free.fr/56_trx_list/screenshot.png&quot;&gt;&lt;br&gt;Probably 
    this is a good example of problems related to hot contentions (enabling HT 
    on 16cores improving performance, and using 16cores-HT giving a better 
    result than pure 32cores -- as this contention is so hot, it's as expected 
    then..)&lt;br&gt;&lt;br&gt;While, of course, as soon as you're having slightly more 
    heavy queries within your workload, this contention will have much less 
    impact, and you'll get higher QPS on 32cores rather on 16cores and 
    matching your HW capacity.. But we have a good challenge here, so work 
    continues, stay tuned ;-)&lt;br&gt;&lt;br&gt;&lt;br&gt;Regarding the test case #2 (when 
    transactions are used) - well, nothing surprising in results, because it 
    was exactly the reason to have Read-Only transactions feature, right? ;-) 
    However, I may say you now that in the next MySQL 5.6 release the code is 
    discovering &amp;quot;auto-magically&amp;quot; Read-Only transactions (in fact any 
    transaction is considered Read-Only until it did not involve any writes, 
    and switching to a &amp;quot;normal&amp;quot; transaction model as soon as the first write 
    was involved).. - just wait little bit before the code is published..&lt;br&gt;&lt;br&gt;To 
    summarize, here are few &amp;quot;simple&amp;quot; charts presenting obtained results:&lt;br&gt;&lt;br&gt;&lt;b&gt;OLTP_RO 
    8-tables Point-Selects @16cores-HT :&lt;/b&gt;&lt;br&gt;&lt;img height=&quot;248&quot; width=&quot;720&quot; src=&quot;http://dimitrik.free.fr/56_trx_list/sb_RO_Pselects_1M_8tab-ps_Max-TPS_-16cores-HT.png&quot;&gt;&lt;br&gt;&lt;b&gt;OLTP_RO 
    8-tables Point-Selects @32cores :&lt;/b&gt;&lt;br&gt;&lt;img height=&quot;248&quot; width=&quot;720&quot; src=&quot;http://dimitrik.free.fr/56_trx_list/sb_RO_Pselects_1M_8tab-ps_Max-TPS_-32cores.png&quot;&gt;&lt;br&gt;All 
    this said, there was a very good progress we made already in MySQL 5.6, 
    but there are still tons of challenges in MySQL to improve performance and 
    yet more to do ;-) (and many similar things coming in mind while on road 
    to Percona Live MySQL Conference and flying from Paris to San Francisco.. 
    - looking forward to discuss about any MySQL Performance problems there, 
    so see you soon, it's already within 2 days! ;-))&lt;br&gt;&lt;br&gt;Rgds,&lt;br&gt;-Dimitri&lt;br&gt;</description>
<link>http://dimitrik.free.fr/blog/archives/04-01-2013_04-30-2013.html#166</link>
<guid>http://dimitrik.free.fr/blog/archives/04-01-2013_04-30-2013.html#166</guid>

<category>MySQL</category>

<pubDate>Sun, 21 Apr 2013 04:17:34 +0200</pubDate>
</item>

<item>
<title>MySQL Performance: Analyzing Benchmarks, part-3 : Low Level Workloads with MySQL 5.6</title>
<description>&lt;p&gt;
      This article was inspired by problems on low level workloads initially 
      reported by Peter Zaitsev (&lt;a href=&quot;http://www.mysqlperformanceblog.com/2013/02/18/is-mysql-5-6-slower-than-mysql-5-5&quot;&gt;Is 
      MySQL 5.6 is slower than 5.5?&lt;/a&gt;, and then &lt;a href=&quot;http://www.mysqlperformanceblog.com/2013/03/27/why-mysql-performance-at-low-concurrency-is-important/&quot;&gt;Why 
      mysql performance at low concurrency is important&lt;/a&gt;) and Mark 
      Callaghan (&lt;a href=&quot;http://mysqlha.blogspot.com/2013/03/mysql-56-single-threaded-read-only.html&quot;&gt;MySQL 
      5.6 single-threaded read-only&lt;/a&gt;, &lt;a href=&quot;http://mysqlha.blogspot.com/2013/04/mysql-56-single-thread-update-only.html&quot;&gt;MySQL 
      5.6 single-thread update-only&lt;/a&gt;, &lt;a href=&quot;http://mysqlha.blogspot.com/2013/04/mysql-56-incomplete-guide-to-avoiding.html&quot;&gt;MySQL 
      5.6 - incomplete perf-guide&lt;/a&gt;..)..&lt;br&gt;&lt;br&gt;Sorry, it'll be long.. :-)&lt;br&gt;&lt;br&gt;Of 
      course the &amp;quot;low level&amp;quot; performance is important and remains significant. 
      And &amp;quot;small servers&amp;quot; performance too. In many cases people supposing they 
      have a heavy load because there are observing hundreds or thousands 
      &amp;quot;active&amp;quot; connections, while in reality only few of them are truly active 
      on the same time, and concurrency level is much lower than initially 
      supposed.. Such workloads may remain near free from any internal or 
      external contention, and have performance level depending only on the 
      pure code path overhead..&lt;br&gt;&lt;br&gt;I'll start first with Read-Only tests 
      (Sysbench OLTP_RO, which is used so often), as this test case is the 
      most simple and really only few factors coming into the game.&lt;br&gt;&lt;br&gt;
    &lt;/p&gt;
    &lt;table width=&quot;100%&quot; cellpadding=&quot;1&quot; border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
      &lt;tr bgcolor=&quot;#BDCCE3&quot;&gt;
        &lt;td&gt;
          &lt;h3&gt;
            &amp;#160; &lt;b&gt;Single User OLTP_RO Performance&lt;/b&gt;
          &lt;/h3&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
    &lt;br&gt;
    What is important here... - single user (or single thread) workload is 
    completely free of any possible or potential contention, so if there is 
    any difference in execution time, then it represents a pure overhead 
    (coming from &amp;quot;somewhere&amp;quot;).. Now, if we're comparing MySQL 5.6 with 5.5 
    (and yet with 5.1) we have to keep in mind that there was no fundamental 
    changes made between them to improve the code path itself. MySQL was 
    lacking &amp;quot;must have&amp;quot; features that people needing in production, so every 
    new release came with a bigger code (means more and more longer code 
    path).. - so just from a &amp;quot;common sense&amp;quot; single user performance cannot be 
    better on MySQL 5.6 than on 5.5 (and not on 5.1 which is even not having 
    MDL code)..&lt;br&gt;&lt;br&gt;And then we may always speculate on Performance Schema 
    (PFS) impact, Optimizer Traces, not optimal MDL, etc. etc. - forgetting 
    that exactly all these &amp;quot;goodies&amp;quot; will completely change and speed-up your 
    developments and workload analyzes ;-) So, yes, you may still compile 
    MySQL 5.6 without all this stuff and win some 5% or maybe even 10% in 
    performance.. - but it'll be likely you decided to remove from your own 
    car all counters, electronics and air conditioning just to save in 
    autonomy by lowering electricity consumption.. - but will you then still 
    consider it as a &amp;quot;safe driving&amp;quot;? ;-)) (but well, we're not stopping to 
    work on it, and things are constantly improved, stay tuned ;-))&lt;br&gt;&lt;br&gt;BTW, 
    also while analyzing various MySQL 5.6 &amp;quot;overheads&amp;quot; I've also discovered 
    that on some queries/workloads I'm getting up to 12%(!) performance 
    improvement with MySQL binaries are compiled without &lt;i&gt;&amp;quot;-fno-omit-frame-pointer&amp;quot;&lt;/i&gt; 
    GCC option.. - but will you ever consider to use such a MySQL server 
    binaries in production? - because from such a binary you'll never able to 
    get a complete stack trace, means if you'll have any core dumps they all 
    will be just useless, and could be sent directly to /dev/null.. ;-)&lt;br&gt;&lt;br&gt;But 
    well, this is still yet a half of the problem.. - the main problem for me 
    is that single user OLTP_RO is giving me completely different results from 
    run to run (same test, same config, same HW - but different results from 
    run to run).. Thing are going so fast on OLTP_RO workload once all the 
    data are cached by InnoDB Buffer Pool, then performance result becomes 
    depending on many small things (CPU cache, RAM latency, etc.).. So, when 
    on the same run without any changes you may already get 3% difference, it 
    becomes even harder to understand if some applied new changes will bring 
    you real improvement or additional overhead..&lt;br&gt;&lt;br&gt;However, we may 
    expect a better stability when we're observing more concurrent sessions 
    running, right? - so, on the following example I've started with 8 
    concurrent users.&lt;br&gt;&lt;br&gt;

    &lt;table width=&quot;100%&quot; cellpadding=&quot;1&quot; border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
      &lt;tr bgcolor=&quot;#BDCCE3&quot;&gt;
        &lt;td&gt;
          &lt;h3&gt;
            &amp;#160; &lt;b&gt;Low Level OLTP_RO Workloads&lt;/b&gt;
          &lt;/h3&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
    &lt;br&gt;
    Let's get a look on the following test results:

    &lt;ul&gt;
      &lt;li&gt;
        this is a &amp;quot;classic&amp;quot; Sysbench OLTP_RO workload on 12cores server
      &lt;/li&gt;
      &lt;li&gt;
        note: used here MySQL server binaries are compiled without(!) PFS
      &lt;/li&gt;
      &lt;li&gt;
        transaction clauses are not used..
      &lt;/li&gt;
      &lt;li&gt;
        MySQL server is started cold, then few tests executed to &amp;quot;pre-warm&amp;quot; 
        the cache
      &lt;/li&gt;
      &lt;li&gt;
        then the same &amp;quot;referenced&amp;quot; OLTP_RO test executed 3 times (one after 
        one)
      &lt;/li&gt;
      &lt;li&gt;
        then MySQL server restarted again, pre-warn and the same 3 tests 
        executed again..
      &lt;/li&gt;
      &lt;li&gt;
        and all these 3 times too, so in total we have 9 test results which 
        are expected to be &amp;quot;near the same&amp;quot;, right?..
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;br&gt;
    Le't see now what we're getting in reality:

    &lt;blockquote style=&quot;background-color: #DDE4EA&quot;&gt;
      &lt;pre&gt;+------------------+---------+-------+-------+-------+
| Test             | Engine  | PFS   | Users | QPS   |
+------------------+---------+-------+-------+-------+
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |     8 | 69577 |
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |     8 | 70721 |
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |     8 | 70779 |
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |     8 | 71245 |
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |     8 | 71418 |
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |     8 | 71507 |
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |     8 | 71564 |
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |     8 | 71721 |
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |     8 | 72015 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |     8 | 65489 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |     8 | 66156 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |     8 | 66833 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |     8 | 67293 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |     8 | 67328 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |     8 | 67395 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |     8 | 67494 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |     8 | 68655 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |     8 | 69030 |
+------------------+---------+-------+-------+-------+&lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;br&gt;
    &lt;u&gt;Observations&lt;/u&gt; :

    &lt;ul&gt;
      &lt;li&gt;
        you can see that 5.6 results are in range of [65489 - 69030] QPS..
      &lt;/li&gt;
      &lt;li&gt;
        and 5.5 are in [69577 - 72015] QPS..
      &lt;/li&gt;
      &lt;li&gt;
        so, there is already 5% variation on the 5.6 results
      &lt;/li&gt;
      &lt;li&gt;
        and 3% on 5.5
      &lt;/li&gt;
      &lt;li&gt;
        however, if you're really unlucky and in your test series will match 
        the worse time of 5.6 and the best time of 5.5 then you'll observe &lt;b&gt;10%(!)&lt;/b&gt; 
        regression from 5.5 to 5.6..
      &lt;/li&gt;
      &lt;li&gt;
        and if you're unlucky in opposite side: then the difference will be 
        only &lt;b&gt;0.7%(!)&lt;/b&gt; and you'll even not consider it, right? ;-))
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;br&gt;
    So, seems like to understand something here the only solution is to repeat 
    the same tests as much an possible, and then get an AVG value from 
    obtained variations, which will look then like following:

    &lt;blockquote style=&quot;background-color: #DDE4EA&quot;&gt;
      &lt;pre&gt;+------------------+---------+-------+-------+------------+
| Test             | Engine  | PFS   | Users | Avg_QPS    |
+------------------+---------+-------+-------+------------+
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |     8 | 71171.8889 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |     8 | 67297.0000 |
+------------------+---------+-------+-------+------------+&lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;br&gt;
    which is giving us &lt;b&gt;5.8%&lt;/b&gt; performance regression comparing 5.5 to 5.6 
    on 8 user sessions.. - pretty strange how it was possible that such a 
    difference escaped from our QA tests, because our &amp;quot;red line&amp;quot; there is 
    around 3% (and every test is executed 3 times) - probably we were just 
    little bit more lucky here, etc. - don't know..&lt;br&gt;&lt;br&gt;But result is a 
    result, and we cannot ignore it, right? ;-)) However, the most interesting 
    for me here is to know exactly from where the difference is coming (and 
    fix it then if it's possible) -- but there is another fun stuff coming ;-)&lt;br&gt;&lt;br&gt;So, 
    I'm profiling now the same 5.6 and 5.5 workloads with &amp;quot;perf&amp;quot; and getting:

    &lt;ul&gt;
      &lt;li&gt;
        5.6 : 64400 QPS
      &lt;/li&gt;
      &lt;li&gt;
        5.5 : 70800 QPS
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;br&gt;
    both results are slightly worse than expected (yes, &amp;quot;perf&amp;quot; tool also has 
    its overhead, not only MySQL stuff ;-)), however the result is the result, 
    and there is really &lt;b&gt;10%&lt;/b&gt; difference happened during these tests 
    under profiling, so we should see something pretty visible and big in 
    profiler reports, right? (well, at least expect to see finally something 
    and then at least to know what to fix)..&lt;br&gt;&lt;br&gt;From a long time I've 
    developed a tool helping me to compare several &amp;quot;perf&amp;quot; reports and 
    highlight the difference. As well we have to keep in mind this &amp;quot;regression 
    level&amp;quot; and do a kind of &amp;quot;normalization&amp;quot; between 5.5 and 5.6 reports -- 
    CPU% time should be slightly increased for the slowest engine (5.6) to be 
    comparable with another one (5.5), so I've used here a multiplier of x1.10 
    and the result is the following with top-50 most &amp;quot;hot&amp;quot; functions: 

    &lt;table border=&quot;0&quot;&gt;
      &lt;tr&gt;
        &lt;td&gt;
          &lt;u&gt;Perf List&lt;/u&gt; :

          &lt;ul&gt;
            &lt;li&gt;
              #1 - sb_OLTP_RO_1M-ps-8usr-mysql55-QPS_70800 x Multiplier: [1.0]
            &lt;/li&gt;
            &lt;li&gt;
              #2 - sb_OLTP_RO_1M-ps-8usr-mysql56-QPS_64400 x Multiplier: [1.10]
            &lt;/li&gt;
          &lt;/ul&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;center&quot;&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
    &lt;table width=&quot;75%&quot; border=&quot;0&quot;&gt;
      &lt;tr bgcolor=&quot;#BFBFBF&quot;&gt;
        &lt;th align=&quot;left&quot;&gt;
          Top-50 Function Name(s)
        &lt;/th&gt;
        &lt;th align=&quot;right&quot;&gt;
          CPU% #1
        &lt;/th&gt;
        &lt;th align=&quot;right&quot;&gt;
          CPU% #2
        &lt;/th&gt;
        &lt;th align=&quot;right&quot;&gt;
          +
        &lt;/th&gt;
        &lt;th align=&quot;right&quot;&gt;
          +w
        &lt;/th&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          my_hash_sort_simple
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          10.68
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          11.58
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +8.44%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.90
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          memcpy
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          3.71
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          3.67
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          row_search_for_mysql
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          3.46
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          2.77
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          ptr_compare_0
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          1.62
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.24
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          my_strnxfrm_simple
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          1.34
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          1.41
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +5.06%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.07
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          libjemalloc
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          1.23
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          1.01
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          make_join_statistics
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.93
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          1.29
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +38.37%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.36
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          btr_search_guess_on_hash
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.98
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          1.01
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +3.25%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.03
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          JOIN::optimize
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.97
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.85
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          row_sel_store_mysql_rec
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.88
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.33
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          buf_block_align
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.87
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.97
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +11.25%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.10
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          __merge_sort_loop
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.90
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.90%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.90
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          __pthread_mutex_lock_internal
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.81
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.89
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +9.99%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.08
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          rec_init_offsets
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.81
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.79
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          rec_get_offsets_func
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.74
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.82
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +9.99%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.07
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          __merge_sort_with_buffer
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.76
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.76%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.76
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          _spin_lock_bh
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.69
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.69
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.42%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.00
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          my_strnncollsp_simple
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.66
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.73
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +9.99%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.07
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          Field_string::pack
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.65
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.65
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          tcp_recvmsg
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.60
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.71
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +17.32%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.10
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          __memset_sse2
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.55
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.36
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          my_lengthsp_8bit
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.54
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.54
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          open_table
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.51
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.31
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          lock_clust_rec_cons_read_sees
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.49
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.47
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          dispatch_command
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.43
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.53
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +22.78%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.10
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          cmp_dtuple_rec_with_match_low
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.52
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.52%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.52
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          buf_page_get_gen
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.39
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.52
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +32.55%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.13
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          cmp_dtuple_rec_with_match
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.46
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          evaluate_join_record
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.45
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.51
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +12.43%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.06
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          my_qsort2
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.45
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.22
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          open_tables
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.45
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.46
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +2.66%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.01
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          JOIN::prepare
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.39
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.48
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +24.09%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.09
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          tcp_sendmsg
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.37
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.48
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +30.80%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.11
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          mysql_execute_command
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.37
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.47
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +27.83%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.10
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          tcp_ack
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.42
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          filesort
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.42
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.32
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          __pthread_mutex_unlock
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.41
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.29
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          row_sel_field_store_in_mysql_format_func
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.44
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.44%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.44
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          fget_light
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.30
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.44
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +46.65%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.14
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          buf_page_get_known_nowait
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.30
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.42
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +39.32%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.12
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          ha_innobase::general_fetch
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.23
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.42
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +81.72%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.19
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          mysql_select
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.33
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.41
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +23.32%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.08
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          trx_start_low
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.21
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.40
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +88.55%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.19
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          Item_func_between::val_int
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.35
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.37
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +6.85%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.02
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          THD::enter_stage
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.39
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.39%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.39
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          copy_user_generic_string
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.28
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.37
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +33.56%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.09
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          hp_write_key
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.34
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.37
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +9.99%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.03
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          __pthread_getspecific_internal
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.33
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.37
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +13.32%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.04
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          build_template
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.33
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          make_join_select
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.36
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.36%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.36
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td colspan=&quot;2&quot;&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          &lt;hr&gt;
          +613.88%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          &lt;hr&gt;
          +6.67
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
    &lt;br&gt;
    &lt;br&gt;
    &lt;u&gt;Observations&lt;/u&gt; :

    &lt;ul&gt;
      &lt;li&gt;
        you can see that the most hot function here is my_hash_sort_simple(), 
        however there is only 8.4% difference between 5.5 and 5.6 here, and 
        only 0.90% of &amp;quot;pure weight&amp;quot;..
      &lt;/li&gt;
      &lt;li&gt;
        while there are function going up to 88% in difference, like 
        trx_start_low(), but having only 0.19% in weight..
      &lt;/li&gt;
      &lt;li&gt;
        or __merge_sort_loop() and __merge_sort_with_buffer() which are 
        completely new for 5.6 (and not present in 5.5), and their sum weight 
        will at least out-pass 1.5% ;-)
      &lt;/li&gt;
      &lt;li&gt;
        so, from where the main difference is coming?..
      &lt;/li&gt;
      &lt;li&gt;
        while it's sure if in 5.6 we were able to divide by 2 time spent in 
        the my_hash_sort_simple() function -- then we may expect to see a 
        pretty positive difference in this workload, but it's not yet a case 
        ;-))
      &lt;/li&gt;
      &lt;li&gt;
        and not the the summary percentage weight at the end of the report - 
        it's 6.67% in difference comparing diff 5.5 vs 5.6
      &lt;/li&gt;
    &lt;/ul&gt;
    Now, you can also see that on some function were spending less time in 5.6 
    than in 5.5, so what if now I inverse the comparison and will get a report 
    on diff 5.6 vs 5.5 (instead of 5.5 vs 5.6) ?..&lt;br&gt;&lt;br&gt;Here is the result:&lt;br&gt;

    &lt;table border=&quot;0&quot;&gt;
      &lt;tr&gt;
        &lt;td&gt;
          &lt;u&gt;Perf List&lt;/u&gt; :

          &lt;ul&gt;
            &lt;li&gt;
              #1 - sb_OLTP_RO_1M-ps-8usr-mysql56-QPS_64400 x Multiplier: [1.10]
            &lt;/li&gt;
            &lt;li&gt;
              #2 - sb_OLTP_RO_1M-ps-8usr-mysql55-QPS_70800 x Multiplier: [1.0]
            &lt;/li&gt;
          &lt;/ul&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;center&quot;&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
    &lt;table width=&quot;75%&quot; border=&quot;0&quot;&gt;
      &lt;tr bgcolor=&quot;#BFBFBF&quot;&gt;
        &lt;th align=&quot;left&quot;&gt;
          Top-50 Function Name(s)
        &lt;/th&gt;
        &lt;th align=&quot;right&quot;&gt;
          CPU% #1
        &lt;/th&gt;
        &lt;th align=&quot;right&quot;&gt;
          CPU% #2
        &lt;/th&gt;
        &lt;th align=&quot;right&quot;&gt;
          +
        &lt;/th&gt;
        &lt;th align=&quot;right&quot;&gt;
          +w
        &lt;/th&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          my_hash_sort_simple
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          11.58
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          10.68
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          memcpy
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          3.67
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          3.71
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +1.02%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.04
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          row_search_for_mysql
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          2.77
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          3.46
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +24.97%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.69
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          ptr_compare_0
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.24
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          1.62
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +569.49%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +1.38
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          my_strnxfrm_simple
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          1.41
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          1.34
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          libjemalloc
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          1.01
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          1.23
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +21.55%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.22
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          make_join_statistics
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          1.29
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.93
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          btr_search_guess_on_hash
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          1.01
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.98
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          JOIN::optimize
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.85
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.97
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +14.53%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.12
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          row_sel_store_mysql_rec
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.33
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.88
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +166.69%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.55
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          buf_block_align
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.97
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.87
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          __merge_sort_loop
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.90
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          __pthread_mutex_lock_internal
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.89
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.81
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          rec_init_offsets
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.79
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.81
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +2.28%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.02
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          rec_get_offsets_func
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.82
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.74
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          __merge_sort_with_buffer
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.76
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          _spin_lock_bh
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.69
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.69
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          my_strnncollsp_simple
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.73
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.66
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          Field_string::pack
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.65
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.65
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.16%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.00
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          tcp_recvmsg
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.71
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.60
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          __memset_sse2
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.36
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.55
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +51.53%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.19
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          my_lengthsp_8bit
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.54
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.54
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.20%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.00
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          open_table
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.31
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.51
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +65.60%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.20
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          lock_clust_rec_cons_read_sees
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.47
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.49
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +3.60%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.02
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          dispatch_command
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.53
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.43
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          cmp_dtuple_rec_with_match_low
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.52
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          buf_page_get_gen
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.52
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.39
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          cmp_dtuple_rec_with_match
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.46
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.46%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.46
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          evaluate_join_record
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.51
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.45
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          my_qsort2
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.22
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.45
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +104.57%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.23
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          open_tables
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.46
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.45
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          JOIN::prepare
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.48
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.39
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          tcp_sendmsg
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.48
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.37
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          mysql_execute_command
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.47
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.37
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          tcp_ack
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.42
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.42%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.42
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          filesort
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.32
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.42
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +31.67%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.10
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          __pthread_mutex_unlock
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.29
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.41
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +43.37%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.12
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          row_sel_field_store_in_mysql_format_func
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.44
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          fget_light
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.44
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.30
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          buf_page_get_known_nowait
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.42
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.30
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          ha_innobase::general_fetch
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.42
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.23
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          mysql_select
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.41
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.33
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          trx_start_low
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.40
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.21
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          Item_func_between::val_int
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.37
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.35
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          THD::enter_stage
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.39
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          copy_user_generic_string
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.37
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.28
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          hp_write_key
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.37
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.34
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          __pthread_getspecific_internal
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.37
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.33
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          build_template
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.33
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.33%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          +0.33
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td align=&quot;left&quot;&gt;
          make_join_select
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          0.36
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          -
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td colspan=&quot;2&quot;&gt;
          
        &lt;/td&gt;
        &lt;td&gt;
          
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          &lt;hr&gt;
          +1102.46%
        &lt;/td&gt;
        &lt;td align=&quot;right&quot;&gt;
          &lt;hr&gt;
          +5.10
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
    &lt;u&gt;Observations&lt;/u&gt; :&lt;br&gt;

    &lt;ul&gt;
      &lt;li&gt;
        I'm pretty sure that if I'd show this report to anyone without saying 
        who is running faster, 5.5 or 5.6, and just asking to point to the 
        source of regression, there are many functions which can be easily 
        chosen as candidate for the most problematic ;-))
      &lt;/li&gt;
      &lt;li&gt;
        ptr_compare_0() is a very good candidate with it's 569% difference ;-)
      &lt;/li&gt;
      &lt;li&gt;
        and my_qsort2() too (with some others as well ;-)
      &lt;/li&gt;
      &lt;li&gt;
        while it's till 5.5 which is running faster!..
      &lt;/li&gt;
      &lt;li&gt;
        and the sum weight in 5.6 vs 5.5 is finally 5.10%, which is comparing 
        to 6.67% in 5.5 vs 5.6 is giving only 1.57%..
      &lt;/li&gt;
      &lt;li&gt;
        as you can see, it'll be very hard to find something there..
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;br&gt;
    Looks like the best &amp;quot;potential&amp;quot; candidate is still my_hash_sort_simple() 
    function, because improved time on this one will at least be very visible 
    as it represents 10% of the whole execution time..&lt;br&gt;&lt;br&gt;A similar story 
    is coming with 32 users on this server too, except that it has a smaller 
    variation:

    &lt;blockquote style=&quot;background-color: #DDE4EA&quot;&gt;
      &lt;pre&gt;+------------------+---------+-------+-------+--------+
| Test             | Engine  | PFS   | Users | QPS    |
+------------------+---------+-------+-------+--------+
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |    32 | 149592 |
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |    32 | 149593 |
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |    32 | 149681 |
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |    32 | 149699 |
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |    32 | 149745 |
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |    32 | 149762 |
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |    32 | 150522 |
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |    32 | 150586 |
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |    32 | 150603 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |    32 | 149007 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |    32 | 149017 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |    32 | 149147 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |    32 | 149195 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |    32 | 149308 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |    32 | 149497 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |    32 | 149514 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |    32 | 149541 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |    32 | 149671 |
+------------------+---------+-------+-------+--------+

&lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;br&gt;
    So,

    &lt;ul&gt;
      &lt;li&gt;
        5.6 : [149007 - 149671] QPS, 0.4% variation
      &lt;/li&gt;
      &lt;li&gt;
        5.5 : [149592 - 150603] QPS, 0.6% variation
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;br&gt;
    And in average QPS we're getting finally 0.4% regression only :

    &lt;blockquote style=&quot;background-color: #DDE4EA&quot;&gt;
      &lt;pre&gt;+------------------+---------+-------+-------+-------------+
| Test             | Engine  | PFS   | Users | Avg_QPS     |
+------------------+---------+-------+-------+-------------+
| sb_OLTP_RO_1M-ps | mysql55 | noPFS |    32 | 149975.8889 |
| sb_OLTP_RO_1M-ps | mysql56 | noPFS |    32 | 149321.8889 |
+------------------+---------+-------+-------+-------------+&lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;br&gt;
    However, if we'll add now on it 2% in binary is compiled with PFS 
    instrumentation, then another 1-2% if you enable only PFS (keeping 
    instrumentation inactive, but able to be activated dynamically) -- then 
    you're getting 4%-5% difference comparing to MySQL 5.5 which is having PFS 
    disabled by default and bigger PFS overhead when enabled (that's why it's 
    disabled by default in 5.5 ;-))&lt;br&gt;&lt;br&gt;But then, would you refuse this 
    gold mine of information which is proposing you PFS today in exchange of 
    5% in QPS?.. - Seems to me I have to present you some more detailed stuff 
    here about every potential overhead in PFS to break last doubts if any 
    ;-)) -- and don't forget that more you test PFS and report your problems - 
    better it will be!&lt;br&gt;&lt;br&gt;Let's get a look now on the OLTP_RW (Read-Write).&lt;br&gt;&lt;br&gt;

    &lt;table width=&quot;100%&quot; cellpadding=&quot;1&quot; border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
      &lt;tr bgcolor=&quot;#BDCCE3&quot;&gt;
        &lt;td&gt;
          &lt;h3&gt;
            &amp;#160; &lt;b&gt;Low Level OLTP_RW Workloads&lt;/b&gt;
          &lt;/h3&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
    &lt;br&gt;
    Things are going slightly different on OLTP_RW:

    &lt;ul&gt;
      &lt;li&gt;
        the gap is not so big as on OLTP_RO (I/O latency is coming in game too 
        as we have writes)
      &lt;/li&gt;
      &lt;li&gt;
        many parts of the new code are representing fixes just to do things 
        right (so, just for that 5.6 is already better ;-))
      &lt;/li&gt;
      &lt;li&gt;
        while there are still some areas in 5.6 which should be improved (see: &lt;a href=&quot;http://dimitrik.free.fr/blog/archives/2013/01/mysql-performance-innodb-heavy-io-rw-workloads-limits-in-56.html&quot;&gt;Heavy 
        I/O RW workloads limits in 5.6&lt;/a&gt; - and work is in progress here, 
        stay tuned)..
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;br&gt;
    While again, even on this &amp;quot;small server&amp;quot; I'm still observing a slightly 
    lower TPS (Commit/sec) here on 5.6 vs 5.5, then looking not just on the 
    TPS numbers, but on details about OLTP_RW on both engines we can see the 
    following:&lt;br&gt;&lt;br&gt;&lt;b&gt;OLTP_RW @32usr, 5.6 -vs- 5.5 :&lt;/b&gt;&lt;img width=&quot;962&quot; src=&quot;http://dimitrik.free.fr/56_low_end/screenshot.png&quot; height=&quot;492&quot;&gt;&lt;br&gt;&lt;u&gt;Observations&lt;/u&gt; 
    :

    &lt;ul&gt;
      &lt;li&gt;
        as you can see, there is no drops on 5.6 in Commit/sec activity
      &lt;/li&gt;
      &lt;li&gt;
        and Checkpoint Age is remaining much lower, still allowing a room 
        against some unexpected activity spikes
      &lt;/li&gt;
      &lt;li&gt;
        and to keep things stable, we're writing slightly more (as you can see 
        from I/O activity graph)..
      &lt;/li&gt;
      &lt;li&gt;
        you just see 5.6 improved Adaptive Flushing in action
      &lt;/li&gt;
      &lt;li&gt;
        and just for this reason I'd migrate to 5.6 asap ;-))
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;br&gt;
    While, of course, on a bigger server this workload will run way better on 
    MySQL 5.6 (as you can see from the &lt;a href=&quot;http://dimitrik.free.fr/blog/archives/2013/02/mysql-performance-mysql-56-vs-mysql-55-vs-mariadb-55.html&quot;&gt;previous 
    posts&lt;/a&gt;).&lt;br&gt;&lt;br&gt;

    &lt;table width=&quot;100%&quot; cellpadding=&quot;1&quot; border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
      &lt;tr bgcolor=&quot;#BDCCE3&quot;&gt;
        &lt;td&gt;
          &lt;h3&gt;
            &amp;#160; &lt;b&gt;More in depth&lt;/b&gt;
          &lt;/h3&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
    &lt;br&gt;
    Let's now go more in depth, but with a bigger server - my lovely 32cores 
    host. What is good with a bigger server that we're able to simulate small 
    one with it as well, but have a room for different test configs ;-) By 
    binding MySQL server and Sysbench binary to 8 or 16cores we may observe 
    less or more what we may expect from an 8 or 16cores server..&lt;br&gt;&lt;br&gt;NOTE: 
    for the following tests MySQL binaries were compiled with PFS 
    instrumentation, but PFS was turned off during the tests.&lt;br&gt;&lt;br&gt;&lt;u&gt;Observations&lt;/u&gt; 
    :

    &lt;ul&gt;
      &lt;li&gt;
        On 8cores &lt;b&gt;OLTP_RO&lt;/b&gt;, 4 or 8users :

        &lt;ul&gt;
          &lt;li&gt;
            the most hot functions on 5.5 are :

            &lt;ul&gt;
              &lt;li&gt;
                ptr_compare_0( 4% )
              &lt;/li&gt;
              &lt;li&gt;
                row_search_for_mysql( 3% )
              &lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;
            and on 5.6 are :

            &lt;ul&gt;
              &lt;li&gt;
                row_search_for_mysql( 3% )
              &lt;/li&gt;
              &lt;li&gt;
                merge_sort_loop( 2% )
              &lt;/li&gt;
              &lt;li&gt;
                merge_sort_with_buffer( 2% )
              &lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;
            interesting that my_hash_sort_simple() on this server is much 
            lower (1.3% only)
          &lt;/li&gt;
          &lt;li&gt;
            but 5.6 is still worse than 5.5..
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        On 16cores &lt;b&gt;OLTP_RO &lt;/b&gt;:

        &lt;ul&gt;
          &lt;li&gt;
            5.6 becomes better than 5.5 only since 16 or 32 concurrent users
          &lt;/li&gt;
          &lt;li&gt;
            and this is as expected at least, because it's since this load 
            level the first internal contention are appearing ;-)
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        On &lt;b&gt;OLTP_RW&lt;/b&gt; 8 or 16cores :

        &lt;ul&gt;
          &lt;li&gt;
            pretty similar barrier is here too..
          &lt;/li&gt;
          &lt;li&gt;
            on 8cores 5.5 is up to 5% better than 5.6
          &lt;/li&gt;
          &lt;li&gt;
            on 16cores 5.6 becomes better since 16 concurrent users
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;br&gt;
    Few graphs so far:&lt;br&gt;&lt;br&gt;&lt;b&gt;OLTP_RO @8cores-HT :&lt;/b&gt;&lt;br&gt;&lt;img width=&quot;720&quot; src=&quot;http://dimitrik.free.fr/56_low_end/sb_OLTP_RO_1M-ps-TSET_Max-QPS_-8cores-HT_PFS_off.png&quot; height=&quot;248&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;OLTP_RO 
    @16cores-HT :&lt;/b&gt;&lt;br&gt;&lt;img width=&quot;720&quot; src=&quot;http://dimitrik.free.fr/56_low_end/sb_OLTP_RO_1M-ps-TSET_Max-QPS_-16cores-HT_PFS_off.png&quot; height=&quot;248&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;OLTP_RO 
    Point-Selects @8cores-HT :&lt;/b&gt;&lt;br&gt;&lt;img width=&quot;720&quot; src=&quot;http://dimitrik.free.fr/56_low_end/sb_RO_Pselects_1M-ps-TSET_Max-QPS_-8cores-HT_PFS_off.png&quot; height=&quot;248&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;OLTP_RO 
    Point-Selects @16cores-HT :&lt;/b&gt;&lt;br&gt;&lt;img width=&quot;720&quot; src=&quot;http://dimitrik.free.fr/56_low_end/sb_RO_Pselects_1M-ps-TSET_Max-QPS_-16cores-HT_PFS_off.png&quot; height=&quot;248&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;OLTP_RW 
    @8cores-HT :&lt;/b&gt;&lt;br&gt;&lt;img width=&quot;720&quot; src=&quot;http://dimitrik.free.fr/56_low_end/sb_OLTP_RW_10M-ps-TSET_Max-QPS_-8cores-HT_PFS_off.png&quot; height=&quot;248&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;OLTP_RW 
    @16cores-HT :&lt;/b&gt;&lt;br&gt;&lt;img width=&quot;720&quot; src=&quot;http://dimitrik.free.fr/56_low_end/sb_OLTP_RW_10M-ps-TSET_Max-QPS_-16cores-HT_PFS_off.png&quot; height=&quot;248&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;OLTP_RW 
    Updates-only @8cores-HT :&lt;/b&gt;&lt;br&gt;&lt;img width=&quot;720&quot; src=&quot;http://dimitrik.free.fr/56_low_end/sb_OLTP_RWUpd_10M-ps-TSET_Max-QPS_-8cores-HT_PFS_off.png&quot; height=&quot;248&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;OLTP_RW 
    Updates-only @16cores-HT :&lt;/b&gt;&lt;br&gt;&lt;img width=&quot;720&quot; src=&quot;http://dimitrik.free.fr/56_low_end/sb_OLTP_RWUpd_10M-ps-TSET_Max-QPS_-16cores-HT_PFS_off.png&quot; height=&quot;248&quot;&gt;&lt;br&gt;So 
    far :

    &lt;ul&gt;
      &lt;li&gt;
        MySQL 5.6 showing here a direct speed-up if you have 16 (or more) CPU 
        cores on your HW server and at least 16 concurrent user sessions..
      &lt;/li&gt;
      &lt;li&gt;
        with a smaller amount of CPU cores (or concurrent user sessions) you 
        may see the same or slightly lower QPS level on MySQL 5.6 comparing to 
        5.5, and if this difference with PFS turned off is still out-passing 
        5-10% -- file a bug, you're really hitting something abnormal ;-)
      &lt;/li&gt;
      &lt;li&gt;
        in any case, even on a small server, you'll still get a benefit of the 
        all other performance improvements coming with MySQL 5.6 (ex: &lt;a href=&quot;http://dimitrik.free.fr/blog/archives/2012/04/mysql-performance-improved-adaptive-flushing-in-56labs.html&quot;&gt;stable 
        writes&lt;/a&gt;, &lt;a href=&quot;http://dimitrik.free.fr/blog/archives/2012/06/mysql-performance-binlog-group-commit-in-56.html&quot;&gt;binlog 
        group commit&lt;/a&gt;, etc. etc. etc. - the most complete lists by &lt;a href=&quot;https://blogs.oracle.com/MySQL/entry/mysql_5_6_is_a&quot;&gt;Rob&lt;/a&gt; 
        and &lt;a href=&quot;http://www.mysqlperformanceblog.com/2013/01/27/mysql-5-6-improvements-in-the-nutshell/&quot;&gt;Peter&lt;/a&gt;)..
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;br&gt;
    And, of course, work is continuing, so stay tuned ;-)&lt;br&gt;&lt;br&gt;As well, I 
    have yet more benchmark results that I'm planning to present and discuss 
    during &lt;a href=&quot;http://www.percona.com/live/mysql-conference-2013/&quot;&gt;Percona 
    MySQL Conference&lt;/a&gt; - so come to join us during 5.6 BoF, our talks, or 
    just around a beer ;-) BTW, if you're still hesitating if you should 
    attend this Conference.. - just trust me, you should! ;-)&lt;br&gt;&lt;br&gt;Rgds,&lt;br&gt;-Dimitri&lt;br&gt;</description>
<link>http://dimitrik.free.fr/blog/archives/04-01-2013_04-30-2013.html#165</link>
<guid>http://dimitrik.free.fr/blog/archives/04-01-2013_04-30-2013.html#165</guid>

<category>MySQL</category>

<pubDate>Wed, 10 Apr 2013 03:51:26 +0200</pubDate>
</item>

<item>
<title>Speaking at MySQL Tech Tours @Paris</title>
<description>&lt;p&gt;
      &lt;img width=&quot;640&quot; height=&quot;220&quot; src=&quot;http://dimitrik.free.fr/blog/media/mysql-tech-tours.jpg&quot;&gt;
      
    &lt;/p&gt;
    &lt;p&gt;
      26 March 2013, MySQL Tech Tours comes to Paris, FRANCE, and I'm happy to 
      cover MySQL Performance related topics during this event!
    &lt;/p&gt;
    &lt;p&gt;
      The full agenda is here: &lt;a href=&quot;http://www.oracle.com/us/dm/h2fy11/159887-emeafm12066744mpp025-oem-1915810-fr.html&quot;&gt;MySQL 
      Tech Tour @Paris&lt;/a&gt;&amp;#160;
    &lt;/p&gt;
    &lt;p&gt;
      Of course, the timing will be pretty short to cover all topics ;-) - but 
      there will be also lunch time and whole afternoon if you're willing to 
      continue, because I'll stay there for a full day and will have all my 
      time to answer any of your questions about MySQL Performance :-))
    &lt;/p&gt;
    &lt;p&gt;
      Note: the event is free, so places are limited.. (means: hurry up to 
      subscribe ;-))
    &lt;/p&gt;
    &lt;p&gt;
      See you there! and my strong willing is to have such kind of MySQL 
      events @Paris more and more often (and on more regular basis) - if you 
      have some ideas about to share, just drop me an e-mail or leave a 
      comment..
    &lt;/p&gt;
    &lt;p&gt;
      Rgds,&lt;br&gt;-Dimitri
    &lt;/p&gt;</description>
<link>http://dimitrik.free.fr/blog/archives/03-01-2013_03-31-2013.html#164</link>
<guid>http://dimitrik.free.fr/blog/archives/03-01-2013_03-31-2013.html#164</guid>

<category>MySQL</category>

<pubDate>Wed, 13 Mar 2013 19:29:54 +0100</pubDate>
</item>

</channel>
</rss>
