<?xml version="1.0" encoding="iso-8859-1" ?>
<rss version="2.0"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:content="http://purl.org/rss/1.0/modules/content/">

<channel>
  <title>Planet MySQL</title>
  <link>http://www.planetmysql.org/</link>
  <pubDate>Thu, 24 Jul 2008 15:06:57 +0000</pubDate>
  <language>en</language>
  <description>Planet MySQL - http://www.planetmysql.org/</description>

  <item>
    <title>Ivan Nikitin: Contributions and Medical Status</title>
    <guid isPermaLink="false">http://blogs.mysql.com/kaj/2008/07/24/ivan-nikitin-contributions-and-medical-status/</guid>
    <link>http://blogs.mysql.com/kaj/2008/07/24/ivan-nikitin-contributions-and-medical-status/</link>
    <description>Here&amp;#8217;s an update on Ivan&amp;#8217;s status, both from a medical and contributions perspective. Three days ago, I wrote that Ivan has arrived in Germany. Instead of posting all my news on Ivan as new posting each time, I will at irregular intervals keep this page up to date.
Andrii, Ivan and the rest of the family have now started settling in in Heidelberg. Georg Richter has found an apartment for them close to the hospital, and they will move there in a few days.
The first round of tests and examinations (blood  tests, bone marrow punctation) has been concluded, but I won&amp;#8217;t share any speculations on this until we&amp;#8217;ve got them confirmed. The examinations will continue, and the best case scenario is that a transplant could happen 8 - 10 weeks from now.
Currently donations for Ivan are at about EUR 90,000. Most of it comes from Sun Dolphins (former MySQLers) and to some extent from Sun Classic employees. And more than 25% represent donations from the MySQL Community! Thanks everyone! The German clinic expects at least an additional EUR 150,000 to be needed, though, so I encourge those of you who haven&amp;#8217;t contributed yet to press the &amp;#8220;Donate&amp;#8221; button at the end of the article on our official Ivan page.
Links:

http://www.mysql.com/about/help-ivan.html 
http://blogs.mysql.com/kaj/2008/07/21/ivan-nikitin-has-arrived-in-germany/

http://en.wikipedia.org/wiki/Bone_marrow#Donation_and_transplantation_of_bone_marrow
http://en.wikipedia.org/wiki/Hematopoietic_stem_cell_transplantation
</description>
    <content:encoded><![CDATA[<p><img src="http://www.mysql.com/common/images/articles/andrii-and-ivan.jpg" align="right" />Here&#8217;s an update on Ivan&#8217;s status, both from a medical and contributions perspective. Three days ago, I <a href="http://blogs.mysql.com/kaj/2008/07/21/ivan-nikitin-has-arrived-in-germany/">wrote</a> that Ivan has arrived in Germany. Instead of posting all my news on Ivan as new posting each time, I will at irregular intervals keep this page up to date.</p>
<p>Andrii, Ivan and the rest of the family have now started settling in in Heidelberg. Georg Richter has found an apartment for them close to the hospital, and they will move there in a few days.</p>
<p>The first round of tests and examinations (blood  tests, bone marrow punctation) has been concluded, but I won&#8217;t share any speculations on this until we&#8217;ve got them confirmed. The examinations will continue, and <strong>the best case scenario is that a transplant could happen 8 - 10 weeks from now</strong>.</p>
<p><strong>Currently donations for Ivan are at about EUR 90,000</strong>. Most of it comes from <em>Sun Dolphins</em> (former MySQLers) and to some extent from Sun Classic employees. <strong>And more than 25% represent donations from the MySQL Community!</strong> Thanks everyone! <strong>The German clinic expects at least an additional EUR 150,000 to be needed</strong>, though, so I encourge those of you who haven&#8217;t contributed yet to <a href="http://www.mysql.com/about/help-ivan.html">press the &#8220;Donate&#8221; button at the end of the article on our official Ivan page</a>.</p>
<p>Links:</p>
<ul>
<li><a href="http://www.mysql.com/about/help-ivan.html">http://www.mysql.com/about/help-ivan.html </a></li>
<li><a href="http://blogs.mysql.com/kaj/2008/07/21/ivan-nikitin-has-arrived-in-germany/">http://blogs.mysql.com/kaj/2008/07/21/ivan-nikitin-has-arrived-in-germany/<br />
</a></li>
<li><a href="http://en.wikipedia.org/wiki/Bone_marrow#Donation_and_transplantation_of_bone_marrow">http://en.wikipedia.org/wiki/Bone_marrow#Donation_and_transplantation_of_bone_marrow</a></li>
<li><a href="http://en.wikipedia.org/wiki/Hematopoietic_stem_cell_transplantation">http://en.wikipedia.org/wiki/Hematopoietic_stem_cell_transplantation</a></li>
</ul>]]></content:encoded>
    <pubDate>Thu, 24 Jul 2008 12:16:39 +0000</pubDate>
    <comments>http://blogs.mysql.com/kaj/2008/07/24/ivan-nikitin-contributions-and-medical-status/#comments</comments>
    <dc:creator>Kaj Arn&amp;ouml;</dc:creator>
    <category>Architecture of Participation</category>
    <category>MySQL</category>
  </item>

  <item>
    <title>XAMPP Usability Survey 2008</title>
    <guid isPermaLink="false">http://www.apachefriends.org/en/news-article,122999.html</guid>
    <link>http://www.apachefriends.org/en/news-article,122999.html</link>
    <description>We are planning to redesign the demo pages for one of the next releases of XAMPP. Our demo pages are six years old by now and are screaming for an update. To make sure that we are not just following our personal preferences, we are now looking for volunteers for our usability survey.Thank you for taking part and special thanks to Karin Kunkel, Sonja Uhl and Constanze Weiland, who are carrying out this survey for us.</description>
    <content:encoded><![CDATA[We are planning to redesign the demo pages for one of the next releases of XAMPP. Our demo pages are six years old by now and are screaming for an update. <br><br>To make sure that we are not just following our personal preferences, we are now looking for <a href="http://www.a-kunkel.de/usability/umfrage_en.php">volunteers</a> for our usability survey.<br><br>Thank you for taking part and special thanks to Karin Kunkel, Sonja Uhl and Constanze Weiland, who are carrying out this survey for us.]]></content:encoded>
    <pubDate>Thu, 24 Jul 2008 10:17:00 +0000</pubDate>
    <dc:creator>Kai Seidler</dc:creator>
  </item>

  <item>
    <title>What Marc Fleury did next</title>
    <guid isPermaLink="false">http://blogs.the451group.com/opensource/?p=892</guid>
    <link>http://feeds.the451group.com/~r/451opensource/~3/344447127/</link>
    <description>We knew Marc Fleury couldn&amp;#8217;t stay out of the business world for long. The founder of JBoss has leaked details of his new venture, an open source home automation community named OpenRemote.
The OpenRemote team also includes the creator of Asterisk Mark Spencer, JBoss veterans Juha Lindfors, Christian Bauer, Java X10 project creator Wade Wassenberg, and Linux Home Automation founder Neil Cherry.
Together they, and others, plan to create a complete open source home automation including the OpenRemote Controller hardware, OpenRemote Console Applications to make use of the iPhone and iTouch as a universal remote (although any device with browser will work), the OpenRemote Manager, and the Beehive Database.
As Marc notes (&amp;#8221;I have invented Professional Open Source, have you heard of it?&amp;#8221;) he has also created OpenRemote Inc to support the community via debt funding and is exploring different potential business models to generate revenue.
He doesn&amp;#8217;t appear to be in a hurry to do so, however. &amp;#8220;This is first and foremost a community effort and what will come of it will come of it. Planning to far ahead would be counterproductive and futile,&amp;#8221; he writes. &amp;#8220;Figuring out the business model, this is one thing I can help with. But for right now, let&amp;#8217;s focus on a community. Without a community, there is no OSS model. The community is what you do with it.&amp;#8221;
</description>
    <content:encoded><![CDATA[<p>We knew Marc Fleury couldn&#8217;t stay out of the business world for long. The founder of JBoss has <a href="http://www.thedelphicfuture.org/2008/07/spain-move-d-7.html" onclick="javascript:urchinTracker ('/outbound/article/www.thedelphicfuture.org');">leaked</a> details of his new venture, an open source home automation community named <a href="http://openremote.org/" onclick="javascript:urchinTracker ('/outbound/article/openremote.org');">OpenRemote</a>.</p>
<p>The OpenRemote <a href="http://openremote.org/Members/WhoAreWe" onclick="javascript:urchinTracker ('/outbound/article/openremote.org');">team</a> also includes the creator of Asterisk Mark Spencer, JBoss veterans Juha Lindfors, Christian Bauer, Java X10 project creator Wade Wassenberg, and Linux Home Automation founder Neil Cherry.</p>
<p>Together they, and others, plan to create a <a href="http://openremote.org/Software/Overview" onclick="javascript:urchinTracker ('/outbound/article/openremote.org');">complete</a> open source home automation including the OpenRemote Controller hardware, OpenRemote Console Applications to make use of the iPhone and iTouch as a universal remote (although any device with browser will work), the OpenRemote Manager, and the Beehive Database.</p>
<p>As Marc <a href="http://openremote.org/Members/ABusinessModelAroundTheORC" onclick="javascript:urchinTracker ('/outbound/article/openremote.org');">notes</a> (&#8221;I have invented Professional Open Source, have you heard of it?&#8221;) he has also created OpenRemote Inc to support the community via debt funding and is exploring different potential business models to generate revenue.</p>
<p>He doesn&#8217;t appear to be in a hurry to do so, however. &#8220;This is first and foremost a community effort and what will come of it will come of it. Planning to far ahead would be counterproductive and futile,&#8221; he writes. &#8220;Figuring out the business model, this is one thing I can help with. But for right now, let&#8217;s focus on a community. Without a community, there is no OSS model. The community is what you do with it.&#8221;</p>
<img src="http://feeds.the451group.com/~r/451opensource/~4/344447127" height="1" width="1"/>]]></content:encoded>
    <pubDate>Thu, 24 Jul 2008 10:05:49 +0000</pubDate>
    <comments>http://blogs.the451group.com/opensource/2008/07/24/what-marc-fleury-did-next/#comments</comments>
    <dc:creator>The 451 Group</dc:creator>
    <category>Software</category>
    <category>451 group</category>
    <category>451caostheory</category>
    <category>451group</category>
    <category>asterisk</category>
    <category>Asterisk Mark Spencer</category>
    <category>Automation founder Neil Cherry</category>
    <category>caostheory</category>
    <category>Christian Bauer</category>
    <category>home automation</category>
    <category>Java X10</category>
    <category>Java X10 project creator Wade Wassenberg</category>
    <category>jboss</category>
    <category>JBoss veterans Juha Lindfors</category>
    <category>Juha Lindfors</category>
    <category>Linux</category>
    <category>Lin</category>
  </item>

  <item>
    <title>Getting Certified with MySQL</title>
    <guid isPermaLink="false">http://blog.thinkphp.de/archives/346-guid.html</guid>
    <link>http://blog.thinkphp.de/archives/346-Getting-Certified-with-MySQL.html</link>
    <description>Certifications are &quot;in&quot;. Nowadays you can get certifications for almost every aspect of life. Admittedly, some of those certs you can just get by surviving a boring day in a classroom or more luckily for having joined a 2 week 20k yacht trip offshore hawaii that was just regularly interrupted by attending conference speaches, workshops or lessons.
 Continue reading &quot;Getting Certified with MySQL&quot;</description>
    <content:encoded><![CDATA[<p>Certifications are "in". Nowadays you can get certifications for almost every aspect of life. Admittedly, some of those certs you can just get by surviving a boring day in a classroom or more luckily for having joined a 2 week 20k yacht trip offshore hawaii that was just regularly interrupted by attending conference speaches, workshops or lessons.</p>
 <br /><a href="http://blog.thinkphp.de/archives/346-Getting-Certified-with-MySQL.html#extended">Continue reading "Getting Certified with MySQL"</a>]]></content:encoded>
    <pubDate>Thu, 24 Jul 2008 09:52:56 +0000</pubDate>
    <comments>http://blog.thinkphp.de/archives/346-Getting-Certified-with-MySQL.html#comments</comments>
    <dc:creator>Bj&amp;ouml;rn Schotte</dc:creator>
    <category>PHP</category>
    <category>certification</category>
    <category>mysql</category>
  </item>

  <item>
    <title>Light weight MySQL - Drizzle</title>
    <guid isPermaLink="false">196 at http://www.ruturaj.net</guid>
    <link>http://www.ruturaj.net/node/196</link>
    <description>What started off as a fast light weight DB and came off as MySQL, has now grown into a heavy dB for some (we always have these :) ). 
Introducing Drizzle http://krow.livejournal.com/602409.html
In short it is...

... for Web based apps.
... for Cloud components.
Databases without business logic (aka stored procedures).

...more
read more</description>
    <content:encoded><![CDATA[<p>What started off as a fast light weight DB and came off as MySQL, has now grown into a heavy dB for some (we always have these :) ). </p>
<p>Introducing <strong>Drizzle</strong> <a href="http://krow.livejournal.com/602409.html" target="_blank">http://krow.livejournal.com/602409.html</a></p>
<p>In short it is...</p>
<ul>
<li>... for Web based apps.</li>
<li>... for Cloud components.</li>
<li>Databases without business logic (aka stored procedures).</li>
</ul>
<p><a href="https://launchpad.net/drizzle" target="_blank">...more</a></p>
<p><a href="http://www.ruturaj.net/node/196">read more</a></p>]]></content:encoded>
    <pubDate>Thu, 24 Jul 2008 07:12:43 +0000</pubDate>
    <comments>http://www.ruturaj.net/node/196#comments</comments>
    <dc:creator>Ruturaj Vartak</dc:creator>
    <category>MySQL</category>
  </item>

  <item>
    <title>PHPUnit, Selenium... Sebastian's workshops in Australia</title>
    <guid isPermaLink="false">http://arjen-lentz.livejournal.com/127111.html</guid>
    <link>http://arjen-lentz.livejournal.com/127111.html</link>
    <description>Sebastian Bergmann's slides of his presentation at OSCON this week. Quality Assurance in PHP Projects is a workshop by Sebastian (author of PHPUnit) in Melbourne (4-6 August) and Brisbane (11-12,14 August), on my invitation. This was triggered by meeting up with him earlier this year at the MySQL Conf in Santa Clara, and a discussion I had a month or so later with Jonathan Oxer of IVT.I've been promoting various aspects of development process improvements through the keynote selection at OSDC 2007, the distributed revision control talk at the combined MySQL/PHP user groups in Brisbane by Ian Clatworthy (Canonical/Bazaar), and of course test-driven development for PHP is another key aspect. PHP is pupular (essentially it runs Web 2.0) but so easy that coders can get very slack. On a larger project, this can become disastrous. I don't believe that PHP is fundamentally bad; given the right development environment, it's fine. It's just that what's regarded as standard in the Java and Ruby/Rails world, has been nonexistent, hard to use, or optional in the PHP realm.Anyway, both workshops are almost full now, just one or two places still available. No this is not marketing blah to just make you think it's popular ;-) If I say almost full, I do mean just that. I gave Jonathan a place for the Melbourne workshop, as it's his birthday coming up this Saturday (Unfortunately I can't make it to the party next week). Jonathan is a special friend to me and Open Query as we bounce around ideas and exchange interesting books. IVT also happened to be Open Query's first customer.Speaking of gifts, consider donating something for little Ivan Nikitin's operation: http://www.mysql.com/about/help-ivan.html. This is not another random sad chainletter, this is a real small smurf, son of a MySQL support engineer. Ivan and his parents have now already arrived in Germany for the tests and procedures that Ivan needs, however additional financial help is still very important.</description>
    <content:encoded><![CDATA[Sebastian Bergmann's <a href="http://sebastian-bergmann.de/archives/804-Quality-Assurance-in-PHP-Projects.html">slides</a> of his presentation at OSCON this week. <a href="http://openquery.com.au/training/php_project_qa">Quality Assurance in PHP Projects</a> is a workshop by Sebastian (author of PHPUnit) in Melbourne (4-6 August) and Brisbane (11-12,14 August), on my invitation. This was triggered by meeting up with him earlier this year at the MySQL Conf in Santa Clara, and a discussion I had a month or so later with <a href="http://www.oxer.com.au/">Jonathan Oxer</a> of IVT.<br /><br />I've been promoting various aspects of development process improvements through the keynote selection at OSDC 2007, the distributed revision control talk at the combined MySQL/PHP user groups in Brisbane by Ian Clatworthy (Canonical/Bazaar), and of course test-driven development for PHP is another key aspect. PHP is pupular (essentially it runs Web 2.0) but so easy that coders can get very slack. On a larger project, this can become disastrous. I don't believe that PHP is fundamentally bad; given the right development environment, it's fine. It's just that what's regarded as standard in the Java and Ruby/Rails world, has been nonexistent, hard to use, or optional in the PHP realm.<br /><br />Anyway, both workshops are almost full now, just one or two places still available. No this is not marketing blah to just make you think it's popular ;-) If I say almost full, I do mean just that. I gave Jonathan a place for the Melbourne workshop, as it's his birthday coming up this Saturday (Unfortunately I can't make it to the party next week). Jonathan is a special friend to me and Open Query as we bounce around ideas and exchange interesting books. IVT also happened to be Open Query's first customer.<br /><br />Speaking of gifts, consider donating something for little Ivan Nikitin's operation: <a href="http://www.mysql.com/about/help-ivan.html">http://www.mysql.com/about/help-ivan.html</a>. This is not another random sad chainletter, this is a real small smurf, son of a MySQL support engineer. Ivan and his parents have now already arrived in Germany for the tests and procedures that Ivan needs, however additional financial help is still very important.]]></content:encoded>
    <pubDate>Thu, 24 Jul 2008 03:04:09 +0000</pubDate>
    <comments>http://arjen-lentz.livejournal.com/127111.html</comments>
    <dc:creator>Arjen Lentz</dc:creator>
  </item>

  <item>
    <title>Inspect the Query Cache using MySQL Information Schema Plug-ins</title>
    <guid isPermaLink="false">tag:blogger.com,1999:blog-15319370.post-4865921806001091196</guid>
    <link>http://rpbouman.blogspot.com/2008/07/inspect-query-cahce-using-mysql.html</link>
    <description>A while ago I wrote about MySQL 5.1 information schema plug-ins.At the time, I wrote a plug-in to report the contents of the query cache, but for all kinds of reasons, I never found the time to write a decent article about it, nor to release the code.I am not sure if I'll ever find the time to write that article, but I just tidied up the code, and installed it in a new MySQL 5.1.26-rc server. It seems to work there, so I put the code up on the web.Inside the source file, there's instructions to build and deploy it. If all goes well, you can do things like:mysql&gt; select * from information_schema.mysql_cached_queries\G*************************** 1. row ***************************           STATEMENT_ID: 1            SCHEMA_NAME: test         STATEMENT_TEXT: select count(*) from world.city    RESULT_BLOCKS_COUNT: 1     RESULT_BLOCKS_SIZE: 512RESULT_BLOCKS_SIZE_USED: 1061 row in set (0.00 sec)Are you interested in this plugin-in? Do you have any suggestions? Download it, and put your comments here.</description>
    <content:encoded><![CDATA[A while ago <a href="http://rpbouman.blogspot.com/2008/02/mysql-information-schema-plugins-best.html" target="_rpb">I wrote</a> about MySQL 5.1 information schema <a href="http://dev.mysql.com/doc/refman/5.1/en/plugin-api.html" target="_rpb">plug-ins</a>.<br /><br />At the time, I wrote a plug-in to report the contents of the query cache, but for all kinds of reasons, I never found the time to write a decent article about it, nor to release the code.<br /><br />I am not sure if I'll ever find the time to write that article, but I just tidied up the code, and installed it in a new <a href="http://dev.mysql.com/downloads/mysql/5.1.html" target="s">MySQL 5.1.26-rc server</a>. It seems to work there, so I <a href="http://www.xcdsql.org/MySQL/Plugin/mysql_is_cached_queries.cc" target="x">put the code up on the web</a>.<br /><br />Inside the source file, there's instructions to build and deploy it. If all goes well, you can do things like:<pre><br />mysql> select * from information_schema.mysql_cached_queries\G<br />*************************** 1. row ***************************<br />           STATEMENT_ID: 1<br />            SCHEMA_NAME: test<br />         STATEMENT_TEXT: select count(*) from world.city<br />    RESULT_BLOCKS_COUNT: 1<br />     RESULT_BLOCKS_SIZE: 512<br />RESULT_BLOCKS_SIZE_USED: 106<br />1 row in set (0.00 sec)<br /></pre><br />Are you interested in this plugin-in? Do you have any suggestions? Download it, and put your comments here.]]></content:encoded>
    <pubDate>Thu, 24 Jul 2008 03:00:00 +0000</pubDate>
    <dc:creator>Roland Bouman</dc:creator>
  </item>

  <item>
    <title>Building MySQL from Source: There's a fine line...</title>
    <guid isPermaLink="false">tag:blogger.com,1999:blog-15319370.post-7634072472295037017</guid>
    <link>http://rpbouman.blogspot.com/2008/07/building-mysql-from-source-theres-fine.html</link>
    <description>There's a fine line between love and hate, you seeCan't wait to late, but baby I'm on it(From: &quot;Liberation&quot; by Outkast)Suppose you need to build a MySQL server with the same options as a pre-built one, distributed through the MySQL download site. Sounds strange? Well, maybe, but that's what you need if you want to compile certain MySQL 5.1 plug-ins so that they'll will play nice with such a pre-built server.Some plug-ins depend on nothing more but the plugin.h header file, but for example storage engine plug-ins require things way beyond that. If you want to compile those yourself, you are required to first build a MySQL server from source, even though you will install the plug-in in another, pre-built, server. (If you want to see how this works in practice, check out the excellent documentation for building and installing the PBXT storage engine plug-in.)Now, the snag is, the server you need to build must ideally be built in exactly the same way as the deployment server. So, the question is, how do you find out how your server was built? As it turns out, there is a very simple method to obtain the original compile line. You can find it in the mysqlbug script. On line 28 you see the following line:CONFIGURE_LINE=&quot;./configure '--prefix=/usr/local/mysql' '--localstatedir=/usr/local/mysql/data' '--libexecdir=/usr/local/mysql/bin' '--with-comment=MySQL Community Server (GPL)' '--with-server-suffix=' '--enable-thread-safe-client' '--enable-local-infile' '--enable-assembler' '--with-pic' '--with-fast-mutexes' '--with-client-ldflags=-static' '--with-mysqld-ldflags=-static' '--with-zlib-dir=bundled' '--with-big-tables' '--with-ssl' '--with-readline' '--with-embedded-server' '--with-partition' '--with-innodb' '--without-ndbcluster' '--with-archive-storage-engine' '--with-blackhole-storage-engine' '--with-csv-storage-engine' '--without-example-storage-engine' '--with-federated-storage-engine' '--with-extra-charsets=complex' 'CC=ccache gcc -static-libgcc' 'CFLAGS=-g -O3' 'CXXFLAGS=-g -O3' 'CXX=ccache gcc -static-libgcc'&quot;Are you curious what will happen if you compile your plug-in against a server that is not built the same as the deployment server? Well, the plug-in won't be &quot;playing nice&quot; with your server, and it is likely that something nasty will happen, such as a crash, or worse: the plugin may unintentionally change the behavior of the server, with unwelcome results such as data corruption.So, find the mysqlbug script, (it's normally located in the MySQL bin directory) and find that fine line...</description>
    <content:encoded><![CDATA[<blockquote><br />There's a fine line between love and hate, you see</br><br />Can't wait to late, but baby I'm on it<br/><br /></blockquote><br />(From: "Liberation" by <a href="http://www.outkast.com/" target="_ok">Outkast</a>)<br /><br />Suppose you need to build a MySQL server with the same options as a pre-built one, distributed through the <a href="http://dev.mysql.com/downloads/mysql/5.1.html">MySQL download site</a>. <br /><br />Sounds strange? <br /><br />Well, maybe, but that's what you need if you want to compile certain <a href="http://dev.mysql.com/doc/refman/5.1/en/plugin-api.html" target="_mysql">MySQL 5.1 plug-ins</a> so that they'll will play nice with such a pre-built server.<br /><br />Some plug-ins depend on nothing more but the <code>plugin.h</code> header file, but for example storage engine plug-ins require things way beyond that. If you want to compile those yourself, you are required to first build a MySQL server from source, even though you will install the plug-in in another, pre-built, server. <br /><br />(If you want to see how this works in practice, check out the <a href="http://www.primebase.org/documentation/" target="_pbxt">excellent documentation</a> for building and installing <a href="http://www.primebase.org/" target="_pbxt">the PBXT storage engine</a> plug-in.)<br /><br />Now, the snag is, the server you need to build must ideally be built in exactly the same way as the deployment server. So, the question is, how do you find out how your server was built? <br /><br />As it turns out, there is a very simple method to obtain the original compile line. You can find it in the <code>mysqlbug</code> script. On line 28 you see the following line:<pre><br />CONFIGURE_LINE="./configure '--prefix=/usr/local/mysql' '--localstatedir=/usr/local/mysql/data' '--libexecdir=/usr/local/mysql/bin' '--with-comment=MySQL Community Server (GPL)' '--with-server-suffix=' '--enable-thread-safe-client' '--enable-local-infile' '--enable-assembler' '--with-pic' '--with-fast-mutexes' '--with-client-ldflags=-static' '--with-mysqld-ldflags=-static' '--with-zlib-dir=bundled' '--with-big-tables' '--with-ssl' '--with-readline' '--with-embedded-server' '--with-partition' '--with-innodb' '--without-ndbcluster' '--with-archive-storage-engine' '--with-blackhole-storage-engine' '--with-csv-storage-engine' '--without-example-storage-engine' '--with-federated-storage-engine' '--with-extra-charsets=complex' 'CC=ccache gcc -static-libgcc' 'CFLAGS=-g -O3' 'CXXFLAGS=-g -O3' 'CXX=ccache gcc -static-libgcc'"</pre><br /><br />Are you curious what will happen if you compile your plug-in against a server that is not built the same as the deployment server? Well, the plug-in won't be "playing nice" with your server, and it is likely that something nasty will happen, such as a crash, or worse: the plugin may unintentionally change the behavior of the server, with unwelcome results such as data corruption.<br /><br />So, find the <code>mysqlbug</code> script, (it's normally located in the MySQL bin directory) and find that fine line...]]></content:encoded>
    <pubDate>Thu, 24 Jul 2008 02:00:00 +0000</pubDate>
    <dc:creator>Roland Bouman</dc:creator>
  </item>

  <item>
    <title>Peeling the MySQL Scalability Onion</title>
    <guid isPermaLink="false">http://blogs.sun.com/realneel/entry/peeling_the_mysql_scalability_onion</guid>
    <link>http://blogs.sun.com/realneel/entry/peeling_the_mysql_scalability_onion</link>
    <description>
pre { background-color:#eeeeee; }
tt {color:#395d76; font-size:120%; font-weight:bold;}

In this blog I will talk about how we (the Sun/MySQL Performance Team)
eliminated the need for a lock to get better scalability with MySQL 5.1.24+.


While comparing sysbench runs using two different versions of MySQL 5.1, I
noticed a big difference in the system utilization. One version had much more
idle time than the other. This difference was much more apparent with
high thread counts on machines with lots of CPU. A look at the system
calls showed a large number of lwp_park system calls. That is,
threads were being put to sleep.


bash # $ dtrace -qn 'syscall:::entry{@c[probefunc]=count()}' -n tick-5s'{trunc(@c, 10);exit(0)}'

  p_online                                                       1535
  ioctl                                                          2255
  fcntl                                                          6134
  priocntlsys                                                    6462
  write                                                          6492
  read                                                          12775
  yield                                                         19065
  gtime                                                        313927
  pollsys                                                      321074
  lwp_park                                                     951749
 

Investigating why threads are being parked showed a very interesting
stacktrace



              libc.so.1`__lwp_park+0x10
              libc.so.1`cond_wait_queue+0x28
              libc.so.1`cond_wait+0x10
              libc.so.1`pthread_cond_wait+0x8
              mysqld`os_event_wait_low+0x3c
              mysqld`sync_array_wait_event+0x1c0
              mysqld`mutex_spin_wait+0x1c4
              mysqld`mutex_enter_func+0x1c
              mysqld`rw_lock_x_lock_func+0x3b4
              mysqld`mtr_x_lock_func+0x10
              mysqld`fsp_get_available_space_in_free_extents+0x30
              mysqld`int ha_innobase::info(unsigned)+0x164
              mysqld`bool make_join_statistics(JOIN*,TABLE.. +0x180
              mysqld`int JOIN::optimize()+0x670
              mysqld`bool mysql_select(THD*,Item***,TABLE_.. +0x224
              mysqld`bool handle_select(THD*,st_lex*,selec.. +0xc4
              mysqld`bool execute_sqlcom_select(THD*,TABLE.. +0x1c8
              mysqld`int mysql_execute_command(THD*)+0x380
              mysqld`bool Prepared_statement::execute(Stri.. +0x29c
              mysqld`bool Prepared_statement::execute_loop.. +0xbc


Looking at make_join_statistics() we see that it calls 
ha_innobase::info() with HA_STATUS_VARIABLE |
HA_STATUS_NO_LOCK. A quick search for the definition of
HA_STATUS_NO_LOCK shows 



/*
  assuming the table keeps shared actual copy of the 'info' and
  local, possibly outdated copy, the following flag means that
  it should not try to get the actual data (locking the shared structure)
  slightly outdated version will suffice
*/
#define HA_STATUS_NO_LOCK        2



So the mysql server is requesting ha_innobase::info() to not
hold a lock, and it is being ignored by ha_innobase::info()!.


I compared against MySQL 5.0 and saw that this particular lock was not
held when ha_innobase::info() was called. Searching through 
the commit logs I found that this was introduced by 
Bug#32440.




Quickly hacking the code to revert to the old behaviour gave 
a big boost in performance. Hence I filed
Bug #38185 ha_innobase::info can hold locks even when called with HA_STATUS_NO_LOCK. Luckily its a very small change and a fix is already
in progress.




Moral of the story? A simple contented lock can bring down your performance
by quite a lot.</description>
    <content:encoded><![CDATA[<style TYPE="text/css">
pre { background-color:#eeeeee; }
tt {color:#395d76; font-size:120%; font-weight:bold;}
</style>
In this blog I will talk about how we (the Sun/MySQL Performance Team)
eliminated the need for a lock to get better scalability with MySQL 5.1.24+.

<P>
While comparing sysbench runs using two different versions of MySQL 5.1, I
noticed a big difference in the system utilization. One version had much more
idle time than the other. This difference was much more apparent with
high thread counts on machines with lots of CPU. A look at the system
calls showed a large number of <tt>lwp_park</tt> system calls. That is,
threads were being put to sleep.

<pre>
bash # $ dtrace -qn 'syscall:::entry{@c[probefunc]=count()}' -n tick-5s'{trunc(@c, 10);exit(0)}'

  p_online                                                       1535
  ioctl                                                          2255
  fcntl                                                          6134
  priocntlsys                                                    6462
  write                                                          6492
  read                                                          12775
  yield                                                         19065
  gtime                                                        313927
  pollsys                                                      321074
  lwp_park                                                     951749
</pre> 

Investigating why threads are being <i>parked</i> showed a very interesting
stacktrace


<pre>
              libc.so.1`__lwp_park+0x10
              libc.so.1`cond_wait_queue+0x28
              libc.so.1`cond_wait+0x10
              libc.so.1`pthread_cond_wait+0x8
              mysqld`os_event_wait_low+0x3c
              mysqld`sync_array_wait_event+0x1c0
              mysqld`mutex_spin_wait+0x1c4
              mysqld`mutex_enter_func+0x1c
              mysqld`rw_lock_x_lock_func+0x3b4
              mysqld`mtr_x_lock_func+0x10
              mysqld`fsp_get_available_space_in_free_extents+0x30
              mysqld`int ha_innobase::info(unsigned)+0x164
              mysqld`bool make_join_statistics(JOIN*,TABLE.. +0x180
              mysqld`int JOIN::optimize()+0x670
              mysqld`bool mysql_select(THD*,Item***,TABLE_.. +0x224
              mysqld`bool handle_select(THD*,st_lex*,selec.. +0xc4
              mysqld`bool execute_sqlcom_select(THD*,TABLE.. +0x1c8
              mysqld`int mysql_execute_command(THD*)+0x380
              mysqld`bool Prepared_statement::execute(Stri.. +0x29c
              mysqld`bool Prepared_statement::execute_loop.. +0xbc
</pre>

Looking at <tt>make_join_statistics()</tt> we see that it calls 
<tt>ha_innobase::info()</tt> with <tt>HA_STATUS_VARIABLE |
HA_STATUS_NO_LOCK</tt>. A quick search for the definition of
<tt>HA_STATUS_NO_LOCK</tt> shows 


<pre>
/*
  assuming the table keeps shared actual copy of the 'info' and
  local, possibly outdated copy, the following flag means that
  it should not try to get the actual data (locking the shared structure)
  slightly outdated version will suffice
*/
#define HA_STATUS_NO_LOCK        2

</pre>

So the mysql server is requesting <tt>ha_innobase::info()</tt> to not
hold a lock, and it is being ignored by <tt>ha_innobase::info()</tt>!.

<P>
I compared against MySQL 5.0 and saw that this particular lock was not
held when <tt>ha_innobase::info()</tt> was called. Searching through 
the commit logs I found that this was introduced by 
<a href="http://bugs.mysql.com/32440">Bug#32440</a>.


<P>

Quickly hacking the code to revert to the old behaviour gave 
a big boost in performance. Hence I filed
<a href="http://bugs.mysql.com/38185">Bug #38185 ha_innobase::info can hold locks even when called with HA_STATUS_NO_LOCK</a>. Luckily its a very small change and a fix is already
in progress.


<p>

Moral of the story? A simple contented lock can bring down your performance
by quite a lot.]]></content:encoded>
    <pubDate>Thu, 24 Jul 2008 01:55:08 +0000</pubDate>
    <dc:creator>Neelakanth Nadgir</dc:creator>
  </item>

  <item>
    <title>need anything dampened?</title>
    <guid isPermaLink="false">tag:trainedmonkey.com,2008-07-23:3150</guid>
    <link>http://trainedmonkey.com/2008/7/23/need_anything_dampened_</link>
    <description>drizzle is an interesting new development in the mysql landscape. brian aker, who came along to sun microsystems in the acquisition but is actually now part of sun labs, not the database group, has taken the mysql server and started to strip it down to the bare metal. he isn?t working alone, of course, but has picked up some contributors during the stealthy period before they announced it at oscon on tuesday.if you were paying attention the other day, you may have dug around my launchpad code page and noticed that i had a branch of drizzle where i was applying some fixes to make it build on mac os x. that should be merged into the main tree soon, so that branch will soon be retired. i?m not sure what i might try to do next.drizzle isn?t something i am working on officially, but i can?t help but try to push things into some directions that i think would be fruitful. i certainly feel like i have a better shot of shifting its inertia than that of the mysql server.</description>
    <content:encoded><![CDATA[<a href="https://launchpad.net/drizzle">drizzle</a> is an interesting new development in the mysql landscape. <a href="http://tangent.org/">brian aker</a>, who came along to sun microsystems in the acquisition but is actually now part of sun labs, not the database group, has taken the mysql server and started to strip it down to the bare metal. he isn?t working alone, of course, but has picked up some contributors during the stealthy period before they announced it at oscon on tuesday.<br /><br />if you were paying attention the other day, you may have dug around my <a href="https://code.launchpad.net/~jimw">launchpad code page</a> and noticed that i had a branch of drizzle where i was applying some fixes to make it build on mac os x. that should be merged into the main tree soon, so that branch will soon be retired. i?m not sure what i might try to do next.<br /><br />drizzle isn?t something i am working on officially, but i can?t help but try to push things into some directions that i think would be fruitful. i certainly feel like i have a better shot of shifting its inertia than that of the mysql server.]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 23:07:12 +0000</pubDate>
    <dc:creator>Jim Winstead</dc:creator>
  </item>

  <item>
    <title>Using BASE instead of ACID for scalability</title>
    <guid isPermaLink="false">http://www.xaprb.com/blog/2008/07/23/using-base-instead-of-acid-for-scalability/</guid>
    <link>http://www.xaprb.com/blog/2008/07/23/using-base-instead-of-acid-for-scalability/</link>
    <description>My editor Andy Oram recently sent me an ACM article on BASE, a technique for improving scalability by being willing to give up some other properties of traditional transactional systems.

It&amp;#8217;s a really good read.  In many ways it is the same religion everyone who&amp;#8217;s successfully scaled a system Really Really Big has advocated.  But this is different: it&amp;#8217;s a very clear article, with a great writing style that really cuts out the fat and teaches the principles without being specific to any environment or sounding egotistical.

He mentions a lot of current thinking in the field, including the CAP principle, which Robert Hodges of Continuent first turned me onto a couple months ago.  It has been proven formally, though I have not read the proof myself.

One of the most important concepts he advances is giving up the illusion of control.  As programmers and DBAs, I think we may tend to like control too much.  Foreign keys are a perfect example.  I think the point here is that these things make you feel safe, but they don&amp;#8217;t really make you safe.  Just as with so many things in life, recognizing our inability to really control the systems we build is key to working with their strengths &amp;#8212; instead of trying to bind them with iron bands.

Another great point is idempotency.  This is a great way to help avoid problems with MySQL replication, by the way.  I&amp;#8217;ll leave the &amp;#8220;why&amp;#8221; as an exercise for the reader, but let me just point out that the file MySQL uses to remember its current position in replication is not synced to disk, so it will almost certainly get out of whack if MySQL dies ungracefully.  (Google has solved this problem.)

A highly recommended read &amp;#8212; worth more than most case studies about how specific companies have scaled their specific systems.ACID, ACM, Andy Oram, BASE, CAP, Continuent, foreign keys, mysql, replication, Robert Hodges, scaling, transactions</description>
    <content:encoded><![CDATA[<p>My editor <a href="http://www.oreillynet.com/pub/au/36" onclick="javascript:urchinTracker ('/outbound/article/www.oreillynet.com');">Andy Oram</a> recently sent me an <a href="http://acmqueue.com/modules.php?name=Content&#038;pa=showpage&#038;pid=540" onclick="javascript:urchinTracker ('/outbound/article/acmqueue.com');">ACM article on BASE, a technique for improving scalability</a> by being willing to give up some other properties of traditional transactional systems.</p>

<p>It&#8217;s a really good read.  In many ways it is the same religion everyone who&#8217;s successfully scaled a system Really Really Big has advocated.  But this is different: it&#8217;s a very clear article, with a great writing style that really cuts out the fat and teaches the principles without being specific to any environment or sounding egotistical.</p>

<p>He mentions a lot of current thinking in the field, including the CAP principle, which <a href="http://www.continuent.com/" onclick="javascript:urchinTracker ('/outbound/article/www.continuent.com');">Robert Hodges of Continuent</a> first turned me onto a couple months ago.  <a href="http://citeseer.ist.psu.edu/544596.html" onclick="javascript:urchinTracker ('/outbound/article/citeseer.ist.psu.edu');">It has been proven formally</a>, though I have not read the proof myself.</p>

<p>One of the most important concepts he advances is giving up the illusion of control.  As programmers and DBAs, I think we may tend to like control too much.  Foreign keys are a perfect example.  I think the point here is that these things make you feel safe, but they don&#8217;t really make you safe.  Just as with so many things in life, recognizing our inability to really control the systems we build is key to working with their strengths &#8212; instead of trying to bind them with iron bands.</p>

<p>Another great point is idempotency.  This is a great way to help avoid problems with MySQL replication, by the way.  I&#8217;ll leave the &#8220;why&#8221; as an exercise for the reader, but let me just point out that the file MySQL uses to remember its current position in replication is not synced to disk, so it will almost certainly get out of whack if MySQL dies ungracefully.  (Google has solved this problem.)</p>

<p>A highly recommended read &#8212; worth more than most case studies about how specific companies have scaled their specific systems.</p><a href="http://www.xaprb.com/blog/tag/acid/" rel="tag" >ACID</a>, <a href="http://www.xaprb.com/blog/tag/acm/" rel="tag" >ACM</a>, <a href="http://www.xaprb.com/blog/tag/andy-oram/" rel="tag" >Andy Oram</a>, <a href="http://www.xaprb.com/blog/tag/base/" rel="tag" >BASE</a>, <a href="http://www.xaprb.com/blog/tag/cap/" rel="tag" >CAP</a>, <a href="http://www.xaprb.com/blog/tag/continuent/" rel="tag" >Continuent</a>, <a href="http://www.xaprb.com/blog/tag/foreign-keys/" rel="tag" >foreign keys</a>, <a href="http://www.xaprb.com/blog/tag/mysql/" rel="tag" >mysql</a>, <a href="http://www.xaprb.com/blog/tag/replication/" rel="tag" >replication</a>, <a href="http://www.xaprb.com/blog/tag/robert-hodges/" rel="tag" >Robert Hodges</a>, <a href="http://www.xaprb.com/blog/tag/scaling/" rel="tag" >scaling</a>, <a href="http://www.xaprb.com/blog/tag/transactions/" rel="tag" >transactions</a>]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 22:07:15 +0000</pubDate>
    <comments>http://www.xaprb.com/blog/2008/07/23/using-base-instead-of-acid-for-scalability/#comments</comments>
    <dc:creator>Baron Schwartz (xaprb)</dc:creator>
    <category>SQL</category>
    <category>Commentary</category>
    <category>ACID</category>
    <category>ACM</category>
    <category>Andy Oram</category>
    <category>BASE</category>
    <category>CAP</category>
    <category>Continuent</category>
    <category>foreign keys</category>
    <category>mysql</category>
    <category>replication</category>
    <category>Robert Hodges</category>
    <category>scaling</category>
    <category>transactions</category>
  </item>

  <item>
    <title>March 2008 Boston MySQL User Group ? Slides and Video Are Up!</title>
    <guid isPermaLink="false">http://www.pythian.com/blogs/864/march-2008-boston-mysql-user-group-slides-and-video-are-up</guid>
    <link>http://www.pythian.com/blogs/864/march-2008-boston-mysql-user-group-slides-and-video-are-up</link>
    <description>Well, nobody from Sun showed up in person, but we got a great rendition of &amp;#8220;Where were you when you heard THE NEWS that Sun bought MySQL?&amp;#8221; from Mark Rubin, the MySQL Sales Engineer for the New England area, and from Giuseppe Maxia, who revealed something very interesting and riveting.
From there, Giuseppe gave a short talk on what it&amp;#8217;s like to work at MySQL, and then we moved on to the topic of the user group meeting, &amp;#8220;What is MySQL Cluster Good For?&amp;#8221;
The slides for the talk are downloadable in PDF Format 61kB and Flash (SWF) format, 31kB
The video can be played at http://technocation.org/node/572/play and downloaded (404 Mb) at http://technocation.org/node/572/download.</description>
    <content:encoded><![CDATA[<p>Well, nobody from Sun showed up in person, but we got a great rendition of &#8220;Where were you when you heard THE NEWS that Sun bought MySQL?&#8221; from Mark Rubin, the MySQL Sales Engineer for the New England area, and from <A HREF="http://datacharmer.blogspot.com">Giuseppe Maxia</A>, who revealed something very interesting and riveting.</p>
<p>From there, Giuseppe gave a short talk on what it&#8217;s like to work at MySQL, and then we moved on to the topic of the user group meeting, &#8220;What is MySQL Cluster Good For?&#8221;</p>
<p>The slides for the talk are downloadable in <A HREF="http://technocation.org/files/doc/2008_03_ClusterUse.pdf">PDF Format 61kB</A> and <A HREF="http://technocation.org/files/doc/2008_03_ClusterUse.swf">Flash (SWF) format, 31kB</A></p>
<p>The video can be played at <A HREF="http://technocation.org/node/572/play">http://technocation.org/node/572/play</A> and downloaded (404 Mb) at <A HREF="http://technocation.org/node/572/download">http://technocation.org/node/572/download</A>.</p>]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 21:08:40 +0000</pubDate>
    <comments>http://www.pythian.com/blogs/864/march-2008-boston-mysql-user-group-slides-and-video-are-up#comments</comments>
    <dc:creator>Sheeri K. Cabral</dc:creator>
    <category>MySQL</category>
    <category>Pythian Goodies</category>
    <category>cluster</category>
    <category>user group</category>
    <category>video</category>
  </item>

  <item>
    <title>Cluster Talk at March 2008 Boston User Group -- Slides and Video Are Up!</title>
    <guid isPermaLink="false">572 at http://www.technocation.org</guid>
    <link>http://www.technocation.org/content/cluster-talk-march-2008-boston-user-group-slides-and-video-are-%21</link>
    <description>Well, nobody from Sun showed up in person, but we got a great rendition of &quot;Where were you when you heard THE NEWS that Sun bought MySQL?&quot; from Mark Rubin, the MySQL Sales Engineer for the New England area, and from Giuseppe Maxia, who revealed something very interesting and riveting.
From there, Giuseppe gave a short talk on what it's like to work at MySQL, and then we moved on to the topic of the user group meeting, &quot;What is MySQL Cluster Good For?&quot;
The slides for the talk are downloadable in PDF Format 61kB and Flash (SWF) format, 31kB
read more</description>
    <content:encoded><![CDATA[<p>Well, nobody from Sun showed up in person, but we got a great rendition of "Where were you when you heard THE NEWS that Sun bought MySQL?" from Mark Rubin, the MySQL Sales Engineer for the New England area, and from <A href="http://datacharmer.blogspot.com">Giuseppe Maxia</A>, who revealed something very interesting and riveting.</p>
<p>From there, Giuseppe gave a short talk on what it's like to work at MySQL, and then we moved on to the topic of the user group meeting, "What is MySQL Cluster Good For?"</p>
<p>The slides for the talk are downloadable in <A href="http://technocation.org/files/doc/2008_03_ClusterUse.pdf">PDF Format 61kB</A> and <A href="http://technocation.org/files/doc/2008_03_ClusterUse.swf">Flash (SWF) format, 31kB</A></p>
<p><a href="http://www.technocation.org/content/cluster-talk-march-2008-boston-user-group-slides-and-video-are-%21">read more</a></p>]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 21:02:10 +0000</pubDate>
    <comments>http://www.technocation.org/content/cluster-talk-march-2008-boston-user-group-slides-and-video-are-%21#comments</comments>
    <dc:creator>Technocation</dc:creator>
    <category>Presentations/Videos</category>
    <category>Learning</category>
  </item>

  <item>
    <title>How Much Does a Damian Conway? (Keynote Video)</title>
    <guid isPermaLink="false">http://www.pythian.com/blogs/1136/how-much-does-a-damian-conway-keynote-video</guid>
    <link>http://www.pythian.com/blogs/1136/how-much-does-a-damian-conway-keynote-video</link>
    <description>The last keynote of Tuesday evening at OSCon 2008 was entitled &amp;#8220;Temporarily Quaquaversal Virtual Nanomachine Programming in Multiple Topologically Connected Quantum-Relativistic Parallel Timespaces&amp;#8230;..Made Easy!&amp;#8221;
Damian Conway is a speaker that should not be missed.  He spends his time hacking perl to do fascinating and obscure feats of technology such as time travel.  This video is just over an hour of rolling laughter that will entertain you into realizing what a genius Damian Conway is.
Now, most of my exposure is within the MySQL Community, so if folks could pass the links to the video along to other communities, that would be great.
(This video is at 1.0 Mb/sec.  Watch the video online at http://technocation.org/node/571/play or download it at http://technocation.org/node/571/download.  Please do not download the file if you are on the conference network, these links are not time sensitive.)</description>
    <content:encoded><![CDATA[<p>The last keynote of Tuesday evening at OSCon 2008 was entitled &#8220;Temporarily Quaquaversal Virtual Nanomachine Programming in Multiple Topologically Connected Quantum-Relativistic Parallel Timespaces&#8230;..Made Easy!&#8221;</p>
<p>Damian Conway is a speaker that should not be missed.  He spends his time hacking perl to do fascinating and obscure feats of technology such as time travel.  This video is just over an hour of rolling laughter that will entertain you into realizing what a genius Damian Conway is.</p>
<p>Now, most of my exposure is within the MySQL Community, so if folks could pass the links to the video along to other communities, that would be great.</p>
<p>(This video is at 1.0 Mb/sec.  Watch the video online at <A HREF="http://technocation.org/node/571/play">http://technocation.org/node/571/play</A> or download it at <A HREF="http://technocation.org/node/571/download">http://technocation.org/node/571/download</A>.  Please do not download the file if you are on the conference network, these links are not time sensitive.)</p>]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 20:27:49 +0000</pubDate>
    <comments>http://www.pythian.com/blogs/1136/how-much-does-a-damian-conway-keynote-video#comments</comments>
    <dc:creator>Sheeri K. Cabral</dc:creator>
    <category>Non-Tech Articles</category>
    <category>damian conway</category>
    <category>oscon08</category>
    <category>perl</category>
  </item>

  <item>
    <title>How Much Does a Damian Conway?</title>
    <guid isPermaLink="false">571 at http://www.technocation.org</guid>
    <link>http://www.technocation.org/content/how-much-does-damian-conway%3F</link>
    <description>The last keynote of Tuesday evening at OSCon 2008 was entitled &quot;Temporarily Quaquaversal Virtual Nanomachine Programming in Multiple Topologically Connected Quantum-Relativistic Parallel Timespaces.....Made Easy!&quot;
Damian Conway is a speaker that should not be missed.  He spends his time hacking perl to do fascinating and obscure feats of technology such as time travel.  This video is just over an hour of rolling laughter that will entertain you into realizing what a genius Damian Conway is.
Now, most of my exposure is within the MySQL Community, so if folks could pass the links to the video along to other communities, that would be great.
read more</description>
    <content:encoded><![CDATA[<p>The last keynote of Tuesday evening at OSCon 2008 was entitled "Temporarily Quaquaversal Virtual Nanomachine Programming in Multiple Topologically Connected Quantum-Relativistic Parallel Timespaces.....Made Easy!"</p>
<p>Damian Conway is a speaker that should not be missed.  He spends his time hacking perl to do fascinating and obscure feats of technology such as time travel.  This video is just over an hour of rolling laughter that will entertain you into realizing what a genius Damian Conway is.</p>
<p>Now, most of my exposure is within the MySQL Community, so if folks could pass the links to the video along to other communities, that would be great.</p>
<p><a href="http://www.technocation.org/content/how-much-does-damian-conway%3F">read more</a></p>]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 20:23:55 +0000</pubDate>
    <comments>http://www.technocation.org/content/how-much-does-damian-conway%3F#comments</comments>
    <dc:creator>Technocation</dc:creator>
    <category>Presentations/Videos</category>
    <category>Conferences</category>
  </item>

  <item>
    <title>Brian, Monty and Tim O?Reilly at OSCON 2008 Keynote</title>
    <guid isPermaLink="false">http://www.bytebot.net/blog/?p=878</guid>
    <link>http://www.bytebot.net/blog/archives/2008/07/23/brian-monty-and-tim-oreilly-at-oscon-2008-keynote</link>
    <description>Interested in MySQL? Drizzle? How the Sun acquisition is going for MySQL? Listen to Brian, Monty, and Tim speak about this, at the OSCON panel. Watch the video, its 20+ minutes, it starts off a bit shaky (oops), but I&amp;#8217;m mostly happy with the rest. Enjoy.
 </description>
    <content:encoded><![CDATA[<p>Interested in MySQL? Drizzle? How the Sun acquisition is going for MySQL? Listen to Brian, Monty, and Tim <a href="http://video.google.com/videoplay?docid=8123253123321570062&amp;hl=en">speak</a> about this, at the OSCON panel. Watch the <a href="http://video.google.com/videoplay?docid=8123253123321570062&amp;hl=en">video</a>, its 20+ minutes, it starts off a bit shaky (oops), but I&#8217;m mostly happy with the rest. Enjoy.</p>
<p><embed id="VideoPlayback" style="width:400px;height:326px" allowFullScreen="true" src="http://video.google.com/googleplayer.swf?docid=8123253123321570062&#038;hl=en&#038;fs=true" type="application/x-shockwave-flash"> </embed></p>]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 19:36:22 +0000</pubDate>
    <comments>http://www.bytebot.net/blog/archives/2008/07/23/brian-monty-and-tim-oreilly-at-oscon-2008-keynote#comments</comments>
    <dc:creator>Colin Charles</dc:creator>
    <category>Drizzle</category>
    <category>MySQL</category>
    <category>Sun</category>
    <category>brian aker</category>
    <category>monty widenius</category>
    <category>oscon</category>
    <category>oscon2008</category>
    <category>tim o'reilly</category>
  </item>

  <item>
    <title>The fast paced open source ecosystem</title>
    <guid isPermaLink="false">http://ronaldbradford.com/blog/?p=1137</guid>
    <link>http://ronaldbradford.com/blog/the-fast-paced-open-source-ecosystem-2008-07-24/</link>
    <description>This morning at OSCON 08, Tim O&amp;#8217;Reilly&amp;#8217;s opening keynote Open Source on the O&amp;#8217;Reilly Radar included a slide on Drizzle, giving this new project maximum exposure to the Open Source community.
Drizzle was only officially announced yesterday in  Drizzle, Clouds, ?What If?? by primary architect Brian Aker. Things move fast. There has been a number of comments from people yesterday including  Mark Attwood, Monty Widenus,Monty Taylor,Ronald Bradford, Arjen Lentz, Lewis Cunningham, Jeremy Cole, Paul McCullagh,451 Group,Matt Asay, Assaf Arkin, SlashDot, Builder.au and MySQL HA.
The Drizzle Launchpad project has reached 5th on a Google Search.
Unfortunately, not all uptake and feedback was positive.  The official Wikipedia page for Drizzle  was marked for speedy deletion almost instantly, and within a few hours permanently deleted.</description>
    <content:encoded><![CDATA[<p>This morning at <a href=""http://en.oreilly.com/oscon2008/">OSCON 08</a>, Tim O&#8217;Reilly&#8217;s opening keynote <a href="http://en.oreilly.com/oscon2008/public/schedule/detail/4408">Open Source on the O&#8217;Reilly Radar</a> included a slide on Drizzle, giving this new project maximum exposure to the Open Source community.</p>
<p>Drizzle was only officially announced yesterday in  <a href="http://krow.livejournal.com/602409.html">Drizzle, Clouds, ?What If??</a> by primary architect Brian Aker. Things move fast. There has been a number of comments from people yesterday including  <a href="http://fallenpegasus.livejournal.com/730102.html">Mark Attwood</a>, <a href="http://monty-says.blogspot.com/2008/07/what-if.html">Monty Widenus</a>,<a href="http://mysql-ha.com/2008/07/22/building-drizzle-cleanly-with-all-the-warnings/">Monty Taylor</a>,<a href="http://ronaldbradford.com/blog/the-new-kid-on-the-block-drizzle-2008-07-23/">Ronald Bradford</a>, <a href="http://arjen-lentz.livejournal.com/126798.html">Arjen Lentz</a>, <a href="http://mysqldbnews.blogspot.com/2008/07/is-drizzle-good-for-mysql.html">Lewis Cunningham</a>, <a href="http://jcole.us/blog/archives/2008/07/23/on-mysql-forks-and-mysqls-non-open-source-documentation/">Jeremy Cole</a>, <a href="http://pbxt.blogspot.com/2008/07/drizzle-goes-back-to-roots.html>Paul McCullagh</a>,<a href="http://blogs.the451group.com/opensource/2008/07/23/891/">451 Group</a>,<a href="http://news.cnet.com/8301-13505_3-9997274-16.html">Matt Asay</a>, <a href="http://blog.labnotes.org/2008/07/23/drizzle-smaller-database-for-larger-data-sets/">Assaf Arkin</a>, <a href="http://developers.slashdot.org/developers/08/07/23/1234203.shtml">SlashDot</a>, <a href="http://www.builderau.com.au/news/soa/Drizzle-MySQL-slims-down-on-Aker-s-diet/0,339028227,339290807,00.htm">Builder.au</a> and <a href="http://mysql-ha.com/2008/07/22/building-drizzle-cleanly-with-all-the-warnings/">MySQL HA</a>.</p>
<p>The <a href="https://launchpad.net/drizzle">Drizzle Launchpad project</a> has reached 5th on a <a href="http://www.google.com/search?hl=en&#038;q=drizzle&#038;btnG=Google+Search">Google Search</a>.</p>
<p>Unfortunately, not all uptake and feedback was positive.  The official Wikipedia page for <a href="http://en.wikipedia.org/w/index.php?title=Drizzle_%28database_server%29&#038;action=edit&#038;redlink=1">Drizzle </a> was marked for speedy deletion almost instantly, and within a few hours permanently deleted.</p>]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 18:22:43 +0000</pubDate>
    <dc:creator>Ronald Bradford</dc:creator>
  </item>

  <item>
    <title>GSoC Weekly Report - Week 8</title>
    <guid isPermaLink="false">tag:blogger.com,1999:blog-568056468603638772.post-6573310016324195899</guid>
    <link>http://gsoc-forge.blogspot.com/2008/07/gsoc-weekly-report-week-8.html</link>
    <description>Project: MySQL Forge RSS/Atom feedsKEY ACCOMPLISHMENTS LAST WEEK* Installing SeleniumRC and exercise with its functionality.* Write new PHPUnit tests* Final merge for RSS/Atom feeds in BZR trunk KEY TASKS THAT STALLED LAST WEEK* NoneKEY CONCERNS* Merging existing PHPUnit tests with SeleniumRC is harder then I expected it to be.TASKS IN THE UPCOMING WEEK* Integrating PHPUnit tests into SeleniumRC* Cleaning up the mess from the different branches</description>
    <content:encoded><![CDATA[<span style="font-weight:bold;">Project: MySQL Forge RSS/Atom feeds</span><br /><br />KEY ACCOMPLISHMENTS LAST WEEK<br /><br />* Installing SeleniumRC and exercise with its functionality.<br />* Write new PHPUnit tests<br />* Final merge for RSS/Atom feeds in BZR trunk <br /><br />KEY TASKS THAT STALLED LAST WEEK<br /><br />* None<br /><br />KEY CONCERNS<br /><br />* Merging existing PHPUnit tests with SeleniumRC is harder then I expected it to be.<br /><br />TASKS IN THE UPCOMING WEEK<br /><br />* Integrating PHPUnit tests into SeleniumRC<br />* Cleaning up the mess from the different branches]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 16:41:00 +0000</pubDate>
    <dc:creator>Robert Vandermast</dc:creator>
  </item>

  <item>
    <title>Wednesday party at Oscon 8pm - midnight</title>
    <guid isPermaLink="false">http://weblog.infoworld.com/openresource/archives/2008/07/wednesday_party.html</guid>
    <link>http://weblog.infoworld.com/openresource/archives/2008/07/wednesday_party.html?source=rss</link>
    <description>party on, garth!  READ MORE </description>
    <content:encoded><![CDATA[party on, garth! <a href="http://weblog.infoworld.com/openresource/archives/2008/07/wednesday_party.html?source=rss"> READ MORE</a> </p>]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 16:34:26 +0000</pubDate>
    <dc:creator>InfoWorld</dc:creator>
    <category>Open Source</category>
  </item>

  <item>
    <title>MySQL forks itself with Drizzle</title>
    <guid isPermaLink="false">http://blogs.cnet.com/8301-13505_1-9997274-16.html</guid>
    <link>http://blogs.cnet.com/8301-13505_1-9997274-16.html</link>
    <description>In most companies, there are prohibitions against creating competitive, derivative works of the company's intellectual property.  At MySQL (now Sun), well, things may be a little different.

As announced at the O'Reilly Open Source Convention, Brian Aker, MySQL's director of architecture, has launched Drizzle, an optimized and trimmed-down version ...</description>
    <content:encoded><![CDATA[<p>In most companies, there are prohibitions against creating competitive, derivative works of the company's intellectual property.  At MySQL (now Sun), well, things may be a little different.</p>

<p><a href="http://developers.slashdot.org/article.pl?sid=08/07/23/1234203">As announced at the O'Reilly Open Source Convention</a>, Brian Aker, MySQL's director of architecture, has launched Drizzle, an <a href="http://www.builderau.com.au/news/soa/Drizzle-MySQL-slims-down-on-Aker-s-diet/0,339028227,339290807,00.htm">optimized and trimmed-down version</a> ...</p>]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 15:37:00 +0000</pubDate>
    <dc:creator>Matt Asay</dc:creator>
  </item>

  <item>
    <title>MySQL?s cloudy new database project</title>
    <guid isPermaLink="false">http://blogs.the451group.com/opensource/?p=891</guid>
    <link>http://feeds.the451group.com/~r/451opensource/~3/343597642/</link>
    <description>When Sun acquired MySQL and announced that it would invest the resources necessary to position the open source database for mission-critical deployments, I think everyone assumed that the database would eventually become bigger and heavier.
Few would have predicted that we would also see a project that would make the database smaller and lighter, but that is exactly what Drizzle, a new project from Sun&amp;#8217;s MySQL director of architecture Brian Aker, is all about.
Drizzle is taking a back-to-the-drawing-board approach to refactoring MySQL by ripping out much of the additional enterprise functionality that has gone into it since version 4.1 and focusing on the demands of a core set of applications. 
As Brian explains : &amp;#8220;Stored Procedures, Views, Triggers, Query Cache, and Prepared Statements are gone for now. The field types have been simplified and there is an open debate about the SHOW commands (I am falling into the camp that think they may just belong in the client application but not in the server). Will any of this go back in? It is hard to say. The goal right now is to target a certain class of applications/developers and see if this is useful. As an example:
1) Web based apps.
2) Cloud components.
3) Databases without business logic (aka stored procedures).
4) Multi-Core architecture.&amp;#8221;
The project also has a more community-centric development philosophy, although it is not clear from the FAQ what the copyright implications are for would-be contributors.
Brian announced the project with the caveat that it is &amp;#8220;not looking to be 100% compatible with MySQL&amp;#8221; and &amp;#8220;certainly not a replacement for MySQL&amp;#8221; which is important to consider, but the project clearly has the blessing of MySQL CTO Monty Widenius who has stated that &amp;#8220;Drizzle solves many of the problems that MySQL&amp;#8217;s development has had for years.&amp;#8221;
Among the benefits noted by Monty are:
    * &amp;#8220;It opens up MySQL development for the community; You no longer have to wait years to get your patches and reasonable extensions into the server.
    * Critical bugs that have existed for years can finally get fixed as the development is no longer constrained by unrealistic release schedules that put artificial constraints on things that can be fixed.
    * Drizzle will put some MySQL server differentiation on a true test; A bit like Fedora does to Red Hat.
    * Drizzle has created new excitement in the MySQL developer community; A lot of people seem to be very enthusiastic to work on it in a true community-oriented manner.
    * Developers working on Drizzle is doing drastic refactoring of the server, something that MySQL planned to do years ago but never happened.
    * Development decisions is again driven by people that are using the server daily; This will ensure that Drizzle will be faster and more stable than what can be done with current MySQL development model
    * Drizzle will target the MySQL core users, the web users, whose requirements have been ignored for years while the core MySQL developers have added features that they don&amp;#8217;t need.
    * In addition Drizzle will include the latest InnoDB code; You don&amp;#8217;t have to wait for MySQL 6.0 or go to the trouble of annually downloadoing and installing the InnoDB plugin from Oracle just to get access to the latest and fastest InnoDB version.&amp;#8221;
It is interesting to see Monty mention Drizzle as a potential Fedora-like project, especially given his link to ProvenScaling&amp;#8217;s publication of MySQL sources and binaries and a blog post from Peter Zaitsev wondering whether it makes MySQL Community redundant.
It would be wrong to claim that as an official endorsement, but MySQL is clearly not trying to discourage community-led projects while it has also moved its sources to Bazaar and Launchpad to (as Kaj Arno puts it) &amp;#8220;expand our external contributor base&amp;#8221;.
All in all it is fascinating to see that MySQL, which many would consider one of the more mature open source projects, continues to evolve and experiment, especially now it has more freedom to do so as part of Sun. As Monty says:
&amp;#8220;Drizzle is one of the good things that have been made possible by Sun acquiring MySQL. Brian has been working on Drizzle with the blessing and encouragement from Sun&amp;#8217;s upper management. We are finding Sun to be open and encouraging of innovation, this has been a good aspect of the acquisition.&amp;#8221;
</description>
    <content:encoded><![CDATA[<p>When Sun <a href="http://www.sun.com/aboutsun/pr/2008-01/sunflash.20080116.1.xml" onclick="javascript:urchinTracker ('/outbound/article/www.sun.com');">acquired</a> MySQL and announced that it would invest the resources necessary to position the open source database for mission-critical deployments, I think everyone assumed that the database would eventually become bigger and heavier.</p>
<p>Few would have predicted that we would also see a project that would make the database smaller and lighter, but that is exactly what <a href="https://launchpad.net/drizzle" onclick="javascript:urchinTracker ('/outbound/article/launchpad.net');">Drizzle</a>, a new project from Sun&#8217;s MySQL director of architecture Brian Aker, is all about.</p>
<p>Drizzle is taking a back-to-the-drawing-board approach to refactoring MySQL by ripping out much of the additional enterprise functionality that has gone into it since version 4.1 and focusing on the demands of a core set of applications. </p>
<p>As Brian <a href="http://krow.livejournal.com/602409.html" onclick="javascript:urchinTracker ('/outbound/article/krow.livejournal.com');">explains</a> : &#8220;Stored Procedures, Views, Triggers, Query Cache, and Prepared Statements are gone for now. The field types have been simplified and there is an open debate about the SHOW commands (I am falling into the camp that think they may just belong in the client application but not in the server). Will any of this go back in? It is hard to say. The goal right now is to target a certain class of applications/developers and see if this is useful. As an example:</p>
<p>1) Web based apps.<br />
2) Cloud components.<br />
3) Databases without business logic (aka stored procedures).<br />
4) Multi-Core architecture.&#8221;</p>
<p>The project also has a more community-centric development philosophy, although it is not clear from the <a href="http://bazaar.launchpad.net/%7Edrizzle-developers/drizzle/development/annotate/205?file_id=drizzle.faq-20080625052902-61bbthtf22shh0p6-4" onclick="javascript:urchinTracker ('/outbound/article/bazaar.launchpad.net');">FAQ</a> what the copyright implications are for would-be contributors.</p>
<p>Brian announced the project with the caveat that it is &#8220;not looking to be 100% compatible with MySQL&#8221; and &#8220;certainly not a replacement for MySQL&#8221; which is important to consider, but the project clearly has the <a href="http://monty-says.blogspot.com/2008/07/what-if.html" onclick="javascript:urchinTracker ('/outbound/article/monty-says.blogspot.com');">blessing</a> of MySQL CTO Monty Widenius who has stated that &#8220;Drizzle solves many of the problems that MySQL&#8217;s development has had for years.&#8221;</p>
<p>Among the benefits noted by Monty are:</p>
<p>    * &#8220;It opens up MySQL development for the community; You no longer have to wait years to get your patches and reasonable extensions into the server.</p>
<p>    * Critical bugs that have existed for years can finally get fixed as the development is no longer constrained by unrealistic release schedules that put artificial constraints on things that can be fixed.</p>
<p>    * Drizzle will put some MySQL server differentiation on a true test; A bit like Fedora does to Red Hat.</p>
<p>    * Drizzle has created new excitement in the MySQL developer community; A lot of people seem to be very enthusiastic to work on it in a true community-oriented manner.</p>
<p>    * Developers working on Drizzle is doing drastic refactoring of the server, something that MySQL planned to do years ago but never happened.</p>
<p>    * Development decisions is again driven by people that are using the server daily; This will ensure that Drizzle will be faster and more stable than what can be done with current MySQL development model</p>
<p>    * Drizzle will target the MySQL core users, the web users, whose requirements have been ignored for years while the core MySQL developers have added features that they don&#8217;t need.</p>
<p>    * In addition Drizzle will include the latest InnoDB code; You don&#8217;t have to wait for MySQL 6.0 or go to the trouble of annually downloadoing and installing the InnoDB plugin from Oracle just to get access to the latest and fastest InnoDB version.&#8221;</p>
<p>It is interesting to see Monty mention Drizzle as a potential Fedora-like project, especially given his link to ProvenScaling&#8217;s <a href="http://mirror.provenscaling.com/" onclick="javascript:urchinTracker ('/outbound/article/mirror.provenscaling.com');">publication</a> of MySQL sources and binaries and a blog <a href="http://www.mysqlperformanceblog.com/2008/07/01/should-we-proclaim-mysql-community-edition-dead/" onclick="javascript:urchinTracker ('/outbound/article/www.mysqlperformanceblog.com');">post</a> from Peter Zaitsev wondering whether it makes MySQL Community redundant.</p>
<p>It would be wrong to claim that as an official endorsement, but MySQL is clearly not trying to discourage community-led projects while it has also <a href="http://blogs.mysql.com/kaj/2008/06/19/version-control-thanks-bitkeeper-welcome-bazaar/" onclick="javascript:urchinTracker ('/outbound/article/blogs.mysql.com');">moved</a> its sources to Bazaar and <a href="https://launchpad.net/mysql" onclick="javascript:urchinTracker ('/outbound/article/launchpad.net');">Launchpad</a> to (as Kaj Arno puts it) &#8220;expand our external contributor base&#8221;.</p>
<p>All in all it is fascinating to see that MySQL, which many would consider one of the more mature open source projects, <a href="http://blogs.the451group.com/opensource/2008/04/17/mysqls-business-model-in-a-state-of-flux/" >continues</a> to evolve and experiment, especially now it has more freedom to do so as part of Sun. As Monty says:</p>
<p>&#8220;Drizzle is one of the good things that have been made possible by Sun acquiring MySQL. Brian has been working on Drizzle with the blessing and encouragement from Sun&#8217;s upper management. We are finding Sun to be open and encouraging of innovation, this has been a good aspect of the acquisition.&#8221;</p>
<img src="http://feeds.the451group.com/~r/451opensource/~4/343597642" height="1" width="1"/>]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 14:23:20 +0000</pubDate>
    <comments>http://blogs.the451group.com/opensource/2008/07/23/891/#comments</comments>
    <dc:creator>The 451 Group</dc:creator>
    <category>Software</category>
    <category>451 group</category>
    <category>451caostheory</category>
    <category>451group</category>
    <category>brian aker</category>
    <category>caostheory</category>
    <category>drizzle</category>
    <category>jeremy cole</category>
    <category>kaj arno</category>
    <category>Linux</category>
    <category>matt aslett</category>
    <category>mattaslett</category>
    <category>matthew aslett</category>
    <category>matthewaslett</category>
    <category>monty widenius</category>
    <category>mysql</category>
    <category>open-source</category>
    <category>opensource</category>
    <category>proven scaling</category>
    <category>sun</category>
    <category>The 451 Group</category>
    <category>the451group</category>
  </item>

  <item>
    <title>O'Reilly study uncovers multiple reasons for open source's impressive rise</title>
    <guid isPermaLink="false">http://blogs.cnet.com/8301-13505_1-9997260-16.html</guid>
    <link>http://blogs.cnet.com/8301-13505_1-9997260-16.html</link>
    <description>(Credit: O&amp;#39;Reilly Media, Bernard Golden, and Sourceforge.net)According to new research released today by Bernard Golden (Navica) and O'Reilly Research, there are at least six reasons compelling the rapid rise of open source.  Agility and scale, reduced vendor lock-in, quality and security, cost, sovereignty (i.e., Local, not necessarily US-based development), and innovation.  No wonder Sourceforge downloads continue to rise.

In one particular area, however, open source shines, in my opinion: The ability to reduce lock-in to a particular vendor.  The report suggests:

There is little potential price competition for incumbent vendors: Because locked-in vendors have little fear of being replaced, they are in a position to extract expensive maintenance and upgrade fees, bleeding ever-shrinking IT budgets of precious dollars. For example, Oracle just announced price increases of 20% for its database software (accompanied by increases in ongoing maintenance fees as well), secure in the knowledge that very few enterprises are in a position to resist the increase due to the difficulty of replacing the products. 

Whatever the price associated with getting into a relationship with Oracle, Microsoft, SAP, IBM, HP, etc., few enterprise buyers seem to reflect on just how expensive it will be to disengage from that relationship due to lock-in to proprietary technology.  Things that may be good for buyers (like SaaS) can be safely avoided by the vendor that owns its customers.
...</description>
    <content:encoded><![CDATA[<div class="cnet-image-div float-right" style="width: 270px;" ><img class="cnet-image" src="http://i.i.com.com/cnwk.1d/i/bto/20080723/Picture_1_270x179.png" alt="" width="270" height="179" /><span class="image-credit">(Credit: O&#39;Reilly Media, Bernard Golden, and Sourceforge.net)</span></div><p>According to <a href="http://radar.oreilly.com/research/os-enterprise-report.html">new research released today by Bernard Golden (Navica) and O'Reilly Research</a>, there are at least six reasons compelling the rapid rise of open source.  Agility and scale, reduced vendor lock-in, quality and security, cost, sovereignty (i.e., Local, not necessarily US-based development), and innovation.  No wonder Sourceforge downloads continue to rise.</p>

<p>In one particular area, however, open source shines, in my opinion: The ability to reduce lock-in to a particular vendor.  The report suggests:</p>

<blockquote>There is little potential price competition for incumbent vendors: Because locked-in vendors have little fear of being replaced, they are in a position to extract expensive maintenance and upgrade fees, bleeding ever-shrinking IT budgets of precious dollars. For example, Oracle just announced price increases of 20% for its database software (accompanied by increases in ongoing maintenance fees as well), secure in the knowledge that very few enterprises are in a position to resist the increase due to the difficulty of replacing the products. </blockquote>

<p>Whatever the price associated with getting into a relationship with Oracle, Microsoft, SAP, IBM, HP, etc., few enterprise buyers seem to reflect on just how expensive it will be to disengage from that relationship due to lock-in to proprietary technology.  Things that may be good for buyers (like SaaS) <a title="Oracle avoids SaaS to keep margins up, raise prices -- Friday, Jul 18, 2008" href="http://news.cnet.com/8301-13505_3-9994027-16.html" >can be safely avoided by the vendor that owns its customers</a>.</p>
...]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 14:08:00 +0000</pubDate>
    <dc:creator>Matt Asay</dc:creator>
  </item>

  <item>
    <title>Reading between the lines of EnterpriseDB?s survey results</title>
    <guid isPermaLink="false">http://blogs.the451group.com/opensource/?p=890</guid>
    <link>http://feeds.the451group.com/~r/451opensource/~3/343418169/</link>
    <description>EnterpriseDB has announced the results (PDF) of its recent survey of open source database usage. 
While the company understandably highlights the adoption of PostgreSQL for transaction-intensive applications and its high reliability and performance and scalability EnterpriseDB has done a pretty good job of presenting the results in an unbiased manner.
I couldn&amp;#8217;t help feeling that some of the more interesting results are hidden at the end of or buried within EnterpriseDB&amp;#8217;s write-up, or even missing entirely, however.
For example, right at the end of its report EnterpriseDB states that &amp;#8220;eight three percent have yet to pay for the use of their open source database&amp;#8221; which speaks volumes about both the challenge that open source database vendors face in converting users to paying customers and the opportunity that is open to them if they can find a solution.
The company also states that &amp;#8220;a majority of respondents indicated that they used an open source database in order to migrate away from their use of Microsoft SQL Server and Oracle commercial databases&amp;#8221; which is technically accurate but a little misleading. It further adds that &amp;#8220;less than one percent indicated they moved off of IBM DB2 to an open source database. Microsoft SQL Server was the highest at eleven percent while Oracle was at six percent.&amp;#8221; 
EnterpriseDB doesn&amp;#8217;t tell us how many migrated from &amp;#8216;other databases&amp;#8217; (which was the other answer available) but I think it&amp;#8217;s fair to say that the majority of respondents in fact indicated that they had not used an open source database in order to migrate away from a proprietary database.
This supports the results we saw in our own recent open source database report as well as recent results from a Forrester survey. As I told eWeek in response to that survey, &amp;#8220;Even EnterpriseDB, which offers proprietary Oracle-compatible functionality on top of PostgreSQL, is pitched more at Oracle avoidance projects than Oracle replacement projects.&amp;#8221;
Back to EnterpriseDB&amp;#8217;s survey, and Sam Dean at OStatic has questioned the finding that &amp;#8220;only nine percent of respondents said they prefer commercial databases to open source ones&amp;#8221;. The answer lies in the question being asked, which was &amp;#8220;What prevents you or your company from using an open source database?&amp;#8221;.
Clearly the result Sam mentions doesn&amp;#8217;t mean that 81% of respondents prefer open source databases, but it does mean that only 9% have a preference for commercial databases that would prevent the use of open source databases. 
While 85% indicated that &amp;#8220;nothing prohibits their company from using an open source database&amp;#8221; likewise that doesn&amp;#8217;t mean that 85% are actually using an open source database. 
Unfortunately EnterpriseDB didn&amp;#8217;t share the result of the question &amp;#8220;Have you ever used an open source database in your job or company?&amp;#8221;. In the context of this survey, that&amp;#8217;s a pretty significant result to leave out.
</description>
    <content:encoded><![CDATA[<p>EnterpriseDB has <a href="http://www.enterprisedb.com/about/news_events/press_releases/2008_18.do" onclick="javascript:urchinTracker ('/outbound/article/www.enterprisedb.com');">announced</a> the <a href="http://downloads.enterprisedb.com/articles/OSSurvey_ExecSummary.pdf" onclick="javascript:urchinTracker ('/outbound/article/downloads.enterprisedb.com');">results</a> (PDF) of its recent survey of open source database usage. </p>
<p>While the company understandably highlights the adoption of PostgreSQL for transaction-intensive applications and its high reliability and performance and scalability EnterpriseDB has done a pretty good job of presenting the results in an unbiased manner.</p>
<p>I couldn&#8217;t help feeling that some of the more interesting results are hidden at the end of or buried within EnterpriseDB&#8217;s write-up, or even missing entirely, however.</p>
<p>For example, right at the end of its report EnterpriseDB states that &#8220;eight three percent have yet to pay for the use of their open source database&#8221; which speaks volumes about both the challenge that open source database vendors face in converting users to paying customers and the opportunity that is open to them if they can find a solution.</p>
<p>The company also states that &#8220;a majority of respondents indicated that they used an open source database in order to migrate away from their use of Microsoft SQL Server and Oracle commercial databases&#8221; which is technically accurate but a little misleading. It further adds that &#8220;less than one percent indicated they moved off of IBM DB2 to an open source database. Microsoft SQL Server was the highest at eleven percent while Oracle was at six percent.&#8221; </p>
<p>EnterpriseDB doesn&#8217;t tell us how many migrated from &#8216;other databases&#8217; (which was the other <a href="http://www.surveymonkey.com/s.aspx?sm=W_2b8Dx7c8yCs6pZB1jgvQZg_3d_3d" onclick="javascript:urchinTracker ('/outbound/article/www.surveymonkey.com');">answer</a> available) but I think it&#8217;s fair to say that the majority of respondents in fact indicated that they had not used an open source database in order to migrate away from a proprietary database.</p>
<p>This supports the results we saw in <a href="http://www.the451group.com/caos/caos_detail.php?icid=539" >our own recent open source database report</a> as well as recent results from a Forrester survey. As I told <a href="http://www.eweek.com/c/a/Database/Open-Source-Database-Adoption-Upswing-Continues/" onclick="javascript:urchinTracker ('/outbound/article/www.eweek.com');">eWeek</a> in response to that survey, &#8220;Even EnterpriseDB, which offers proprietary Oracle-compatible functionality on top of PostgreSQL, is pitched more at Oracle avoidance projects than Oracle replacement projects.&#8221;</p>
<p>Back to EnterpriseDB&#8217;s survey, and Sam Dean at OStatic has <a href="http://ostatic.com/169326-blog/enterprisedbs-survey-results-interesting-but-i-have-to-wonder" onclick="javascript:urchinTracker ('/outbound/article/ostatic.com');">questioned</a> the finding that &#8220;only nine percent of respondents said they prefer commercial databases to open source ones&#8221;. The answer lies in the question being <a href="http://www.surveymonkey.com/s.aspx?sm=W_2b8Dx7c8yCs6pZB1jgvQZg_3d_3d" onclick="javascript:urchinTracker ('/outbound/article/www.surveymonkey.com');">asked</a>, which was &#8220;What prevents you or your company from using an open source database?&#8221;.</p>
<p>Clearly the result Sam mentions doesn&#8217;t mean that 81% of respondents prefer open source databases, but it does mean that only 9% have a preference for commercial databases that would prevent the use of open source databases. </p>
<p>While 85% indicated that &#8220;nothing prohibits their company from using an open source database&#8221; likewise that doesn&#8217;t mean that 85% <em>are actually using</em> an open source database. </p>
<p>Unfortunately EnterpriseDB didn&#8217;t share the result of the question &#8220;Have you ever used an open source database in your job or company?&#8221;. In the context of this survey, that&#8217;s a pretty significant result to leave out.</p>
<img src="http://feeds.the451group.com/~r/451opensource/~4/343418169" height="1" width="1"/>]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 10:19:53 +0000</pubDate>
    <comments>http://blogs.the451group.com/opensource/2008/07/23/reading-between-the-lines-of-enterprisedbs-survey-results/#comments</comments>
    <dc:creator>The 451 Group</dc:creator>
    <category>Software</category>
    <category>451 group</category>
    <category>451caostheory</category>
    <category>451group</category>
    <category>caostheory</category>
    <category>database</category>
    <category>enterprisedb</category>
    <category>Linux</category>
    <category>matt aslett</category>
    <category>mattaslett</category>
    <category>matthew aslett</category>
    <category>matthewaslett</category>
    <category>open-source</category>
    <category>opensource</category>
    <category>postgres</category>
    <category>postgresql</category>
    <category>survey</category>
    <category>The 451 Group</category>
    <category>the451group</category>
  </item>

  <item>
    <title>Drizzle goes back to the Roots</title>
    <guid isPermaLink="false">tag:blogger.com,1999:blog-24359421.post-7139201818787063984</guid>
    <link>http://pbxt.blogspot.com/2008/07/drizzle-goes-back-to-roots.html</link>
    <description>Will Drizzle (Brian, Monty, Mark, MontyT, and others ...) become a cloudburst? I think so, and here is why...First a simple question: what made diverse systems such as PHP, the HTTP protocol and memcached so popular?Answer: ease of use, simplicity, speed and scalability.And what made the original version of MySQL so popular? Well, exactly the same things.Drizzle goes back to the roots, concentrating on what made the use of MySQL so widespread in the first place.You could say, with 5.0, MySQL lost its way while introducing many complex features: stored procedures, triggers, views, query cache, etc.So why did MySQL add these features? I see two reasons:Popular opinion: It is a simple fact that analysts, journalists and, in particular, investors, refused to take MySQL seriously unless it &quot;grew up&quot;, and gained all the features that a mature database should have. As a venture capital financed company heading for IPO its hard to ignore popular opinion.To compete with Oracle: MySQL management believed (understandably) that MySQL would not make it unless it competed head-to-head with the industry leader. Characteristic of this was the effort to run SAP on MySQL.And what came of all this?Two years ago already MySQL gave up trying to compete directly with Oracle. Back then Martin Mickos stated MySQL's mission as follows: &quot;to become the best online database in the world&quot;. And all efforts to run SAP, including MaxDB, have also been dropped since then.But at least the critics have been silenced! And let's face it, Sun would never have paid $1B for a &quot;toy&quot; database. And still today, these heavy duty features are important for Sun's effort to sell MySQL into the corporate IT space.However, this leaves a void to be filled by Drizzle: a lightweight database that scales for demanding Web 2.0 applications and Cloud computing. By concentrating on core functionality I believe Drizzle can really make progress in this space. Just one example: developers don't have to worry whether the query cache breaks scalability on each release.So what can I learn from this?So far I have resisted adding features such as savepoints and 2-phase commit to PBXT, but I was thinking I would have to do this stuff at some stage. Well, I am not so sure anymore... :)</description>
    <content:encoded><![CDATA[Will <a href="https://launchpad.net/drizzle">Drizzle</a> (<a href="http://krow.livejournal.com/602409.html">Brian</a>, <a href="http://monty-says.blogspot.com/2008/07/what-if.html">Monty</a>, <a href="http://fallenpegasus.livejournal.com/730102.html">Mark</a>, <a href="http://mysql-ha.com/2008/07/22/building-drizzle-cleanly-with-all-the-warnings/">MontyT</a>, and others ...) become a <i>cloudburst</i>? I think so, and here is why...<br /><br /><i>First a simple question:</i> what made diverse systems such as PHP, the HTTP protocol and memcached so popular?<br /><br /><i>Answer:</i> <b>ease of use, simplicity, speed and scalability</b>.<br /><br />And what made the original version of MySQL so popular? Well, <i>exactly the same things</i>.<br /><br />Drizzle goes back to the roots, concentrating on what made the use of MySQL so widespread in the first place.<br /><br />You could say, with 5.0, MySQL lost its way while introducing many complex features: stored procedures, triggers, views, query cache, etc.<br /><br /><i>So why did MySQL add these features?</i> I see two reasons:<br /><br /><b>Popular opinion:</b> It is a simple fact that analysts, journalists and, in particular, investors, refused to take MySQL seriously unless it "grew up", and gained all the features that a mature database should have. As a venture capital financed company heading for IPO its hard to ignore popular opinion.<br /><br /><b>To compete with Oracle:</b> MySQL management believed (understandably) that MySQL would not make it unless it competed head-to-head with the industry leader. Characteristic of this was the effort to run SAP on MySQL.<br /><br /><i>And what came of all this?</i><br /><br />Two years ago already MySQL gave up trying to compete directly with Oracle. Back then Martin Mickos stated MySQL's mission as follows: <i>"to become the best online database in the world"</i>. And all efforts to run SAP, including MaxDB, have also been dropped since then.<br /><br />But at least the critics have been silenced! And let's face it, Sun would never have paid $1B for a "toy" database. And still today, these heavy duty features are important for Sun's effort to sell MySQL into the corporate IT space.<br /><br />However, this leaves a void to be filled by Drizzle: a lightweight database that scales for demanding Web 2.0 applications and Cloud computing. By concentrating on core functionality I believe Drizzle can really make progress in this space. Just one example: developers don't have to worry whether the query cache breaks scalability on each release.<br /><br /><i>So what can I learn from this?</i><br /><br />So far I have resisted adding features such as savepoints and 2-phase commit to <a href="http://www.primebase.org">PBXT</a>, but I was thinking I would have to do this stuff at some stage. Well, I am not so sure anymore... :)]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 09:30:00 +0000</pubDate>
    <dc:creator>Paul McCullagh</dc:creator>
  </item>

  <item>
    <title>On MySQL forks and MySQL&amp;#8217;s non-Open Source documentation</title>
    <guid isPermaLink="false">http://jcole.us/blog/?p=396</guid>
    <link>http://jcole.us/blog/archives/2008/07/23/on-mysql-forks-and-mysqls-non-open-source-documentation/</link>
    <description>All of this talk of Drizzle (a fork of the MySQL server by Brian and Monty) has reminded me of a topic I have wanted to discuss for quite some time&amp;#8230;
One of the things that sets MySQL apart (in, IMHO, a very bad way) from other Open Source database projects/products such as PostgreSQL (license) and Firebird (license) is that the MySQL documentation is NOT Open Source.  The MySQL documentation is and always has been copyright MySQL AB, and &amp;#8220;&amp;#8230; use of this documentation, in whole or in part, in another publication, requires the prior written consent from an authorized representative of MySQL AB&amp;#8221;.  This presents a major impediment to forking the server: who wants to re-write many hundreds of pages of documentation on things that haven&amp;#8217;t even changed?  Even if you&amp;#8217;re OK with all of your new code being GPL (and anyone forking ought to be), and never being able to dual license or re-license your MySQL fork (oh well), you will have to start with no documentation, or publish an errata against the official MySQL documentation (which will only go so far).
Does this mean that MySQL is not really Open Source?  I would say not exactly, although I could probably be convinced either way.  Others may say yes.  But it does go a long way to making the point that some things may not be quite as &amp;#8220;open&amp;#8221; as they initially appear.  What do you think?  Can a piece of software really be Open Source while its primary/only documentation is not?  Did you know that the MySQL documentation was not Open Source?</description>
    <content:encoded><![CDATA[<p>All of this talk of <a href="http://krow.livejournal.com/602409.html">Drizzle</a> (a fork of the MySQL server by <a href="http://krow.livejournal.com/">Brian</a> and <a href="http://monty-says.blogspot.com/">Monty</a>) has reminded me of a topic I have wanted to discuss for quite some time&#8230;</p>
<p>One of the things that sets MySQL apart (in, IMHO, a very bad way) from other Open Source database projects/products such as <a href="http://www.postgresql.org/">PostgreSQL</a> (<a href="http://www.postgresql.org/docs/8.3/static/LEGALNOTICE.html">license</a>) and <a href="http://www.firebirdsql.org/">Firebird</a> (<a href="http://www.firebirdsql.org/manual/pdl.html">license</a>) is that the <a href="http://dev.mysql.com/doc/refman/5.0/en/index.html">MySQL documentation is NOT Open Source</a>.  The MySQL documentation is and always has been copyright MySQL AB, and &#8220;&#8230; use of this documentation, in whole or in part, in another publication, requires the prior written consent from an authorized representative of MySQL AB&#8221;.  This presents a major impediment to forking the server: who wants to re-write many hundreds of pages of documentation on things that haven&#8217;t even changed?  Even if you&#8217;re OK with all of your new code being GPL (and anyone forking ought to be), and never being able to dual license or re-license your MySQL fork (oh well), you will have to start with no documentation, or publish an errata against the official MySQL documentation (which will only go so far).</p>
<p>Does this mean that MySQL is not really Open Source?  I would say not <em>exactly</em>, although I could probably be convinced either way.  Others may say yes.  But it does go a long way to making the point that some things may not be quite as &#8220;open&#8221; as they initially appear.  What do you think?  Can a piece of software really be Open Source while its primary/only documentation is not?  Did you know that the MySQL documentation was not Open Source?</p>]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 09:19:37 +0000</pubDate>
    <dc:creator>Jeremy Cole</dc:creator>
  </item>

  <item>
    <title>Is Drizzle good for MySQL?</title>
    <guid isPermaLink="false">tag:blogger.com,1999:blog-7697637878864226177.post-7414879300328584165</guid>
    <link>http://feeds.feedburner.com/~r/MysqlDatabaseNews/~3/343621556/is-drizzle-good-for-mysql.html</link>
    <description>Have you heard of Drizzle? It was announced at OSCON yesterday and is all over the blogosphere. From the Drizzle FAQ:

* So what are the differences between is and MySQL?
No modes, views, triggers, prepared statements, stored procedures, query cache, data conversion inserts, ACL. Fewer data types. Less engines, less code. Assume the primary engine is transactional.

Also from the FAQ is that, right now at least, there is no intention to make this run natively on windows and they make the point:

* &quot;This is not a SQL compliant relational...&quot;
Very true, and we do not aim to be that.

It is a fork of MySQL that takes it backward to pre-5.0 in features but hopefully greatly reduces the bugs and instabilities. I plan to look at it but I don't see much enterprise adoption. It was the enterprise users who wanted stored procedures, views and most of the other stuff that is being removed. I think it will be adopted mainly by read-only (or mostly) web sites that want to serve many pages. That's ok. There's a huge market for that. If I found a fit for a client, I would consider it.
They are very honest with the goals:

* What is the target?
Deliver a microkernel that we can use to build a database that meets the needs of a web/cloud infrastructure. To this end we are exploring http interfaces, sharding enhancements, etc... do not expect an Oracle, MySQL, Postgres, or DB2.

I was reading my usual stable of blogs this morning and ran across two blog entries that got me thinking. First is Ronald Bradford's blog, The new kid on the block - Drizzle. Ronald gives a great overview of what Drizzle is trying to achieve, the current state of MySQL and reasons why Drizzle is a good idea. This is well worth a read. I'm just this far from being convinced. ;-)
The second was On MySQL Forks and MySQL's non-open source documentation on Jeremy Cole's blog. To answer his question, I did not know that the MySQL documentation was not open source. That is a very interesting point and one that never even occurred to me. I wonder if Sun would consider opening it?
Anyway, both of those got me thinking about forking MySQL. If you look at the Postgres community (not comparing the databases, just the goals of the community) over the years, they have taken great pains to not fork the database. The contrib modules are there so that the database can add functionality without forking. The companies who have tried to make a go at monetizing Postgres have also taken great pains to not fork the database.
In fairness to Drizzle, it may have a sort of contrib module like functionality (bolding is mine):

* What is the goal?
A micro-kernel that we then extend to add what we need (all additions come through interfaces that can be compiled/loaded in as needed). The target for the project is web infrastructure backend and cloud components.


With Postgres, even companies like Yahoo and Skype who needed specific functionality have contributed that back to the community so that the code will eventually be reworked into the mainline (or as a contrib). There is a very anti-forking bias in the Postgres community and I think that has helped advance the database.
Ignoring any commercial interests, will the MySQL community become fragmented by forking? Because honestly, the community is the important part of any open source project. If Sun is putting its resources behind MySQL 5.1 and 6, and if they don't open the documentation, where will Drizzle go?
I'm just not convinced that Drizzle is a good thing or that it's needed. Then again, if they concentrate on making this a natively scalable database for the cloud, maybe it is time for a fork. Although, I'm not sure that goal is achievable starting with the MySQL codebase. What do you think?
LewisC

  
  Technorati : competition, fork, fragmentation, mysql 

</description>
    <content:encoded><![CDATA[<p>Have you heard of <a href="http://drizzle.wikia.com/wiki/Drizzle_Wiki">Drizzle</a>? It was announced at OSCON yesterday and is all over the blogosphere. From the Drizzle FAQ:</p>
<blockquote>
<p>* So what are the differences between is and MySQL?</p>
<p>No modes, views, triggers, prepared statements, stored procedures, query cache, data conversion inserts, ACL. Fewer data types. Less engines, less code. Assume the primary engine is transactional.</p>
</blockquote>
<p>Also from the FAQ is that, right now at least, there is no intention to make this run natively on windows and they make the point:</p>
<blockquote>
<p>* "This is not a SQL compliant relational..."</p>
<p>Very true, and we do not aim to be that.</p>
</blockquote>
<p>It is a fork of <a href="http://databasewisdom.com/glossarym.shtml#mysql">MySQL</a> that takes it backward to pre-5.0 in features but hopefully greatly reduces the bugs and instabilities. I plan to look at it but I don't see much enterprise adoption. It was the enterprise users who wanted stored procedures, views and most of the other stuff that is being removed. I think it will be adopted mainly by read-only (or mostly) web sites that want to serve many pages. That's ok. There's a huge market for that. If I found a fit for a client, I would consider it.</p>
<p>They are very honest with the goals:</p>
<blockquote>
<p>* What is the target?</p>
<p>Deliver a microkernel that we can use to build a database that meets the needs of a web/cloud infrastructure. To this end we are exploring http interfaces, sharding enhancements, etc... do not expect an Oracle, MySQL, Postgres, or DB2.</p>
</blockquote>
<p>I was reading my usual stable of blogs this morning and ran across two blog entries that got me thinking. First is Ronald Bradford's blog, <a href="http://ronaldbradford.com/blog/the-new-kid-on-the-block-drizzle-2008-07-23/">The new kid on the block - Drizzle</a>. Ronald gives a great overview of what Drizzle is trying to achieve, the current state of MySQL and reasons why Drizzle is a good idea. This is well worth a read. I'm just this far from being convinced. ;-)</p>
<p>The second was <a href="http://jcole.us/blog/archives/2008/07/23/on-mysql-forks-and-mysqls-non-open-source-documentation/">On MySQL Forks and MySQL's non-open source documentation</a> on Jeremy Cole's blog. To answer his question, I did not know that the MySQL documentation was not open source. That is a very interesting point and one that never even occurred to me. I wonder if Sun would consider opening it?</p>
<p>Anyway, both of those got me thinking about forking MySQL. If you look at the <a href="http://databasewisdom.com/glossaryp.shtml#postgres">Postgres community</a> (not comparing the databases, just the goals of the community) over the years, they have taken great pains to not fork the database. The contrib modules are there so that the database can add functionality without forking. The companies who have tried to make a go at monetizing Postgres have also taken great pains to not fork the database.</p>
<p>In fairness to Drizzle, it may have a sort of contrib module like functionality (bolding is mine):</p>
<blockquote>
<p>* What is the goal?</p>
<p>A micro-kernel that we then extend to add what we need (<strong>all additions come through interfaces that can be compiled/loaded in as needed</strong>). The target for the project is web infrastructure backend and cloud components.
<br/></p>
</blockquote>
<p>With Postgres, even companies like Yahoo and Skype who needed specific functionality have contributed that back to the community so that the code will eventually be reworked into the mainline (or as a contrib). There is a very anti-forking bias in the Postgres community and I think that has helped advance the database.</p>
<p>Ignoring any commercial interests, will the MySQL community become fragmented by forking? Because honestly, the community is the important part of any open source project. If Sun is putting its resources behind MySQL 5.1 and 6, and if they don't open the documentation, where will Drizzle go?</p>
<p>I'm just not convinced that Drizzle is a good thing or that it's needed. Then again, if they concentrate on making this a natively scalable database for the cloud, maybe it is time for a fork. Although, I'm not sure that goal is achievable starting with the MySQL codebase. What do you think?</p>
<p>LewisC</p>
<p xmlns="" class="zoundry_raven_tags">
  <!-- Tag links generated by Zoundry Raven. Do not manually edit. http://www.zoundryraven.com -->
  <span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://www.technorati.com/tag/competition" class="ztag" rel="tag">competition</a>, <a href="http://www.technorati.com/tag/fork" class="ztag" rel="tag">fork</a>, <a href="http://www.technorati.com/tag/fragmentation" class="ztag" rel="tag">fragmentation</a>, <a href="http://www.technorati.com/tag/mysql" class="ztag" rel="tag">mysql</a></span> 
</p>
<p><a href="http://feeds.feedburner.com/~a/MysqlDatabaseNews?a=52j5Us"><img src="http://feeds.feedburner.com/~a/MysqlDatabaseNews?i=52j5Us" border="0"></img></a></p><img src="http://feeds.feedburner.com/~r/MysqlDatabaseNews/~4/343621556" height="1" width="1"/>]]></content:encoded>
    <pubDate>Wed, 23 Jul 2008 07:52:00 +0000</pubDate>
    <dc:creator>Lewis Cunningham</dc:creator>
  </item>

  <item>
    <title>SAAS Multi-tenant Databases</title>
    <guid isPermaLink="false">tag:blogger.com,1999:blog-3635447662505002071.post-7914679993502912374</guid>
    <link>http://feeds.feedburner.com/~r/DatabaseScience/~3/343631797/saas-multi-tenant-databases.html</link>
    <description>There are some good high level discussions on the various database architectures for implementing software as a service.&amp;#160; I&amp;#8217;m on going to duplicate that.&amp;#160; Instead, this article is going to highlight some of the issues and tradeoffs when multiple tenants (customers of the software service provider) are put into one database.&amp;#160;&amp;#160; The core of the problem is having multiple tenants in one set of database tables can make queries that select data for only one customer much slower.&amp;#160;   First, I&amp;#8217;m testing on a new system, one with 32 gig of memory.&amp;#160; Currently,&amp;#160; the innodb_buffer_pool_size set to 28 gig.&amp;#160;&amp;#160; I&amp;#8217;m using the same size tables as previously, both Sale and SaleTenant have 120 million rows and are about 27 and 28 gig respectively.&amp;#160; This means that the tables fit into memory, so the following tests do not have an IO component.&amp;#160; Not perfect, but it shouldn't make a difference in the conclusions for these tests.&amp;#160;&amp;#160;   For the other two tables, there are 100 tenants, and 1 million customers.&amp;#160;   The ddl looks like this (yeah, key and constraint names don&amp;#8217;t make sense).&amp;#160;&amp;#160; First, the non-multi-tenant table.&amp;#160;   &amp;#160;  CREATE TABLE&amp;#160; `test`.`Sale` (  &amp;#160; `orderId` int(11) NOT NULL,  &amp;#160; `customerId` int(11) NOT NULL,  &amp;#160; `productId` int(11) NOT NULL,  &amp;#160; `productBigId` int(11) NOT NULL,  &amp;#160; `unit` int(11) NOT NULL,  &amp;#160; `purchaseAmount` decimal(16,2) NOT NULL,  &amp;#160; `purchaseCost` decimal(16,2) NOT NULL,  &amp;#160; `purchaseDate` datetime NOT NULL,  &amp;#160; PRIMARY KEY&amp;#160; (`purchaseDate`,`orderId`),  &amp;#160; UNIQUE KEY `idx_sale_order` (`orderId`),  &amp;#160; KEY `pf_sale_product` (`productId`),  &amp;#160; KEY `pf_sale_customer` (`customerId`),  &amp;#160; CONSTRAINT `pf_sale_customer` FOREIGN KEY (`customerId`) REFERENCES `Customer` (`customerId`),  &amp;#160; CONSTRAINT `pf_sale_product` FOREIGN KEY (`productId`) REFERENCES `Product` (`productId`)  ) ENGINE=InnoDB   &amp;#160;  Then the table with a tenantId in the table.&amp;#160;   &amp;#160;  CREATE TABLE&amp;#160; `test`.`SaleTenant` (  &amp;#160; `orderId` int(11) NOT NULL,  &amp;#160; `tenantId` int(11) NOT NULL,  &amp;#160; `customerId` int(11) NOT NULL,  &amp;#160; `productId` int(11) NOT NULL,  &amp;#160; `productBigId` int(11) NOT NULL,  &amp;#160; `unit` int(11) NOT NULL,  &amp;#160; `purchaseAmount` decimal(16,2) NOT NULL,  &amp;#160; `purchaseCost` decimal(16,2) NOT NULL,  &amp;#160; `purchaseDate` datetime NOT NULL,  &amp;#160; PRIMARY KEY&amp;#160; (`tenantId`,`purchaseDate`,`orderId`),  &amp;#160; UNIQUE KEY `idx_saletenant_order` (`orderId`),  &amp;#160; KEY `pf_saletenant_product` (`productId`),  &amp;#160; KEY `pf_saletenant_customer` (`customerId`),  &amp;#160; CONSTRAINT `pf_saletenant_customer` FOREIGN KEY (`customerId`) REFERENCES `Customer` (`customerId`),  &amp;#160; CONSTRAINT `pf_saletenant_product` FOREIGN KEY (`productId`) REFERENCES `Product` (`productId`),  &amp;#160; CONSTRAINT `pf_saletenant_tentant` FOREIGN KEY (`tenantId`) REFERENCES `Tenant` (`tenantId`)  ) ENGINE=InnoDB   &amp;#160;  Now, the tenant table.&amp;#160;   &amp;#160;  CREATE TABLE&amp;#160; `test`.`Tenant` (  &amp;#160; `tenantId` int(11) NOT NULL,  &amp;#160; `tenantName` varchar(32) NOT NULL,  &amp;#160; PRIMARY KEY&amp;#160; (`tenantId`)  ) ENGINE=InnoDB DEFAULT  &amp;#160;  And a customer table with a tenantId column.&amp;#160;   &amp;#160;  CREATE TABLE&amp;#160; `test`.`Customer` (  &amp;#160; `customerId` int(11) NOT NULL default '0',  &amp;#160; `customerName` varchar(32) NOT NULL,  &amp;#160; `tenantId` int(11) NOT NULL default '0',  &amp;#160; PRIMARY KEY&amp;#160; (`customerId`),  &amp;#160; KEY `pf_customer_tenant` (`tenantId`),  &amp;#160; CONSTRAINT `pf_customer_tenant` FOREIGN KEY (`tenantId`) REFERENCES `Tenant` (`tenantId`)  ) ENGINE=InnoDB   &amp;#160;  #1) Against a table that is clustered by the TenantId, this query takes 0.5 seconds to run.&amp;#160; As it selects about 1/100 of the Sale Tenant database, the performance isn&amp;#8217;t bad.  &amp;#160;  select sum(unit) from SaleTenant&amp;#160; where TenantId = 77;  &amp;#160;  And the query plan shows that the custered index was used to scan on the relevant rows.&amp;#160;   *************************** 1. row ***************************  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; id: 1  &amp;#160; select_type: SIMPLE  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; table: SaleTenant  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type: ref  possible_keys: PRIMARY  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key: PRIMARY  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key_len: 4  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ref: const  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rows: 2708904  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Extra:      #2) The query against the Sale table without the tenantId is about 5 times slow, at 2.5 seconds.   &amp;#160;  select sum(unit)   &amp;#160; from Customer c   &amp;#160; join Sale s  &amp;#160;&amp;#160;&amp;#160; on c.customerId = s.customerId  where c.TenantId = 77  &amp;#160;  The plan shows that the database drives off the customer table and joins to the sales table on the customerId column.&amp;#160;   &amp;#160;  *************************** 1. row ***************************  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; id: 1  &amp;#160; select_type: SIMPLE  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; table: c  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type: ref  possible_keys: PRIMARY,pf_customer_tenant  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key: pf_customer_tenant  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key_len: 4  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ref: const  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rows: 5040  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Extra: Using index  *************************** 2. row ***************************  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; id: 1  &amp;#160; select_type: SIMPLE  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; table: s  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type: ref  possible_keys: pf_sale_customer  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key: pf_sale_customer  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key_len: 4  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ref: test.c.customerId  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rows: 57  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Extra:  &amp;#160;  3) Further qualifying by date shows where adding the tentantId to the SaleTenant id column further improves performance.&amp;#160;&amp;#160; This sql runs in about 0.08 seconds, and is much faster than the query #1, which doesn't have the more selective date criteria.&amp;#160;   &amp;#160;  select sum(unit) from SaleTenant  where TenantId = 77  &amp;#160;&amp;#160; and purchaseDate &amp;gt;= '2001-06-01'  &amp;#160;&amp;#160; and purchaseDate &amp;lt; '2001-07-01'      The query plan shows that the clustered index of (tenantId, pruchaseDate, orderId) allowed the database to quickly find the relevant rows and&amp;#160; sequentially the relevant rows.&amp;#160;   &amp;#160;  *************************** 1. row ***************************  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; id: 1  &amp;#160; select_type: SIMPLE  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; table: SaleTenant  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type: range  possible_keys: PRIMARY  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key: PRIMARY  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key_len: 12  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ref: NULL  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rows: 150491  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Extra: Using where  &amp;#160;  4) As the tenant criteria drives off of the customer table, and the date criteria drives off of the sales table, and the optimizer needs to start with one of these two tables, this sql can&amp;#8217;t be as efficient as the query #3.&amp;#160; In this case, the optimizer again (like query #2) decides to drive off the customer table.&amp;#160; Unlike query #3, the extra date criteria doesn&amp;#8217;t improve performance as it must join to each Sale row to determine if the date is valid, and in this case, only about 1/12 of the rows are relevant.&amp;#160; This means 11/12 of the joins are, in effect, tossed away.&amp;#160;&amp;#160; Thus, it has to do the same amount of work as query #2 and runs in about the same time as #2 2.5 seconds, or about 31 times slower than query #3.&amp;#160;   &amp;#160;  select sum(unit)  &amp;#160; from Customer c  &amp;#160; join Sale s  &amp;#160;&amp;#160;&amp;#160; on c.customerId = s.customerId  where c.TenantId = 77  &amp;#160;&amp;#160; and purchaseDate &amp;gt;= '2001-06-01'  &amp;#160;&amp;#160; and purchaseDate &amp;lt; '2001-07-01'    *************************** 1. row ***************************  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; id: 1  &amp;#160; select_type: SIMPLE  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; table: c  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type: ref  possible_keys: PRIMARY,pf_customer_tenant  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key: pf_customer_tenant  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key_len: 4  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ref: const  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rows: 5040  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Extra: Using index  *************************** 2. row ***************************  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; id: 1  &amp;#160; select_type: SIMPLE  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; table: s  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type: ref  possible_keys: PRIMARY,pf_sale_customer  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key: pf_sale_customer  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key_len: 4  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ref: test.c.customerId  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rows: 57  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Extra: Using where  &amp;#160;  So, obviously there are cases where adding a tenantId will make the queries run much faster.&amp;#160; The issue with adding a tenantId to all the tables and clustering on that column is queries that are not limited to a tenant (or set of tenants) will be slower in some cases.&amp;#160; The next two sql statements will show such a case.&amp;#160;   5) In this sql a simple sum is run against the Sale table for a month, summing about 1/12 of the table.&amp;#160; As the table is clustered by date the query is fast and runs in about 4.4 seconds.  &amp;#160;  select sum(unit)  &amp;#160; from Sale s  where purchaseDate &amp;gt;= '2001-06-01'  &amp;#160;&amp;#160; and purchaseDate &amp;lt; '2001-07-01'  &amp;#160;  The query plan shows the clustered index being used to scan the table.&amp;#160;   &amp;#160;  *************************** 1. row ***************************  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; id: 1  &amp;#160; select_type: SIMPLE  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; table: Sale  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type: range  possible_keys: PRIMARY  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key: PRIMARY  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key_len: 8  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ref: NULL  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rows: 26733636  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Extra: Using where  &amp;#160;  The equivalent query against the SaleTenant table takes 39 seconds to run.&amp;#160; In this case, the entire table must be scanned as there is no date oriented index.&amp;#160;&amp;#160;   &amp;#160;  select sum(unit) from SaleTenant  where purchaseDate &amp;gt;= '2001-06-01'  &amp;#160; and purchaseDate &amp;lt; '2001-07-01'      The plan show the full table scan.&amp;#160;   &amp;#160;  *************************** 1. row ***************************  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; id: 1  &amp;#160; select_type: SIMPLE  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; table: SaleTenant  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type: ALL  possible_keys: NULL  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key: NULL  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key_len: NULL  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ref: NULL  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rows: 123303794  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Extra: Using where      Assuming this cross-tenant access pattern is frequent enough to be a performance problem, a potential solution to this problem is to add a covering index.&amp;#160; However, this might not be an issue as the only organization likely to execute such a query would be the hosting company.&amp;#160;   Given enough tenants in a database, adding a tenantId to a mutli-tenant database is recommended as some queries are going to be at least an order of magnitude slower if you don&amp;#8217;t.&amp;#160;&amp;#160; As denormalizations go, this is a reasonable one as how often would the tenantId (owner) of a row change?&amp;#160; Just be aware that queries that don&amp;#8217;t include a tenantId in the criteria can be much slower.&amp;#160;&amp;#160;   I didn&amp;#8217;t cover this, but partitioning by tenantId also makes sense and can make moving customers from one sharded database to another much easier.&amp;#160; Perhaps more about that later.</description>
    <content:encoded><![CDATA[<p>There are some good high level discussions on the various database architectures for implementing software as a service.&#160; I&#8217;m on going to duplicate that.&#160; Instead, this article is going to highlight some of the issues and tradeoffs when multiple tenants (customers of the software service provider) are put into one database.&#160;&#160; The core of the problem is having multiple tenants in one set of database tables can make queries that select data for only one customer much slower.&#160; </p>  <p>First, I&#8217;m testing on a new system, one with 32 gig of memory.&#160; Currently,&#160; the innodb_buffer_pool_size set to 28 gig.&#160;&#160; I&#8217;m using the same size tables as previously, both Sale and SaleTenant have 120 million rows and are about 27 and 28 gig respectively.&#160; This means that the tables fit into memory, so the following tests do not have an IO component.&#160; Not perfect, but it shouldn't make a difference in the conclusions for these tests.&#160;&#160; </p>  <p>For the other two tables, there are 100 tenants, and 1 million customers.&#160; </p>  <p>The ddl looks like this (yeah, key and constraint names don&#8217;t make sense).&#160;&#160; First, the non-multi-tenant table.&#160; </p>  <p>&#160;</p>  <p><font face="Courier New" size="2">CREATE TABLE&#160; `test`.`Sale` (</font></p>  <p><font face="Courier New" size="2">&#160; `orderId` int(11) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `customerId` int(11) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `productId` int(11) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `productBigId` int(11) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `unit` int(11) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `purchaseAmount` decimal(16,2) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `purchaseCost` decimal(16,2) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `purchaseDate` datetime NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; PRIMARY KEY&#160; (`purchaseDate`,`orderId`),</font></p>  <p><font face="Courier New" size="2">&#160; UNIQUE KEY `idx_sale_order` (`orderId`),</font></p>  <p><font face="Courier New" size="2">&#160; KEY `pf_sale_product` (`productId`),</font></p>  <p><font face="Courier New" size="2">&#160; KEY `pf_sale_customer` (`customerId`),</font></p>  <p><font face="Courier New" size="2">&#160; CONSTRAINT `pf_sale_customer` FOREIGN KEY (`customerId`) REFERENCES `Customer` (`customerId`),</font></p>  <p><font face="Courier New" size="2">&#160; CONSTRAINT `pf_sale_product` FOREIGN KEY (`productId`) REFERENCES `Product` (`productId`)</font></p>  <p><font face="Courier New" size="2">) ENGINE=InnoDB </font></p>  <p>&#160;</p>  <p>Then the table with a tenantId in the table.&#160; </p>  <p>&#160;</p>  <p><font face="Courier New" size="2">CREATE TABLE&#160; `test`.`SaleTenant` (</font></p>  <p><font face="Courier New" size="2">&#160; `orderId` int(11) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `tenantId` int(11) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `customerId` int(11) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `productId` int(11) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `productBigId` int(11) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `unit` int(11) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `purchaseAmount` decimal(16,2) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `purchaseCost` decimal(16,2) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `purchaseDate` datetime NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; PRIMARY KEY&#160; (`tenantId`,`purchaseDate`,`orderId`),</font></p>  <p><font face="Courier New" size="2">&#160; UNIQUE KEY `idx_saletenant_order` (`orderId`),</font></p>  <p><font face="Courier New" size="2">&#160; KEY `pf_saletenant_product` (`productId`),</font></p>  <p><font face="Courier New" size="2">&#160; KEY `pf_saletenant_customer` (`customerId`),</font></p>  <p><font face="Courier New" size="2">&#160; CONSTRAINT `pf_saletenant_customer` FOREIGN KEY (`customerId`) REFERENCES `Customer` (`customerId`),</font></p>  <p><font face="Courier New" size="2">&#160; CONSTRAINT `pf_saletenant_product` FOREIGN KEY (`productId`) REFERENCES `Product` (`productId`),</font></p>  <p><font face="Courier New" size="2">&#160; CONSTRAINT `pf_saletenant_tentant` FOREIGN KEY (`tenantId`) REFERENCES `Tenant` (`tenantId`)</font></p>  <p><font face="Courier New" size="2">) ENGINE=InnoDB </font></p>  <p>&#160;</p>  <p>Now, the tenant table.&#160; </p>  <p>&#160;</p>  <p><font face="Courier New" size="2">CREATE TABLE&#160; `test`.`Tenant` (</font></p>  <p><font face="Courier New" size="2">&#160; `tenantId` int(11) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `tenantName` varchar(32) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; PRIMARY KEY&#160; (`tenantId`)</font></p>  <p><font face="Courier New" size="2">) ENGINE=InnoDB DEFAULT</font></p>  <p>&#160;</p>  <p>And a customer table with a tenantId column.&#160; </p>  <p>&#160;</p>  <p><font face="Courier New" size="2">CREATE TABLE&#160; `test`.`Customer` (</font></p>  <p><font face="Courier New" size="2">&#160; `customerId` int(11) NOT NULL default '0',</font></p>  <p><font face="Courier New" size="2">&#160; `customerName` varchar(32) NOT NULL,</font></p>  <p><font face="Courier New" size="2">&#160; `tenantId` int(11) NOT NULL default '0',</font></p>  <p><font face="Courier New" size="2">&#160; PRIMARY KEY&#160; (`customerId`),</font></p>  <p><font face="Courier New" size="2">&#160; KEY `pf_customer_tenant` (`tenantId`),</font></p>  <p><font face="Courier New" size="2">&#160; CONSTRAINT `pf_customer_tenant` FOREIGN KEY (`tenantId`) REFERENCES `Tenant` (`tenantId`)</font></p>  <p><font face="Courier New" size="2">) ENGINE=InnoDB </font></p>  <p>&#160;</p>  <p>#1) Against a table that is clustered by the TenantId, this query takes 0.5 seconds to run.&#160; As it selects about 1/100 of the Sale Tenant database, the performance isn&#8217;t bad.</p>  <p>&#160;</p>  <p>select sum(unit) from SaleTenant&#160; where TenantId = 77;</p>  <p>&#160;</p>  <p>And the query plan shows that the custered index was used to scan on the relevant rows.&#160; </p>  <p><font face="Courier New" size="2">*************************** 1. row ***************************</font></p>  <p><font face="Courier New" size="2">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; id: 1</font></p>  <p><font face="Courier New" size="2">&#160; select_type: SIMPLE</font></p>  <p><font face="Courier New" size="2">&#160;&#160;&#160;&#160;&#160;&#160;&#160; table: SaleTenant</font></p>  <p><font face="Courier New" size="2">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; type: ref</font></p>  <p><font face="Courier New" size="2">possible_keys: PRIMARY</font></p>  <p><font face="Courier New" size="2">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; key: PRIMARY</font></p>  <p><font face="Courier New" 