<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <!-- Source: http://dimitrik.free.fr/blog/rss.xml -->
  <channel>
    <title>DimitriK's (dim) Weblog</title>
    <link>https://siftrss.com/f/zJp3r9ARwK3</link>
    <description>DimitriK's (dim) Weblog</description>
    <atom:link href="https://siftrss.com/f/zJp3r9ARwK3" rel="self" type="application/rss+xml"/>
    <language>en</language>
    <copyright>Contents (c) 2025 &lt;a href="mailto:dimitri.kravtchuk(at)gmail.com"&gt;Dimitri&lt;/a&gt; </copyright>
    <lastBuildDate>Sun, 05 Oct 2025 18:08:12 GMT</lastBuildDate>
    <generator>Nikola (getnikola.com)</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <item>
      <title>My Slides from FOSDEM25 and Pre-FOSDEM Belgian Days 2025</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-perf-fosdem25.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;p&gt;&lt;img alt="" src="http://dimitrik.free.fr/blog/perf/mysql_perf_fosdem25/img1.jpeg"&gt;&lt;/p&gt;
&lt;p&gt;As promised, my slides from FOSDEM25 and Pre-FOSDEM MySQL Belgian Days :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://dimitrik.free.fr/Presentations/MySQL_Perf-preFOSDEM2025-dim.pdf"&gt;MySQL Scalability &amp;amp; Systems Evaluation Overview 2025&lt;/a&gt; [PDF]&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dimitrik.free.fr/Presentations/MySQL_Profiler-FOSDEM2025-dim.pdf"&gt;Profiling MySQL Memory &amp;amp; CPU Usage Directly From MySQL&lt;/a&gt; [PDF}&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And since I was asked several times about MySQL test case demonstrating &lt;strong&gt;glibc-malloc memory fragmentation / leaks&lt;/strong&gt; -- here are all the details :&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-perf-fosdem25.html"&gt;Read more...&lt;/a&gt; (4 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>Benchmarks</category>
      <category>Binlog</category>
      <category>InnoDB</category>
      <category>Malloc</category>
      <category>MySQL</category>
      <category>Performance</category>
      <category>REDO</category>
      <category>Sysbench</category>
      <category>TPCC</category>
      <category>Tuning</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-perf-fosdem25.html</guid>
      <pubDate>Fri, 28 Feb 2025 19:15:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : Switching InnoDB REDO Threads=OFF/ON</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-perf-redo-threads.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;p&gt;In MySQL 8.0 we introduced a totally new design for InnoDB REDO Log management. The main difference was about implementing a lock-free solution for user threads, and use dedicated REDO threads for all background IO write work.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;for more details, see an excellent and very detailed article by Pawel : &lt;a href="https://dev.mysql.com/blog-archive/mysql-8-0-new-lock-free-scalable-wal-design/"&gt;https://dev.mysql.com/blog-archive/mysql-8-0-new-lock-free-scalable-wal-design/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;However, over a time we also added an option to let users to switch REDO threads=OFF to enforce REDO log processing efficiency in some particular cases. Unfortunately this feature created a lot of confusions for MySQL users, and many ones interpreted this in different ways, providing different and sometimes opposite advices, etc..&lt;/p&gt;
&lt;p&gt;My main advice will be always : test each feature &lt;strong&gt;yourself&lt;/strong&gt; and within &lt;strong&gt;your own&lt;/strong&gt; Production environment !! -- and at the end, this is all what matters ! -- regardless what you'll read on the Net (including the following post ;-))&lt;/p&gt;
&lt;p&gt;In case you don't have Production workloads for testing (like me), or afraid to break Production and want to do some initial probe experiments -- there are many generic benchmark workloads available around MySQL, so you can play with this to help you get a better understanding of what is going on.&lt;/p&gt;
&lt;p&gt;And this is what I'll try to do here -- to give you yet-one-more-advice about REDO Log threads ;-))&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-perf-redo-threads.html"&gt;Read more...&lt;/a&gt; (114 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>Benchmarks</category>
      <category>Binlog</category>
      <category>InnoDB</category>
      <category>MySQL</category>
      <category>Performance</category>
      <category>REDO</category>
      <category>Sysbench</category>
      <category>TPCC</category>
      <category>Tuning</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-perf-redo-threads.html</guid>
      <pubDate>Thu, 11 Jul 2024 16:15:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : Benchmark kit (BMK-kit)</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-perf-bmk-kit.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;p&gt;The following is a short HOWTO about deployment and use of Benchmark-kit (BMK-kit). The main idea of this kit is to simplify your life in running various MySQL benchmark workloads with less blood and minimal potential errors.&lt;/p&gt;
&lt;p&gt;Generally as simple as the following :&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;bash&lt;span class="w"&gt; &lt;/span&gt;/BMK/sb_exec/sb11-Prepare_50M_8tab-InnoDB.sh&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;32&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;# prepare data&lt;/span&gt;

$&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;users&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;128&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;256&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;512&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1024&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2048&lt;/span&gt;
&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# run OLTP_RW for 5min each load level..&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;bash&lt;span class="w"&gt; &lt;/span&gt;/BMK/sb_exec/sb11-OLTP_RW_50M_8tab-uniform-ps-trx.sh&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$users&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;300&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;sleep&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;15&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;the latest public online version of the following HOWTO is always available from here : &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-perf-bmk-kit.html"&gt;http://dimitrik.free.fr/blog/posts/mysql-perf-bmk-kit.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-perf-bmk-kit.html"&gt;Read more...&lt;/a&gt; (45 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>Compression</category>
      <category>dbSTRESS</category>
      <category>HOWTO</category>
      <category>InnoDB</category>
      <category>Linux</category>
      <category>MySQL</category>
      <category>OCI</category>
      <category>Performance</category>
      <category>SSL</category>
      <category>Sysbench</category>
      <category>Tools</category>
      <category>TPCC</category>
      <category>XFS</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-perf-bmk-kit.html</guid>
      <pubDate>Mon, 20 Jun 2022 17:45:00 GMT</pubDate>
    </item>
    <item>
      <title>dim_STAT : v.9.0 CoreUpdate-20-12</title>
      <link>http://dimitrik.free.fr/blog/posts/dim_stat-v90-coreupdate20-12.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;p&gt;Just realized I did not post any notes about dim_STAT CoreUpdates during the last 3 years, so will try to fix it now with the following short summary ;-))&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/dim_stat-v90-coreupdate20-12.html"&gt;Read more...&lt;/a&gt; (2 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>dim_STAT</category>
      <category>DTrace</category>
      <category>Linux</category>
      <category>MySQL</category>
      <category>Performance</category>
      <guid>http://dimitrik.free.fr/blog/posts/dim_stat-v90-coreupdate20-12.html</guid>
      <pubDate>Thu, 31 Dec 2020 10:45:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : Understanding InnoDB IO Internals &amp; "Checkpointing"</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-80-innodb-checkpointing.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;p&gt;Few weeks ago with a big curiosity I was reading several articles published by Percona about TPCC Benchmark results and MySQL 8.0 "checkpointing" issues..&lt;/p&gt;
&lt;p&gt;Unfortunately, in these articles there was no any explanation nor any tentative to understand what is going on, an probably at least try and validate some "first coming in mind" tuning / troubleshooting options.. (And even no any try to show in action so often advertised PMM, and see on what it'll point ?).. &lt;/p&gt;
&lt;p&gt;All in all, in the following article I'll try to feel up the "white holes" left in this TPCC testing..&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-80-innodb-checkpointing.html"&gt;Read more...&lt;/a&gt; (22 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>AHI</category>
      <category>Benchmarks</category>
      <category>DBLWR</category>
      <category>InnoDB</category>
      <category>IO-bound</category>
      <category>MySQL</category>
      <category>Optane</category>
      <category>Performance</category>
      <category>SSD</category>
      <category>Sysbench</category>
      <category>TPCC</category>
      <category>Tuning</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-80-innodb-checkpointing.html</guid>
      <pubDate>Thu, 13 Aug 2020 22:45:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : TPCC "Mystery" [SOLVED]</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-80-tpcc-mystery.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;p&gt;The TPCC workload "mystery" exposed in the following post was already clarified the last year, and I've presented explanations about  the observed problem during PerconaLIVE-2019. But slides are slides, while article is article ;-)) So, I decided to take a time to write a few lines more about, to keep this post as a reference for further TPCC investigations..&lt;/p&gt;
&lt;p&gt;The "mystery" is related to observed scalability issues on MySQL 8.0 under the given TPCC workload -- just that on the old aged DBT-2 workload (TPCC variation) I was getting much higher TPS when running on 2 CPU Sockets, comparing to1 CPU Socket, which is was not at all the case for Sysbench-TPCC.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-80-tpcc-mystery.html"&gt;Read more...&lt;/a&gt; (8 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>Benchmarks</category>
      <category>InnoDB</category>
      <category>MySQL</category>
      <category>Performance</category>
      <category>Sysbench</category>
      <category>TPCC</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-80-tpcc-mystery.html</guid>
      <pubDate>Tue, 30 Jun 2020 21:45:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : XFS -vs- EXT4 Story</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-80-perf-xfs-vs-ext4.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;p&gt;This post was remaining in stand-by for a long time, specially that I was expecting that observed issues will be fixed soon. But time is going, and the problems are remaining. And I'm constantly asked "why, Dimitri, you're suggesting now to use XFS, while in the past you always suggested EXT4 ??" -- hope the following article will clarify you the "why" and maybe motivate you to do your own evaluations to see how well the things are working for you on your own systems under your own workloads..&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTE : this will also clarify why the new Double Write did not appear in MySQL 8.0 in 2018, as it was planned, but only recently (&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-80-perf-new-dblwr.html"&gt;http://dimitrik.free.fr/blog/posts/mysql-80-perf-new-dblwr.html&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-80-perf-xfs-vs-ext4.html"&gt;Read more...&lt;/a&gt; (6 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>Benchmarks</category>
      <category>DoubleWrite</category>
      <category>EXT4</category>
      <category>InnoDB</category>
      <category>MySQL</category>
      <category>Performance</category>
      <category>XFS</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-80-perf-xfs-vs-ext4.html</guid>
      <pubDate>Wed, 13 May 2020 20:15:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : The New InnoDB Double Write Buffer in Action</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-80-perf-new-dblwr.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;p&gt;The new MySQL-8.0.20 release is coming with re-designed InnoDB Double Write Buffer (DBLWR), and, indeed, it's one huge historical PITA less.. -- why it was so painful and cost us much blood in the past, I could not better explain than already done it in the following article yet from 2018 about &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-iobound-oltprw-vs-percona57.html"&gt;MySQL on IO-bound&lt;/a&gt; workloads.. The story is not complete, as it's missing the 2019's chapter (will tell it later, np)  -- but if you'll (re)read the mentioned above article first, you'll better understand the next ;-))&lt;/p&gt;
&lt;p&gt;But at least the current post is only about good news now -- the new DBLWR and how it helps to solve historical MySQL performance problems ! -- and as one picture is better than million words, I'll try to save 3M words here (as there are 3 pictures in this article ;-))&lt;/p&gt;
&lt;p&gt;Well, I'll also skip all new design details (I think Sunny will better explain them all himself "from the first hands") -- I'll only mention the following :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the DBLWR is no more part of "system tablespace", and can be placed anywhere you like (so, if you have a possibility to use a different storage for DBLWR files, you can totally get a rid of DBLWR impact on your main storage) -- but by default, DBLWR is stored in the same directory as your DATA&lt;/li&gt;
&lt;li&gt;you can configure how many DBLWR files you want to use&lt;/li&gt;
&lt;li&gt;and also how many pages per DBLWR files to have (which is also directly related to final DBLWR file size)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;For more details about config options you can check &lt;a href="https://dev.mysql.com/doc/refman/8.0/en/innodb-doublewrite-buffer.html"&gt;MySQL 8.0 doc about DBLWR&lt;/a&gt; explaining this all in details.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Enough words, let's go to the test results..&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-80-perf-new-dblwr.html"&gt;Read more...&lt;/a&gt; (3 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>Benchmarks</category>
      <category>DBLWR</category>
      <category>InnoDB</category>
      <category>IO-bound</category>
      <category>MySQL</category>
      <category>Optane</category>
      <category>Performance</category>
      <category>Sysbench</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-80-perf-new-dblwr.html</guid>
      <pubDate>Thu, 30 Apr 2020 20:10:00 GMT</pubDate>
    </item>
    <item>
      <title>My Slides about MySQL 8.0 Scalability &amp; Benchmarks from #PerconaLIVE 2019 Austin, TX</title>
      <link>http://dimitrik.free.fr/blog/posts/slides-mysql-80-performance-plive19.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;p&gt;&lt;img alt="" src="http://dimitrik.free.fr/blog/plive19_us/IMG_5080.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Here are my slides about MySQL 8.0 Scalability &amp;amp; Benchmarks from Percona LIVE 2019 in Austin, TX. (and I also realized I forgot to publish my slides from MySQL pre-FOSDEM 2019 Day about MySQL Performance Tuning, so fixing it now ;-))&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://dimitrik.free.fr/Presentations/MySQL_Perf-PLIVE19-US-dim.pdf"&gt;MySQL 8.0 Benchmarks&lt;/a&gt; [PDF]&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dimitrik.free.fr/Presentations/MySQL_Tuning-Feb2019-dim.pdf"&gt;MySQL 8.0 Performance Tuning&lt;/a&gt; [PDF]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;P.S. Percona LIVE was "just awesome" ! ;-))&lt;/p&gt;
&lt;p&gt;Rgds,
&lt;br&gt;-Dimitri&lt;/p&gt;</description>
      <category>#PerconaLIVE</category>
      <category>Benchmarks</category>
      <category>FOSDEM</category>
      <category>MySQL</category>
      <category>Performance</category>
      <category>Scalability</category>
      <category>Slides</category>
      <guid>http://dimitrik.free.fr/blog/posts/slides-mysql-80-performance-plive19.html</guid>
      <pubDate>Fri, 31 May 2019 21:55:00 GMT</pubDate>
    </item>
    <item>
      <title>dim_STAT : Collect MySQL &amp; System stats @Linux locally</title>
      <link>http://dimitrik.free.fr/blog/posts/collect-stats-howto.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;p&gt;Generally you have much bigger benefit with &lt;code&gt;dim_STAT&lt;/code&gt; when you're collecting and analyzing your data live (online). However, there maybe still many situations when this is simply not possible (due security restrictions, wide remote distance, or simply externally inaccessible hosts, etc.) -- for such cases &lt;code&gt;dim_STAT&lt;/code&gt; has special tool &lt;code&gt;EasySTAT&lt;/code&gt; allowing you to collect all the needed stats locally on the given machine, and then later to upload them to your &lt;code&gt;dim_STAT&lt;/code&gt;  server for post-analyze. To simplify overall setup, &lt;code&gt;EasySTAT&lt;/code&gt; is integrated into &lt;code&gt;STAT-service&lt;/code&gt; of &lt;code&gt;dim_STAT&lt;/code&gt;  and can be directly involved from there, also following the same rules for MySQL access and so on (e.g. if your &lt;code&gt;STAT-service&lt;/code&gt; is already operational, then your &lt;code&gt;EasySTAT&lt;/code&gt; will be too ;-))&lt;/p&gt;
&lt;p&gt;The following article is explaining how to deploy and start &lt;code&gt;EasySTAT&lt;/code&gt; on your Linux server from scratch, even if you never hear about..&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/collect-stats-howto.html"&gt;Read more...&lt;/a&gt; (5 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>dim_STAT</category>
      <category>HOWTO</category>
      <category>Linux</category>
      <category>MySQL</category>
      <category>Performance</category>
      <category>Tools</category>
      <guid>http://dimitrik.free.fr/blog/posts/collect-stats-howto.html</guid>
      <pubDate>Sun, 28 Apr 2019 18:15:00 GMT</pubDate>
    </item>
    <item>
      <title>My Slides about MySQL 8.0 Performance from #OOW18 and #PerconaLIVE 2018</title>
      <link>http://dimitrik.free.fr/blog/posts/slides-mysql-80-performance-oow18-plive18.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;img src="http://dimitrik.free.fr/blog/80_slides_2018/screenshot.png"&gt;&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;As promised, &lt;a href="http://dimitrik.free.fr/Presentations/MySQL_Perf-OOW2018-dim.pdf"&gt;here are slides&lt;/a&gt; about MySQL 8.0 Performance from my talks at Oracle Open World 2018 and Percona LIVE
 Europe 2018 -- all is combined into a single PDF file to give you an overall summary about what we already completed, where we're going in the next updates within our "continuous release", and what
 kind of performance issues we're digging right now.. ;-)) &lt;/div&gt;
&lt;br&gt;
&lt;div&gt;Also, I'd like to say that both Conferences were simply awesome, and it's great to see a constantly growing level of skills of all MySQL Users attending these Conferences ! -- hope you'll
 have even more fun with MySQL 8.0 now ;-))
&lt;/div&gt;
&lt;br&gt;</description>
      <category>#OOW</category>
      <category>#PerconaLIVE</category>
      <category>Benchmarks</category>
      <category>MySQL</category>
      <category>Performance</category>
      <category>Scalability</category>
      <category>Slides</category>
      <guid>http://dimitrik.free.fr/blog/posts/slides-mysql-80-performance-oow18-plive18.html</guid>
      <pubDate>Wed, 07 Nov 2018 15:00:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : 8.0 on IO-bound OLTP_RW vs Percona Server 5.7</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-performance-80-iobound-oltprw-vs-percona57.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;div&gt;This article is inspired by &lt;a href="https://www.percona.com/blog/2018/07/13/on-mysql-and-intel-optane-performance/"&gt;Percona blog post&lt;/a&gt; comparing MySQL 8.0 and Percona Server 5.7 on IO-bound
 workload with Intel Optane storage. There are several claims made by Vadim based on a single test case, which is simply unfair. So, I'll try to clarify this all based on more test results and more
 tech details..&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;But before we start, some intro :&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;&lt;b&gt;InnoDB Parallel Flushing&lt;/b&gt; -- was introduced with MySQL 5.7 (as a single-thread flushing &lt;a href="http://dimitrik.free.fr/blog/archives/2013/01/mysql-performance-innodb-heavy-io-rw-workloads-limits-in-56.html"&gt;could no more follow&lt;/a&gt;), and implemented as dedicated parallel threads
 (cleaners) which are involved in background once per second to do LRU-driven flushing first (in case there is no more or too low amount of free pages) and then REDO-driven flushing (to flush the
 oldest dirty pages and allow more free space in REDO). The amount of cleaners was intentionally made configurable as there were many worries that these threads will use too much CPU ;-))  -- but at
 least configuring their number equal to number of your Buffer Pool (BP) Instances was resulting in nearly the same as if you have dedicated cleaner-per-BP-instance. &lt;/div&gt;
&lt;br&gt;
&lt;div&gt;&lt;b&gt;Multi-threaded LRU Flusher&lt;/b&gt; -- was introduced in Percona Server 5.7, implementing dedicated LRU cleaners (one thread per BP instance) independently running in background. The real valid
 point in this approach is to keep LRU cleaners independent to so called "detected activity" in InnoDB (which was historically always buggy), so whatever happens, every LRU cleaner remains active to
 deliver free pages according the demand. While in MySQL 5.7 the same was expected to be covered by involving "free page event" (not what I'd prefer, but this is also historical to InnoDB). However,
 on any IO-bounded workload I've tested with MySQL 5.7 and 8.0 by configuring 16 BP instances with 16 page cleaners and with LRU depth setting matching the required free page rate -- I've never
 observed lower TPS comparing to Percona..&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;&lt;b&gt;Single Page Flushing&lt;/b&gt; -- historically, in InnoDB when a user thread was not able to get a free page for its data, it was involving a "single page flush" itself, expecting to get a free page
 sooner -- the motivation behind such an approach was "better to try to do something than just do nothing". And this was blamed so often.. -- while, again, it's largely exaggerated, because the only
 real problem here is coming due a historical "limited space" for single page flush in DoubleWrite Buffer, and that's all. To be honest, making this option configurable could allow anyone to evaluate
 it very easily and decide to keep it ON or not by his own results ;-))&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;&lt;b&gt;DoubleWrite Buffer&lt;/b&gt; -- probably one of the biggest historical PITA in InnoDB.. -- the feature is implemented to guarantee page "atomic writes" (e.g. to avoid partially written pages, each
 page is written first to DoubleWrite (DBLWR) place, and only then to its real place in data file). It was still "good enough" while storage was very slow, but quickly became a bottleneck on faster
 storage. However, such a bottleneck you could not observe on every workload.. -- despite you have to write your data twice, but as long as your storage is able to follow and you don't have waits on
 IO writes (e.g. not on REDO space nor on free pages) -- your overall TPS will still not be impacted ;-))  The impact is generally becomes visible since 64 concurrent users (really *concurrent*, e.g.
 doing things on the same time). Anyway, we addressed this issue yet for MySQL 5.7, but our fix arrived after GA date, so it was not delivered with 5.7 -- on the same time Percona delivered their
 "Parallel DoubleWrite", solving the problem for Percona Server 5.7 -- lucky guys, kudos for timing ! ;-))&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;Now, why we did NOT put all these points on the first priority for MySQL 8.0 release ?&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;there is one main thing changes since MySQL 8.0 -- for the first time in MySQL history we decided to move to "continuous release" model !&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;which means that we may still deliver new changes with every update ;-))&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;(e.g. if the same was possible with 5.7, the fix for DBLWR would be already here)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;however, we should be also "realistic" as we cannot address fundamental changes in updates..&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;so, if any fundamental changes should be delivered, they should be made before GA deadline&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;and the most critical from such planned changes was our &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-redesigned-redo-log-readwrite-workloads-scalability.html"&gt;new REDO log&lt;/a&gt;
 implementation !&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;(we can address DBLWR and other changes later, but redesigning REDO is &lt;a href="https://mysqlserverteam.com/mysql-8-0-new-lock-free-scalable-wal-design/"&gt;much more complex&lt;/a&gt; story ;-))&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;so, yes, we're aware about all the real issues we have, and we know how to fix them -- and it's only a question of time now.. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;So far, now let's see what of the listed issues are real problems and how much each one is impacting ;-))&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;For my following investigation I'll use :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;the same 48cores-HT 2S Skylake server &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-and-sysbench-oltp_rw-updatenokey.html"&gt;as before&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;x2 Optane drives used together as a single RAID-0 volume via MDM&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;same OL7.4, EXT4 &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Sysbench 50M x 8-tables data volume (same as I used before, and then Vadim)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Similar my.conf but with few changes :&lt;/div&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;trx_commit=1 (flush REDO on every COMMIT as before)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;PFS=on (Performance Schema)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;checksums=on (crc32)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;doublewrite=off/on (to validate the impact)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;binlog=off/on &amp;amp; sync_binlog=1 (to validate the impact as well)&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;Test scenarios :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Concurrent users : 32, 64, 128 &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Buffer Pool : 128GB / 32GB &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Workload : Sysbench OLTP_RW 50Mx8tab (100GB)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Config variations :&lt;/div&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;1) base config + dblwr=0 + binlog=0&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;2) base config + dblwr=1 + binlog=0&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;3) base config + dblwr=0 + binlog=1&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;4) base config + dblwr=1 + binlog=1&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;where base config : trx_commit=1 + PFS=on + checksums=on&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;NOTE : I did not build for all the following test results "user friendly" charts -- all the graphs are representing real TPS (Commit/sec) stats collected during the tests, and matching 3 load
 levels : 32, 64, and 128 concurrent users.&lt;/div&gt;
&lt;h3&gt; 128GB BUFFER POOL &lt;/h3&gt;
&lt;div&gt;So far, let's start first with Buffer Pool =128GB :&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;&lt;b&gt;OLTP_RW-50Mx8tab | BP=128G, trx=1, dblwr=0, binlog=0&lt;/b&gt;&lt;/div&gt;
&lt;hr&gt;

&lt;div&gt;&lt;img src="http://dimitrik.free.fr/blog/80_GA_oltprw_vs_percona57/screenshot_5.png"&gt;&lt;/div&gt;
&lt;div&gt;Comments :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;with Buffer Pool (BP) of 128GB we keep the whole dataset "cached" (so, no IO reads)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;NOTE : PFS=on and checksums=on -- while TPS is mostly the same as in the &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-iobound-sysbench-optane-vs-ssd.html"&gt;previous test&lt;/a&gt;
 on the same data volume (where both PFS &amp;amp; checksums were OFF), they are not impacting here&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;as well from the previous test you can see that even if the data are fully cached in BP, there is still an impact due used storage -- the result on Intel SSD was way lower than on Intel Optane
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;so, in the current test result you can see that MySQL 8.0 also getting better benefit from a faster storage comparing to Percona Server, even if the given test is mostly about REDO related
 improvements ;-))&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;And now, let's switch DobleWrite=ON :&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-iobound-oltprw-vs-percona57.html"&gt;Read more...&lt;/a&gt; (13 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>Benchmarks</category>
      <category>Binlog</category>
      <category>DoubleWrite</category>
      <category>InnoDB</category>
      <category>IO-bound</category>
      <category>MySQL</category>
      <category>Optane</category>
      <category>Performance</category>
      <category>Sysbench</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-performance-80-iobound-oltprw-vs-percona57.html</guid>
      <pubDate>Tue, 14 Aug 2018 13:00:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : 8.0 GA on IO-bound TPCC</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-iobound-tpcc.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;div&gt;This post is mainly inspired by findings from the previous testing of &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-and-tpcc-workloads.html"&gt;MySQL 8.0 on TPCC&lt;/a&gt;
 workload(s) and observations from &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-iobound-sysbench-optane-vs-ssd.html"&gt;IO-bound Sysbench OLTP&lt;/a&gt; on Optane -vs- SSD. But also by
 several "urban myths" I'm often hearing when discussing with users about their IO-bound OLTP performance problems :&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;&lt;b&gt;Myth #1 :&lt;/b&gt; &lt;i&gt;"if I'll double the number of my storage drives -- I'll get x2 times better TPS !"&lt;/i&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;this was mostly true during "HDD era", and again..&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;(ex.: a single thread app doing single random IO reads from a single HDD will not go faster by doing the same from 2x HDD -- similar like single thread workload will not run faster on 8CPU cores
 -vs- 2CPU cores, etc.)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;all depends on your workload and how many parallel IO operations you're involving..&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;indeed, it is much more easier to saturate HDD, but it's much more harder to do it with modern SSD/NVMe&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;NOTE : we're speaking about OLTP (e.g. if you started to observe full table scans in your workload -- means you're already doing something wrong ;-))&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;simple rule : if you're not saturating your storage on any of its limits =&amp;gt; you'll not see any gain by adding more drives, you'll probably just have a bigger storage space, that's all.&lt;/div&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;&lt;b&gt;Myth #2 :&lt;/b&gt; &lt;i&gt;"I'll go faster with flash drive which is claimed capable x2 times more IOps in specs than my current drive !"&lt;/i&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;if you're expecting to run OLTP workload, rather pay attention to IO latency first !&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;sometimes it may be not mentioned these x2 times more IOps were obtained with x4 times more IO threads ;-))&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;e.g. a drive capable of x2 times more IOps but with x4 times higher latency will still be x4 times slower than your current drive on 1 user load, and 2, and 4, and .. maybe up to 64 ? (depends on
 where your current drive the limit is reached) -- and if you don't have more than 64 concurrent users ? -- then you'll never see your x2 times more IOps, but rather x4 times worse TPS ;-))&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;&lt;b&gt;Test it yourself - &lt;/b&gt;this is the only advice I could give you ! &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;because "only a real test will give you a real answer" (and I'm repeating to say it again and again.. ;-))&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;testing your own workload will give you the best answer !&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;otherwise you may still use some generic benchmark workloads which are &lt;b&gt;representative&lt;/b&gt; for you&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;for ex. your new flash drive may be look better from all points and passing very well all generic pure IO tests, but show x3 times worse results once used by MySQL -- and this is just because,
 for ex., every involved fsync() will take x3 times more time, etc. (based on real story, no kidding ;-))&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;So far, for the following story I'll use :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Sysbench-TPCC workload, 10x100W (x10 of 100 warehouses, ~100GB data, &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-and-tpcc-workloads.html"&gt;here&lt;/a&gt; is why)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Same Skylake server as before, &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-and-sysbench-oltp_rw-updatenokey.html"&gt;same config&lt;/a&gt;, etc.&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;and the same &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-iobound-sysbench-optane-vs-ssd.html"&gt;Optane &amp;amp; SSD&lt;/a&gt; as in the previous testing, except that I'll also add to
 the game x2 Optane drives used as a single RAID-0 MDM volume !  &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;EXT4 is used on top of each drive or volume&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;Starting Test scenario :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;concurrent users : 1, 2, 4, .. 1024&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;trx_commit : 1  (flush REDO on every COMMIT)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Buffer Pool (BP) : 128GB (in-memory), 32GB (IO-bound)&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;Sorry, no "user friendly" graphs this time, but hope it'll still be easy to understand the results ;-))&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;On the first graph you'll see :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;3 test results : with x2 Optaine first, then with single Optane, and then single SSD&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;on each test the load is going from 1, 2, 4 .. up to 1024 concurrent users&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;the Commits/sec curve is showing obtained TPS level&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;and the first result is with 128GB BP :&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
&lt;div&gt;&lt;b&gt;InnoDB Buffer Pool 128GB&lt;/b&gt;&lt;/div&gt;
&lt;hr&gt;

&lt;div&gt;&lt;img src="http://dimitrik.free.fr/blog/80_GA_iobound_tpcc/screenshot_7.png"&gt;&lt;/div&gt;
&lt;div&gt;Comments :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;first of all, as you can see, TPS is not better with two -vs- one Optane&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;as we're not hitting any single limit of Optane drive, there is no any gain by using x2 ;-))&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;also, regardless the used data volume is ~100GB, we're not observing here such a big difference between Optane -vs- SSD as it was with &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-iobound-sysbench-optane-vs-ssd.html"&gt;Sysbench OLTP&lt;/a&gt; on a similar data size and still "in-memory"..&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;this because TPCC workload is much less aggressive on IO writes, so REDO flushing is less impacted..&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;now, how TPS will be impacted if BP size was smaller, just 32GB ?&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-iobound-tpcc.html"&gt;Read more...&lt;/a&gt; (9 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>Benchmarks</category>
      <category>DoubleWrite</category>
      <category>InnoDB</category>
      <category>IO-bound</category>
      <category>MySQL</category>
      <category>Optane</category>
      <category>Performance</category>
      <category>REDO</category>
      <category>Sysbench</category>
      <category>TPCC</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-iobound-tpcc.html</guid>
      <pubDate>Thu, 05 Jul 2018 20:55:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : 8.0 GA on IO-bound Sysbench OLTP with Optane -vs- SSD</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-iobound-sysbench-optane-vs-ssd.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;div&gt;MySQL Performance on IO-bound workloads is still extremely depending on the underlaying storage layer (thus is directly depending on your Storage Performance).. Indeed, flash storage is
 definitively changing the game, but even with flash there is, as usual, "flash and flash" --  all storage vendors are improving their stuff constantly, so every time you have something new to
 discover and to learn ;-))  During all my MySQL 8.0 GA tests I was very pleasantly surprised by IO performance delivered by Intel Optane SSD. However, what the storage device can deliver alone on
 pure IO tests is not at all the same to what you could observe when it's used by MySQL -- unfortunately, in the past I've observed many cases when with a device claimed to be x2 times faster we were
 even not observing 10% gain.. But MySQL 8.0 is probably the most best placed MySQL version today to re-visit all this IO-bound story (there are many "under-hood" changes in the code helping to use
 your storage more efficiently) -- well, we're definitively yet very far from "perfect" ;-))  -- but again, as usual -- "everything is relative".. And for the "relative" point for this article I'll
 propose you to get a look on 2 different flash drives from Intel :&lt;/div&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Intel SSD: &lt;a href="https://ark.intel.com/products/84239/Intel-SSD-DC-S3710-Series-800GB-2_5in-SATA-6Gbs-20nm-MLC"&gt;SSDSC2BA800G4&lt;/a&gt; (800GB)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Intel Optane SSD: &lt;a href="https://www.intel.com/content/www/us/en/products/memory-storage/solid-state-drives/data-center-ssds/optane-dc-p4800x-series/p4800x-375gb-aic-20nm.html"&gt;P4800X&lt;/a&gt;
 Series (375GB)&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;yes, both devices are from Intel, so it's only Intel -vs- Intel (e.g. no blame for "competition" post ;-))&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;so far, if you'll look on their specs, both drives are looking pretty good for avg. IO-bound workloads, except that Optane drive is claimed to be x5 times faster in all categories (and it's
 particularly impressive with its low IO latency -- see &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-1m-iobound-qps-with-80-ga-on-intel-optane-ssd.html"&gt;1M IO-bound QPS with MySQL 8.0
&lt;/a&gt; -- so, can confirm at least for latency ;-)) -- however, will the x5 claim still be valid in different conditions / workloads ? &lt;/div&gt;
&lt;br&gt;
&lt;div&gt;For my testing I'll use the &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-and-sysbench-oltp_rw-updatenokey.html"&gt;same config&lt;/a&gt; as before (the same Skylake server as well),
 and the key config points are :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;InnoDB page size : 16K&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;trx_commit : 1  (flush REDO on every commit)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;single flash drive (just EXT4 on top of single drive, no RAID, no LVM, etc..)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;InnoDB Buffer Pool (BP) : 128G / 64G / 32G  (will vary along with test scenarios)&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;(no double write, no binlog for the moment -- these ones will be covered later, patience ;-))..&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;So far, let's start first with so called "in-memory" Sysbench OLTP_RW workload :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;test workload : Sysbench OLTP_RW uniform&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;concurrent users : 1, 2, 4, .. 1024&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;data volume : 8 tables of 10M rows each (~20GB)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;InnoDB Buffer Pool (BP) : 128GB&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;so, all the data will be fully cached in BP, thus NO any IO reads (the reason to be so called "in-memory")&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;however, there will be definitively IO writes (as there are writes in OLTP_RW ;-))&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;and in our case, if all is going well, there will be only 2 types of writes :&lt;/div&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;1) dirty pages flushing &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;2) REDO log writes&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;li&gt;
&lt;div&gt;the 1) is going in background, and as soon as your flushing is fast enough -- your performance is not impacted&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;the 2) are pure sequential writes only mixed with periodic fsync(), and generally as soon as you use a good flash drive for your REDO files -- you're fine ;-))&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;Ok, what about results ?&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;&lt;b&gt;Sysbench OLTP_RW 10Mx8-tables BP = 128GB&lt;/b&gt; : Intel SSD -vs- Intel Optane&lt;/div&gt;
&lt;hr&gt;

&lt;div&gt;&lt;img src="http://dimitrik.free.fr/blog/80_GA_iobound_sysbench/screenshot_2.png"&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;Comments&lt;/u&gt; :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;on the left side of the graph you can see TPS level of MySQL 8.0 running on SSD, and on the right side -- the same but on Optane&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;concurrent users level is progressing from 1 to 2, 4, 8, .. 1024&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;and from TPS results you can see that up to 16 users there is nearly no TPS difference between SSD and Optane&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;then Optane is slightly better on 64usr level, and definitively better on higher load &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;but you don't see any sign of expected x5 difference, right ?&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;and if you'll stop here, you could just say "all this Optane story is b*shit !", Dimitri, WFT ?.. ;-))&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;Indeed, on such a small data volume and having all the active data set cached in BP you'll not see much difference with a faster storage.. -- however, what will happen if your data will grow ?..
&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-iobound-sysbench-optane-vs-ssd.html"&gt;Read more...&lt;/a&gt; (9 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>Benchmarks</category>
      <category>InnoDB</category>
      <category>IO-bound</category>
      <category>MySQL</category>
      <category>Optane</category>
      <category>Performance</category>
      <category>REDO</category>
      <category>Sysbench</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-iobound-sysbench-optane-vs-ssd.html</guid>
      <pubDate>Mon, 02 Jul 2018 20:05:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : IP port -vs- UNIX socket impact in 8.0 GA</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-ip-port-vs-unix-socket-impact.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;div&gt;Generally, when I'm analyzing MySQL Performance on Linux with "localhost" test workloads, I'm configuring client connections to use IP port (loopback) to connect to MySQL Server (and not UNIX
 socket) -- this is still at least involving IP stack in the game, and if something is going odd on IP, we can be aware ahead about. And indeed, it already helped several times to discover such kind
 of problems even without network links between client/server (like &lt;a href="https://lkml.org/lkml/2016/9/27/213"&gt;this one&lt;/a&gt;, etc.). However, in the past we also observed a &lt;a href="http://dimitrik.free.fr/blog/archives/2013/10/mysql-performance-the-road-to-500k-qps-with-mysql-57.html"&gt;pretty significant difference&lt;/a&gt; in QPS results when IP port was used comparing to UNIX
 socket (communications via UNIX socket were going near 15% faster).. Over a time with newer OL kernel releases this gap became smaller and smaller. But in all such cases it's always hard to say if
 the gap was reduced due OS kernel / IP stack improvements, or it's just because MySQL Server is hitting new scalability bottlenecks ;-)) &lt;/div&gt;
&lt;br&gt;
&lt;div&gt;Anyway, I've still continued to use IP port in all my tests until now. But recently the same discussion about IP port impact -vs- UNIX socket came up again in other investigations, and I'd like
 to share the results I've obtained on different HW servers with MySQL 8.0 GA release. &lt;/div&gt;
&lt;br&gt;
&lt;div&gt;The test workload is the most "aggressive" for client/server ping-pong exchange -- Sysbench point-selects (the same test scenario which initially already reported &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-21m-qps-on-80rc.html"&gt;2.1M QPS&lt;/a&gt; on MySQL 8.0) -- but this time on 3 different servers :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;4CPU Sockets (4S) 96cores-HT Broadwell&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;2CPU Sockets (2S) 48cores-HT Skylake&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;2CPU Sockets (2S) 44cores-HT Broadwell&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;and see how different the results will be when exactly the same test is running via IP port / or UNIX socket.&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;&lt;b&gt;Broadwell 2S 44cores-HT&lt;/b&gt;&lt;/div&gt;
&lt;hr&gt;

&lt;div&gt;- IP port :&lt;/div&gt;
&lt;div&gt;&lt;img src="http://dimitrik.free.fr/blog/80_GA_IP_port/sb11-OLTP_RO_10M_8tab-uniform-ps-p_sel1-notrx-Max-QPS-Broadwell-44cores-HT.png"&gt;&lt;/div&gt;
&lt;div&gt;- UNIX socket :&lt;/div&gt;
&lt;div&gt;&lt;img src="http://dimitrik.free.fr/blog/80_GA_IP_port/sb11-OLTP_RO_10M_8tab-uniform-ps-p_sel1-notrx-socket-Max-QPS-Broadwell-44cores-HT.png"&gt;&lt;/div&gt;
&lt;div&gt;Comments :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;wow, up to 18% difference !&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;and you can clearly see MySQL 8.0 out-passing 1.2M QPS with UNIX socket, and staying under 1.1M QPS with IP port..&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-ip-port-vs-unix-socket-impact.html"&gt;Read more...&lt;/a&gt; (4 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>Benchmarks</category>
      <category>InnoDB</category>
      <category>Linux</category>
      <category>MySQL</category>
      <category>Network</category>
      <category>Performance</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-ip-port-vs-unix-socket-impact.html</guid>
      <pubDate>Fri, 15 Jun 2018 14:05:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : more in depth with latin1 and utf8mb4 in 8.0 GA</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-more-in-depth-latin1-utf8mb4.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;div&gt;Looking on my previously obtained results on Read-Only (RO) tests for &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-over-18m-qps-with-80-ga-on-2s-skylake.html"&gt;latin1&lt;/a&gt; and &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-and-utf8-impact.html"&gt;UTF8&lt;/a&gt; charsets, one question continued to turn in my mind :&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;- if MariaDB 10.3 is hitting a so deep drop on "distinct-ranges" workload :&lt;/div&gt;
&lt;div&gt;&lt;img src="http://dimitrik.free.fr/blog/80_GA_utf8mb4_more/sb11-OLTP_RO_10M_8tab-uniform-ps-dst_ranges1-Rsize10-notrx-Max-QPS-latin1-48cores-HT.png"&gt;&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;- why then this is not impacting the "mixed" OLTP_RO workload results (which is containing "distinct-ranges" query too) :&lt;/div&gt;
&lt;div&gt;&lt;img src="http://dimitrik.free.fr/blog/80_GA_utf8mb4_more/sb11-OLTP_RO_10M_8tab-uniform-ps-notrx-Max-QPS-latin1-48cores-HT.png"&gt;&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;The answer was within the test title :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;I've missed one zero in my scripts while preparing initial tests.. ;-))&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;so, the "distinct-ranges" test was using range size=10 (instead of 100 by default)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;while "mixed" OLTP_RO remained with default settings, and used range size=100 for all range tests..&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;was the use of a smaller range size which that much impacted MariaDB ?.. &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;(generally people are expecting to see wider range queries to be more impacting than the smaller ones, right ?)..&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;To clarify this all -- I decided to replay RO tests with a more detailed analyze..&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-more-in-depth-latin1-utf8mb4.html"&gt;Read more...&lt;/a&gt; (13 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>Benchmarks</category>
      <category>InnoDB</category>
      <category>MySQL</category>
      <category>Performance</category>
      <category>Sysbench</category>
      <category>UTF8</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-more-in-depth-latin1-utf8mb4.html</guid>
      <pubDate>Tue, 05 Jun 2018 15:40:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : 8.0 GA and TPCC Workloads</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-and-tpcc-workloads.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;div&gt;Generally TPC-C benchmark workload is considered as one of the #1 references for Database OLTP Performance. On the same time, for MySQL users it's often not something which is seen as "the most
 compelling" for performance evaluations.. -- well, when you're still fighting to scale with your own very simple queries, any good result on something more complex may only look as "fake" ;-))  So,
 since a long time Sysbench workloads remained (and will remain) as the main #1 "entry ticket" for MySQL evaluation -- the most simple to install, to use, and to point on some sensible issues (if
 any). Specially that since &lt;a href="https://github.com/akopytov/sysbench"&gt;new Sysbench&lt;/a&gt; version 1.0 a lot of improvements were made in Sysbench code itself, it really scales now, has the lowest
 ever overhead, and also allowing you to add your own test scenario via extended LUA scripts (and again, with lowest ever overhead) -- so, anyone can easily add whatever kind of different test
 scenarios and share with others ! (while I'd say "the most compelling test workload" for any given user should be the workload which is the most closely reproducing his production load -- and you can
 probably do it now with new Sysbench, just try it !). &lt;/div&gt;
&lt;br&gt;
&lt;div&gt;However, from MySQL Dev side, every given benchmark workload is mostly seen asa  yet one (or several ones) problem(s) to resolve. Some of problems are common for many workloads, some are
 completely different ones, but generally it's never about "something cool" -- and we're just progressing in this long road by fixing one problem after another (to hit yet another one again). So,
 TPC-C workload for MySQL is just yet another problem to resolve ;-))&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;Historically the most popular TPC-C implementations for MySQL were :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;DBT-2 : an open source version of TPC-C&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;TPCC-mysql : another open source version of TPC-C developed by Percona&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-and-tpcc-workloads.html"&gt;Read more...&lt;/a&gt; (17 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>Benchmarks</category>
      <category>InnoDB</category>
      <category>MySQL</category>
      <category>Performance</category>
      <category>TPCC</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-and-tpcc-workloads.html</guid>
      <pubDate>Tue, 15 May 2018 00:51:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : 1M *IO-bound* QPS with 8.0 GA on Intel Optane SSD !</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-performance-1m-iobound-qps-with-80-ga-on-intel-optane-ssd.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;div&gt;Historically, &lt;b&gt;Random I/O Reads&lt;/b&gt; were always a major PITA for any OLTP workload.. If Random I/O Writes you could yet "delay" via controller's caches (or any kind of other battery-protected
 caches -- specially if Writes are coming in bursts), there is no way to "predict" I/O Reads if they are fully Random (so you cannot "cache" or "prefetch" them ahead and have to deliver the data
 directly from storage, read by read.. -- which is hitting a huge "rotation penalty" on HDD).&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;Indeed, things changed dramatically since arriving of Flash Storage. You don't need to spend any particular attention if your I/O Reads are Random or Sequential. However, you still need to keep
 in mind to not hit the overall throughout limit of your Flash Device. As the result, reading by smaller I/O blocks allowing you to do more I/O operations/sec than with bigger blocks. &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;And what about InnoDB ? -- InnoDB is using by default 16KB page size (so by default all Random I/O Reads are of 16KB) :&lt;/div&gt;
&lt;div&gt;&lt;img src="http://dimitrik.free.fr/blog/80_GA_1m_iobound_qps/screenshot_3.png"&gt;&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;And with 16KB Random Reads you definitively will reach your throughput limit sooner than with 8KB or 4KB Reads. Many users are seeing "compression" as the best matching solution here. And,
 indeed, if you're very lucky and can compress your data, say, by x4 times =&amp;gt; you'll Read then only 4KB from storage to deliver 16KB of data. And, yes, you'll be able to deliver x4 times more
 Reads/sec : &lt;/div&gt;
 &lt;br&gt;
 &lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-1m-iobound-qps-with-80-ga-on-intel-optane-ssd.html"&gt;Read more...&lt;/a&gt; (4 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>InnoDB</category>
      <category>IO-bound</category>
      <category>MySQL</category>
      <category>Optane</category>
      <category>Performance</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-performance-1m-iobound-qps-with-80-ga-on-intel-optane-ssd.html</guid>
      <pubDate>Mon, 14 May 2018 12:15:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : 8.0 RW &amp; Binlog impact</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-performance-80-rw-binlog-impact.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;div&gt;
  In &lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-and-sysbench-oltp_rw-updatenokey.html"&gt;
  the previous article&lt;/a&gt; I've intentionally skipped the topic related to
 Binlog impact on MySQL 8.0 Performance, because it's not a short story, nor a simple one..&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;In fact, for most of people Binlog in MySQL is generally representing and additional overhead, and historically it was true. Since MySQL 5.6 there is Binlog Group Commit (BGC) feature available,
 and it was rather doing well, &lt;a href="http://dimitrik.free.fr/blog/archives/2012/06/mysql-performance-binlog-group-commit-in-56.html"&gt;decreasing the gap&lt;/a&gt; between "binlog=OFF" and "binlog=ON
 sync_bin=1". However, storage vendors are making flash drives more and more better from year to year.. And when we delivered MySQL 5.7 the scope of Binlog impact moved with code and flash
 improvements -- the main impact was no more coming from the I/O operations related to Binlog, but to the Binlog code itself ! -- indeed, this may sound odd initially, but let's go to "pictures" to
 see it better in details ;-))&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;So far, I'll reuse the same Skylake server as before, but will reduce it to 1S (1CPU Socket, 24cores-HT) -- so, you don't believe it's all because I'm using a "big HW" (while 2S HW is the most
 common server config in all data centers where people are running MySQL, and having 16-24cores per CPU Socket is what is todays "commodity HW") -- but well, let's stay with 24cores-HT for the
 following experiment ;-))  And as the storage it'll be the same Optane drive with EXT4 filesystem.&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;I'll now replay the same Sysbench OLTP_RW and Update-NoKEY tests as before, but using only 1S (24cores-HT) and with the same my.conf but :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;1) binlog=OFF&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;2) binlog=ON sync_bin=0&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;3) binlog=ON sync_bin=1000&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;4) binlog=ON sync_bin=1&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;and the results are here, each graph is representing a given test workload growing with number of concurrent user sessions from 1, 2, 4, .. to 1024 :&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;&lt;b&gt;Sysbench OLTP_RW 10Mx8-tables @MySQL-5.7&lt;/b&gt; &lt;/div&gt;
&lt;hr&gt;

&lt;div&gt;&lt;img src="http://dimitrik.free.fr/blog/80_GA_binlog/screenshot.png"&gt;&lt;/div&gt;
&lt;div&gt;Comments :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;as you can see, on a higher load enabling Binlog is helping a higher TPS !&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;(well, in fact it's helping not to gain, but rather not to loose TPS on high load)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;but in any case, you're seeing here a positive impact ! ;-))&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;and you can understand that in such a case it was difficult to blame Binlog code along MySQL 5.7 time ;-))&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;Specially that even more important "positive impact" happens on much more aggressive writes with Update-NoKey workload :&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-rw-binlog-impact.html"&gt;Read more...&lt;/a&gt; (3 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>Binlog</category>
      <category>InnoDB</category>
      <category>MySQL</category>
      <category>Performance</category>
      <category>REDO</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-performance-80-rw-binlog-impact.html</guid>
      <pubDate>Tue, 08 May 2018 22:32:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : 8.0 and Sysbench OLTP_RW / Update-NoKEY</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-performance-80-and-sysbench-oltp_rw-updatenokey.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;div&gt;This post is following previously published OLTP_RO results for MySQL 8.0 (&lt;a href="http://dimitrik.free.fr/blog/archives/2018/04/mysql-performance-over-18m-qps-with-80-ga-on-2s-skylake.html"&gt;
latin1&lt;/a&gt; and &lt;a href="http://dimitrik.free.fr/blog/archives/2018/04/mysql-performance-80-and-utf8-impact.html"&gt;utf8mb4&lt;/a&gt; charsets), and now is focusing on Sysbench RW workloads, particularly
 "mixed" OLTP_RW and Update-NoKey :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;OLTP_RW : while this workload has writes, it's mainly driven by reads (OLTP_RO + 2 updates + delete + insert)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Update-NoKey : aggressively bombarding UPDATE queries (but with no changes on indexed columns)&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;The same 2S Skylake server was used as in previous tests :&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;&lt;b&gt;Server configuration :&lt;/b&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;OS : Oracle Linux 7.4&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;CPU : 48cores-HT Intel Skylake 2.7Ghz (2CPU sockets (2S), Intel(R) Xeon(R) Platinum 8168 CPU)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;RAM: 172GB &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Storage : x2 Intel Optane flash drives (Intel (R) Optane (TM) SSD P4800X Series)&lt;/div&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;volume : RAID-0 via MDADM&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;filesystem : EXT4&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;And I'm following mostly the same test conditions as &lt;a href="http://dimitrik.free.fr/blog/archives/2016/02/mysql-performance-scalability-on-oltp_rw-benchmark-with-mysql-57.html"&gt;previously
 explained for &lt;b&gt;MySQL 5.7 GA&lt;/b&gt;&lt;/a&gt; -- similar variations in options (spin delay = 6;24;96 / thread concurrency = 0;64;128 / taskset = 1S/2S, etc.) to let each Engine to show its best  possible
 TPS/QPS results.&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;However, as running the test with all these config variations is taking a significant time, I've slightly reduced the scope of investigation to the following :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;trx_commit = 1&lt;/b&gt; : along with our work on &lt;a href="http://dimitrik.free.fr/blog/archives/2017/10/mysql-performance-80-redesigned-redo-log-readwrite-workloads-scalability.html"&gt;InnoDB REDO
 re-design&lt;/a&gt; we not only fixed the biggest related bottleneck, but also discovered and partially fixed several other issues around REDO (also mostly historical, but still) -- keeping all this in
 mind, I'd rather suggest you today to use "1" (flushing REDO log on COMMIT) whenever possible -- specially that with all the progress we're seeing on HW/Storage improvement last years -- the penalty
 of "1" with 8.0 becomes much less dramatic than before -vs- "2" (flush REDO log once per second), and also a big enough total size for the whole REDO space (currently I'm using x16 or x32 log files
 of 1GB each), more about later..
&lt;br&gt;
&lt;br&gt;
Please, don't miss also Pawel's article about &lt;a href="https://mysqlserverteam.com/mysql-8-0-new-lock-free-scalable-wal-design/"&gt; how exactly the new REDO log was implemented in MySQL 8.0 GA&lt;/a&gt; and why it was not a simple story..
&lt;br&gt;
&lt;br&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;PFS = off&lt;/b&gt; : I'm intentionally now switching Performance Schema OFF just because it's not a bottleneck, but a pure "overhead" (as many other things as well) -- my main target in all
 benchmark investigations is "to see what is our next bottleneck", and as HW resources are always limited, any additional overhead will help to "hide" the real problem.. While PFS overhead is part of
 MySQL QA testing, and every overhead higher than 5% for "default instrumentation" is considered as a bug (mind to file a bug if you see it bigger in your case!) -- while from the other side many
 users are asking to see more an more instrumentation enabled by default regardless overhead (and this "balance" between overhead and benefit from built-in instrumentation is generally can be observed
 only case by case).
 &lt;br&gt;&lt;br&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;Checksums = off&lt;/b&gt; : this is also a pure "overhead" and not a bottleneck, while since CRC32 is supported, generally you'll not hit any problem..
 &lt;br&gt;&lt;br&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;Charset = latin1&lt;/b&gt; : while most of interest is moving to UTF8, I'm continuing to test with "latin1" for the same reasons as UTF8 -vs- latin1 "overhead" which may hide you more important
 problems (while using UTF8 in 8.0 is giving you a direct gain -vs- any previous MySQL release, but I'm rather looking to point on problems than hide them)..
 &lt;br&gt;&lt;br&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;DoubleWrite = off&lt;/b&gt; : this, however, is a big problem and a big bottleneck, but the fix was already developed by Sunny since 2 years now, we worked on this together, and I can confirm you
 you'll not see any TPS drop as soon as your storage is able to follow (as you "writing twice", e.g. x2 times more) -- but the code is still NOT part of 8.0 because "there is always something more
 important to do" ;-))  -- please feel free to urge Sunny to push re-designed DoubleWrite code to 8.0 asap !! (Sunny's twitter : @sunbains) -- while for my part I need to see "what is after" once the
 new code is delivered..
 &lt;br&gt;&lt;br&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;Binlog = off&lt;/b&gt; : this is another big problem, and on the same time both bottleneck and overhead.. -- but this one rather need a very particular attention, so I'll skip it here to say you
 more later..&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;The full list of all config options you may always find at the end of the article, while here are the final results :&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;&lt;b&gt;Sysbench OLTP_RW 10Mx8-tables TPS&lt;/b&gt; &lt;/div&gt;
&lt;hr&gt;

&lt;div&gt;&lt;img src="http://dimitrik.free.fr/blog/80_GA_rw/sb11-OLTP_RW_10M_8tab-uniform-ps-trx-Max-TPS-trx1-48cores-HT.png"&gt;&lt;/div&gt;
&lt;div&gt;Comments :&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;over 45K TPS with MySQL 8.0 !&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;around 35K TPS with MySQL 5.7 -- interesting that similar result was &lt;a href="http://dimitrik.free.fr/blog/archives/2016/02/mysql-performance-scalability-on-oltp_rw-benchmark-with-mysql-57.html"&gt;
obtained in the past with 5.7&lt;/a&gt; on 4S 72cores-HT Broadwell server, and now 2S Skylake 48cores-HT is just enough to get the same ;-))&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;NOTE : and we're still far from the max possible TPS to get from this HW ! =&amp;gt; work in progress..&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;br&gt;
&lt;div&gt;While looking on the same result expressed in QPS we can see that we're more and more close to 1M QPS obtained on the same server with pure OLTP_RO :&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-and-sysbench-oltp_rw-updatenokey.html"&gt;Read more...&lt;/a&gt; (3 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>InnoDB</category>
      <category>MySQL</category>
      <category>Optane</category>
      <category>Performance</category>
      <category>REDO</category>
      <category>Skylake</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-performance-80-and-sysbench-oltp_rw-updatenokey.html</guid>
      <pubDate>Tue, 08 May 2018 01:37:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : 8.0 and UTF8 impact</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-performance-80-and-utf8-impact.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;div&gt;The world is moving to UTF8, MySQL 8.0 has utf8mb4 charset as default now, but, to be honest, I was pretty surprised how sensible the "charset" related topic could be.. -- in fact you may easily
 hit huge performance overhead just by using an "odd" config settings around your client/server charset and collation. While to avoid any potential charset mismatch between client and server, MySQL
 has from a long time an excellent option : "skip-character-set-client-handshake" which is forcing any client connection to be "aligned" with server settings ! (for more details see the ref. manual :
&lt;a href="https://dev.mysql.com/doc/refman/8.0/en/server-options.html#option_mysqld_character-set-client-handshake"&gt;
https://dev.mysql.com/doc/refman/8.0/en/server-options.html#option_mysqld_character-set-client-handshake&lt;/a&gt;) -- this option is NOT set by default (to leave you a freedom in choose of charsets used on
 client and server sides). However, in my sense, it's still better to align clients according to the server settings to avoid any potential client misconfig..&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;As well if you wish to use UTF8, please use "utf8mb4" as first of all it's the most complete for any kind of characters (and probably the only one which makes sense as of today), and second --
 its related code was yet more improved in MySQL 8.0 for better efficiency. How much more efficient ? -- let's see from the following test results.&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;but first of all, the related config setup :&lt;/div&gt;
&lt;pre&gt;
character_set_server=utf8mb4
collation_server=utf8mb4_0900_ai_ci
skip-character-set-client-handshake
sort_buffer_size=512K
&lt;/pre&gt;
&lt;br&gt;
&lt;div&gt;NOTE: mind to use a bigger sort buffer for UTF8&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;The results are obtained with on the same 2S Skylake as in the previously published &lt;a href="http://dimitrik.free.fr/blog/archives/2018/04/mysql-performance-over-18m-qps-with-80-ga-on-2s-skylake.html"&gt;RO tests with latin1&lt;/a&gt; and with the same test workloads (just that for latin1 you
 need to change character_set_server= latin1 and collation_server= latin1_swedish_ci)&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;So far, here we are :&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-and-utf8-impact.html"&gt;Read more...&lt;/a&gt; (2 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>MySQL</category>
      <category>Performance</category>
      <category>UTF8</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-performance-80-and-utf8-impact.html</guid>
      <pubDate>Wed, 25 Apr 2018 22:58:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : over 1.8M QPS with 8.0 GA on 2S Skylake !</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-performance-over-18m-qps-with-80-ga-on-2s-skylake.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;div&gt;Last year we already published our over &lt;a href="http://dimitrik.free.fr/blog/archives/2017/10/mysql-performance-21m-qps-on-80rc.html"&gt;2.1M QPS record with MySQL 8.0&lt;/a&gt; -- it was not yet GA on
 that moment and the result was obtained on the server with 4CPU Sockets (4S) Intel Broadwell v4. We did not plan any improvement in 8.0 for  RO related workloads, and the main target of this test was
 to ensure there is NO regressions in the results (yet) comparing to MySQL 5.7 (where the main RO improvements were delivered). While for MySQL 8.0 we mostly focused our efforts on lagging WRITE
 performance in MySQL/InnoDB, and our "target HW" was 2CPU Sockets servers (2S) -- which is probably the most widely used HW configuration for todays MySQL Server deployments.. &lt;/div&gt;
&lt;br&gt;
&lt;div&gt;However, not only SW, but also HW is progressing quickly these days ! -- and one of my biggest surprises last time was about Intel Skylake CPU ;-))  -- the following graph is reflecting the
 difference between similar 2S servers, where one is having the "old" 44cores-HT Broadwell v4, and another the "new" 48cores-HT Skylake CPUs :&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;&lt;img src="http://dimitrik.free.fr/blog/80_GA_18qps_2S/sb11-OLTP_RO_10M_8tab-uniform-ps-p_sel1-notrx-Max-QPS-MySQL-8.0-N.CPU.png"&gt;&lt;/div&gt;
&lt;div&gt;the difference is really impressive, specially when you see that just on 32 users load (when CPU is not at all saturated not on 44cores nor 48cores) there is already 50% gain with Skylake ! (and
 this is about a pure "response time"), and on peak QPS level it's over 1.8M QPS (not far from 80% gain over Brodawell).. &lt;/div&gt;
&lt;br&gt;
&lt;div&gt;And this results is marking our next milestone in MySQL RO performance on 2S HW ! ;-))&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-over-18m-qps-with-80-ga-on-2s-skylake.html"&gt;Read more...&lt;/a&gt; (3 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>MySQL</category>
      <category>Performance</category>
      <category>Skylake</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-performance-over-18m-qps-with-80-ga-on-2s-skylake.html</guid>
      <pubDate>Tue, 24 Apr 2018 19:14:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : Testing 8.0 with less blood..</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-performance-testing-80-with-less-blood.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;p&gt;
      This is just a short reminder about what to keep in mind when you're
      preparing some MySQL 8.0 performance testing (or any other 8.0
      evaluation) and want to do it "with less blood" ;-))
    &lt;/p&gt;
    &lt;p&gt;
      So far, here is the list :
    &lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;
        8.0 is using &lt;b&gt;UTF8&lt;/b&gt; by default, so if you're expecting to compare
        apples-to-apples, configure it with "latin1" as it was before to
        compare to 5.7/5.6/etc. (or configure them all to UTF8 if your target
        is to compare UTF8)..
      &lt;/li&gt;
      &lt;li&gt;
        &lt;b&gt;binlog&lt;/b&gt; is enabled by default, so mind to switch it OFF if it's
        not in your target..
      &lt;/li&gt;
      &lt;li&gt;
        &lt;b&gt;SSL&lt;/b&gt; is ON by default (switch it OFF if not your target)
      &lt;/li&gt;
      &lt;li&gt;
        auto &lt;b&gt;UNDO&lt;/b&gt; truncate is ON by default (if you prefer to avoid any
        periodic spikes in background of flushing activity due UNDO auto
        truncate, just switch this features OFF (while you'll still be able to
        involve the same truncate manually whenever you need it))
      &lt;/li&gt;
      &lt;li&gt;
        there is a new default &lt;b&gt;authentication&lt;/b&gt; plugin (and if you want
        to see your old apps still working with 8.0, just initialize your
        MySQL instance + use in your config file the old plugin instead (NOTE:
        you may still switch plugins via ALTER))
      &lt;/li&gt;
      &lt;li&gt;
        InnoDB &lt;b&gt;doublewrite&lt;/b&gt; fix is still NOT part of the published code,
        so unless your target is to really show how this missed fix is
        impacting your workload, switch it OFF (but still mind to bombard
        Sunny with complaining messages about how this fix is important for
        you ;-))
      &lt;/li&gt;
    &lt;/ul&gt;
    And now all these points in action :
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-testing-80-with-less-blood.html"&gt;Read more...&lt;/a&gt; (1 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>MySQL</category>
      <category>Performance</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-performance-testing-80-with-less-blood.html</guid>
      <pubDate>Tue, 24 Apr 2018 06:19:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : my slides from MySQL Day &amp; FOSDEM Feb.2018</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-performance-my-slides-from-mysql-day-fosdem-feb2018.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;p&gt;As promised, the following are links to slides from my talks during
      MySQL Day and FOSDEM @Brussels in Feb.2018 :
    &lt;/p&gt;&lt;ul&gt;
      &lt;li&gt;
        MySQL Day : &lt;a href="http://dimitrik.free.fr/Presentations/MySQL_Perf-Feb2018-dim.pdf"&gt;8.0-dev
        Scalability &amp;amp; Benchmarks&lt;/a&gt;
      &lt;/li&gt;
      &lt;li&gt;
        FOSDEM #18 : &lt;a href="http://dimitrik.free.fr/Presentations/MySQL_Perf-FOSDEM-2018-dim.pdf"&gt;8.0
        InnoDB Re-Design&lt;/a&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
      NOTE : for those who did not follow, CATS is not the only change in
      InnoDB ;-))
    &lt;/p&gt;
    &lt;p&gt;
      Rgds,&lt;br&gt;-Dimitri
    &lt;/p&gt;</description>
      <category>Benchmarks</category>
      <category>FOSDEM</category>
      <category>InnoDB</category>
      <category>MySQL</category>
      <category>Slides</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-performance-my-slides-from-mysql-day-fosdem-feb2018.html</guid>
      <pubDate>Sun, 11 Feb 2018 20:04:00 GMT</pubDate>
    </item>
    <item>
      <title>dim_STAT v.9.0 CoreUpdate-17-12 is here !</title>
      <link>http://dimitrik.free.fr/blog/posts/dim_stat-v90-coreupdate17-12-is-here.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;div&gt;Year is finishing, and as a kind of "end-of-year" gift, I'm happy to announce that a freshy &lt;b&gt;new CoreUpdate-17-12&lt;/b&gt; is available from now ! ;-))&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;IMPORTANT : this is a very "sensible" update, and you cannot just to apply it on the top of already deployed dim_STAT instance as before.. -- there was a need to fix several issues within "under
 hood" binaries to make the new stuff working properly, so the new code has simply no chances to work with old binaries.. So far, I decided to make it all as a "single shot move" -- align a new update
 shipment with a moving to "64bit" versions support only :&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;e.g. this is not a new version of dim_STAT&lt;/li&gt;
&lt;li&gt;this is just a "remastered" 64bit release + several visible and internal fixes&lt;/li&gt;
&lt;li&gt;any 32bit releases are remained "as it", and it makes no more sense to continue to support them..&lt;/li&gt;
&lt;li&gt;64bit versions of dim_STAT v.9.0 are available for &lt;a href="http://dimitrik.free.fr/dim_STAT-v90-linux-x64.tgz"&gt;Linux&lt;/a&gt; and &lt;a href="http://dimitrik.free.fr/dim_STAT-v90-MacOSX-x64.tgz"&gt;MacOSX
&lt;/a&gt; (macOS)&lt;/li&gt;
&lt;li&gt;any further CoreUpdate will work only with 64bit version having the latest supported binaries..&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;p&gt;So, what about this "new stuff" requiring such deep changes to go till the binaries remastering ?.. -- a very long story short, this is all about support of &lt;b&gt;SVG&lt;/b&gt; images ! ;-))  -- I've
 started to develop dim_STAT exactly 20 years (!!) ago.. (hard to believe time is flying so fast..) -- initially dim_STAT used Java Applets (it was very lightweight (yes! it was so 20 years ago ;-))
 and it was really cool, "live", etc.) -- but then Java support in a browser became only heavier and heavier, so I've added PNG images support (which could bring back the initial lightweight to
 dim_STAT and make it "usable" again ;-)) -- and today, things are changing again ;-)) -- "retina" and other "high resolution" screens become more an more popular, and on these screens my previously
 "good enough" PNG graphs are looking just "ugly" (to be polite ;-)). After testing and analyzing tons of various JS-based (or other) live graphing tools/libs, I've finally stopped my choice on SVG !
 -- it's already supported by most of web browsers, still lightweight, and has a huge advantage -- it's extremely well "readable" !!  and you can scale (!!) it very easily as much as you want ;-))
 (so, no more color confusions and simply ugly graphics ;-))
&lt;/p&gt;&lt;p&gt;
An SVG graph is looking like this :
&lt;/p&gt;&lt;div&gt;&lt;img src="http://dimitrik.free.fr/blog/90_u17_12/screenshot.png"&gt;&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;well, this is just a snapshot, but hope you already can get an idea about how much "more clean" your graphs could be ;-))&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/dim_stat-v90-coreupdate17-12-is-here.html"&gt;Read more...&lt;/a&gt; (13 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>dim_STAT</category>
      <category>Performance</category>
      <guid>http://dimitrik.free.fr/blog/posts/dim_stat-v90-coreupdate17-12-is-here.html</guid>
      <pubDate>Fri, 29 Dec 2017 22:29:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance: 8.0 re-designed REDO log &amp; ReadWrite Workloads Scalability</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-performance-80-redesigned-redo-log-readwrite-workloads-scalability.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;div&gt;This post is following the story of MySQL 8.0 Performance &amp;amp; Scalability started with article about &lt;a href="http://dimitrik.free.fr/blog/archives/2017/10/mysql-performance-21m-qps-on-80rc.html"&gt;2.1M QPS&lt;/a&gt; obtained on Read-Only workloads. The current story will cover now our progress in Read-Write
 workloads..&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;Historically our Read-Only scalability was a big pain, as Read-Only (RO) workloads were often slower than Read-Write (sounds very odd: "add Writes to your Reads to go faster", but this was our
 reality ;-)) -- and things were largely improved here since MySQL 5.7 where we broke 1M QPS barrier and reached &lt;a href="http://dimitrik.free.fr/blog/archives/2015/10/mysql-performance-yes-we-can-do-more-than-16m-qps-sql-on-mysql-57-ga.html"&gt;1.6M QPS&lt;/a&gt; for the first time. However, improving Writes or mixed
 Read+Writes (RW) workloads is a much more complex story..&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;What are the main scalability show-stoppers in MySQL 5.7 and current 8.0 release candidate for RW and IO-bound workloads? - the most "killing" are the following ones :&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;REDO log contentions are blocking your whole transaction processing from going faster..&lt;/li&gt;
&lt;li&gt;Transaction (TRX) management &lt;a href="http://dimitrik.free.fr/blog/archives/2015/02/mysql-performance-impact-of-innodb-transaction-isolation-modes-in-mysql-57.html"&gt;becomes very quickly a huge
 bottleneck&lt;/a&gt; as soon as your transactions are fast and/or short..&lt;/li&gt;
&lt;li&gt;internal locking and row locking (LOCK) will quickly kill your performance as soon as your data access pattern is not uniform, etc..&lt;/li&gt;
&lt;li&gt;and yet more, historically as soon as you're involving any IO operations, they all will go via one single and global locking path (fil_system mutex) which will make a use of faster storage
 solutions (flash) simply useless..  &lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;div&gt;so, it was definitively a time to take our hands on this ;-))&lt;/div&gt;&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;&lt;img src="http://dimitrik.free.fr/blog/80labs_rw/screenshot_2.png"&gt;&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;The whole story about is pretty amazing, but I have to be short, so :&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;in short : we know exactly what we have to do to get a rid of this all&lt;/li&gt;
&lt;li&gt;we have a working prototype code allowing us to expect &lt;a href="http://dimitrik.free.fr/blog/archives/2017/05/mysql-performance-80dev-progress-details.html"&gt;pretty important potential gains&lt;/a&gt; in
 RW and pure Write workloads&lt;/li&gt;
&lt;li&gt;the only real problem here is that a road from "prototype" to "production quality" code is much longer than anyone could expect (even me ;-)) &lt;/li&gt;
&lt;li&gt;so within MySQL 8.0 GA timeframe we could not deliver all the fixes we have, and we have to go by priority here..&lt;/li&gt;
&lt;li&gt;and the priority #1 from the list of issues mentioned above is for sure going to REDO and IO problems, as the most common show-stoppers for most of RW workloads today&lt;/li&gt;
&lt;li&gt;the 8.0 planned changes are not yet final, but you may already get a first idea about by trying our "preview" &lt;a href="https://labs.mysql.com"&gt;MySQL 8.0-labs&lt;/a&gt; release&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80-redesigned-redo-log-readwrite-workloads-scalability.html"&gt;Read more...&lt;/a&gt; (9 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>Benchmarks</category>
      <category>InnoDB</category>
      <category>MySQL</category>
      <category>Performance</category>
      <category>REDO</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-performance-80-redesigned-redo-log-readwrite-workloads-scalability.html</guid>
      <pubDate>Mon, 23 Oct 2017 14:19:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : 2.1M QPS on 8.0-rc</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-performance-21m-qps-on-80rc.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;div&gt;The &lt;a href="http://mysqlserverteam.com/the-mysql-8-0-3-release-candidate-is-available/"&gt;first release candidate of MySQL 8.0&lt;/a&gt; is here, and I'm happy to share few performance stories about.
 This article will be about the "most simple" one -- our in-memory Read-Only performance ;-))&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;However, the used test workload was here for double reasons :&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;1) validate MySQL 8.0 performance&lt;/li&gt;
&lt;li&gt;2) fully evaluate the "New" Sysbench developed by Alex (&lt;a href="https://github.com/akopytov/sysbench"&gt;https://github.com/akopytov/sysbench&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;&lt;/div&gt;
&lt;div&gt;Going ahead to the second point, the main worry about New Sysbench was about its LUA overhead (the previous version 0.5 was running slower than the old one 0.4 due LUA) -- a long story short, I
 can confirm now that the New Sysbench is running as fast as the oldest "most lightweight" Sysbench binary I have in use ! so, KUDOS Alex !!! ;-))&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;While regarding the improvements coming with MySQL 8.0 on Read-Only workloads I'd mention :&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;several "overheads" were fixed&lt;/li&gt;
&lt;li&gt;the most notable one is related to UTF8, of course&lt;/li&gt;
&lt;li&gt;however, even latin1 related functions were improved little bit&lt;/li&gt;
&lt;li&gt;but this was only about "overheads", and nothing about "scalability"&lt;/li&gt;
&lt;li&gt;because the main "scalability" gap was already made with MySQL 5.7 two years ago ;-))&lt;/li&gt;
&lt;li&gt;so, our main merit with MySQL 8.0 here will be rather NOT TO LOOSE the already obtained gain !&lt;/li&gt;
&lt;li&gt;(agree, sounds very odd, but if you'll just look on the &lt;a href="http://mysqlserverteam.com/mysql-8-0-rc1-highlights/"&gt;list of the all new features&lt;/a&gt; coming with 8.0 you can imagine our code
 path is not going to be shorter, right ? ;-))&lt;/li&gt;
&lt;li&gt;so the fair test here will be to compare 8.0 vs 5.7 and 5.6 with latin1 encoding &lt;/li&gt;
&lt;li&gt;(for UTF8 the winner is 8.0 and from very far, which you already know)&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;&lt;/div&gt;
&lt;div&gt;The most "sensible" RO workload in Sysbench is Point-Selects, so here is my test scenario:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;workload : New Sysbench RO point-selects&lt;/li&gt;
&lt;li&gt;data volume : 8 tables of 10M rows each&lt;/li&gt;
&lt;li&gt;encoding : latin1&lt;/li&gt;
&lt;li&gt;user load levels : 1, 2, 4, .. 1024&lt;/li&gt;
&lt;li&gt;engines : MySQL 8.0, MySQL 5.7, MySQL 5.6&lt;/li&gt;
&lt;li&gt;server : 96cores-HT 4CPU sockets 2.2Ghz (Broadwell), OL7.3&lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;and here is the result :&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;&lt;img src="http://dimitrik.free.fr/blog/80rc1_psel/screenshot.png"&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Observations :&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;2.1M SQL Query/sec for MySQL 8.0&lt;/b&gt; -- our current new Max QPS record obtained in MySQL history !&lt;/li&gt;
&lt;li&gt;which is great, no doubt !&lt;/li&gt;
&lt;li&gt;however, there is a clearly seen small, but visible QPS regression on lower load levels..&lt;/li&gt;
&lt;li&gt;which is not really cool (even if could be easily explained by increased code path + new DD + etc.. etc..)&lt;/li&gt;
&lt;li&gt;well, adding it to my list of "low load" performance issues and will investigate later.. &lt;/li&gt;&lt;/ul&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-21m-qps-on-80rc.html"&gt;Read more...&lt;/a&gt; (2 min remaining to read)&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description>
      <category>Benchmarks</category>
      <category>InnoDB</category>
      <category>MySQL</category>
      <category>Performance</category>
      <category>Sysbench</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-performance-21m-qps-on-80rc.html</guid>
      <pubDate>Wed, 04 Oct 2017 01:33:00 GMT</pubDate>
    </item>
    <item>
      <title>MySQL Performance : 8.0-dev Progress Details</title>
      <link>http://dimitrik.free.fr/blog/posts/mysql-performance-80dev-progress-details.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;div&gt;&lt;div&gt;As promised, here is the follow up of the MySQL 8.0-dev Progress teaser ;-)&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;so, yes, we expect to see the most hot contentions gone, as it's seen from the following graph :&lt;/div&gt;
&lt;div&gt;&lt;img src="http://dimitrik.free.fr/blog/80_dev_next/B22DFA97-00EB-4E6A-A37A-7F11EBDCAFC5.png"&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;Observations&lt;/u&gt; :&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;the graph is representing the spin waits / spin rounds events happening during the same Sysbench Update-NoKEY workload&lt;/li&gt;
&lt;li&gt;the load is progressing from 8 concurrent users to 16, 32, .. 512&lt;/li&gt;
&lt;li&gt;3 engines are tested one after one : MySQL 5.7, MySQL 8.0 (current DMR), MySQL 8.0-dev (current prototype)&lt;/li&gt;
&lt;li&gt;first all 3 engines are running on 22cores-HT only (1 CPU socket)&lt;/li&gt;
&lt;li&gt;then, the second time : on 44cores-HT (2 CPU sockets)&lt;/li&gt;
&lt;li&gt;and the most important thing to retain about this graph is that on 8.0-dev we see all main hot contentions gone ;-)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/posts/mysql-performance-80dev-progress-details.html"&gt;Read more...&lt;/a&gt; (4 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description>
      <category>Benchmarks</category>
      <category>InnoDB</category>
      <category>MySQL</category>
      <category>Performance</category>
      <guid>http://dimitrik.free.fr/blog/posts/mysql-performance-80dev-progress-details.html</guid>
      <pubDate>Tue, 09 May 2017 19:05:00 GMT</pubDate>
    </item>
    <item>
      <title>All Older Posts Are Here..</title>
      <link>http://dimitrik.free.fr/blog/posts/older-posts-archive.html</link>
      <dc:creator>Dimitri</dc:creator>
      <description>&lt;p&gt;All the older posts from this blog you may still find here :
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt; &lt;a href="http://dimitrik.free.fr/blog/old_archives.html"&gt; Older Articles Archive &lt;/a&gt;
&lt;/li&gt;&lt;li&gt; &lt;a href="http://dimitrik.free.fr/blog/old_rss.xml"&gt; Older Articles RSS &lt;/a&gt;
&lt;/li&gt;&lt;li&gt; &lt;a href="http://dimitrik.free.fr/blog/archives/cat_mysql.rss"&gt; Older MySQL Articles RSS &lt;/a&gt;
&lt;/li&gt;&lt;li&gt; &lt;a href="http://dimitrik.free.fr/blog/archives/cat_dim_stat.rss"&gt; Older dim_STAT Articles RSS &lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;

have fun ! ;-))
&lt;br&gt;&lt;br&gt;
Rgds,&lt;br&gt;
-Dimitri
&lt;br&gt;&lt;br&gt;</description>
      <category>dim_STAT</category>
      <category>MySQL</category>
      <guid>http://dimitrik.free.fr/blog/posts/older-posts-archive.html</guid>
      <pubDate>Mon, 01 May 2017 13:00:00 GMT</pubDate>
    </item>
  </channel>
</rss>
