<?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>worldgonemad.com &#187; MySQL</title>
	<atom:link href="http://worldgonemad.com/blogs/category/open-source/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://worldgonemad.com/blogs</link>
	<description>If the world was perfect, it wouldn&#039;t be.      - Yogi Berra</description>
	<lastBuildDate>Tue, 23 Mar 2010 16:26:05 +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>MySQL spins and forks</title>
		<link>http://worldgonemad.com/blogs/pantoniades/2010/03/mysql-spins-and-forks/</link>
		<comments>http://worldgonemad.com/blogs/pantoniades/2010/03/mysql-spins-and-forks/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 16:07:53 +0000</pubDate>
		<dc:creator>pantoniades</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://worldgonemad.com/blogs/?p=20</guid>
		<description><![CDATA[There are many claimed forks of MySQL. But are they? Spin seems a better term. ]]></description>
			<content:encoded><![CDATA[<p>I was reading <a href="http://mtocker.livejournal.com/50931.html">another</a> <a href="http://openlife.cc/blogs/2010/march/map-mysql-forks-and-branches">post</a> comparing the different forks of MySQL (disclaimer: <a href="http://www.mysql.com/" target="_blank">my employer</a>), and again it seemed to me the term &#8220;fork&#8221; is somewhat imprecise. I agree with Morgan Tocker that &#8220;delta&#8221; does not capture these other creatures either &#8211; after all, isn&#8217;t a delta what makes a fork not a copy?</p>
<p><a href="http://en.wikipedia.org/wiki/Fork_(software_development)" target="_blank">Wikipedia</a> cites <a href="http://www.catb.org/~esr/" target="_blank">Eric Raymond</a>&#8217;s definition that <em>&#8220;The most important characteristic of a fork is that it spawns competing projects that cannot later exchange code, splitting the potential developer community&#8221;, </em>but also notes &#8220;However, this is not common present usage&#8221;. Kind of a shame &#8211; at least esr drew a hard line. The definition we&#8217;re left with could include any copy of MySQL with a patch or even a UDF attached to it.</p>
<p>&#8220;Fork&#8221; implies a complete departure. <a href="https://launchpad.net/drizzle" target="_blank">Drizzle</a> is no doubt a fork of MySQL. They took the source, dramatically reworked it, and made something brand new. Can&#8217;t wait to see where it goes. Tracking MySQL development and maintaining a set of additions and enhancements seems to be a different concept.</p>
<p>&#8220;Distribution&#8221; is the OS-derived term that some people prefer, but I&#8217;d like to propose a different one: <a href="http://dev.mysql.com/" target="_blank">MySQL</a> now has several <a href="http://spins.fedoraproject.org/" target="_blank">spins</a>. Quoth Fedora: &#8220;<em>spins are alternate version (sic) of [the software], tailored for various types of users via hand-picked application set or customizations.</em>&#8221;</p>
<p>What&#8217;s the difference? Drizzle has a limited ability to incorporate what the MySQL development team comes up with next, and vice versa. There is much compatibility, but it is likely only going to become less over time, not more. If you are using a &#8220;<a href="http://askmonty.org/wiki/MariaDB" target="_blank">drop-in replacement branch of the MySQL Database Server</a>&#8220;, or a binary that &#8220;<a href="http://www.percona.com/percona-lab.html" target="_blank">adds enhancements to the MySQL server code</a>&#8220;, I should think you are counting on it <em>not</em> being a fork. So what seems like an issue of semantics is really an attempt to give end users a sense of current &amp; future compatibility.</p>
<p>Terminology is important. Comments are welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://worldgonemad.com/blogs/pantoniades/2010/03/mysql-spins-and-forks/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Gentlemen, Slap your Engines!</title>
		<link>http://worldgonemad.com/blogs/pantoniades/2009/04/gentlemen-slap-your-engines/</link>
		<comments>http://worldgonemad.com/blogs/pantoniades/2009/04/gentlemen-slap-your-engines/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 20:40:21 +0000</pubDate>
		<dc:creator>pantoniades</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://worldgonemad.com/blogs/pantoniades/2009/04/gentlemen-slap-your-engines/</guid>
		<description><![CDATA[Fun with bash scripting and mysqlslap
]]></description>
			<content:encoded><![CDATA[<p>Once again, I was unable to attend all of the sessions I wanted to at this year&#8217;s <a title="MySQL User Conference website" href="http://www.mysqluc.com">User Converence</a>, but I was happy to make it to <a title="UC Bio page" href="http://www.mysqlconf.com/mysql2009/profile/15053">Bob Burgess</a>&#8216; talk on <a title="session abstract" href="http://www.mysqlconf.com/mysql2009/public/schedule/detail/7060">bash scripting with mysql</a>. The slides and examples aren&#8217;t up yet, but when they are (which may be as you read this, check the last link), they would probably also be a great tutorial. </p>
<p>So, I got bore^D^D^D^D inspired later that day to put some of the practices into use, and worked up a script to run mysqlslap in various ways against a server, and then added a couple funcitons to try it out on each storage engine. The script is below in its entirety &#8211; bash scripters, please be kind in your comments. No, I didn&#8217;t write all this just for the pun in the subject. But I&#8217;m not above that.</p>
<p>The result? </p>
<p> <i>Why</i> don&#8217;t I use more BLACKHOLE tables? They are <i>blazing fast</i>! </p>
<p>&nbsp;My results (on my lenovo T61, Fedora 10):</p>
</p>
<p><font face="courier new,courier,monospace">SLAP Base values:<br />&nbsp;50 simultaneous connections ||&nbsp; 10 runs through <br />&nbsp;Writes : 1000, 500 unique (Commit every 500) || Queries: 1000, 200 unique <br />&nbsp;Schema: 4 character columns, 8 numeric with auto-increment PK and 10 secondary indexes<br />For InnoDB: 0.389 Average, 0.299 Min, 0.651 Max<br />For MyISAM: 0.364 Average, 0.355 Min, 0.377 Max<br />For BLACKHOLE: 0.137 Average, 0.124 Min, 0.147 Max<br />For CSV: n/a Average, n/a Min, n/a Max<br />For MEMORY: 0.375 Average, 0.363 Min, 0.444 Max<br />For ARCHIVE: n/a Average, n/a Min, n/a Max<br />For MRG_MYISAM: n/a Average, n/a Min, n/a Max</font></p>
<p>The &quot;n/a&quot; ones are tables that, generally for obvious reasons, couldn&#8217;t do the slap. My error handling needs work. </p>
<p>There are some expected trends that are good to validate &#8211; InnoDB improves with more concurrency (in a relative sense), MEMORY has remarkably little fluxuation in response time, things like that. But the marketing guys really have to capitalize on those BLACKHOLE numbers <img src='http://worldgonemad.com/blogs/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<blockquote><address> <font face="courier new,courier,monospace" size="3">#!/bin/bash</font></address>
<address><font face="courier new,courier,monospace" size="3">shopt -s -o nounset</font></address>
<address><font face="courier new,courier,monospace" size="3">printf &quot;Enter root pwd: &quot;</font></address>
<address><font face="courier new,courier,monospace" size="3">read -s PASSWORD</font></address>
<address><font face="courier new,courier,monospace" size="3"># get the list of active engines from MySQL</font></address>
<address><font face="courier new,courier,monospace" size="3">ENGINES=`mysql -uroot -p$PASSWORD -B -N -e &quot;SELECT ENGINE from ENGINES WHERE SUPPORT&lt;&gt;&#8217;NO&#8217;&quot; INFORMATION_SCHEMA`</font></address>
<address><font face="courier new,courier,monospace" size="3">#for e in $ENGINES; do</font></address>
<address><font face="courier new,courier,monospace" size="3">#&nbsp;&nbsp; &nbsp;printf &quot;\nFound engines: %s&quot; $e</font></address>
<address><font face="courier new,courier,monospace" size="3">#done</font></address>
<address><font face="courier new,courier,monospace" size="3"> </font></address>
<address><font face="courier new,courier,monospace" size="3">printf &quot;\nStarting test at %s \n&quot; `date +%H:%M:%S`</font></address>
<address><font face="courier new,courier,monospace" size="3"># default initial settings</font></address>
<address><font face="courier new,courier,monospace" size="3">ITERATIONS=10</font></address>
<address><font face="courier new,courier,monospace" size="3">CONCURRENCY=50</font></address>
<address><font face="courier new,courier,monospace" size="3">COMMIT=500</font></address>
<address><font face="courier new,courier,monospace" size="3">WRITES=1000</font></address>
<address><font face="courier new,courier,monospace" size="3">let &quot;UNIQUE_WRITES=$WRITES/2&quot;</font></address>
<address><font face="courier new,courier,monospace" size="3">QUERIES=1000</font></address>
<address><font face="courier new,courier,monospace" size="3">let &quot;UNIQUE_QUERIES=$QUERIES/5&quot;</font></address>
<address><font face="courier new,courier,monospace" size="3">LOAD_TYPE=mixed</font></address>
<address><font face="courier new,courier,monospace" size="3">CHARS=4</font></address>
<address><font face="courier new,courier,monospace" size="3">INTS=8</font></address>
<address><font face="courier new,courier,monospace" size="3">INDX=10</font></address>
<address><font face="courier new,courier,monospace" size="3">SLAP=&quot;mysqlslap -u root -p$PASSWORD -h 127.0.0.1 -a -c $CONCURRENCY -i $ITERATIONS &#8211;auto-generate-sql-add-autoincrement &#8211;auto-generate-sql-secondary-indexes=$INDX &#8211;auto-generate-sql-write-number=$WRITES &#8211;auto-generate-sql-unique-write-number=$UNIQUE_WRITES &#8211;auto-generate-sql-unique-query-number=$UNIQUE_QUERIES -x $CHARS&nbsp; -y $INTS &#8211;number-of-queries=$QUERIES &#8211;commit=$COMMIT &#8211;auto-generate-sql-load-type=$LOAD_TYPE &quot;</font></address>
<address><font face="courier new,courier,monospace" size="3">function parse_slap {</font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp; &nbsp;if [ $# -lt 1 ]; then</font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;AVERAGE=&quot;n/a&quot;</font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;MINIMUM=&quot;n/a&quot;</font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;MAXIMUM=&quot;n/a&quot;</font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp; &nbsp;else</font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;AVERAGE=$1</font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;MINIMUM=$2</font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;MAXIMUM=$3</font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp; &nbsp;fi&nbsp;&nbsp; &nbsp;</font></address>
<address><font face="courier new,courier,monospace" size="3">}</font></address>
<address><font face="courier new,courier,monospace" size="3">function run_slap {</font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf &quot;%s\n&quot; &quot;SLAP $1:&quot;</font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf &quot;%s\n&quot; &quot; $CONCURRENCY simultaneous connections ||&nbsp; $ITERATIONS runs through &quot;</font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf &quot;%s\n&quot; &quot; Writes : $WRITES, $UNIQUE_WRITES unique (Commit every $COMMIT) || Queries: $QUERIES, $UNIQUE_QUERIES unique &quot;</font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf &quot;%s\n&quot; &quot; Schema: $CHARS character columns, $INTS numeric with auto-increment PK and $INDX secondary indexes&quot;</font></address>
<address><font face="courier new,courier,monospace" size="3">for engine in $ENGINES </font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp; &nbsp;do</font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;SLAPPED=`$SLAP -e $engine 2&gt;/dev/null | cut -c48-53 | tr -d \n`</font></address>
<address><font face=<br />
"courier new,courier,monospace" size="3">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;echo $SLAPPED &gt;&gt; $0.txt</font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;parse_slap $SLAPPED</font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;printf &quot;For %s: %s Average, %s Min, %s Max\n&quot; $engine $AVERAGE $MINIMUM $MAXIMUM </font></address>
<address><font face="courier new,courier,monospace" size="3">&nbsp;&nbsp; &nbsp;done</font></address>
<address><font face="courier new,courier,monospace" size="3">}</font></address>
<address><font face="courier new,courier,monospace" size="3">run_slap &quot;Base values&quot;</font></address>
<address><font face="courier new,courier,monospace" size="3">echo</font></address>
<address><font face="courier new,courier,monospace" size="3">let WRITES=WRITES*10</font></address>
<address><font face="courier new,courier,monospace" size="3">let QUERIES=QUERIES*100</font></address>
<address><font face="courier new,courier,monospace" size="3">let UNIQUE_QUERIES=QUERIES/4</font></address>
<address><font face="courier new,courier,monospace" size="3">run_slap &quot;more reads&quot;</font></address>
<address><font face="courier new,courier,monospace" size="3">echo </font></address>
<address><font face="courier new,courier,monospace" size="3">UNIQUE_QUERIES=$QUERIES</font></address>
<address><font face="courier new,courier,monospace" size="3">UNIQUE_WRITES=$WRITES</font></address>
<address><font face="courier new,courier,monospace" size="3">let COMMIT=COMMIT*3</font></address>
<address><font face="courier new,courier,monospace" size="3">run_slap &quot;More unique reads and writes&quot;</font></address>
<address><font face="courier new,courier,monospace" size="3">echo</font></address>
<address><font face="courier new,courier,monospace" size="3">let INTS=INTS*5</font></address>
<address><font face="courier new,courier,monospace" size="3">let CHARS=CHARS*5</font></address>
<address><font face="courier new,courier,monospace" size="3">let INDX=INTS+CHARS-1</font></address>
<address><font face="courier new,courier,monospace" size="3">run_slap &quot;wide indexed tables&quot;</font></address>
<address><font face="courier new,courier,monospace" size="3">echo</font></address>
<address><font face="courier new,courier,monospace" size="3">let CONCURRENCY=CONCURRENCY*10</font></address>
<address><font face="courier new,courier,monospace" size="3">run_slap &quot;massive concurrency&quot;</font></address>
</blockquote>
<p></p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://worldgonemad.com/blogs/pantoniades/2009/04/gentlemen-slap-your-engines/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
