<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
> <channel><title>MySQL Performance Blog</title> <atom:link href="http://www.mysqlperformanceblog.com/feed/" rel="self" type="application/rss+xml" /><link>http://www.mysqlperformanceblog.com</link> <description>Percona&#039;s MySQL &#38; InnoDB performance and scalability blog</description> <lastBuildDate>Mon, 20 May 2013 11:00:13 +0000</lastBuildDate> <language>en-US</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.5.1</generator> <item><title>Webinar: SQL Query Patterns, Optimized</title><link>http://www.mysqlperformanceblog.com/2013/05/20/webinar-sql-query-patterns-optimized/</link> <comments>http://www.mysqlperformanceblog.com/2013/05/20/webinar-sql-query-patterns-optimized/#comments</comments> <pubDate>Mon, 20 May 2013 10:00:28 +0000</pubDate> <dc:creator>Bill Karwin</dc:creator> <category><![CDATA[MySQL]]></category> <category><![CDATA[MySQL Webinars]]></category> <category><![CDATA[Bill Karwin]]></category> <category><![CDATA[Optimizer]]></category> <category><![CDATA[SQL Query Patterns]]></category> <category><![CDATA[Tips]]></category> <guid
isPermaLink="false">http://www.mysqlperformanceblog.com/?p=15532</guid> <description><![CDATA[<p>Next Friday, May 31 at 10 a.m. Pacific, I&#8217;ll present Percona&#8217;s next webinar, &#8220;SQL Query Patterns, Optimized.&#8221; Based on my experiences solving tough SQL problems for Percona training and consulting, I&#8217;ll classify several common types of queries with which developers struggle. I&#8217;ll test several SQL solutions for each type of query objective, and show how [...]</p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/20/webinar-sql-query-patterns-optimized/">Webinar: SQL Query Patterns, Optimized</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></description> <content:encoded><![CDATA[<p><a
href="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/02/Percona-MySQL-Webinars.jpg"><img
class="alignleft  wp-image-12964" alt="Using MySQL 5.6 Performance Schema to Troubleshoot Typical Workload Bottlenecks" src="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/02/Percona-MySQL-Webinars-285x300.jpg" width="171" height="180" /></a>Next Friday, May 31 at 10 a.m. Pacific, I&#8217;ll present Percona&#8217;s next webinar, &#8220;<a
href="http://www.percona.com/webinars/mysql-query-patterns-optimized">SQL Query Patterns, Optimized</a>.&#8221;</p><p>Based on my experiences solving tough SQL problems for <a
href="http://www.percona.com/training">Percona training</a> and <a
href="http://www.percona.com/mysql-consulting/overview">consulting</a>, I&#8217;ll classify several common types of queries with which developers struggle. I&#8217;ll test several SQL solutions for each type of query objective, and show how you can use MySQL 5.6 built-in methods to analyze them for optimal query efficiency.  The discussion will cover optimizer reports, query profiling, and session status to measure performance.</p><p>The query patterns will include:</p><ul><li>Exclusion Join</li><li>Random Selection</li><li>Greatest-Per-Group</li><li>Dynamic Pivot</li><li>Relational Division</li></ul><p>Please <a
href="http://www.percona.com/webinars/mysql-query-patterns-optimized">register for this webinar</a> and join me next Friday!</p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/20/webinar-sql-query-patterns-optimized/">Webinar: SQL Query Patterns, Optimized</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></content:encoded> <wfw:commentRss>http://www.mysqlperformanceblog.com/2013/05/20/webinar-sql-query-patterns-optimized/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Percona XtraBackup 2.1.2 for MySQL available for download</title><link>http://www.mysqlperformanceblog.com/2013/05/18/percona-xtrabackup-2-1-2-for-mysql-available-for-download/</link> <comments>http://www.mysqlperformanceblog.com/2013/05/18/percona-xtrabackup-2-1-2-for-mysql-available-for-download/#comments</comments> <pubDate>Sat, 18 May 2013 04:25:53 +0000</pubDate> <dc:creator>Hrvoje Matijakovic</dc:creator> <category><![CDATA[MySQL]]></category> <category><![CDATA[Percona Software]]></category> <category><![CDATA[Percona XtraBackup]]></category> <category><![CDATA[DBD]]></category> <category><![CDATA[innobackupex]]></category> <category><![CDATA[Perl]]></category> <guid
isPermaLink="false">http://www.mysqlperformanceblog.com/?p=15500</guid> <description><![CDATA[<p>Percona is glad to announce the release of Percona XtraBackup 2.1.2 for MySQL on May 18, 2013. Downloads are available from our download site here and Percona Software Repositories. This release fixes number of high-priority bugs since version 2.1 became GA. It’s advised to upgrade your latest 2.1 version to 2.1.2. This release is the [...]</p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/18/percona-xtrabackup-2-1-2-for-mysql-available-for-download/">Percona XtraBackup 2.1.2 for MySQL available for download</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></description> <content:encoded><![CDATA[<p><a
href="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/01/Percona_XtraBackup.jpg"><img
class="alignleft  wp-image-12668" style="margin-top: 5px; margin-bottom: 5px;" alt="Percona XtraBackup for MySQL" src="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/01/Percona_XtraBackup.jpg" width="206" height="78" /></a> <em>Percona</em> is glad to announce the release of <a
href="http://www.percona.com/software/percona-xtrabackup">Percona XtraBackup</a> 2.1.2 for MySQL on May 18, 2013. Downloads are available from our download site <a
href="http://www.percona.com/downloads/XtraBackup/XtraBackup-2.1.2/">here</a> and <a
href="file:///home/hrvoje/src/xtrabackup/rn-2.1.2/doc/build/html/installation.html">Percona Software Repositories</a>.</p><p>This release fixes number of high-priority bugs since version 2.1 became GA. It’s advised to upgrade your latest 2.1 version to 2.1.2. This release is the latest stable release in the 2.1 series.</p><p>Bugs Fixed:</p><ul><li>Using Perl’s <code>DBD::MySQL</code> package for server communication instead of spawning the <em>MySQL</em> command line client introduced a regression which caused innobackupex &#8211;galera-info option to fail. Bug fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1180672">#1180672</a>.</li><li>The format of <code>xtrabackup_galera_info</code> was missing the ‘:’ separator between the values of <code>wsrep_local_state_uuid</code> and <code>wsrep_last_committed</code>. Bug fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1181222">#1181222</a>.</li><li><strong>innobackupex</strong> automatic version detection did not work correctly for latest <em>Percona Server</em> and <em>MySQL</em> 5.1 releases which could cause innobackupex to fail. Bugs fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1181092">#1181092</a>, <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1181099">#1181099</a> and <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1180905">#1180905</a>.</li><li>When backing up a server that is not a replication slave with the innobackupex &#8211;slave-info option, <strong>innobackupex</strong> failed with a fatal error. Replaced the fatal error with a diagnostic message about innobackupex &#8211;slave-info being ignored in such a case. Bug fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1180662">#1180662</a>.</li><li>Low values for <code>wait_timeout</code> on the server could cause server to close the connection while backup is being taken. Fixed by setting the bigger value for <code>wait_timeout</code> option on the server to prevent server from closing connections if the global <code>wait_timeout</code> value is set too low. Bug fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1180922">#1180922</a>.</li></ul><p>Other bug fixes: bug fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1177182">#1177182</a>.</p><p>Release notes with all the bugfixes for <em>Percona XtraBackup</em> 2.1.2 are available in our <a
href="http://www.percona.com/doc/percona-xtrabackup/release-notes/2.1/2.1.2.html">online documentation</a>. Bugs can be reported on the <a
href="https://bugs.launchpad.net/percona-xtrabackup/+filebug">launchpad bug tracker</a>.</p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/18/percona-xtrabackup-2-1-2-for-mysql-available-for-download/">Percona XtraBackup 2.1.2 for MySQL available for download</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></content:encoded> <wfw:commentRss>http://www.mysqlperformanceblog.com/2013/05/18/percona-xtrabackup-2-1-2-for-mysql-available-for-download/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Virident vCache vs. FlashCache: Part 2</title><link>http://www.mysqlperformanceblog.com/2013/05/17/virident-vcache-vs-flashcache-part-2/</link> <comments>http://www.mysqlperformanceblog.com/2013/05/17/virident-vcache-vs-flashcache-part-2/#comments</comments> <pubDate>Fri, 17 May 2013 10:00:56 +0000</pubDate> <dc:creator>Ernie Souhrada</dc:creator> <category><![CDATA[Benchmarks]]></category> <category><![CDATA[Hardware and Storage]]></category> <category><![CDATA[MySQL]]></category> <category><![CDATA[Ernie Souhrada]]></category> <category><![CDATA[FlashCache]]></category> <category><![CDATA[MLC]]></category> <category><![CDATA[PCIe]]></category> <category><![CDATA[sysbench]]></category> <category><![CDATA[vCache]]></category> <category><![CDATA[Virident]]></category> <guid
isPermaLink="false">http://www.mysqlperformanceblog.com/?p=15474</guid> <description><![CDATA[<p>This is the second part in a two-part series comparing Virident&#8217;s vCache to FlashCache. The first part was focused on usability and feature comparison; in this post, we&#8217;ll look at some sysbench test results. Disclosure: The research and testing conducted for this post were sponsored by Virident. First, some background information. All tests were conducted [...]</p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/17/virident-vcache-vs-flashcache-part-2/">Virident vCache vs. FlashCache: Part 2</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></description> <content:encoded><![CDATA[<p>This is the second part in a two-part series comparing Virident&#8217;s vCache to FlashCache. The first part was focused on usability and feature comparison; in this post, we&#8217;ll look at some sysbench test results.</p><p>Disclosure: The research and testing conducted for this post were sponsored by Virident.</p><p>First, some background information. All tests were conducted on <a
href="http://www.percona.com/docs/wiki/benchmark%3Ahardware%3Acisco_ucs_c250" target="_blank">Percona&#8217;s Cisco UCS C250</a> test machine, and both the vCache and FlashCache tests used the same 2.2TB Virident FlashMAX II as the cache storage device. EXT4 is the filesystem, and CentOS 6.4 the operating system, although the pre-release modules I received from Virident required the use of the CentOS 6.2 kernel, 2.6.32-220, so that was the kernel in use for all of the benchmarks on both systems. The benchmark tool used was sysbench 0.5 and the version of MySQL used was Percona Server 5.5.30-rel30.1-465. Each test was allowed to run for 7200 seconds, and the first 3600 seconds were discarded as warmup time; the remaining 3600 seconds were averaged into 10-second intervals. All tests were conducted with approximately 78GiB of data (32 tables, 10M rows each) and a 4GiB buffer pool. The cache devices were flushed to disk immediately prior to and immediately following each test run.</p><p>With that out of the way, let&#8217;s look at some numbers.</p><h3>vCache vs. vCache &#8211; MySQL parameter testing</h3><p>The first test was designed to look solely at vCache performance under some different sets of MySQL configuration parameters. For example, given that the front-end device is a very fast PCIe SSD, would it make more sense to configure MySQL as if it were using SSD storage or to just use an optimized HDD storage configuration? After creating a vCache device with the default configuration, I started with a baseline HDD configuration for MySQL (configuration A, listed at the bottom of this post) and then tried three additional sets of experiments. First, the baseline configuration plus:<br
/> <code><br
/> innodb_read_io_threads = 16<br
/> innodb_write_io_threads = 16<br
/> </code><br
/> We call this configuration B. The next one contained four SSD-specific optimizations based partially on some earlier work that I&#8217;d done with this Virident card (configuration C):<br
/> <code><br
/> innodb_io_capacity = 30000<br
/> innodb_adaptive_flushing_method = keep_average<br
/> innodb_flush_neighbor_pages=none<br
/> innodb_max_dirty_pages_pct = 60<br
/> </code><br
/> And then finally, a fourth test (configuration D) which combined the parameter changes from tests B and C. The graph below shows the sysbench throughput (tps) for these four configurations:<br
/> <a
href="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/vcache_trx_params.png"><img
class="alignnone size-full wp-image-15482" alt="vcache_trx_params" src="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/vcache_trx_params.png" width="640" height="480" /></a><br
/> As we can see, all of the configuration options produce numbers that, in the absence of outliers, are roughly identical, but it&#8217;s configuration C (shown in the graph as the blue line &#8211; SSD config) which shows the most consistent performance. The others all have assorted performance drops scattered throughout the graph. We see the exact same pattern when looking at transaction latency; the baseline numbers are roughly identical for all four configurations, but configuration C avoids the spikes and produces a very constant and predictable result.</p><p><a
href="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/vcache_response_params.png"><img
class="alignnone size-full wp-image-15483" alt="vcache_response_params" src="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/vcache_response_params.png" width="640" height="480" /></a></p><h3>vCache vs. FlashCache &#8211; the basics</h3><p>Once I&#8217;d determined that configuration C appeared to produce the most optimal results, I moved on to reviewing FlashCache performance versus that of vCache, and I also included a &#8220;no cache&#8221; test run as well using the base HDD MySQL configuration for purposes of comparison. Given the apparent differences in time-based flushing in vCache and FlashCache, both cache devices were set up so that time-based flushing was disabled. Also, both devices were set up such that all IO would be cached (i.e., no special treatment of sequential writes) and with a 50% dirty page threshold. Again, for comparison purposes, I also include the numbers from the vCache test where the time-based flushing is enabled.</p><p><a
href="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/vcache_fcache_trx_params.png"><img
class="alignnone size-full wp-image-15484" alt="vcache_fcache_trx_params" src="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/vcache_fcache_trx_params.png" width="640" height="480" /></a></p><p>As we&#8217;d expect, the HDD-only solution barely registered on the graph. With a buffer pool that&#8217;s much smaller than the working set, the no-cache approach is fairly crippled and ineffectual. FlashCache does substantially better, coming in at an average of around 600 tps, but vCache is about 3x better. The interesting item here is that vCache with time-based flushing enabled actually produces better and more consistent performance than vCache without time-based flushing, but even at its worst, the vCache test without time-based flushing still outperforms FlashCache by over 2x, on average.</p><p>Looking just at sysbench reads, vCache with time-based flushing consistently hit about 27000 per second, whereas without time-based flushing it averaged about 12500. FlashCache came in around 7500 or so. Sysbench writes came in just under 8000 for vCache + time-based flushing, around 6000 for vCache without time-based flushing, and somewhere around 2500 for FlashCache.</p><p><a
href="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/vcache_fcache_read_write.png"><img
class="alignnone  wp-image-15485" alt="vcache_fcache_read_write" src="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/vcache_fcache_read_write.png" width="720" height="270" /></a></p><p>We can take a look at some vmstat data to see what&#8217;s actually happening on the system during all these various tests. Clockwise from the top left in the next graph, we have &#8220;no cache&#8221;, &#8220;FlashCache&#8221;, &#8220;vCache with no time-based flushing&#8221;, and &#8220;vCache with time-based flushing.&#8221; As the images demonstrate, the no-cache system is being crushed by IO wait. FlashCache and vCache both show improvements, but it&#8217;s not until we get to vCache with the time-based flushing that we see some nice, predictable, constant performance.</p><p><a
href="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/cpu-usage-all.png"><img
class="alignnone  wp-image-15486" alt="cpu-usage-all" src="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/cpu-usage-all-1024x768.png" width="737" height="553" /></a></p><p>So why is it the case that vCache with time-based flushing appears to outperform all the rest? My hypothesis here is that time-based flushing allows the backing store to be written to at a more constant and, potentially, submaximal, rate compared to dirty-page-threshold flushing, which kicks in at a given level and then attempts to flush as quickly as possible to bring the dirty pages back within acceptable bounds. This is, however, only a hypothesis.</p><h3>vCache vs. FlashCache &#8211; dirty page threshold</h3><p>Finally, we examine the impact of a couple of different dirty-page ratios on device performance, since this is the only parameter which can be reliably varied between the two in the same way. The following graph shows sysbench OLTP performance for FlashCache vs. vCache with a 10% dirty threshold versus the same metrics at a 50% dirty threshold. Time-based flushing has been disabled. In this case, both systems produce better performance when the dirty-page threshold is set to 50%, but once again, vCache at 10% outperforms FlashCache at 10%.</p><p><a
href="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/vcache-dirty_trx_params.png"><img
class="alignnone size-full wp-image-15487" alt="vcache-dirty_trx_params" src="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/vcache-dirty_trx_params.png" width="640" height="480" /></a></p><p>The one interesting item here is that vCache actually appears to get *better* over time; I&#8217;m not entirely sure why that&#8217;s the case or at what point the performance is going to level off since these tests were all run for 2 hours anyway, but I think the overall results still speak for themselves, and even with a vCache volume where the dirty ratio is only 10%, such as might be the case where a deployment has a massive data set size in relation to both the working set and the cache device size, the numbers are encouraging.</p><h3>Conclusion</h3><p>Overall, the I think the graphs speak for themselves. When the working set outstrips the available buffer pool memory but still fits into the cache device, vCache shines. Compared to a deployment with no SSD cache whatsoever, FlashCache still does quite well, massively outperforming the HDD-only setup, but it doesn&#8217;t even really come close to the numbers obtained with vCache. There may be ways to adjust the FlashCache configuration to produce better or more consistent results, or results that are more inline with the numbers put up by vCache, but when we consider that overall usability was one of the evaluation points and combine that with the fact that the best vCache performance results were obtained with the default vCache configuration, I think vCache can be declared the clear winner.</p><h3>Base MySQL &amp; Benchmark Configuration</h3><p>All benchmarks were conducted with the following:<br
/> <code><br
/> sysbench ­­--num­-threads=32 ­­--test=tests/db/oltp.lua ­­--oltp_tables_count=32 \<br
/> --oltp­-table­-size=10000000 ­­--rand­-init=on ­­--report­-interval=1 ­­--rand­-type=pareto \<br
/> --forced­-shutdown=1 ­­--max­-time=7200 ­­--max­-requests=0 ­­--percentile=95 ­­\<br
/> --mysql­-user=root --mysql­-socket=/tmp/mysql.sock ­­--mysql­-table­-engine=innodb ­­\<br
/> --oltp­-read­-only=off run<br
/> </code></p><p>The base MySQL configuration (configuration A) appears below:<br
/> <code><br
/> #####fixed innodb options<br
/> innodb_file_format = barracuda<br
/> innodb_buffer_pool_size = 4G<br
/> innodb_file_per_table = true<br
/> innodb_data_file_path = ibdata1:100M<br
/> innodb_flush_method = O_DIRECT<br
/> innodb_log_buffer_size = 128M<br
/> innodb_flush_log_at_trx_commit = 1<br
/> innodb_log_file_size = 1G<br
/> innodb_log_files_in_group = 2<br
/> innodb_purge_threads = 1<br
/> innodb_fast_shutdown = 1<br
/> #not innodb options (fixed)<br
/> back_log = 50<br
/> wait_timeout = 120<br
/> max_connections = 5000<br
/> max_prepared_stmt_count=500000<br
/> max_connect_errors = 10<br
/> table_open_cache = 10240<br
/> max_allowed_packet = 16M<br
/> binlog_cache_size = 16M<br
/> max_heap_table_size = 64M<br
/> sort_buffer_size = 4M<br
/> join_buffer_size = 4M<br
/> thread_cache_size = 1000<br
/> query_cache_size = 0<br
/> query_cache_type = 0<br
/> ft_min_word_len = 4<br
/> thread_stack = 192K<br
/> tmp_table_size = 64M<br
/> server­id = 101<br
/> key_buffer_size = 8M<br
/> read_buffer_size = 1M<br
/> read_rnd_buffer_size = 4M<br
/> bulk_insert_buffer_size = 8M<br
/> myisam_sort_buffer_size = 8M<br
/> myisam_max_sort_file_size = 10G<br
/> myisam_repair_threads = 1<br
/> myisam_recover<br
/> </code></p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/17/virident-vcache-vs-flashcache-part-2/">Virident vCache vs. FlashCache: Part 2</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></content:encoded> <wfw:commentRss>http://www.mysqlperformanceblog.com/2013/05/17/virident-vcache-vs-flashcache-part-2/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Virident vCache vs. FlashCache: Part 1</title><link>http://www.mysqlperformanceblog.com/2013/05/16/virident-vcache-vs-flashcache-part-1/</link> <comments>http://www.mysqlperformanceblog.com/2013/05/16/virident-vcache-vs-flashcache-part-1/#comments</comments> <pubDate>Thu, 16 May 2013 10:00:02 +0000</pubDate> <dc:creator>Ernie Souhrada</dc:creator> <category><![CDATA[Benchmarks]]></category> <category><![CDATA[Hardware and Storage]]></category> <category><![CDATA[MySQL]]></category> <category><![CDATA[Ernie Souhrada]]></category> <category><![CDATA[FlashCache]]></category> <category><![CDATA[PCIe]]></category> <category><![CDATA[SSD]]></category> <category><![CDATA[vCache]]></category> <category><![CDATA[Virident]]></category> <guid
isPermaLink="false">http://www.mysqlperformanceblog.com/?p=15074</guid> <description><![CDATA[<p>(This is part one of a two part series) Over the past few weeks I have been looking at a preview release of Virident&#8217;s vCache software, which is a kernel module and set of utilities designed to provide functionality similar to that of FlashCache. In particular, Virident engaged Percona to do a usability and feature-set [...]</p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/16/virident-vcache-vs-flashcache-part-1/">Virident vCache vs. FlashCache: Part 1</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></description> <content:encoded><![CDATA[<p><em><a
href="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/boxinggloves.jpg"><img
class="alignleft size-medium wp-image-15480" alt="Virident vCache vs. FlashCache" src="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/boxinggloves-300x199.jpg" width="300" height="199" /></a>(This is part one of a two part series)</em> Over the past few weeks I have been looking at a preview release of Virident&#8217;s vCache software, which is a kernel module and set of utilities designed to provide functionality similar to that of FlashCache. In particular, Virident engaged Percona to do a usability and feature-set comparison between vCache and FlashCache and also to conduct some benchmarks for the use case where the MySQL working set is significantly larger than the InnoDB buffer pool (thus leading to a lot of buffer pool disk reads) but still small enough to fit into the cache device. In this post and the next, I&#8217;ll present some of those results.</p><p>Disclosure: The research and testing for this post series was sponsored by Virident.</p><p>Usability is, to some extent, a subjective call, as I may have preferences for or against a certain mode of operation that others may not share, so readers may have a different opinion than mine, but on this point I call it an overall draw between vCache and FlashCache.</p><p>Ease of basic installation. The setup process was simply a matter of installing two RPMs and running a couple of commands to enable vCache on the PCIe flash card (a Virident FlashMAX II) and set up the cache device with the command-line utilities supplied with one of the RPMs. Moreover, the vCache software is built in to the Virident driver, so there is no additional module to install. FlashCache, on the other hand, requires building a separate kernel module in addition to whatever flash memory driver you&#8217;ve already had to install, and then further configuration requires modification to assorted sysctls. I would also argue that the vCache documentation is superior. <strong>Winner: vCache.</strong></p><p>Ease of post-setup modification / advanced installation. Many of the FlashCache device parameters can be easily modified by echoing the desired value to the appropriate sysctl setting; with vCache, there is a command-line binary which can modify many of the same parameters, but doing so requires a cache flush, detach, and reattach. <strong>Winner: FlashCache.</strong></p><p>Operational Flexibility: Both solutions share many features here; both of them allow whitelisting and blacklisting of PIDs or simply running in a &#8220;cache everything&#8221; mode. Both of them have support for not caching sequential IO, adjusting the dirty page threshold, flushing the cache on demand, or having a time-based cache flushing mechanism, but some of these features operate differently with vCache than with FlashCache. For example, when doing a manual cache flush with vCache, this is a blocking operation. With FlashCache, echoing &#8220;1&#8243; to the do_sync sysctl of the cache device triggers a cache flush, but it happens in the background, and while countdown messages are written to syslog as the operation proceeds, the device never reports that it&#8217;s actually finished. I think both kinds of flushing are useful in different situations, and I&#8217;d like to see a non-blocking background flush in vCache, but if I had to choose one or the other, I&#8217;ll take blocking and modal over fire-and-forget any day. FlashCache does have the nice ability to switch between FIFO and LRU for its flushing algorithm; vCache does not. This is something that could prove useful in certain situations. <strong>Winner: FlashCache.</strong></p><p>Operational Monitoring: Both solutions offer plenty of statistics; the main difference is that FlashCache stats can be pulled from /proc but vCache stats have to be retrieved by running the vgc-vcache-monitor command. Personally, I prefer &#8220;cat /proc/something&#8221; but I&#8217;m not sure that&#8217;s sufficient to award this category to FlashCache. <strong>Winner: None.</strong></p><p>Time-based Flushing: This wouldn&#8217;t seem like it should be a separate category, but because the behavior seems to be so different between the two cache solutions, I&#8217;m listing it here. The vCache manual indicates that “flush period” specifies the time after which dirty blocks will be written to the backing store, whereas FlashCache has a setting called “fallow_delay”, defined in the documentation as the time period before “idle” dirty blocks are cleaned from the cache device. It is not entirely clear whether or not these mechanisms operate in the same fashion, but based on the documentation, it appears that they do not. I find the vCache implementation more useful than the one present in FlashCache. <strong>Winner: vCache.</strong></p><p>Although nobody likes a tie, if you add up the scores, usability is a 2-2-1 draw between vCache and FlashCache. There are things that I really liked better with FlashCache, and there are other things that I thought vCache did a much better job with. If I absolutely must pick a winner in terms of usability, then I&#8217;d give a slight edge to FlashCache due to configuration flexibility, but if the GA release of vCache added some of FlashCache&#8217;s additional configuration options and exposed statistics via /proc, I&#8217;d vote in the other direction.</p><p>Stay tuned for part two of this series, wherein we&#8217;ll take a look at some benchmarks. There&#8217;s no razor-thin margin of victory for either side here: vCache outperforms FlashCache by a landslide.</p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/16/virident-vcache-vs-flashcache-part-1/">Virident vCache vs. FlashCache: Part 1</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></content:encoded> <wfw:commentRss>http://www.mysqlperformanceblog.com/2013/05/16/virident-vcache-vs-flashcache-part-1/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Announcing Percona XtraBackup 2.1.1 GA</title><link>http://www.mysqlperformanceblog.com/2013/05/15/announcing-percona-xtrabackup-2-1-0-ga/</link> <comments>http://www.mysqlperformanceblog.com/2013/05/15/announcing-percona-xtrabackup-2-1-0-ga/#comments</comments> <pubDate>Wed, 15 May 2013 12:00:47 +0000</pubDate> <dc:creator>Hrvoje Matijakovic</dc:creator> <category><![CDATA[MySQL]]></category> <category><![CDATA[Percona XtraBackup]]></category> <guid
isPermaLink="false">http://www.mysqlperformanceblog.com/?p=15369</guid> <description><![CDATA[<p>Percona is glad to announce the release of Percona XtraBackup 2.1.1 on May 15th 2013. Downloads are available from our download site here and Percona Software Repositories. Percona XtraBackup enables backups without blocking user queries, making it ideal for companies with large data sets and mission-critical applications that cannot tolerate long periods of downtime. Offered [...]</p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/15/announcing-percona-xtrabackup-2-1-0-ga/">Announcing Percona XtraBackup 2.1.1 GA</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></description> <content:encoded><![CDATA[<p><a
href="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/01/Percona_XtraBackup.jpg"><img
class="alignleft size-full wp-image-12668" alt="Percona XtraBackup for MySQL" src="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/01/Percona_XtraBackup.jpg" width="229" height="87" /></a> <em>Percona</em> is glad to announce the release of <em>Percona XtraBackup</em> 2.1.1 on May 15th 2013. Downloads are available from our download site <a
href="http://www.percona.com/downloads/XtraBackup/XtraBackup-2.1.1/">here</a> and <a
href="http://www.percona.com/doc/percona-xtrabackup/2.1/installation.html">Percona Software Repositories</a>.</p><p><em><a
href="http://www.percona.com/software/percona-xtrabackup">Percona XtraBackup</a></em> enables backups without blocking user queries, making it ideal for companies with large data sets and mission-critical applications that cannot tolerate long periods of downtime. Offered free as an open source solution, <em>XtraBackup</em> drives down backup costs while providing unique features for <em>MySQL</em> backup. The new 2.1.1 GA version offers improved performance, enterprise-grade security, and lower resource usage.</p><p>This release is the first GA (Generally Available) stable release in the 2.1 series.</p><p><strong>New Features:</strong></p><ul><li><em>Percona XtraBackup</em> now has support for <a
href="http://www.percona.com/doc/percona-xtrabackup/2.1/innobackupex/compact_backups_innobackupex.html#compact-backups-ibk">Compact Backups</a>. This feature can be used for taking the backups that will take less amount of disk space. <em>GA</em> release now contains new <a
href="http://www.percona.com/doc/percona-xtrabackup/2.1/innobackupex/innobackupex_option_reference.html#cmdoption-innobackupex--rebuild-threads">innobackupex &#8211;rebuild-threads</a> option that can be used to specify the number of threads started by <em>XtraBackup</em> when rebuilding secondary indexes on <code>innobackupex --apply-log --rebuild-indexes</code>. This allows parallel processing of individual tables when rebuilding the index.</li><li><em>Percona XtraBackup</em> has implemented <a
href="http://www.percona.com/doc/percona-xtrabackup/2.1/innobackupex/encrypted_backups_innobackupex.html#encrypted-backups-ibk">Encrypted Backups</a>. This feature can be used to encrypt/decrypt both local and streamed backups in order to add another layer of protection to the backups.</li><li><strong>innobackupex</strong> now uses Perl&#8217;s <code>DBD::MySQL</code> package for server communication instead of spawning the <em>MySQL</em> command line client.</li><li>Support for <em>InnoDB</em> 5.0 and <em>InnoDB</em> 5.1 builtin has been removed from <em>Percona XtraBackup</em>.</li><li>After being deprecated in previous version, option <code>--remote-host</code> has been completely removed in <em>Percona XtraBackup</em> 2.1.</li><li><em>Percona XtraBackup</em> can use <a
href="http://www.percona.com/doc/percona-server/5.5/management/changed_page_tracking.html">XtraDB changed page tracking</a> feature to perform the <a
href="http://www.percona.com/doc/percona-xtrabackup/2.1/xtrabackup_bin/incremental_backups.html#xb-incremental">Incremental Backups</a> now.</li></ul><p><strong>Bugs Fixed:</strong></p><ul><li><strong>innobackupex</strong> is using <code>SHOW MASTER STATUS</code> to obtain binlog file and position. This could trigger a bug if the server being backed up was standalone server (neither master nor slave in replication) and binlog information wasn&#8217;t available. Fixed by not creating <code>xtrabackup_binlog_info</code> file when binlog isn&#8217;t available. Bug fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1168513">#1168513</a>.</li><li><em>Percona XtraBackup</em> would leave <code>xbtemp</code> temp files behind due to a typo. Bug fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1172016">#1172016</a>.</li><li><em>Percona XtraBackup</em> would assume the table has been dropped if the tablespace was renamed after it was scanned by <em>XtraBackup</em> on startup and before <em>XtraBackup</em> attempted to copy it. Bug fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1079700">#1079700</a>.</li><li>Orphaned <code>xtrabackup_pid</code> file left inside tmpdir could cause <a
href="http://www.percona.com/doc/percona-xtradb-cluster/manual/state_snapshot_transfer.html">SST</a> to fail. Fixed by fix checking if <code>xtrabackup_pid</code> file exists once <strong>innobackupex</strong> starts, and try to remove it or fail if it cannot be removed. Bug fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1175860">#1175860</a>.</li><li><a
href="http://www.percona.com/doc/percona-xtrabackup/2.1/xtrabackup_bin/xbk_option_reference.html#cmdoption-xtrabackup--stats">xtrabackup &#8211;stats</a> option would not work with server datadir if the server isn&#8217;t running and logs were in a separate directory. Bug fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1174314">#1174314</a>.</li></ul><p>Other bugs fixed: bug fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1166713">#1166713</a>, bug fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1175581">#1175581</a>, bug fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1175318">#1175318</a>, bug fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1175309">#1175309</a>, bug fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1176198">#1176198</a>, bug fixed <a
href="https://bugs.launchpad.net/percona-xtrabackup/+bug/1175566">#1175566</a>.</p><p>Release notes with all the bugfixes for <em>Percona XtraBackup</em> 2.1.1 are available in our <a
href="http://www.percona.com/doc/percona-xtrabackup/release-notes/2.1/2.1.1.html">online documentation</a>. Bugs can be reported on the <a
href="https://bugs.launchpad.net/percona-xtrabackup/+filebug">launchpad bug tracker</a>.</p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/15/announcing-percona-xtrabackup-2-1-0-ga/">Announcing Percona XtraBackup 2.1.1 GA</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></content:encoded> <wfw:commentRss>http://www.mysqlperformanceblog.com/2013/05/15/announcing-percona-xtrabackup-2-1-0-ga/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Is Synchronous Replication right for your app?</title><link>http://www.mysqlperformanceblog.com/2013/05/14/is-synchronous-replication-right-for-your-app/</link> <comments>http://www.mysqlperformanceblog.com/2013/05/14/is-synchronous-replication-right-for-your-app/#comments</comments> <pubDate>Tue, 14 May 2013 10:00:46 +0000</pubDate> <dc:creator>Jay Janssen</dc:creator> <category><![CDATA[MySQL]]></category> <category><![CDATA[Percona Software]]></category> <category><![CDATA[XtraDB Cluster]]></category> <category><![CDATA[async]]></category> <category><![CDATA[Galera replication]]></category> <category><![CDATA[hotspots]]></category> <category><![CDATA[Jay Janssen]]></category> <category><![CDATA[Percona XtraDB Cluster]]></category> <category><![CDATA[pxc]]></category> <category><![CDATA[Synchronous Replication]]></category> <guid
isPermaLink="false">http://www.mysqlperformanceblog.com/?p=15298</guid> <description><![CDATA[<p>I talk with lot of people who are really interested in Percona XtraDB Cluster (PXC) and mostly they are interested in PXC as a high-availability solution.  But, what they tend not to think too much about is if moving from async to synchronous replication is right for their application or not. Facts about Galera replication [...]</p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/14/is-synchronous-replication-right-for-your-app/">Is Synchronous Replication right for your app?</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></description> <content:encoded><![CDATA[<p>I talk with lot of people who are really interested in <a
href="http://www.percona.com/software/percona-xtradb-cluster" target="_blank">Percona XtraDB Cluster</a> (PXC) and mostly they are interested in PXC as a high-availability solution.  But, what they tend not to think too much about is if moving from async to synchronous replication is right for their application or not.</p><h1>Facts about Galera replication</h1><p>There&#8217;s a lot of different facts about Galera that come into play here, and it isn&#8217;t always obvious how they will affect your database workload.  For example:</p><ul><li>Transaction commit takes approximately the worst packet round trip time (RTT) between any two nodes in your cluster.</li><li>Transaction apply on slave nodes is still asynchronous from client commit (except on the original node where the transaction is committed)</li><li><span
style="line-height: 13px;">Galera prevents writing conflicts to these pending transactions while they are inflight in the form of <a
href="http://www.mysqlperformanceblog.com/2012/11/20/understanding-multi-node-writing-conflict-metrics-in-percona-xtradb-cluster-and-galera/">deadlock errors</a>.  (This is actually a form of <a
href="http://en.wikipedia.org/wiki/Eventual_consistency">Eventual Consistency</a> where the client is forced to correct the problem before it can commit.  It is NOT the typical form of Eventual Consistency, known as asynchronous repair, that most people think of).<br
/> </span></li></ul><h1>Callaghan&#8217;s Law</h1><p>But what does that all actually mean?  Well, at <a
href="http://www.percona.com/live/mysql-conference-2013/">the Percona Live conference</a> a few weeks ago I heard a great maxim that really helps encapsulate a lot of this information and puts it into context with your application workload:</p><blockquote><p><em>[In a Galera cluster] a given row can&#8217;t be modified more than once per RTT</em></p></blockquote><p>This was attributed to <a
href="https://www.percona.com/live/mysql-conference-2013/users/mark-callaghan-0">Mark Callaghan</a> from Facebook by <a
href="http://www.percona.com/live/mysql-conference-2012/users/ayurchen">Alexey Yurchenko</a> from <a
href="http://www.codership.com">Codership</a> at <a
href="http://www.percona.com/live/mysql-conference-2013/sessions/how-understand-galera-replication-0">his conference talk</a>.  Henceforth this will be known as &#8220;Callaghan&#8217;s law&#8221; in Galera circles forever, though Mark didn&#8217;t immediately recall saying it.</p><h2>Applied to a standalone Innodb instance</h2><p>Let&#8217;s break it down a bit.  Our unit of locking in Innodb is a single row (well, the PRIMARY KEY index entry for that row).  This means typically on a single Innodb node we can have all sorts modifications floating around as long as they don&#8217;t touch the same row.  Row locks are held for modifications until the transaction commits and that takes an fsync to the redo log by default, so applying Callaghan&#8217;s law to single-server Innodb, we&#8217;d get:</p><blockquote><p><em>[On a single node Innodb server] a given row can&#8217;t be modified more than the time to fsync</em></p></blockquote><p>You can obviously relax that by simply not fsyncing every transaction (innodb_flush_log_at_trx_commit != 1), or work around it with by fsyncing to memory (Battery or capacitor-backed write cache), etc., but the principle is basically the same.  If we want this transaction to persist after a crash, it has to get to disk.</p><p>This has no effect on standard MySQL replication from this instance, since MySQL replication is asynchronous.</p><h2>What about semi-sync MySQL replication?</h2><p>It&#8217;s actually much worse than Galera.  As I illustrated in a <a
href="http://www.mysqlperformanceblog.com/2012/06/14/comparing-percona-xtradb-cluster-with-semi-sync-replication-cross-wan/">blog post last year</a>, semi-sync must serialize all transactions and wait for them one at a time.  So, Callaghan&#8217;s law applied to semi-sync is:</p><blockquote><p><em>[On a semi-sync replication master] you can&#8217;t commit (at all) more than once per RTT. </em></p></blockquote><h2>Applied to a Galera cluster</h2><p>In the cluster we&#8217;re protecting the data as well, though not by ensuring it goes to disk (though you can do that).  We protect the data by ensuring it gets to every node in the cluster.</p><p>But why every node and not just a quorum?  Well, it turns out transaction ordering really, really matters (really!).  By enforcing replication to all nodes, we can (simultaneously) establish global ordering for the transaction, so by the time the original node gets acknowledgement of the transaction back from all the other nodes, a GTID will also (by design) be established.  We&#8217;ll never end up with non-deterministic ordering of transactions as a result.</p><p>So this brings us back to Callaghan&#8217;s law for Galera.  We must have group communication to replicate and establish global ordering for every transaction, and the expense of doing that for Galera is approximately one RTT between the two nodes in the cluster that are furthest apart (regardless of where the commit comes from!).  The least amount of data we can change in Innodb at a time is a single row, so the most any single row can be modified cluster-wide is once per RTT.</p><h2>What about WAN clusters?</h2><p>Callaghan&#8217;s law applies to WAN clusters as well.  LANs usually have sub-millisecond RTTs.  WANs usually have anywhere from a few ms up to several hundred.  This really will open a large window where rows won&#8217;t be able to be updated more than just a few times a second at best.</p><h2>Some things the rule does not mean on Galera</h2><ul><li><span
style="line-height: 13px;">It does NOT mean you can&#8217;t modify different rows simultaneously.  You can.</span></li><li><span
style="line-height: 13px;">It does NOT mean you can&#8217;t modify data on multiple cluster nodes simultaneously.  You can.</span></li><li>It does NOT set an lower bound on performance, only a upper bound.  The best performance you can expect is modifying a given row once per RTT, it could get slower if apply times start to lag.</li></ul><h1>So what about my application?</h1><p>Think about your workload.  How frequently do you update any given row?  We call rows that are updated heavily &#8220;<strong>hotspots</strong>&#8220;.</p><h2>Examples of hotspots</h2><p><em>Example 1: </em>Your application is an online game and you keep track of global achievement statistics in a single table with a row for each stat; there are just a few hundred rows.  When a player makes an achievement, your application updates this table with a statement like this:</p><pre class="crayon-plain-tag">UPDATE achievements SET count = count + 1 where achievement = 'killed_troll';</pre><p>How many players might accomplish this achievement at the same time?</p><p><em>Example 2: </em>You have users and groups in your application.  These are maintained in separate tables and there also exists a users_groups table to define the relationship between them.  When someone joins a group, you run a transaction that adds the relationship row to users_groups, but also updates groups with some metadata:</p><pre class="crayon-plain-tag">BEGIN;
INSERT INTO users_groups (user_id, group_id) VALUES (100, 1);
UPDATE groups SET last_joined=NOW(), last_user_id=100 WHERE id=1;
COMMIT;</pre><p>How often might multiple users join the same group?</p><h2>Results</h2><p>In both of the above examples you can imagine plenty of concurrent clients attempting to modify the same record at once.  But what will actually happen to the clients who try to update the same row within the same RTT?  This depends on which node in the cluster the writes are coming from:</p><p><em>From the same node:</em> This will behave just like standard Innodb.  The first transaction will acquire the necessary row locks while it commits (which will take the 1 RTT).  The other transactions will lock wait until the lock(s) they need are available.  The application just waits in those cases.</p><p><em>From other nodes:</em> First to commit wins.  The others that try to commit AFTER the first and while the first is still in the local apply queue on their nodes will get a deadlock error.</p><p>So, the best case (which may not be best for your application database throughput) will be more write latency into the cluster.  The worst case is that your transactions won&#8217;t even commit and you have to take some action you normally wouldn&#8217;t have had to do.</p><h2><span
style="font-size: 1.17em;">Workarounds</span></h2><p>If your hotspots were really bad in standalone Innodb, you might consider relaxing the fsync:  set innodb_flush_log_at_trx_commit to something besides 1 and suddenly you can update much faster.  I see this tuning very frequently for &#8220;performance&#8221; reasons when data durability isn&#8217;t as crucial.  This is fine as long as you weigh both options carefully.</p><p>But in Galera you cannot relax synchronous replication.  You can&#8217;t change the law, you can only adapt around it, but how might you do that ?</p><h3>Write to one node</h3><p>If your issue is really the deadlock errors and not so much the waiting, you could simply send all your writes to one node.  This should prevent the deadlock errors, but will not change the lock waiting that your application will need to do for hotspots.</p><h3>wsrep_retry_autocommit</h3><p>If your hotspots are all updates with autocommits, you can rely on <a
href="http://www.percona.com/doc/percona-xtradb-cluster/wsrep-system-index.html#wsrep_retry_autocommit">wsrep_retry_autocommit</a> to auto-retry the transactions for you.  However, each autocommit is retried only the number of times specified by this variable (default is 1 retry).  This means more waiting, and after the limit is exceeded you will still get the deadlock error.</p><p>This is not implemented for full BEGIN &#8230; COMMIT multi-statement transactions since it cannot be assumed that those are not applying application logic in between the statements that is not safe to retry after the database state changes.</p><h3>retry deadlocks</h3><p>Now we start to get into (*gasp*) territory where your application needs to be modified.  Generally if you use Innodb, you should be able to handle deadlock errors in your application.  Raise your hands if your application has that logic (I usually get less than 5 people who do out of 100).</p><p>But, what to do?  Retrying automatically, or giving your end user a chance to retry manually are typical answers.  However, this means more latency waiting for a write to go through, and possibly some poor user experience.</p><h3>batch writes</h3><p>Instead of updating global counters one at a time (from Example 1, above), how about maintaining the counter in memcache or redis and only flushing to the database periodically?</p><pre class="crayon-plain-tag">if( $last_count % 100 == 0 ) {
  $db-&gt;do( "UPDATE achievements SET count = $last_count where achievement = 'killed_troll'";
}</pre><p></p><h3>change your schema</h3><p>In Example 2, above, how above moving the &#8216;joined&#8217; column to the users_groups table so we don&#8217;t need to update the parent group row so often?</p><pre class="crayon-plain-tag">INSERT INTO users_groups (user_id, group_id, joined) VALUES (100, 1, NOW());</pre><p></p><h1>Conclusion</h1><p>Choosing a system to replicate your data to a distributed system requires tradeoffs.  Most of us are used to the tradeoffs we take when deploying conventional stand-alone MySQL Innodb with asynchronous slaves.  We may not think about the tradeoffs, but we&#8217;re making them (anyone obsessively testing slave position to ensure it&#8217;s caught up with the master?).</p><p>Synchronous replication with PXC and Galera is no different in that there are trade-offs, they just aren&#8217;t what we commonly expect.</p><p><em><strong>If Callaghan&#8217;s law is going to cause you trouble and you are not prepared to adapt to work with it, PXC/Galera Synchronous replication is probably not right for you</strong>.</em></p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/14/is-synchronous-replication-right-for-your-app/">Is Synchronous Replication right for your app?</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></content:encoded> <wfw:commentRss>http://www.mysqlperformanceblog.com/2013/05/14/is-synchronous-replication-right-for-your-app/feed/</wfw:commentRss> <slash:comments>17</slash:comments> </item> <item><title>Webinar: MySQL 5.6 Performance Schema</title><link>http://www.mysqlperformanceblog.com/2013/05/13/webinar-mysql-5-6-performance-schema/</link> <comments>http://www.mysqlperformanceblog.com/2013/05/13/webinar-mysql-5-6-performance-schema/#comments</comments> <pubDate>Mon, 13 May 2013 13:40:14 +0000</pubDate> <dc:creator>Peter Zaitsev</dc:creator> <category><![CDATA[MySQL]]></category> <category><![CDATA[MySQL Webinars]]></category> <category><![CDATA[MySQL 5.6]]></category> <category><![CDATA[Performance Schema]]></category> <category><![CDATA[Peter Zaitsev]]></category> <guid
isPermaLink="false">http://www.mysqlperformanceblog.com/?p=15425</guid> <description><![CDATA[<p>This Wednesday, May 15 at 10 a.m. Pacific, I&#8217;ll be leading  a Webinar titled, &#8220;Using MySQL 5.6 Performance Schema to Troubleshoot Typical Workload Bottlenecks.&#8221; In this Webinar I will offer an overview of Performance Schema, focusing on new features that have been added in MySQL 5.6, go over the configuration and spend most time showing [...]</p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/13/webinar-mysql-5-6-performance-schema/">Webinar: MySQL 5.6 Performance Schema</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></description> <content:encoded><![CDATA[<p><a
href="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/02/Percona-MySQL-Webinars.jpg"><img
class="alignleft  wp-image-12964" alt="Using MySQL 5.6 Performance Schema to Troubleshoot Typical Workload Bottlenecks" src="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/02/Percona-MySQL-Webinars.jpg" width="141" height="149" /></a>This Wednesday, May 15 at 10 a.m. Pacific, I&#8217;ll be leading  a Webinar titled, &#8220;<a
href="http://www.percona.com/webinars/using-mysql-56-performance-schema-troubleshoot-typical-workload-bottlenecks" target="_blank">Using MySQL 5.6 Performance Schema to Troubleshoot Typical Workload Bottlenecks.</a>&#8221;</p><p>In this Webinar I will offer an overview of Performance Schema, focusing on new features that have been added in MySQL 5.6, go over the configuration and spend most time showing how you can use the wealth of information Performance Schema gathers to understand some of the typical performance bottlenecks.</p><p>&nbsp;</p><p>Other areas of focus include:</p><ul><li>Bottlenecks with Disk IO</li><li>Problems with excessive temporary tables and external sorts</li><li>Excessive internal mutex contention</li><li>Slow queries due to waits on InnoDB locks and Meta Data locks</li></ul><p>Interested ? <a
href="http://www.percona.com/webinars/using-mysql-56-performance-schema-troubleshoot-typical-workload-bottlenecks">Sign up today! </a></p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/13/webinar-mysql-5-6-performance-schema/">Webinar: MySQL 5.6 Performance Schema</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></content:encoded> <wfw:commentRss>http://www.mysqlperformanceblog.com/2013/05/13/webinar-mysql-5-6-performance-schema/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Open Source, the MySQL market (and TokuDB in particular)</title><link>http://www.mysqlperformanceblog.com/2013/05/10/open-source-the-mysql-market-and-tokudb-in-particular/</link> <comments>http://www.mysqlperformanceblog.com/2013/05/10/open-source-the-mysql-market-and-tokudb-in-particular/#comments</comments> <pubDate>Fri, 10 May 2013 14:31:12 +0000</pubDate> <dc:creator>Vadim Tkachenko</dc:creator> <category><![CDATA[MySQL]]></category> <category><![CDATA[MariaDB]]></category> <category><![CDATA[Open Core]]></category> <category><![CDATA[Open Source]]></category> <category><![CDATA[SkySQL]]></category> <category><![CDATA[TokuDB]]></category> <category><![CDATA[Tokutek]]></category> <category><![CDATA[Vadim Tkachenko]]></category> <guid
isPermaLink="false">http://www.mysqlperformanceblog.com/?p=15184</guid> <description><![CDATA[<p>I was reviewing the Percona Live sponsors list the other day and pondering the potential success stories associated with this product or that one&#8230;. and as I was preparing to put more thought on the topic, a PlanetMySQL post caught my eye. It was penned by Mike Hogan and titled, &#8220;Thoughts on Xeround and Free!&#8221; [...]</p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/10/open-source-the-mysql-market-and-tokudb-in-particular/">Open Source, the MySQL market (and TokuDB in particular)</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></description> <content:encoded><![CDATA[<p><a
href="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/access_key.jpg"><img
class="alignleft  wp-image-15389" style="margin: 9px;" alt="Open Source &amp; the MySQL market" src="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/access_key.jpg" width="208" height="208" /></a>I was reviewing the <a
href="http://www.percona.com/live/mysql-conference-2013/sponsors" target="_blank">Percona Live sponsors</a> list the other day and pondering the potential success stories associated with this product or that one&#8230;. and as I was preparing to put more thought on the topic, a PlanetMySQL post caught my eye. It was penned by Mike Hogan and titled, &#8220;<a
href="http://scaledb.blogspot.com/2013/05/thoughts-on-xeround-and-free.html" target="_blank">Thoughts on Xeround and Free!</a>&#8221;</p><p>For some reason the author of that post makes a connection between a free account in a cloud-based service and Open Source software. I think it&#8217;s an incorrect analogy, as they are two totally different things. A “free account” in this case is really just a marketing tool. Well, I admit there are companies that also use the “Open Source” mark as a marketing tool, too &#8211; we often can see this in products based on Open Core models. But in my opinion Open Core is not Open Source, and the Open Source model is something different.<br
/> <span
id="more-15184"></span></p><p>Now let me state that I am not an Open Source fanatic and I totally accept different models.</p><p>Open Source should be considered as a way of providing additional value to customers of  your product. Namely, if your product is Open Source, you provide the following benefits to your customers:</p><ul><li>No vendor lock-in. And this is significant. Customers often choose products that allow them to avoid being locked in to one product. For example, I believe there is no way a closed-source software product will ever be deployed in a Facebook data center.</li><li>No service provider lock-in. Customers should be able to choose who provides services for your product.</li><li>Independent expertise. Customers like to get trustworthy information that does not come from the vendor of the product.</li><li>A wide user base and community around your product.</li><li>Growing public knowledge: discussions on blogs, forums, social networks.</li></ul><p>Well, of course, some or all of these values are achievable with proprietary products, but for me Open Source is the easiest path to all of them.</p><p>Now, I understand that you as a vendor may not like some of above. I expect that some vendors tend to love “vendor lock-in,” and it also helps your bottom line if you are the one and only service provider for a given product. But the question here is: Do you care more about your customers &#8211; or do you and your investors come first?</p><p>And it is fine (it really is) with me if you decide to take the proprietary license path, but in that case you should expect that users will choose an alternative Open Source solution, even if this solution is less functional and somewhat lower quality. And this choice is not because it is “free” as in “a free cloud database account,” rather it&#8217;s because it is “free” as in proving the freedom to choose vendors, service providers, expertise, etc.</p><p>TokuDB is a good example. Even with a great technology, before becoming Open Source they had “no fewer than 12 customers” <em>(source: <a
href="http://www.forbes.com/sites/petercohan/2012/10/02/tokutek-makes-big-data-dance/" target="_blank">Forbes</a>)</em>. And I name that “struggling.” I think it was the same for Schooner and Kickfire, two companies that based their products on a closed-source version of MySQL&#8230; and you know their fate &#8211; sold for assets with a loss for investors as their products did not reach a sustainable number of customers.</p><p>As for TokuDB: after its Open Source announcement, as anecdotal evidence, their website got so much traffic all at once that it went down, and within two weeks they have had more interest from the community than during all previous years. I expect that TokuDB will see a tenfold increase in users during the next year.</p><p>However, becoming Open Source, by itself, is by no means enough to have a successful business. There are two examples: First, the PBXT storage engine from PrimeBase &#8211; even with an open source engine, the company eventually could not fund further development, and this engine is pretty much dead today. Second is a recent example from the Monty Program &#8211; they have the Open Source product MariaDB with raising popularity. But as a business they failed to attract paying customers and had to merge with SkySQL.  I name that a business failure <em>(even though it is widely publicized as a “success” by their marketing teams)</em> &#8211; it is quite hidden among all buzz, but you can find some grains of truth in the article &#8220;<a
href="http://www.itworld.com/software/350928/dead-database-walking-mysqls-creator-why-future-belongs-mariadb" target="_blank">Dead database walking: MySQL&#8217;s creator on why the future belongs to MariaDB.</a>&#8221; To quote that article: &#8220;In principle, anyone who has an interest in MySQL and MariaDB surviving should contact the MariaDB foundation and ask about sponsoring it &#8230; We have some big sponsors already, but not as many as we originally hoped for .. One problem we had was that we needed to prove that MariaDB is &#8216;good enough&#8217; to be able to attract paying customers &#8230;.&#8221;</p><p>So in addition to an Open Source product, you also need a business model that works. And be sure: the Open Source game is a marathon, it is not a sprint. Be ready for at least a 5-year run to gain user confidence <em>(this is a hint for Tokutek)</em>.</p><p>To summarize my thoughts: If you are in the MySQL market and your product is under proprietary license <em>(not an Open Source one)</em> you set the bar to success high and you will have a harder time attracting customers, because customers prefer Open Source alternatives. This is not because everybody likes “free beer,” but because customers like freedom of choice.</p><p>Everything here is my personal position, but I welcome your comments.</p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/10/open-source-the-mysql-market-and-tokudb-in-particular/">Open Source, the MySQL market (and TokuDB in particular)</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></content:encoded> <wfw:commentRss>http://www.mysqlperformanceblog.com/2013/05/10/open-source-the-mysql-market-and-tokudb-in-particular/feed/</wfw:commentRss> <slash:comments>12</slash:comments> </item> <item><title>How to create a new (or repair a broken) GTID based slave with Percona XtraBackup</title><link>http://www.mysqlperformanceblog.com/2013/05/09/how-to-create-a-new-or-repair-a-broken-gtid-based-slave-with-percona-xtrabackup/</link> <comments>http://www.mysqlperformanceblog.com/2013/05/09/how-to-create-a-new-or-repair-a-broken-gtid-based-slave-with-percona-xtrabackup/#comments</comments> <pubDate>Thu, 09 May 2013 10:00:25 +0000</pubDate> <dc:creator>Miguel Angel Nieto</dc:creator> <category><![CDATA[Insight for DBAs]]></category> <category><![CDATA[MySQL]]></category> <category><![CDATA[Percona XtraBackup]]></category> <category><![CDATA[GTID-based slave]]></category> <guid
isPermaLink="false">http://www.mysqlperformanceblog.com/?p=15242</guid> <description><![CDATA[<p>Percona XtraBackup 2.0.7 has been published with support for GTID based replication. As promised, here is the step-by-step guide on how to create a new GTID based slave (or repair a broken one) using XtraBackup. The process is pretty straightforward. 1- Take a backup from any server on the replication environment, master or slave: [crayon-519a15e178a38/] [...]</p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/09/how-to-create-a-new-or-repair-a-broken-gtid-based-slave-with-percona-xtrabackup/">How to create a new (or repair a broken) GTID based slave with Percona XtraBackup</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></description> <content:encoded><![CDATA[<p><a
title="XtraBackup 2.0.7" href="http://www.mysqlperformanceblog.com/2013/05/06/percona-xtrabackup-2-0-7-for-mysql-available-for-download/">Percona XtraBackup 2.0.7 has been published</a> with support for GTID based replication. <a
title="How to create or restore a slave using GTID replication" href="http://www.mysqlperformanceblog.com/2013/02/08/how-to-createrestore-a-slave-using-gtid-replication-in-mysql-5-6/">As promised</a>, here is the step-by-step guide on how to create a new GTID based slave (or repair a broken one) using XtraBackup. The process is pretty straightforward.</p><p><b>1- Take a backup from any server on the replication environment, master or slave:</b></p><pre class="crayon-plain-tag"># innobackupex /destination/</pre><p>In the destination folder there will be a file with the name xtrabackup_binlog_info:</p><pre class="crayon-plain-tag"># cat xtrabackup_binlog_info
mysql-bin.000002	1232		c777888a-b6df-11e2-a604-080027635ef5:1-4</pre><p>Now it contains both, binary log coordinates and GTID information.</p><p>That information is also printed by innobackupex after backup is taken:</p><pre class="crayon-plain-tag">innobackupex: MySQL binlog position: filename 'mysql-bin.000002', position 1232, gtid_executed c777888a-b6df-11e2-a604-080027635ef5:1-4</pre><p><b>2- Apply the logs to the backup:</b></p><pre class="crayon-plain-tag"># innobackupex --apply-log /destination/2013-05-07_08-33-33/</pre><p><b>3- Move the backup to the destination server and put the content on the mysql&#8217;s datadir.</b> Follow the usual restore procedure, for example remember to change the permissions to mysql:mysql.</p><p><b>4- Start the new slave from that GTID position:</b></p><pre class="crayon-plain-tag">slave1 &gt; SET GLOBAL gtid_purged="c777888a-b6df-11e2-a604-080027635ef5:1-4";
slave1 &gt; CHANGE MASTER TO MASTER_HOST="10.0.1.1", master_user="msandbox", master_password="msandbox", MASTER_AUTO_POSITION = 1;</pre><p><b>5- Check the replication status:</b></p><pre class="crayon-plain-tag">slave1 &gt; show slave status\G
[...]
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
[...]
           Retrieved_Gtid_Set: c777888a-b6df-11e2-a604-080027635ef5:5
            Executed_Gtid_Set: c777888a-b6df-11e2-a604-080027635ef5:1-5</pre><p>We can see that the slave has retrieved a new transaction with number 5, so transactions from 1 to 5 are already on this slave.</p><p>That&#8217;s all, we have created a new slave in our GTID based replication environment.</p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/09/how-to-create-a-new-or-repair-a-broken-gtid-based-slave-with-percona-xtrabackup/">How to create a new (or repair a broken) GTID based slave with Percona XtraBackup</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></content:encoded> <wfw:commentRss>http://www.mysqlperformanceblog.com/2013/05/09/how-to-create-a-new-or-repair-a-broken-gtid-based-slave-with-percona-xtrabackup/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>MySQL and Percona Server in LinkBench benchmark</title><link>http://www.mysqlperformanceblog.com/2013/05/08/mysql-and-percona-server-in-linkbench-benchmark/</link> <comments>http://www.mysqlperformanceblog.com/2013/05/08/mysql-and-percona-server-in-linkbench-benchmark/#comments</comments> <pubDate>Wed, 08 May 2013 13:48:50 +0000</pubDate> <dc:creator>Alexey Stroganov</dc:creator> <category><![CDATA[Benchmarks]]></category> <category><![CDATA[MySQL]]></category> <category><![CDATA[Percona Server]]></category> <category><![CDATA[facebook]]></category> <category><![CDATA[Linkbench]]></category> <category><![CDATA[LinkBench benchmark]]></category> <guid
isPermaLink="false">http://www.mysqlperformanceblog.com/?p=15128</guid> <description><![CDATA[<p>Around month ago Facebook has announced the Linkbench benchmark that models the social graph OLTP workload. Sources, along with a very nice description of how to setup and run this benchmark, can be found here. We decided to run this benchmark for MySQL Server 5.5.30, 5.6.11 and Percona Server 5.5.30 and check how these servers [...]</p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/08/mysql-and-percona-server-in-linkbench-benchmark/">MySQL and Percona Server in LinkBench benchmark</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></description> <content:encoded><![CDATA[<p>Around month ago Facebook has announced the <a
title="linkbench" href="https://www.facebook.com/notes/facebook-engineering/linkbench-a-database-benchmark-for-the-social-graph/10151391496443920">Linkbench</a> benchmark that models the social graph OLTP workload. Sources, along with a very nice description of how to setup and run this benchmark, can be found <a
href="https://github.com/facebook/linkbench">here</a>. We decided to run this benchmark for MySQL Server 5.5.30, 5.6.11 and Percona Server 5.5.30 and check how these servers will handle such OLTP workloads in the CPU and IO-bound cases. For this test we used a <a
href="http://www.percona.com/docs/wiki/benchmark:hardware:dell_poweredge_r720">PowerEdge R720 box</a> with a fast PCI-e flash card as storage.</p><p>By default linkbench dataset has 10M ids(after load of data size of datadir ~10GB). We used this dataset to check server behavior when data fully fits buffer pool(size of buffer pool is 30GB). So basically this is a CPU-bound case.</p><p><a
href="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/linkbench.1x.v3.png"><img
class="alignnone size-full wp-image-15147" alt="linkbench.1x.v3" src="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/linkbench.1x.v3.png" width="614" height="420" /></a></p><p>As you can see there is a very slight difference between servers at 64 threads but a much more notable drop for 5.6.11 at 128 threads.</p><p>Then we loaded 10x dataset &#8211; 100M ids (size of datadir ~100GB), size of the buffer pool is the same &#8211; 30GB. So now we explore the IO-bound scenario.</p><p><a
href="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/linkbench.10x.v3.png"><img
class="alignnone size-full wp-image-15148" alt="linkbench.10x.v3" src="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/linkbench.10x.v3.png" width="614" height="420" /></a></p><p>Percona Server 5.5 outperforms MySQL in about <strong>2x times</strong>.<br
/> Both MySQL 5.5.30 and MySQL 5.6.11 demonstrate notable drops in performance. What can be the reason for that?<br
/> Below is a chart with top mutexes for each server at 64 threads:</p><p><a
href="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/linkbench.10x.mutexes2.png"><img
class="alignnone size-full wp-image-15138" alt="linkbench.10x.mutexes" src="http://www.mysqlperformanceblog.com/wp-content/uploads/2013/05/linkbench.10x.mutexes2.png" width="729" height="179" /></a></p><p>For MySQL 5.5.30 top mutex is &amp;doublewrite-&gt;mutex: trx0sys.c:196. And most likely this symptom is related to <a
href="http://bugs.mysql.com/bug.php?id=67808">BUG#67808</a>.</p><p>For MySQL 5.6.11 top mutexes is &amp;buf_pool-&gt;mutex,&amp;new_index-&gt;lock. I profiled 5.6.11 in this IO bound scenario with the perf &#8211; see profile below:</p><pre class="crayon-plain-tag"># Overhead  Samples    Command        Shared Object
# ........ ..........  .......  ...................  ..................................................................................................................................
#
    35.85%   17738833   mysqld  mysqld               [.] buf_LRU_free_block(buf_page_t*, unsigned long)
             |
             --- buf_LRU_free_block(buf_page_t*, unsigned long)
                |
                |--99.94%-- buf_LRU_scan_and_free_block(buf_pool_t*, unsigned long)
                |          buf_LRU_get_free_block(buf_pool_t*)
                |          |
                |          |--94.84%-- buf_page_init_for_read(dberr_t*, unsigned long, unsigned long, unsigned long, unsigned long, long, unsigned long)
...
    31.41%   15534570   mysqld  mysqld               [.] rw_lock_x_lock_func(rw_lock_t*, unsigned long, char const*, unsigned long)
             |
             --- rw_lock_x_lock_func(rw_lock_t*, unsigned long, char const*, unsigned long)
                |
                |--99.14%-- buf_LRU_free_block(buf_page_t*, unsigned long)
                |          |
                |          |--100.00%-- buf_LRU_scan_and_free_block(buf_pool_t*, unsigned long)
                |          |          buf_LRU_get_free_block(buf_pool_t*)
     2.53%    1338484   mysqld  mysqld               [.] ut_delay(unsigned long)</pre><p>So basically most of the time 5.6.11 spent in LRU_scan. I tried to increase innodb_lru_scan_depth variable to 8k,16k,32k but that had no notably impact on result. In the best possible combination I got ~15k operations per second for MySQL 5.6.11.</p><p><strong>Conclusion</strong>:</p><p>In CPU-bounds case MySQL performs quite well, though we can see small performance drop in MySQL 5.6.<br
/> In IO-bound cases MySQL still has performance issues around mutexes and Percona Server shows much better results</p><p>Configurations and how to run benchmark:<br
/> <code><br
/> [mysqld]<br
/> user=root<br
/> port=3306</code></p><p>innodb_buffer_pool_size = 30G<br
/> innodb_flush_method = O_DIRECT<br
/> innodb_log_file_size = 2000M<br
/> innodb_log_files_in_group = 2<br
/> innodb_flush_log_at_trx_commit = 1<br
/> innodb_log_buffer_size=128M<br
/> innodb_max_dirty_pages_pct=80<br
/> innodb_file_format=barracuda<br
/> innodb_file_per_table<br
/> innodb_read_io_threads = 8<br
/> innodb_write_io_threads = 8<br
/> innodb_io_capacity = 5000</p><p>sync_binlog=0<br
/> max_connections=5000<br
/> table_open_cache=5000<br
/> table-definition-cache=1000<br
/> query_cache_size=0<br
/> query_cache_type=0<br
/> performance_schema=0</p><p>#56only<br
/> loose-innodb_flush_neighbors=0<br
/> loose-metadata_locks_hash_instances=256<br
/> innodb_buffer_pool_instances=16 # MySQL 5.5 and 5.6<br
/> loose-innodb_io_capacity_max = 15000</p><p><code>#Percona only<br
/> innodb_adaptive_hash_index_partitions=8<br
/> innodb_buffer_pool_instances=1<br
/> innodb_adaptive_flushing_method=keep_average<br
/> innodb_flush_neighbor_pages=none<br
/> </code></p><pre class="crayon-plain-tag">command line to load 10x dataset:
./bin/linkbench -D dbid=linkdb -D host=127.0.0.1 -D user=root -D port=3306 -D password= -D maxid1=100000001 -c config/MyConfig.properties -l
command line to run test for 10x dataset:
./bin/linkbench  -D requesters=64 -D dbid=linkdb -D host=127.0.0.1 -D user=root -D port=3306 -D password= -D maxid1=100000001 -c config/MyConfig.properties -csvstats final-stats.csv -csvstream streaming-stats.csv -D requests=5000000 -D maxtime=1800 -r</pre><p></p><p>The post <a
href="http://www.mysqlperformanceblog.com/2013/05/08/mysql-and-percona-server-in-linkbench-benchmark/">MySQL and Percona Server in LinkBench benchmark</a> appeared first on <a
href="http://www.mysqlperformanceblog.com">MySQL Performance Blog</a>.</p>]]></content:encoded> <wfw:commentRss>http://www.mysqlperformanceblog.com/2013/05/08/mysql-and-percona-server-in-linkbench-benchmark/feed/</wfw:commentRss> <slash:comments>17</slash:comments> </item> </channel> </rss>