<?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 &#187; production</title>
	<atom:link href="http://www.mysqlperformanceblog.com/category/production/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mysqlperformanceblog.com</link>
	<description>Everything about MySQL Performance</description>
	<lastBuildDate>Sat, 21 Nov 2009 03:11:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Btw xtrabackup is not only backup..</title>
		<link>http://www.mysqlperformanceblog.com/2009/05/07/btw-xtrabackup-is-not-only-backup/</link>
		<comments>http://www.mysqlperformanceblog.com/2009/05/07/btw-xtrabackup-is-not-only-backup/#comments</comments>
		<pubDate>Fri, 08 May 2009 02:09:33 +0000</pubDate>
		<dc:creator>Vadim</dc:creator>
				<category><![CDATA[production]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=681</guid>
		<description><![CDATA[It is obvious thing for me, but I just figured out it may be not common understanding. Xtrabackup is also can be used  (not only can, but we actually use it this way) to clone one slave to another, or just setup new slave from the master. And it is done in almost non-blocking [...]]]></description>
			<content:encoded><![CDATA[<p>It is obvious thing for me, but I just figured out it may be not common understanding. Xtrabackup is also can be used  (not only can, but we actually use it this way) to clone one slave to another, or just setup new slave from the master. And it is done in almost non-blocking way ( true for InnoDB setups) for cloned server. Here is command</p>
<div class="igBar"><span id="lcode-3"><a href="#" onclick="javascript:showPlainTxt('code-3'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-3">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">innobackupex-<span style="color:#800000;color:#800000;">1</span>.<span style="color:#800000;color:#800000;">5</span>.<span style="color:#800000;color:#800000;">1</span> --stream=tar /tmp/ --slave-info | ssh user@DESTSERVER <span style="color:#CC0000;">"tar xfi - -C /DESTDIR"</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>When it finished on destination server you run</p>
<div class="igBar"><span id="lcode-4"><a href="#" onclick="javascript:showPlainTxt('code-4'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-4">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">innobackupex-<span style="color:#800000;color:#800000;">1</span>.<span style="color:#800000;color:#800000;">5</span>.<span style="color:#800000;color:#800000;">1</span> --apply-log --use-memory=2G&nbsp; /DESTDIR </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>And you have ready database directory, just copy my.cnf from original server and start mysqld.</p>
    <hr noshade style="margin:0;height:1px" />
    <p>Entry posted by Vadim |
      <a href="http://www.mysqlperformanceblog.com/2009/05/07/btw-xtrabackup-is-not-only-backup/#comments">3 comments</a></p>
    <p>Add to: <a href="http://del.icio.us/post?url=http://www.mysqlperformanceblog.com/2009/05/07/btw-xtrabackup-is-not-only-backup/&amp;title=Btw xtrabackup is not only backup.." title="Bookmark this post on del.icio.us"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/delicious.png" alt="delicious" /></a> | <a href="http://digg.com/submit?phase=2&amp;url=http://www.mysqlperformanceblog.com/2009/05/07/btw-xtrabackup-is-not-only-backup/&amp;title=Btw xtrabackup is not only backup.." title="Digg this post on Digg.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/digg.png" alt="digg" /></a> | <a href="http://reddit.com/submit?url=http://www.mysqlperformanceblog.com/2009/05/07/btw-xtrabackup-is-not-only-backup/&amp;title=Btw xtrabackup is not only backup.." title="Submit this post on reddit.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/reddit.png" alt="reddit" /></a> | <a href="http://www.netscape.com/submit/?U=http://www.mysqlperformanceblog.com/2009/05/07/btw-xtrabackup-is-not-only-backup/&amp;T=Btw xtrabackup is not only backup.." title="Vote for this article on Netscape"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/netscape.gif" alt="netscape" /></a> | <a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.mysqlperformanceblog.com/2009/05/07/btw-xtrabackup-is-not-only-backup/&amp;title=Btw xtrabackup is not only backup.." title="Add to Google Bookmarks"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/google.png" alt="Google Bookmarks" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.mysqlperformanceblog.com/2009/05/07/btw-xtrabackup-is-not-only-backup/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Compression for InnoDB backup</title>
		<link>http://www.mysqlperformanceblog.com/2009/03/16/compression-for-innodb-backup/</link>
		<comments>http://www.mysqlperformanceblog.com/2009/03/16/compression-for-innodb-backup/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 22:34:26 +0000</pubDate>
		<dc:creator>Vadim</dc:creator>
				<category><![CDATA[benchmarks]]></category>
		<category><![CDATA[production]]></category>

		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=643</guid>
		<description><![CDATA[Playing with last version of xtrabackup and compress it I noticed that gzip is unacceptable slow for both compression and decompression operations. Actually Peter wrote about it some time ago, but I wanted to review that data having some new information. In current multi-core word the compression utility should utilize several CPU to speedup operation, [...]]]></description>
			<content:encoded><![CDATA[<p>Playing with last version of <a href="http://www.mysqlperformanceblog.com/2009/03/13/xtrabackup-03-binaries-and-stream-backup/">xtrabackup </a>and compress it I noticed that gzip is unacceptable slow for both compression and decompression operations. Actually <a href="http://www.mysqlperformanceblog.com/2008/06/05/how-would-you-compress-your-mysql-backup/">Peter wrote about</a> it some time ago, but I wanted to review that data having some new information. In current multi-core word the compression utility should utilize several CPU to speedup operation, and another my requirement was the ability to work with <strong>stdin </strong>/ <strong>stdout</strong>, so I could do  scripting something like: innobackupex --stream | compressor  | network_copy.</p>
<p>My research gave me next list: <a href="http://www.zlib.net/pigz/">pigz (parallel gzip)</a>,  <a href="http://compression.ca/pbzip2/">pbzip2 (parallel bzip2)</a>, <a href="http://www.quicklz.com/">qpress ( command line utility for QuickLZ)</a> and I wanted to try LZO (as lzop 1.03 command line + LZO 2 libraries). Actually lzop does not support parallel operations, but it is know to have good decompression speed even with 1 thread. <strong>UPDATE 17-Mar-2009</strong>: I added lzma results also by request from comments.</p>
<p>For compression test I took ~12GB of InnoDB data files generated by tpcc benchmark with 100 warehouses.</p>
<p>I tested 1, 2, 4 parallel threads for tools that support it and different level of compression ( 1,2,3 for qpress;  -1 and -5 for other tools)</p>
<p>The raw results are available here <a href="http://spreadsheets.google.com/ccc?key=pOIo5aX59b6biPZ0QTVMXHg&#038;hl=en">http://spreadsheets.google.com/ccc?key=pOIo5aX59b6biPZ0QTVMXHg&#038;hl=en</a>, and I copy table in place in case if Google stops to work.</p>
<table border=0 cellpadding=0 cellspacing=0 id='tblMain'>
<tr>
<td>
<table border=1 cellpadding=0 cellspacing=0 class='tblGenFixed' id='tblMain_0'>
<tr class='rShim'>
<td class='rShim' style='width:0;'>
<td class='rShim' style='width:120px;'>
<td class='rShim' style='width:120px;'>
<td class='rShim' style='width:120px;'>
<td class='rShim' style='width:120px;'>
<td class='rShim' style='width:120px;'>
<td class='rShim' style='width:120px;'>
<td class='rShim' style='width:120px;'>
<td class='rShim' style='width:120px;'>
<td class='rShim' style='width:120px;'>
<tr>
<td  class='s0'>
<td  class='s1'>threads
<td  class='s1'>level
<td  class='s1'>compressed size
<td  class='s1'>compress ratio
<td  class='s1'>comression time, sec
<td  class='s1'>compr speed, MB/s
<td  class='s1'>decomp time, sec
<td  class='s1'>decomp speed, MB/s</tr>
<tr>
<td  class='s2'>qpress
<td  class='s3'>1
<td  class='s3'>1
<td  class='s4'>6,058.93
<td  class='s5'>0.52
<td  class='s3'>109
<td  class='s4'>55.59
<td  class='s3'>92
<td  class='s4'>65.86</tr>
<tr>
<td  class='s6'>
<td  class='s3'>1
<td  class='s3'>2
<td  class='s4'>5,892.62
<td  class='s5'>0.51
<td  class='s3'>201
<td  class='s4'>29.32
<td  class='s3'>123
<td  class='s4'>47.91</tr>
<tr>
<td  class='s6'>
<td  class='s3'>1
<td  class='s3'>3
<td  class='s4'>5,885.01
<td  class='s5'>0.51</p>
<td  class='s3'>473
<td  class='s4'>12.44
<td  class='s3'>84
<td  class='s4'>70.06</tr>
<tr>
<td  class='s6'>
<td  class='s3'>2
<td  class='s3'>1
<td  class='s4'>6,058.93
<td  class='s5'>0.52
<td  class='s3'>65
<td  class='s4'>93.21
<td  class='s3'>66
<td  class='s4'>91.80</tr>
<tr>
<td  class='s6'>
<td  class='s3'>2
<td  class='s3'>2
<td  class='s4'>5,892.62
<td  class='s5'>0.51</p>
<td  class='s3'>110
<td  class='s4'>53.57
<td  class='s3'>112
<td  class='s4'>52.61</tr>
<tr>
<td  class='s6'>
<td  class='s3'>2
<td  class='s3'>3
<td  class='s4'>5,885.01
<td  class='s5'>0.51</p>
<td  class='s3'>245
<td  class='s4'>24.02
<td  class='s3'>84
<td  class='s4'>70.06</tr>
<tr>
<td  class='s6'>
<td  class='s3'>4
<td  class='s3'>1
<td  class='s4'>6,058.93
<td  class='s5'>0.52
<td  class='s3'>48
<td  class='s7'><strong>126.23</strong>
<td  class='s3'>66
<td  class='s7'><strong>91.80</strong></tr>
<tr>
<td  class='s6'>
<td  class='s3'>4
<td  class='s3'>2
<td  class='s4'>5,892.62
<td  class='s5'>0.51
<td  class='s3'>64
<td  class='s4'>92.07
<td  class='s3'>68
<td  class='s4'>86.66</tr>
<tr>
<td  class='s6'>
<td  class='s3'>4
<td  class='s3'>3
<td  class='s4'>5,885.01
<td  class='s5'>0.51
<td  class='s3'>130
<td  class='s4'>45.27
<td  class='s3'>65
<td  class='s4'>90.54</tr>
<tr>
<td  class='s2'>pigz
<td  class='s3'>1
<td  class='s3'>1
<td  class='s4'>4,839.97
<td  class='s5'>0.42
<td  class='s3'>438
<td  class='s4'>11.05
<td  class='s3'>129
<td  class='s4'>37.52</tr>
<tr>
<td  class='s6'>
<td  class='s3'>1
<td  class='s3'>5
<td  class='s4'>3,460.31
<td  class='s5'>0.30
<td  class='s3'>763
<td  class='s4'>4.54
<td  class='s3'>121
<td  class='s4'>28.60</tr>
<tr>
<td  class='s6'>
<td  class='s3'>2
<td  class='s3'>1
<td  class='s4'>4,839.97
<td  class='s5'>0.42
<td  class='s3'>213
<td  class='s4'>22.72
<td  class='s3'>109
<td  class='s4'>44.40</tr>
<tr>
<td  class='s6'>
<td  class='s3'>2
<td  class='s3'>5
<td  class='s4'>3,460.31
<td  class='s5'><strong>0.30</strong>
<td  class='s3'>379
<td  class='s4'>9.13
<td  class='s3'>104
<td  class='s4'>33.27</tr>
<tr>
<td  class='s6'>
<td  class='s3'>4
<td  class='s3'>1
<td  class='s4'>4,839.97
<td  class='s5'>0.42
<td  class='s3'>107
<td  class='s4'>45.23
<td  class='s3'>112
<td  class='s4'>43.21</tr>
<tr>
<td  class='s6'>
<td  class='s3'>4
<td  class='s3'>5
<td  class='s4'>3,460.31
<td  class='s5'>0.30
<td  class='s3'>190
<td  class='s4'>18.21
<td  class='s3'>103
<td  class='s4'>33.60</tr>
<tr>
<td  class='s2'>LZOP
<td  class='s3'>1
<td  class='s3'>1
<td  class='s4'>5,831.25
<td  class='s5'>0.50
<td  class='s3'>184
<td  class='s4'>31.69
<td  class='s3'>83
<td  class='s4'>70.26</tr>
<tr>
<td  class='s6'>
<td  class='s3'>1
<td  class='s3'>5
<td  class='s4'>5,850.16
<td  class='s5'>0.50
<td  class='s3'>179
<td  class='s4'>32.68
<td  class='s3'>87
<td  class='s4'>67.24</tr>
<tr>
<td  class='s2'>pbzip2
<td  class='s3'>1
<td  class='s3'>1
<td  class='s8'>4,154.41
<td  class='s9'><strong>0.36</strong>
<td  class='s3'>1594
<td  class='s4'>2.61
<td  class='s3'>597
<td  class='s4'>6.96</tr>
<tr>
<td  class='s6'>
<td  class='s3'>1
<td  class='s3'>5
<td  class='s8'>4,007.07
<td  class='s5'>0.34
<td  class='s3'>1702
<td  class='s4'>2.35
<td  class='s3'>644
<td  class='s4'>6.22</tr>
<tr>
<td  class='s6'>
<td  class='s3'>2
<td  class='s3'>1
<td  class='s8'>4,154.41
<td  class='s5'>0.36
<td  class='s3'>800
<td  class='s4'>5.19
<td  class='s3'>605
<td  class='s4'>6.87</tr>
<tr>
<td  class='s6'>
<td  class='s3'>2
<td  class='s3'>5
<td  class='s8'>4,007.07
<td  class='s5'>0.34
<td  class='s3'>844
<td  class='s4'>4.75
<td  class='s3'>648
<td  class='s4'>6.18</tr>
<tr>
<td  class='s6'>
<td  class='s3'>4
<td  class='s3'>1
<td  class='s8'>4,154.41
<td  class='s5'>0.36
<td  class='s3'>399
<td  class='s4'>10.41
<td  class='s3'>602
<td  class='s4'>6.90</tr>
<tr>
<td  class='s6'>
<td  class='s3'>4
<td  class='s3'>5
<td  class='s8'>4,007.07
<td  class='s5'>0.34
<td  class='s3'>421
<td  class='s4'>9.52
<td  class='s3'>645
<td  class='s4'>6.21</tr>
<tr>
<td  class='s2'>LZMA
<td  class='s3'>1
<td  class='s3'>1
<td  class='s4'>3,623.66
<td  class='s5'>0.31
<td  class='s3'>1454
<td  class='s4'>2.49
<td  class='s3'>501
<td  class='s4'>7.23</tr>
<tr>
<td  class='s6'>
<td  class='s3'>1
<td  class='s3'>5
<td  class='s4'>NA
<td  class='s5'>NA
<td  class='s3'>not done in 2h
<td  class='s4'>NA
<td  class='s3'>NA
<td  class='s4'>NA</tr>
</table>
</table>
<p>To summarize results:</p>
<ul>
<li>pbzip2 obviously show good compression, but the speed of processing is too slow. What is interesting on Level 5 the compression is worse than in pigz Level 5</li>
<li>pigz is good for compression and faster than pbzip2 but still not so fast; however multi-threaded processing may be OK, especially if you need to keep compatibility, e.g. copy result on boxes where only standard gzip available</li>
<li>qpress is not so good in compression ration, but speed is impressive, and maybe we will ship xtrabackup with this compression</li>
<li>LZO is even faster in decompression than qpress, but I would like to see parallel version. There is <a href="http://lemley.net/lzop_patches/lzop.html">the patch</a> for it, but it did not apply clean to lzop 1.02, so I skipped it</li>
<li>In my opinion in all cases Level 1 of compression shows better tradeoff between size of archive and compression/decompression time</li>
</ul>
<p>There is no obvious winner, it depends on what is more important for you - size or time, but having this data we can make decision.</p>
    <hr noshade style="margin:0;height:1px" />
    <p>Entry posted by Vadim |
      <a href="http://www.mysqlperformanceblog.com/2009/03/16/compression-for-innodb-backup/#comments">18 comments</a></p>
    <p>Add to: <a href="http://del.icio.us/post?url=http://www.mysqlperformanceblog.com/2009/03/16/compression-for-innodb-backup/&amp;title=Compression for InnoDB backup" title="Bookmark this post on del.icio.us"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/delicious.png" alt="delicious" /></a> | <a href="http://digg.com/submit?phase=2&amp;url=http://www.mysqlperformanceblog.com/2009/03/16/compression-for-innodb-backup/&amp;title=Compression for InnoDB backup" title="Digg this post on Digg.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/digg.png" alt="digg" /></a> | <a href="http://reddit.com/submit?url=http://www.mysqlperformanceblog.com/2009/03/16/compression-for-innodb-backup/&amp;title=Compression for InnoDB backup" title="Submit this post on reddit.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/reddit.png" alt="reddit" /></a> | <a href="http://www.netscape.com/submit/?U=http://www.mysqlperformanceblog.com/2009/03/16/compression-for-innodb-backup/&amp;T=Compression for InnoDB backup" title="Vote for this article on Netscape"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/netscape.gif" alt="netscape" /></a> | <a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.mysqlperformanceblog.com/2009/03/16/compression-for-innodb-backup/&amp;title=Compression for InnoDB backup" title="Add to Google Bookmarks"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/google.png" alt="Google Bookmarks" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.mysqlperformanceblog.com/2009/03/16/compression-for-innodb-backup/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>When would you use SAN with MySQL ?</title>
		<link>http://www.mysqlperformanceblog.com/2009/03/09/when-would-you-use-san-with-mysql/</link>
		<comments>http://www.mysqlperformanceblog.com/2009/03/09/when-would-you-use-san-with-mysql/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 22:49:17 +0000</pubDate>
		<dc:creator>peter</dc:creator>
				<category><![CDATA[production]]></category>

		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=640</guid>
		<description><![CDATA[One question which comes up very often is when one should use SAN with MySQL, which is especially popular among people got used to Oracle or other Enterprise database systems which are quite commonly deployed on SAN. 
My question in such case is always  what exactly are you trying to get by using SAN [...]]]></description>
			<content:encoded><![CDATA[<p>One question which comes up very often is when one should use SAN with MySQL, which is especially popular among people got used to Oracle or other Enterprise database systems which are quite commonly deployed on SAN. </p>
<p>My question in such case is always  what exactly are you trying to get by using SAN ? </p>
<p>Depending on the goals the advice could be a lot different.</p>
<p><strong>Manageability</strong>   SAN allows you to manage storage easily, compared to directly attach storage. If you have  one box which starts to require more IO you can have more resources allocated to it.  This is pattern which is somewhat typical for  Enterprise managing a lot of relatively small MySQL installations or managed hosting provider.  For large MySQL web MySQL installations using Sharding or replication IO needs are typically rather predictable.  There are also often nice monitoring tools available to see disk utilization latencies queues etc.     There is however also a downside compared to directly attached storage in terms of performance management - the SAN is shared resource (has more or less shared parts) so it is possible one application to impact other which means you can't always analyze the local system performance independently from anything else. </p>
<p><strong>Performance</strong>  This is perhaps the most interesting one. I constantly see SANs sold as magic equipment which magically going to solve all performance problems, with magically means nobody knows how exactly.  I would suggest always to question yourself where do you expect these performance gains to come from  ?   If we're speaking about purely disk based SAN (no Flash) the drives are same drives you will see in directly attached storage and each can do only so many IO requests per second.  True the SAN can have much more hard drives than directly attached storage but usually also at much higher prices per drive.   The next possible advantage is software - can SAN have some very smart software instead of simple RAID you use with directly attach storage which can magically improve performance ?  There are cases when it can but you surely can ask this question. For example if you share same physical drives among applications which have different peak usage patterns or something similar there can be an advantage.  The question is again if it is high enough to pay for the price premium ?    The third one is caching.   SAN can have a lot of cache  though servers can typically have more. If you can afford SAN you should afford 128GB of memory or so on the server too which will make read caching more efficient in its memory while write buffering can too be done by MySQL and local RAID (with BBU) quite efficiently.   It is worth to say  there is a benefit of read caching on SAN - if you have MySQL/server restart you may have warmup being quite shorter than in case of local storage.</p>
<p>It is also worth to note SAN does not only have advantages compared to directly attached storage but also downsides - SAN typically has better throughput (because of larger amount of drives) but longer latency because extra processing (and extra trip) involved.   This in particular hurts log writes which are very latency critical.  </p>
<p>Now what is about MySQL/Innodb specifics ?  First, in MySQL if you're looking for durable transactions the log write latency is triple important compared to other database systems.  MySQL has to do more than one fsync() for the log because it internally implements XA to synchronize with binary log and also if you're looking for maximal data consistency (as SAN users often are) you better have binary log flushed on commit too.  MySQL also has <a href="http://bugs.mysql.com/bug.php?id=13669">broken group commit</a>  (which we have <a href="http://www.mysqlperformanceblog.com/2009/02/02/pretending-to-fix-broken-group-commit/">partial fix</a> for)  meaning concurrent transaction commits will need to be serialized.  </p>
<p>Second,  MySQL is often  not able to submit a lot of outstanding IO requests which is needed to utilize SAN efficiently.   It is especially problem if you're running replication Slave as slave thread will issue single IO request most of the time making it sensitive to latency rather than throughput.   Also you should plan on any queries executed having only one IO at the time if Innodb or MyISAM tables are used. There is read-ahead functionality but usually it is not able to drive number of outstanding request significantly.  For write intensive workload you will have problem with number of outstanding writes too. Though for that <a href="http://www.mysqlperformanceblog.com/2008/12/18/xtradb-benchmarks-15x-gain/">we have a fix</a> at least. </p>
<p><strong>Scalability </strong>   We need more IO or space than we can get from 6-8  build in drives... so lets do SAN is the story here.  As I mentioned in Performance section you may be surprised performance is not "scaling" as much as you expected.  You should also consider external directly attached storage which is cheaper alternative in most cases and is especially good if your IO needs are predictable, like you need 3TB of space per box - just external disk enclosure does it great.   My Advice for Scaling  IO capacity with SAN (this applies to directly attached storage too) is to really understand what you're trying to scale and analyze things appropriately.  I've seen in so many times this was a poor choice as it did not allow to scale (ie attempt to scale replication) or was a poor choice, with adding memory or SSD being a better choice. </p>
<p><strong>High Availability </strong>  Some people are got used to using SAN based active-passive clusters for availability purposes and they look to do the same with MySQL.   This works though I do not think it is the best choice.   SAN is just another object which can fail completely. Sure it is more reliable, same as server with multiple power supplies ECC memory  kill-chip and RAID is more reliable than without these technologies but I always in my HA architectures it is a single "point" which can experience "failure".  Note even if hardware fully redundant the Firmware may have a glitch causing failure and data corruption (and this is not just a speculation, some clients really had it) </p>
<p>Even if you do not run any "Cluster" having SAN you can always "connect" the storage to another node - if server fails or if you just want to upgrade to bigger box, which can be more complicated with directly attached storage.</p>
<p>If you want SAN like high availability I would highly consider DRBD which can do storage level replication between directly attached volumes.  Now with support for <a href="http://fghaas.wordpress.com/2008/09/12/got-drbd-got-dolphin-combine-em/">Dolphin Interconnect</a> it can also offer very decent latency.    It also have a benefit of having the system which you can actually split in two (ie for recovery purposes).  Sure it needs double the storage but you get 2 copies of data too and using SAN you probably pay more than 2x premium anyway. </p>
<p>Yet another approach is to use MySQL replication with something as <a href="http://code.google.com/p/mysql-master-master/">MMM</a> or <a href="http://code.google.com/p/flipper/">Flipper</a>.  I think this actually works best for most cases (unless async nature of MySQL replication is a showstopper) and it also solves the other big pain of  semi-online MySQL/OS upgrades and Schema changes. </p>
<p><strong>Backups</strong> SAN has number of advantages for operations (and I guess these are the guys which often push for it).  It often would offer snapshots with low overhead allowing to take a backups conveniently.  Also if you keep last uncompressed backup on SAN (or last snapshot) you may be able to minimize recovery time significantly by switching to that backup - no data copy will be required which can be significant concern to 1TB+ databases.</p>
<p><strong>My Take:</strong>  I view SAN as solution for niche circumstances when it comes to MySQL. It may be you need it but it is not silver bullet and best solution for all problems at once.  When evaluating SAN you should also evaluate external directly attached storage, SSDs, Increasing system memory as well as sharding and replication as a scaling solutions. </p>
    <hr noshade style="margin:0;height:1px" />
    <p>Entry posted by peter |
      <a href="http://www.mysqlperformanceblog.com/2009/03/09/when-would-you-use-san-with-mysql/#comments">18 comments</a></p>
    <p>Add to: <a href="http://del.icio.us/post?url=http://www.mysqlperformanceblog.com/2009/03/09/when-would-you-use-san-with-mysql/&amp;title=When would you use SAN with MySQL ?" title="Bookmark this post on del.icio.us"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/delicious.png" alt="delicious" /></a> | <a href="http://digg.com/submit?phase=2&amp;url=http://www.mysqlperformanceblog.com/2009/03/09/when-would-you-use-san-with-mysql/&amp;title=When would you use SAN with MySQL ?" title="Digg this post on Digg.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/digg.png" alt="digg" /></a> | <a href="http://reddit.com/submit?url=http://www.mysqlperformanceblog.com/2009/03/09/when-would-you-use-san-with-mysql/&amp;title=When would you use SAN with MySQL ?" title="Submit this post on reddit.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/reddit.png" alt="reddit" /></a> | <a href="http://www.netscape.com/submit/?U=http://www.mysqlperformanceblog.com/2009/03/09/when-would-you-use-san-with-mysql/&amp;T=When would you use SAN with MySQL ?" title="Vote for this article on Netscape"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/netscape.gif" alt="netscape" /></a> | <a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.mysqlperformanceblog.com/2009/03/09/when-would-you-use-san-with-mysql/&amp;title=When would you use SAN with MySQL ?" title="Add to Google Bookmarks"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/google.png" alt="Google Bookmarks" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.mysqlperformanceblog.com/2009/03/09/when-would-you-use-san-with-mysql/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>SSD, XFS, LVM, fsync, write cache, barrier and lost transactions</title>
		<link>http://www.mysqlperformanceblog.com/2009/03/02/ssd-xfs-lvm-fsync-write-cache-barrier-and-lost-transactions/</link>
		<comments>http://www.mysqlperformanceblog.com/2009/03/02/ssd-xfs-lvm-fsync-write-cache-barrier-and-lost-transactions/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 05:32:43 +0000</pubDate>
		<dc:creator>Vadim</dc:creator>
				<category><![CDATA[Innodb]]></category>
		<category><![CDATA[production]]></category>

		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=631</guid>
		<description><![CDATA[We finally managed to get Intel X25-E SSD drive into our lab. I attached it to our Dell PowerEdge R900. The story making it running is worth separate mentioning - along with Intel X25-E I got HighPoint 2300 controller and CentOS 5.2 just could not start with two RAID controllers (Perc/6i and HighPoint 2300). The [...]]]></description>
			<content:encoded><![CDATA[<p>We finally managed to get Intel X25-E SSD drive into our lab. I attached it to our Dell PowerEdge R900. The story making it running is worth separate mentioning - along with Intel X25-E I got HighPoint 2300 controller and CentOS 5.2 just could not start with two RAID controllers (Perc/6i and HighPoint 2300). The problem was solved by installing Ubuntu 8.10 which is currently running all this system. Originally I wanted to publish some nice benchmarks where InnoDB on SSD outperforms RAID 10, but recently I faced issue which can make previous results inconsistent.</p>
<p>In short words using Intel SSD X25-E card with enabled write-cache (which is default and most performance mode) does not warranty storing all InnoDB transactions on permanent storage.<br />
I am having some déjà vu here, as Peter was rolling this 5 years ago <a href="http://lkml.org/lkml/2004/3/17/188">http://lkml.org/lkml/2004/3/17/188</a> regarding regular IDE disks, and I did not expect this question poping up again.</p>
<p>Long story is:<br />
I started with puting XFS on SSD and running very primitive test with INSERT INTO fs VALUES(0) into auto-increment field into InnoDB table. InnoDB parameters are</p>
<div class="igBar"><span id="lcode-6"><a href="#" onclick="javascript:showPlainTxt('code-6'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-6">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">innodb_buffer_pool_size=3G</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">innodb_data_file_path=ibdata1:10M:autoextend</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">innodb_file_per_table=<span style="color:#800000;color:#800000;">1</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">innodb_log_buffer_size=8M</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">innodb_log_files_in_group=<span style="color:#800000;color:#800000;">2</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">innodb_log_file_size=256M</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">innodb_thread_concurrency=<span style="color:#800000;color:#800000;">0</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">innodb_flush_log_at_trx_commit=<span style="color:#800000;color:#800000;">1</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">innodb_flush_method&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= O_DIRECT </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Actually most interesting one are <strong>innodb_flush_log_at_trx_commit=1</strong> and <strong>innodb_flush_method             = O_DIRECT</strong> (I tried also default innodb_flush_method, with the same result), using innodb_flush_log_at_trx_commit=1 I expect to have all committed transactions even in case of system failure.</p>
<p>Running this test with default XFS  setting I saw SSD was doing <strong>50 writes / s</strong>, this is something so forced me to check results several times - come on, it's SSD, we should have much more IO there. Investigations put me into barries/nobarriers parameters and with mounting <strong>-o nobarrier</strong> I got <strong>5300 writes / s</strong>. Nice difference, and this is something we want from SSD.</p>
<p>Now to test durability I do plug off power from SSD card and check how many  transactions are really stored - and there is second bumper - I do not see several last N commited transactions.</p>
<p>So now time to turn off write-cache on SSD - all transactions are in place now, but write speed is only <strong>1200 writes / s</strong>, which is comparable with RAID 10</p>
<p>So in conclusion to warranty Durability with SSD we have to disable write-cache which can affect performance results significantly (I have no results on hands, but it is to be tested).</p>
<p>What about LVM there ? Well, we often recommend to use LVM for backup purposes (even recent results are bad, we have no good replacement yet) and I tried LVM under XFS. With write-cache ON and default mount options (i.e. with barrier) I have <strong>5250 writes / s</strong>, this is because LVM ignores write barriers (see <a href="http://dammit.lt/2008/11/03/xfs-write-barriers/">http://dammit.lt/2008/11/03/xfs-write-barriers/</a> ), but again with enable write-cache you may lose transactions.</p>
<p>So in final conclusion:<br />
1. Intel SSD X25E is NOT reliable in default mode<br />
2. To have durability we need to disable write cache ( with following performance penalty, how much we need to test yet)<br />
3. Possible solution could be put SSD into RAID controller with battery-backup-ed write cache, but I am not sure what is good ones - another are for research<br />
4. XFS without LVM is putting barrier option which decreases write performance a lot</p>
    <hr noshade style="margin:0;height:1px" />
    <p>Entry posted by Vadim |
      <a href="http://www.mysqlperformanceblog.com/2009/03/02/ssd-xfs-lvm-fsync-write-cache-barrier-and-lost-transactions/#comments">26 comments</a></p>
    <p>Add to: <a href="http://del.icio.us/post?url=http://www.mysqlperformanceblog.com/2009/03/02/ssd-xfs-lvm-fsync-write-cache-barrier-and-lost-transactions/&amp;title=SSD, XFS, LVM, fsync, write cache, barrier and lost transactions" title="Bookmark this post on del.icio.us"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/delicious.png" alt="delicious" /></a> | <a href="http://digg.com/submit?phase=2&amp;url=http://www.mysqlperformanceblog.com/2009/03/02/ssd-xfs-lvm-fsync-write-cache-barrier-and-lost-transactions/&amp;title=SSD, XFS, LVM, fsync, write cache, barrier and lost transactions" title="Digg this post on Digg.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/digg.png" alt="digg" /></a> | <a href="http://reddit.com/submit?url=http://www.mysqlperformanceblog.com/2009/03/02/ssd-xfs-lvm-fsync-write-cache-barrier-and-lost-transactions/&amp;title=SSD, XFS, LVM, fsync, write cache, barrier and lost transactions" title="Submit this post on reddit.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/reddit.png" alt="reddit" /></a> | <a href="http://www.netscape.com/submit/?U=http://www.mysqlperformanceblog.com/2009/03/02/ssd-xfs-lvm-fsync-write-cache-barrier-and-lost-transactions/&amp;T=SSD, XFS, LVM, fsync, write cache, barrier and lost transactions" title="Vote for this article on Netscape"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/netscape.gif" alt="netscape" /></a> | <a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.mysqlperformanceblog.com/2009/03/02/ssd-xfs-lvm-fsync-write-cache-barrier-and-lost-transactions/&amp;title=SSD, XFS, LVM, fsync, write cache, barrier and lost transactions" title="Add to Google Bookmarks"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/google.png" alt="Google Bookmarks" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.mysqlperformanceblog.com/2009/03/02/ssd-xfs-lvm-fsync-write-cache-barrier-and-lost-transactions/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Understanding Performance Optimization Terminology</title>
		<link>http://www.mysqlperformanceblog.com/2009/03/02/understanding-performance-optimization-terminology/</link>
		<comments>http://www.mysqlperformanceblog.com/2009/03/02/understanding-performance-optimization-terminology/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 21:50:44 +0000</pubDate>
		<dc:creator>peter</dc:creator>
				<category><![CDATA[production]]></category>

		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=629</guid>
		<description><![CDATA[There are few terms you need to have a good understanding if you're working with high volume systems. I commonly see these mixed and people not understanding the difference between them.  
Performance   - The performance comes down to performing up to users expectations (or expectations of your boss) which drills down to [...]]]></description>
			<content:encoded><![CDATA[<p>There are few terms you need to have a good understanding if you're working with high volume systems. I commonly see these mixed and people not understanding the difference between them.  </p>
<p><strong>Performance </strong>  - The performance comes down to performing up to users expectations (or expectations of your boss) which drills down to two important metrics - <strong>response time</strong> also sometimes called latency and <strong>throughput</strong>  also called capacity.  Response time applies to even single user and mostly critical in applications when a complex task needs to be performed such as report generation or search.  It is just unacceptable if search takes a minute even if system has a capacity running for 100 of them at the same time.     The response time is the most important aspect of performance because when we  define system capacity we also define conditions on response time. For example system can handle 100 transactions a second with 95 percentile response time of 1 second.    </p>
<p><strong>Scalability</strong>  - In the high volume applications we assume scaling to larger amount of users, larger systems, larger database size and this is what I will be speaking about.  There is also aspects of scaling down for embeddable systems but it is whole other story.   The question of scalability usually comes because system needs to handle larger load (or operate with larger database) which comes to the question of performance on the same system, getting larger box<strong> "scaling up"</strong> or using multiple systems <strong>"scaling out"</strong>.  Scalability is really funny term because it is used in some many different context.   You may hear "It does not scale" applied to the application on same system as load  or database size increases as well as  to the no significant response to getting more hardware.   So I would define Scalability as ability to increase or sustain performance as response to the environment changes.</p>
<p><strong>Efficiency</strong>  This is my favorite one.  Your application may be performing well and scaling to insane load and data size but  If I can do the same with  half the hardware (or half development costs) my application is more efficient than yours.   The complexity of Efficiency term comes from the fact you can set the optimization goals very differently.    Some are concerned about development time and operations complexity, others about hardware and software cost and TCO and third about power consumption.  </p>
<p>What is interesting in many cases I see the focus on Performance and Scalability while not really focusing on efficiency a lot (at least until VC money run out).    I'm constantly being surprised how efficient and inefficient systems you can find among top web sites.  It is not an exception to see the difference in efficiency as much as 10 times or sometimes even more. </p>
<p>When you evaluate different solutions, see some suggestions in the internet I'd urge you to use all 3 metrics above for evaluation (using efficiency metric which is most critical for you right now).  It is quite possible  the most efficient solution somebody have picked is efficient using different metric compared to what you need.</p>
    <hr noshade style="margin:0;height:1px" />
    <p>Entry posted by peter |
      <a href="http://www.mysqlperformanceblog.com/2009/03/02/understanding-performance-optimization-terminology/#comments">No comment</a></p>
    <p>Add to: <a href="http://del.icio.us/post?url=http://www.mysqlperformanceblog.com/2009/03/02/understanding-performance-optimization-terminology/&amp;title=Understanding Performance Optimization Terminology" title="Bookmark this post on del.icio.us"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/delicious.png" alt="delicious" /></a> | <a href="http://digg.com/submit?phase=2&amp;url=http://www.mysqlperformanceblog.com/2009/03/02/understanding-performance-optimization-terminology/&amp;title=Understanding Performance Optimization Terminology" title="Digg this post on Digg.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/digg.png" alt="digg" /></a> | <a href="http://reddit.com/submit?url=http://www.mysqlperformanceblog.com/2009/03/02/understanding-performance-optimization-terminology/&amp;title=Understanding Performance Optimization Terminology" title="Submit this post on reddit.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/reddit.png" alt="reddit" /></a> | <a href="http://www.netscape.com/submit/?U=http://www.mysqlperformanceblog.com/2009/03/02/understanding-performance-optimization-terminology/&amp;T=Understanding Performance Optimization Terminology" title="Vote for this article on Netscape"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/netscape.gif" alt="netscape" /></a> | <a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.mysqlperformanceblog.com/2009/03/02/understanding-performance-optimization-terminology/&amp;title=Understanding Performance Optimization Terminology" title="Add to Google Bookmarks"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/google.png" alt="Google Bookmarks" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.mysqlperformanceblog.com/2009/03/02/understanding-performance-optimization-terminology/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>KISS KISS KISS</title>
		<link>http://www.mysqlperformanceblog.com/2009/03/01/kiss-kiss-kiss/</link>
		<comments>http://www.mysqlperformanceblog.com/2009/03/01/kiss-kiss-kiss/#comments</comments>
		<pubDate>Sun, 01 Mar 2009 07:08:15 +0000</pubDate>
		<dc:creator>peter</dc:creator>
				<category><![CDATA[production]]></category>

		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=628</guid>
		<description><![CDATA[When I visit customers quite often they tell me about number of creative techniques they heard on the conferences, read on the blogs, forums and Internet articles and they ask me if they should use them.  My advice is frequently - do not.  It is fun to be creative but creative solutions also [...]]]></description>
			<content:encoded><![CDATA[<p>When I visit customers quite often they tell me about number of creative techniques they heard on the conferences, read on the blogs, forums and Internet articles and they ask me if they should use them.  My advice is frequently - <strong>do not.</strong>  It is fun to be creative but creative solutions also means unproven and people who had to become creative with their system often did that because they had no choice.  Of course when they came to the bunch of conferences and told their story which resonated across the Internet  sticking to the people mind as a good practice. </p>
<p>There are 2 things you should ask yourself. First  is the scale comparable - the recipes from  Facebook,  YouTube, Yahoo, are not good for like 99.9% of the applications because they are not even remotely close in size and so capacity requirements. Second if this "smart thing" was truly thought out architecture choice in beginning or it was the choice within code base constrains they had, and so you might not have.</p>
<p>Let me look into couple of  most typical reservations.</p>
<p><strong>Sharding</strong>  -   This is perhaps the technology people get obsessed with  most regularly. Sometimes it looks like a homepage running on 100K database visited by 100 people in a month is attempted to be sharded.   Remember as commodity hardware is advancing the size of the application when you really need to shard moves further and further away.    I remember LiveJournal with 4GB of memory per box doing sharding 5 years ago....  well now you can get a box with 128G of RAM within $15K.   Keeping working set in memory is not the only reason for sharding but one of the most frequent ones.   The examples I like to use is YouTube - they did not shard until after Google bought them (though they were in pain) and <a href="http://www.37signals.com/svn/posts/1509-mr-moore-gets-to-punt-on-sharding">37Signals  </a>  </p>
<p>When doing Performance Audit we tend to look at the required capacity and data size within current horizon.  In  many cases even with super optimistic assumptions application will do just fine with single "cluster"  even on the current hardware for several years. </p>
<p><strong>Replication Optimization</strong>  People often get scared with the fact replication is single thread and often becomes bottleneck so they are using various optimizations including tricky prefetch approaches suggested by YouTube.    Interesting enough this often happens even when system is far from reaching its replication capacity.   </p>
<p>I would suggest measure and monitor your replication capacity (how long will it take a slave to catch up 1 hour lag of peak traffic ?)  and act appropriately.  Also focus on simple optimizations first, if you need to get to prefetch you're quite likely beyond reasonable use of single master and should have done sharding functional partitioning or something else.</p>
<p><strong>Complex Replication</strong>  There are impressive numbers out there on how many slaves people run and how complex replication topologies with multiple tiers filtering and writes to some intermediary slaves people use.   For me simple is best.  Complex architectures are more error prone harder to maintain (upgrades etc) and troubleshoot.  Remember for every single "role" in such setup you need to understand what to do with it if any other "role" in the system fails, which escalates complexity.    You may need something more advanced than master and one slave but any complication needs to be justified.    I also should note slaves are not overly efficient beasts - they not only store the copy of data  on the disk, wasting resources but their caches are also highly redundant defeating the fact you may have a lot of total memory on the slave farm.</p>
<p><strong>Reading from the Slaves</strong>  The story heard is typically - Web applications often have significantly prevailing reads so to scale we better have many slaves which we can use to handle most of our read traffic right ?  Sure. Unless you're using memcache or other caching option.   Successful memcache implementations often report 90% cache hit ratio meaning  10 to 1 read ratio drop backs to one to one.  This means you may not need a lot of slaves if your application allows use of efficient caching.  </p>
<p>Now lets look at the simplified case - you got  pair of servers replicating as Master-Master which you typically want for high availability and online schema changes.   How far you want to go making your application being capable to read from the slave ?    Remember as you're doing this for high availability and online schema changes you're planning to operate without slave every so often, meaning one server should be able to handle all traffic from capacity planning standpoint anyway.   At the same time slave can be perfect to be used for non production impacting things like analytics.  </p>
<p><strong>High Availability</strong>  The trick with high availability is the more complex architectures and processes you use for high availability prevention the more likely it is for them to fail.   Unless you're Google scale with failures happening daily you can't really be sure you're handling "wild" failures, not the test ones well.   Furthermore  you always have to look at failures caused by other things - wrong code pushed to production, hacker break in, data center power failure etc.    </p>
<p>Google guys tells us single MySQL server on a good hardware has MTBF  somewhere between 1000 and 2000 days.  This is a lot of time which means for most of applications  having a pair of slaves (even though second slave is available for failover only 99% of the time) is more than enough.  </p>
<p>I would say more. In my experience the availability of the application is only related to the MySQL redundancy for very high quality/high scale applications.  I've seen applications having no downtime running for years on single MySQL server (which just does not crash) as well as complex no single point of failure database backend with application constantly going down because of bad code or something unpredicted.</p>
<p><strong>Summary:</strong>  So am I denying all MySQL industry practices (which we also covered in a great depth in <a href="http://www.amazon.com/gp/product/0596101716?ie=UTF8&#038;tag=perinc-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0596101716">our book</a>) ?  Not really. I'm just suggesting do not just grab advice from the Internet or friends tip and do not complicate beyond the need.    You may start with couple of replicated nodes for high availability and maintenance if you're in serious business (and just one server and good point in time backup if you're on the budget) and assess any need for any complications.   It may be boring but boring systems often have highest uptime <img src='http://www.mysqlperformanceblog.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
    <hr noshade style="margin:0;height:1px" />
    <p>Entry posted by peter |
      <a href="http://www.mysqlperformanceblog.com/2009/03/01/kiss-kiss-kiss/#comments">7 comments</a></p>
    <p>Add to: <a href="http://del.icio.us/post?url=http://www.mysqlperformanceblog.com/2009/03/01/kiss-kiss-kiss/&amp;title=KISS KISS KISS" title="Bookmark this post on del.icio.us"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/delicious.png" alt="delicious" /></a> | <a href="http://digg.com/submit?phase=2&amp;url=http://www.mysqlperformanceblog.com/2009/03/01/kiss-kiss-kiss/&amp;title=KISS KISS KISS" title="Digg this post on Digg.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/digg.png" alt="digg" /></a> | <a href="http://reddit.com/submit?url=http://www.mysqlperformanceblog.com/2009/03/01/kiss-kiss-kiss/&amp;title=KISS KISS KISS" title="Submit this post on reddit.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/reddit.png" alt="reddit" /></a> | <a href="http://www.netscape.com/submit/?U=http://www.mysqlperformanceblog.com/2009/03/01/kiss-kiss-kiss/&amp;T=KISS KISS KISS" title="Vote for this article on Netscape"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/netscape.gif" alt="netscape" /></a> | <a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.mysqlperformanceblog.com/2009/03/01/kiss-kiss-kiss/&amp;title=KISS KISS KISS" title="Add to Google Bookmarks"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/google.png" alt="Google Bookmarks" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.mysqlperformanceblog.com/2009/03/01/kiss-kiss-kiss/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>XtraBackup:  Open Source Alternative for Innodb Hot Backup call for ideas</title>
		<link>http://www.mysqlperformanceblog.com/2009/02/24/xtrabackup-open-source-alternative-for-innodb-hot-backup-call-for-ideas/</link>
		<comments>http://www.mysqlperformanceblog.com/2009/02/24/xtrabackup-open-source-alternative-for-innodb-hot-backup-call-for-ideas/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 04:11:53 +0000</pubDate>
		<dc:creator>Vadim</dc:creator>
				<category><![CDATA[production]]></category>
		<category><![CDATA[xtradb]]></category>

		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=627</guid>
		<description><![CDATA[For long time as main backup solution for MySQL on Linux we have been using LVM snapshots.  Performance concerns from performance critical envinronment caused us to do  LVM performance research which showed horrible results forcing us to look at more performing alternatives.  
Innodb Hot Backup is a good working solution but it [...]]]></description>
			<content:encoded><![CDATA[<p>For long time as main backup solution for MySQL on Linux we have been using LVM snapshots.  Performance concerns from performance critical envinronment caused us to do  <a href="http://www.mysqlperformanceblog.com/2009/02/05/disaster-lvm-performance-in-snapshot-mode/">LVM performance research</a> which showed horrible results forcing us to look at more performing alternatives.  </p>
<p><a href="http://www.innodb.com/hot-backup/">Innodb Hot Backup</a> is a good working solution but it is not Open Source and so we can't ensure it will support all XtraDB features - extra undo slots, rollback segments etc.   </p>
<p>After considering all alternatives we decided to develop Percona Xtrabackup tool, which will use same backup approach as InnoDB Hot Backup, that is taking online copy of InnoDB table files and transactional logs. This is going to be fully OpenSource, GPL licensed backup solution for MySQL (MyISAM and InnoDB for now).</p>
<p>We gathered basic ideas here <a href="http://www.percona.com/docs/wiki/percona-xtrabackup:start">http://www.percona.com/docs/wiki/percona-xtrabackup:start</a>, and for the first stage it will be just full backup of files. For next stages we are looking to implement advanced functionality like incremental backup (copy only changes from last backup),table-level backup (copy only specified tables), streaming and parallel copying. Source code will be posted to Xtrabackup Launchpad project (<a href="https://launchpad.net/percona-xtrabackup/">https://launchpad.net/percona-xtrabackup/</a>)</p>
<p>We call for more ideas you would like to see implemented (please leave them in comments).  We got sponsorship for the base implementation work, but we're still looking for sponsorship for additional features, contact us <a href="http://www.percona.com/contacts.html">http://www.percona.com/contacts.html</a> if you are interested. Percona will also significantly invest in this project.</p>
    <hr noshade style="margin:0;height:1px" />
    <p>Entry posted by Vadim |
      <a href="http://www.mysqlperformanceblog.com/2009/02/24/xtrabackup-open-source-alternative-for-innodb-hot-backup-call-for-ideas/#comments">8 comments</a></p>
    <p>Add to: <a href="http://del.icio.us/post?url=http://www.mysqlperformanceblog.com/2009/02/24/xtrabackup-open-source-alternative-for-innodb-hot-backup-call-for-ideas/&amp;title=XtraBackup:  Open Source Alternative for Innodb Hot Backup call for ideas" title="Bookmark this post on del.icio.us"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/delicious.png" alt="delicious" /></a> | <a href="http://digg.com/submit?phase=2&amp;url=http://www.mysqlperformanceblog.com/2009/02/24/xtrabackup-open-source-alternative-for-innodb-hot-backup-call-for-ideas/&amp;title=XtraBackup:  Open Source Alternative for Innodb Hot Backup call for ideas" title="Digg this post on Digg.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/digg.png" alt="digg" /></a> | <a href="http://reddit.com/submit?url=http://www.mysqlperformanceblog.com/2009/02/24/xtrabackup-open-source-alternative-for-innodb-hot-backup-call-for-ideas/&amp;title=XtraBackup:  Open Source Alternative for Innodb Hot Backup call for ideas" title="Submit this post on reddit.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/reddit.png" alt="reddit" /></a> | <a href="http://www.netscape.com/submit/?U=http://www.mysqlperformanceblog.com/2009/02/24/xtrabackup-open-source-alternative-for-innodb-hot-backup-call-for-ideas/&amp;T=XtraBackup:  Open Source Alternative for Innodb Hot Backup call for ideas" title="Vote for this article on Netscape"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/netscape.gif" alt="netscape" /></a> | <a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.mysqlperformanceblog.com/2009/02/24/xtrabackup-open-source-alternative-for-innodb-hot-backup-call-for-ideas/&amp;title=XtraBackup:  Open Source Alternative for Innodb Hot Backup call for ideas" title="Add to Google Bookmarks"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/google.png" alt="Google Bookmarks" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.mysqlperformanceblog.com/2009/02/24/xtrabackup-open-source-alternative-for-innodb-hot-backup-call-for-ideas/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Beware of MySQL Data Truncation</title>
		<link>http://www.mysqlperformanceblog.com/2009/02/07/beware-of-mysql-data-truncation/</link>
		<comments>http://www.mysqlperformanceblog.com/2009/02/07/beware-of-mysql-data-truncation/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 03:21:48 +0000</pubDate>
		<dc:creator>peter</dc:creator>
				<category><![CDATA[production]]></category>

		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=611</guid>
		<description><![CDATA[Here is nice gotcha which I've seen many times and which can cause just a minefield for many reasons.
Lets say you had a system storing articles and you use article_id as unsigned int.  As the time goes and you see you may get over 4 billions of articles you  change the type for [...]]]></description>
			<content:encoded><![CDATA[<p>Here is nice gotcha which I've seen many times and which can cause just a minefield for many reasons.<br />
Lets say you had a system storing articles and you use <strong>article_id</strong> as <strong>unsigned int</strong>.  As the time goes and you see you may get over 4 billions of articles you  change the type for article_id to <strong>bigint unsigned</strong>  but forget linked tables.</p>
<div class="igBar"><span id="lsql-11"><a href="#" onclick="javascript:showPlainTxt('sql-11'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">SQL:</span>
<div id="sql-11">
<div class="sql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mysql&gt; <span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> article_comment<span style="color:#006600; font-weight:bold;">&#40;</span>article_id int <span style="color: #993333; font-weight: bold;">UNSIGNED</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>, comment_id int <span style="color: #993333; font-weight: bold;">UNSIGNED</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>, <span style="color: #993333; font-weight: bold;">KEY</span><span style="color:#006600; font-weight:bold;">&#40;</span>article_id<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Query OK, <span style="color: #cc66cc;color:#800000;">0</span> rows affected <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #cc66cc;color:#800000;">0</span>.<span style="color: #cc66cc;color:#800000;">11</span> sec<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mysql&gt; <span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> article_comment <span style="color: #993333; font-weight: bold;">VALUES</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #cc66cc;color:#800000;">4300000000</span>,<span style="color: #cc66cc;color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Query OK, <span style="color: #cc66cc;color:#800000;">1</span> row affected, <span style="color: #cc66cc;color:#800000;">1</span> warning <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #cc66cc;color:#800000;">0</span>.<span style="color: #cc66cc;color:#800000;">00</span> sec<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mysql&gt; <span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> article_comment <span style="color: #993333; font-weight: bold;">VALUES</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #cc66cc;color:#800000;">4300000001</span>,<span style="color: #cc66cc;color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Query OK, <span style="color: #cc66cc;color:#800000;">1</span> row affected, <span style="color: #cc66cc;color:#800000;">1</span> warning <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #cc66cc;color:#800000;">0</span>.<span style="color: #cc66cc;color:#800000;">00</span> sec<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mysql&gt; <span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> article_comment <span style="color: #993333; font-weight: bold;">VALUES</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #cc66cc;color:#800000;">4300000002</span>,<span style="color: #cc66cc;color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Query OK, <span style="color: #cc66cc;color:#800000;">1</span> row affected, <span style="color: #cc66cc;color:#800000;">1</span> warning <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #cc66cc;color:#800000;">0</span>.<span style="color: #cc66cc;color:#800000;">00</span> sec<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mysql&gt; <span style="color: #993333; font-weight: bold;">SELECT</span> * <span style="color: #993333; font-weight: bold;">FROM</span> article_comment;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+<span style="color: #808080; font-style: italic;">------------+------------+</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">| article_id | comment_id |</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+<span style="color: #808080; font-style: italic;">------------+------------+</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">| <span style="color: #cc66cc;color:#800000;">4294967295</span> |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cc66cc;color:#800000;">1</span> |</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">| <span style="color: #cc66cc;color:#800000;">4294967295</span> |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cc66cc;color:#800000;">1</span> |</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">| <span style="color: #cc66cc;color:#800000;">4294967295</span> |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cc66cc;color:#800000;">1</span> |</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+<span style="color: #808080; font-style: italic;">------------+------------+</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #cc66cc;color:#800000;">3</span> rows <span style="color: #993333; font-weight: bold;">IN</span> <span style="color: #993333; font-weight: bold;">SET</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #cc66cc;color:#800000;">0</span>.<span style="color: #cc66cc;color:#800000;">00</span> sec<span style="color:#006600; font-weight:bold;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>For table "article" itself  you would notice the issue quickly if you would forget to alter it as inserts will fail because of primary key collisions. But for linked tables like above inserts work you just get a warning:</p>
<div class="igBar"><span id="lsql-12"><a href="#" onclick="javascript:showPlainTxt('sql-12'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">SQL:</span>
<div id="sql-12">
<div class="sql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mysql&gt; <span style="color: #993333; font-weight: bold;">SHOW</span> warnings;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+<span style="color: #808080; font-style: italic;">---------+------+--------------------------------------------------------------+</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">| Level&nbsp; &nbsp;| Code | Message&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+<span style="color: #808080; font-style: italic;">---------+------+--------------------------------------------------------------+</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">| Warning | <span style="color: #cc66cc;color:#800000;">1264</span> | Out of range value adjusted <span style="color: #993333; font-weight: bold;">FOR</span> <span style="color: #993333; font-weight: bold;">COLUMN</span> <span style="color: #ff0000;">'article_id'</span> at row <span style="color: #cc66cc;color:#800000;">1</span> |</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+<span style="color: #808080; font-style: italic;">---------+------+--------------------------------------------------------------+</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #cc66cc;color:#800000;">1</span> row <span style="color: #993333; font-weight: bold;">IN</span> <span style="color: #993333; font-weight: bold;">SET</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #cc66cc;color:#800000;">0</span>.<span style="color: #cc66cc;color:#800000;">06</span> sec<span style="color:#006600; font-weight:bold;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>And in my experience very few people mind to check the warnings promptly. </p>
<p>So two things happen, one is nastier than the other. First  the comments end up associated to the wrong article (4294967295)  which can be quite a problem in particular if these are private comments.  The other thing which tends to happen -  you get A LOT of comments associated with this article and few systems are designed with  YouTube capacity to handle millions of comments per item. </p>
<p>Note the question in this case is not like there is just one article which has insane number of comments but a as a all articles outside of allowed range have it:</p>
<div class="igBar"><span id="lsql-13"><a href="#" onclick="javascript:showPlainTxt('sql-13'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">SQL:</span>
<div id="sql-13">
<div class="sql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mysql&gt; <span style="color: #993333; font-weight: bold;">EXPLAIN</span> <span style="color: #993333; font-weight: bold;">SELECT</span> count<span style="color:#006600; font-weight:bold;">&#40;</span>*<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> article_comment <span style="color: #993333; font-weight: bold;">WHERE</span> article_id=<span style="color: #cc66cc;color:#800000;">4300000000</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+<span style="color: #808080; font-style: italic;">----+-------------+-----------------+------+---------------+------------+---------+-------+------+--------------------------+</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">| id | select_type | <span style="color: #993333; font-weight: bold;">TABLE</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| type | possible_keys | <span style="color: #993333; font-weight: bold;">KEY</span>&nbsp; &nbsp; &nbsp; &nbsp; | key_len | ref&nbsp; &nbsp;| rows | Extra&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+<span style="color: #808080; font-style: italic;">----+-------------+-----------------+------+---------------+------------+---------+-------+------+--------------------------+</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">|&nbsp; <span style="color: #cc66cc;color:#800000;">1</span> | SIMPLE&nbsp; &nbsp; &nbsp; | article_comment | ref&nbsp; | article_id&nbsp; &nbsp; | article_id | <span style="color: #cc66cc;color:#800000;">4</span>&nbsp; &nbsp; &nbsp; &nbsp;| const |&nbsp; &nbsp; <span style="color: #cc66cc;color:#800000;">3</span> | <span style="color: #993333; font-weight: bold;">USING</span> <span style="color: #993333; font-weight: bold;">WHERE</span>; <span style="color: #993333; font-weight: bold;">USING</span> <span style="color: #993333; font-weight: bold;">INDEX</span> |</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+<span style="color: #808080; font-style: italic;">----+-------------+-----------------+------+---------------+------------+---------+-------+------+--------------------------+</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #cc66cc;color:#800000;">1</span> row <span style="color: #993333; font-weight: bold;">IN</span> <span style="color: #993333; font-weight: bold;">SET</span>, <span style="color: #cc66cc;color:#800000;">1</span> warning <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #cc66cc;color:#800000;">0</span>.<span style="color: #cc66cc;color:#800000;">00</span> sec<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mysql&gt; <span style="color: #993333; font-weight: bold;">SHOW</span> warnings;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+<span style="color: #808080; font-style: italic;">---------+------+--------------------------------------------------------------+</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">| Level&nbsp; &nbsp;| Code | Message&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+<span style="color: #808080; font-style: italic;">---------+------+--------------------------------------------------------------+</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">| Warning | <span style="color: #cc66cc;color:#800000;">1264</span> | Out of range value adjusted <span style="color: #993333; font-weight: bold;">FOR</span> <span style="color: #993333; font-weight: bold;">COLUMN</span> <span style="color: #ff0000;">'article_id'</span> at row <span style="color: #cc66cc;color:#800000;">1</span> |</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+<span style="color: #808080; font-style: italic;">---------+------+--------------------------------------------------------------+</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #cc66cc;color:#800000;">1</span> row <span style="color: #993333; font-weight: bold;">IN</span> <span style="color: #993333; font-weight: bold;">SET</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #cc66cc;color:#800000;">0</span>.<span style="color: #cc66cc;color:#800000;">00</span> sec<span style="color:#006600; font-weight:bold;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>MySQL optimizer behaves rather strange in such case (at least in MySQL 5.0) -  instead of instantly saying there is no such value (because value is out of range what could be stored in the column) it truncates the value, performs index lookup, scanning all rows  (just 3 in my trivial example)  and when filtering them out because value really does not match the where clause. </p>
<p>This makes such error even harder to catch - you will not see wrong comments for a lot articles, you will see 0 while queries will just run insanely slow.</p>
<p>So how to avoid this problem ? </p>
<p>It is actually quite easy - you just need to enable strict mode:</p>
<div class="igBar"><span id="lsql-14"><a href="#" onclick="javascript:showPlainTxt('sql-14'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">SQL:</span>
<div id="sql-14">
<div class="sql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mysql&gt; <span style="color: #993333; font-weight: bold;">SET</span> sql_mode=STRICT_ALL_TABLES;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Query OK, <span style="color: #cc66cc;color:#800000;">0</span> rows affected <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #cc66cc;color:#800000;">0</span>.<span style="color: #cc66cc;color:#800000;">00</span> sec<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mysql&gt; <span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> article_comment <span style="color: #993333; font-weight: bold;">VALUES</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #cc66cc;color:#800000;">4400000000</span>,<span style="color: #cc66cc;color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ERROR <span style="color: #cc66cc;color:#800000;">1264</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #cc66cc;color:#800000;">22003</span><span style="color:#006600; font-weight:bold;">&#41;</span>: Out of range value adjusted <span style="color: #993333; font-weight: bold;">FOR</span> <span style="color: #993333; font-weight: bold;">COLUMN</span> <span style="color: #ff0000;">'article_id'</span> at row <span style="color: #cc66cc;color:#800000;">1</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Note however strict mode should not be taken lightly - it is good for reliability but many applications will need to be fixed before they start working properly with this mode.  </p>
    <hr noshade style="margin:0;height:1px" />
    <p>Entry posted by peter |
      <a href="http://www.mysqlperformanceblog.com/2009/02/07/beware-of-mysql-data-truncation/#comments">4 comments</a></p>
    <p>Add to: <a href="http://del.icio.us/post?url=http://www.mysqlperformanceblog.com/2009/02/07/beware-of-mysql-data-truncation/&amp;title=Beware of MySQL Data Truncation" title="Bookmark this post on del.icio.us"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/delicious.png" alt="delicious" /></a> | <a href="http://digg.com/submit?phase=2&amp;url=http://www.mysqlperformanceblog.com/2009/02/07/beware-of-mysql-data-truncation/&amp;title=Beware of MySQL Data Truncation" title="Digg this post on Digg.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/digg.png" alt="digg" /></a> | <a href="http://reddit.com/submit?url=http://www.mysqlperformanceblog.com/2009/02/07/beware-of-mysql-data-truncation/&amp;title=Beware of MySQL Data Truncation" title="Submit this post on reddit.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/reddit.png" alt="reddit" /></a> | <a href="http://www.netscape.com/submit/?U=http://www.mysqlperformanceblog.com/2009/02/07/beware-of-mysql-data-truncation/&amp;T=Beware of MySQL Data Truncation" title="Vote for this article on Netscape"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/netscape.gif" alt="netscape" /></a> | <a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.mysqlperformanceblog.com/2009/02/07/beware-of-mysql-data-truncation/&amp;title=Beware of MySQL Data Truncation" title="Add to Google Bookmarks"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/google.png" alt="Google Bookmarks" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.mysqlperformanceblog.com/2009/02/07/beware-of-mysql-data-truncation/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Should you move from MyISAM to Innodb ?</title>
		<link>http://www.mysqlperformanceblog.com/2009/01/12/should-you-move-from-myisam-to-innodb/</link>
		<comments>http://www.mysqlperformanceblog.com/2009/01/12/should-you-move-from-myisam-to-innodb/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 20:49:56 +0000</pubDate>
		<dc:creator>peter</dc:creator>
				<category><![CDATA[Innodb]]></category>
		<category><![CDATA[myisam]]></category>
		<category><![CDATA[production]]></category>

		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=586</guid>
		<description><![CDATA[There is significant portion of customers which are still using MyISAM when they come to us, so one of the big questions is when it is feasible to move to Innodb and when staying on MyISAM is preferred ?
I generally prefer to see Innodb as the main storage engine because it makes life much simpler [...]]]></description>
			<content:encoded><![CDATA[<p>There is significant portion of customers which are still using MyISAM when they come to us, so one of the big questions is when it is feasible to move to Innodb and when staying on MyISAM is preferred ?</p>
<p>I generally prefer to see Innodb as the main storage engine because it makes life much simpler in the end for most users - you do not get to deal with recovering tables on the crash or partially  executed statements.  Table locks is no more problem,  hot backups are easy, though there are some important things which we have to consider on case by case basics before recommending the move. </p>
<p><strong>Is MyISAM used as default or as a choice ? </strong>  This is the most important question to ask upfront.  Sometimes MyISAM is there just because it is default, in other cases this is deliberate choice with system being optimized to deal with MyISAM limits, for example there is a dedicated slave available for all long reporting queries.   In case MyISAM was chosen not just happened to be it is important to build the good argument to suggest Innodb.</p>
<p><strong>Application Readiness</strong>  Application should be ready to work with Innodb, for example be ready to deal with deadlocks which can happen with Innodb even if you do not use transactions, but which are not existent with MyISAM.     QA has to be performed as part of the move.</p>
<p><strong>Performance</strong>  Innodb has a lot to offer in terms of performance - Performance benefits and drawbacks.  On the benefits side we usually see clustering by primary key, caching data, higher concurrency,  background flushes while on the drawbacks side we see significantly large table size (especially if data size is close to memory size),  generally slower writes, slower blob handling, concurrency issues, problems dealing with very large number of tables, slow data load and ALTER TABLE and others.  Another big one is COUNT(*)  without where clause which is often the show stopper for them move until it is worked around.</p>
<p><strong>Operations</strong>   What is good for MyISAM kills Innodb,  such as copying binary tables between the servers.   It is important the team understands Innodb and knows how to handle it, or be able to learn it.  It is also important to adjust processes as required to work with Innodb.  For example binary copy of one of the databases from the Slave to the dev envinronment works great for MyISAM but does not work with Innodb.   Backup tools like "mysqlhotcopy" does not work etc.  Note Performance also affects Operations aspects a lot - for example using mysqldump as a backup may well work for MyISAM but will start taking way too much time to do restore for Innodb.  On large scale installations mysqldump does not work anyway but it may still work for you when you're running MyISAM but instantly break upon upgrading to Innodb.</p>
<p><strong>Features</strong>  The MyISAM features which forbid moving to Innodb are typically Full Text Search and RTREE indexes/GIS with Full Text  being much more common.     There are workarounds for both of them, including dedicated MyISAM slave or shadow table but it is important to consider them.</p>
<p><strong>How about Mixing Storage Engines ?</strong>  Sure you can mix storage engines but I suggest you doing is wisely.  It complicates operations tasks (backups, balancing, performance analyzes)  as well as it exercises not so common paths in the MySQL server - in particular Optimizer may have harder time because costs between storage engines may not be well balanced or replication of mixed table types which is quite complicated. </p>
<p>I prefer to pick one storage engine (typically Innodb) and when use other tables when it really gives substantial gains.  I would not switch table to MyISAM because it gives 5% performance improvement but I can perfectly use MyISAM (or Archive) for logging.</p>
<p><strong>Innodb Needs Tuning</strong>  As a final note about MyISAM to Innodb migration  I should mention about Innodb tuning.  Innodb needs tuning. Really.  MyISAM for many applications can work well with defaults.  I've seen hundreds of GB databases ran with MyISAM with default  settings and it worked reasonably.  Innodb needs resources and it will not work well with defaults a lot.   Tuning MyISAM from defaults rarely gives more than 2-3 times gain while it can be as much as 10-50 times for Innodb tables in particular for write intensive workloads.  Check <a href="http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/">here</a> for details.</p>
<p><strong>Note:</strong>  As Few people questioned me, I indeed forgot to clarify the scope here - I'm mainly speaking about OLTP/ Traditional web applications.  for Analytics things are a lot different.</p>
    <hr noshade style="margin:0;height:1px" />
    <p>Entry posted by peter |
      <a href="http://www.mysqlperformanceblog.com/2009/01/12/should-you-move-from-myisam-to-innodb/#comments">34 comments</a></p>
    <p>Add to: <a href="http://del.icio.us/post?url=http://www.mysqlperformanceblog.com/2009/01/12/should-you-move-from-myisam-to-innodb/&amp;title=Should you move from MyISAM to Innodb ?" title="Bookmark this post on del.icio.us"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/delicious.png" alt="delicious" /></a> | <a href="http://digg.com/submit?phase=2&amp;url=http://www.mysqlperformanceblog.com/2009/01/12/should-you-move-from-myisam-to-innodb/&amp;title=Should you move from MyISAM to Innodb ?" title="Digg this post on Digg.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/digg.png" alt="digg" /></a> | <a href="http://reddit.com/submit?url=http://www.mysqlperformanceblog.com/2009/01/12/should-you-move-from-myisam-to-innodb/&amp;title=Should you move from MyISAM to Innodb ?" title="Submit this post on reddit.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/reddit.png" alt="reddit" /></a> | <a href="http://www.netscape.com/submit/?U=http://www.mysqlperformanceblog.com/2009/01/12/should-you-move-from-myisam-to-innodb/&amp;T=Should you move from MyISAM to Innodb ?" title="Vote for this article on Netscape"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/netscape.gif" alt="netscape" /></a> | <a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.mysqlperformanceblog.com/2009/01/12/should-you-move-from-myisam-to-innodb/&amp;title=Should you move from MyISAM to Innodb ?" title="Add to Google Bookmarks"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/google.png" alt="Google Bookmarks" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.mysqlperformanceblog.com/2009/01/12/should-you-move-from-myisam-to-innodb/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>XtraDB storage engine release 1.0.2-2 (New Year edition)</title>
		<link>http://www.mysqlperformanceblog.com/2008/12/29/xtradb-storage-engine-release-102-2/</link>
		<comments>http://www.mysqlperformanceblog.com/2008/12/29/xtradb-storage-engine-release-102-2/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 06:27:38 +0000</pubDate>
		<dc:creator>Evgeniy Stepchenko</dc:creator>
				<category><![CDATA[percona]]></category>
		<category><![CDATA[production]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[xtradb]]></category>

		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=581</guid>
		<description><![CDATA[
Today we announce release 1.0.2-2 of our XtraDB storage engine.
Here is a list of enhancements:


split-buffer_pool_mutex


The patch splits global InnoDB buffer_pool mutex into several and eliminates waitings on flush IO and mutex when there is no enough free buffers. It helps if you have performance drops when data does not fit in memory.


innodb_extra_undoslots


InnoDB has a concurrent [...]]]></description>
			<content:encoded><![CDATA[<div class="level1">
<p>Today we announce release 1.0.2-2 of our <a class="urlextern" title="https://launchpad.net/percona-xtradb" rel="nofollow" href="https://launchpad.net/percona-xtradb">XtraDB storage engine</a>.</p>
<p>Here is a list of enhancements:</p>
<ul>
<li class="level1">
<div class="li">split-buffer_pool_mutex</div>
</li>
</ul>
<p>The patch splits global InnoDB buffer_pool mutex into several and eliminates waitings on flush IO and mutex when there is no enough free buffers. It helps if you have performance drops when data does not fit in memory.</p>
<ul>
<li class="level1">
<div class="li"><a class="urlextern" title="http://www.percona.com/docs/wiki/percona-xtradb:innodb_expand_undo_slots" rel="nofollow" href="http://www.percona.com/docs/wiki/percona-xtradb:innodb_expand_undo_slots">innodb_extra_undoslots</a></div>
</li>
</ul>
<p>InnoDB has a <a class="urlextern" title="http://bugs.mysql.com/bug.php?id=26590" rel="nofollow" href="http://bugs.mysql.com/bug.php?id=26590">concurrent transaction limit of 1024</a> because in the standard InnoDB the number of undo slots is fixed value. This patch expands the maximum number of undo slots to 4072 and allows better utilizing modern hardware. (Thank <a href="http://smugmug.com">SmugMug</a> for this feature!)</p>
<p><strong>ATTENTION</strong>: If the option was enabled and the expanded slots are used, you cannot use the datafile with system tablespace for the software which assume 1024 slots (e.g. the other mysqld or innodb hotbackup). See <a class="urlextern" title="http://www.percona.com/docs/wiki/percona-xtradb:innodb_expand_undo_slots" rel="nofollow" href="http://www.percona.com/docs/wiki/percona-xtradb:innodb_expand_undo_slots">documentation</a> for details.</p>
<p>Percona XtraDB 1.0.2-2 available :</p>
<ul>
<li class="level1">
<div class="li">in source code from <a class="urlextern" title="https://launchpad.net/percona-xtradb" rel="nofollow" href="https://launchpad.net/percona-xtradb">Launchpad</a>, the version 1.0.2-2  you can get as <em>bzr branch lp:percona-xtradb -r tag:release-1.0.2-2 percona-xtradb-1.0.2-2</em></div>
</li>
<li class="level1">
<div class="li">as <a class="urlextern" title="http://www.percona.com/mysql/5.1.30-2/source/percona-xtradb-1.0.2-2.tar.gz" rel="nofollow" href="http://www.percona.com/mysql/5.1.30-2/source/percona-xtradb-1.0.2-2.tar.gz">source code in tar.gz</a></div>
</li>
<li class="level1">
<div class="li">as <a href="http://www.percona.com/mysql/5.1.30-2/RPM/">binaries</a>, percona xtradb is compiled in into <a class="urlextern" title="http://www.percona.com/mysql/5.1.30-2/RPM/" rel="nofollow" href="http://www.percona.com/mysql/5.1.30-2/RPM/">MySQL-5.1.30 RPM</a></div>
</li>
<li class="level1">
<div class="li">as <a class="urlextern" title="http://www.percona.com/mysql/5.1.30-2/binary/percona-xtradb-1.0.2-2-5.1.30.x86_64.tar.gz" rel="nofollow" href="http://www.percona.com/mysql/5.1.30-2/binary/percona-xtradb-1.0.2-2-5.1.30.x86_64.tar.gz">separated shared library</a>, to use as drop-in plugin for existing MySQL-5.1.30 installation</div>
</li>
</ul>
<p>XtraDB is compatible with existing InnoDB tables (<strong>Warning</strong>: unless you used <strong>innodb_extra_undoslots</strong> ) and we are going to keep compatibility in further releases. We are open for features requests for new engine and ready to accept community patches. You can monitor Percona's current tasks and further plans on the <a class="urlextern" title="https://launchpad.net/percona-xtradb" rel="nofollow" href="https://launchpad.net/percona-xtradb">Percona XtraDB Launchpad project</a>. You can also <a class="urlextern" title="https://blueprints.launchpad.net/percona-xtradb" rel="nofollow" href="https://blueprints.launchpad.net/percona-xtradb">request features</a> and <a class="urlextern" title="https://bugs.launchpad.net/percona-xtradb" rel="nofollow" href="https://bugs.launchpad.net/percona-xtradb">report bugs</a> there. Also we have setup two maillists for <a class="urlextern" title="http://groups.google.com/group/percona-discussion" rel="nofollow" href="http://groups.google.com/group/percona-discussion">General discussions</a> and  for <a class="urlextern" title="http://groups.google.com/group/percona-dev" rel="nofollow" href="http://groups.google.com/group/percona-dev">Development related questions</a>.</p>
</div>
    <hr noshade style="margin:0;height:1px" />
    <p>Entry posted by Evgeniy Stepchenko |
      <a href="http://www.mysqlperformanceblog.com/2008/12/29/xtradb-storage-engine-release-102-2/#comments">9 comments</a></p>
    <p>Add to: <a href="http://del.icio.us/post?url=http://www.mysqlperformanceblog.com/2008/12/29/xtradb-storage-engine-release-102-2/&amp;title=XtraDB storage engine release 1.0.2-2 (New Year edition)" title="Bookmark this post on del.icio.us"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/delicious.png" alt="delicious" /></a> | <a href="http://digg.com/submit?phase=2&amp;url=http://www.mysqlperformanceblog.com/2008/12/29/xtradb-storage-engine-release-102-2/&amp;title=XtraDB storage engine release 1.0.2-2 (New Year edition)" title="Digg this post on Digg.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/digg.png" alt="digg" /></a> | <a href="http://reddit.com/submit?url=http://www.mysqlperformanceblog.com/2008/12/29/xtradb-storage-engine-release-102-2/&amp;title=XtraDB storage engine release 1.0.2-2 (New Year edition)" title="Submit this post on reddit.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/reddit.png" alt="reddit" /></a> | <a href="http://www.netscape.com/submit/?U=http://www.mysqlperformanceblog.com/2008/12/29/xtradb-storage-engine-release-102-2/&amp;T=XtraDB storage engine release 1.0.2-2 (New Year edition)" title="Vote for this article on Netscape"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/netscape.gif" alt="netscape" /></a> | <a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.mysqlperformanceblog.com/2008/12/29/xtradb-storage-engine-release-102-2/&amp;title=XtraDB storage engine release 1.0.2-2 (New Year edition)" title="Add to Google Bookmarks"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/google.png" alt="Google Bookmarks" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.mysqlperformanceblog.com/2008/12/29/xtradb-storage-engine-release-102-2/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
