<?xml version="1.0" encoding="utf-8" ?>
<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>Tue, 09 Feb 2010 07:15:02 +0000</pubDate>
  <language>en</language>
  <description>Planet MySQL - http://www.planetmysql.org/</description>

  <item>
    <title>Top Speed - Queries per Second</title>
    <guid isPermaLink="false">tag:blogger.com,1999:blog-375697951860081841.post-5108537475560488385</guid>
    <link>http://www.jonathanlevin.co.uk/2010/02/top-speed-queries-per-second.html</link>
    <description>

Today I reached 109k Queries per Second. I was quite impressed by it.
Some background on the situation.
I developed some stored procedures to process some rather large tables we had in our database.
I managed to get the stored procedures to be very efficient and quick.
I then wanted to test it out and tried to overload the server to see how much it could take.
Normally, the server would do around 1k at best with these kinds of tasks. I have recently been able to tweak it to 20k QPS. But today, for some reason, the cache managed to get itself in the right position and produced this result.

The Server:
A 4+ year old Dell server, with SAS drives, 1 Quad-core CPU and 16Gbs of memory.

Database:
MySQL 5.0.48 - with MyISAM tables only

The Tasks:
Reference a 101 million row table (12+ Gbs) to fill in a column in three 8-9 million row tables (2-5Gbs).
Reference a 700k row table to fill in a 7 million row table.
So 4 tasks at the same time.

Click on the picture to see the full screenshot
Applications used: Mtop &amp;amp; Htop</description>
    <content:encoded><![CDATA[<a href="https://sites.google.com/a/jonathanlevin.co.uk/images/_/rsrc/1265668889270/home/109k2.png"><img src="https://sites.google.com/a/jonathanlevin.co.uk/images/_/rsrc/1265669042611/home/109ks.png" /></a><br />
<br />
Today I reached 109k Queries per Second. I was quite impressed by it.<br />
Some background on the situation.<br />
I developed some stored procedures to process some rather large tables we had in our database.<br />
I managed to get the stored procedures to be very efficient and quick.<br />
I then wanted to test it out and tried to overload the server to see how much it could take.<br />
Normally, the server would do around 1k at best with these kinds of tasks. I have recently been able to tweak it to 20k QPS. But today, for some reason, the cache managed to get itself in the right position and produced this result.<br />
<br />
The Server:<br />
A 4+ year old Dell server, with SAS drives, 1 Quad-core CPU and 16Gbs of memory.<br />
<br />
Database:<br />
MySQL 5.0.48 - with MyISAM tables only<br />
<br />
The Tasks:<br />
Reference a 101 million row table (12+ Gbs) to fill in a column in three 8-9 million row tables (2-5Gbs).<br />
Reference a 700k row table to fill in a 7 million row table.<br />
So 4 tasks at the same time.<br />
<br />
<a href="https://sites.google.com/a/jonathanlevin.co.uk/images/_/rsrc/1265668889270/home/109k2.png">Click on the picture to see the full screenshot</a><br />
Applications used: Mtop &amp; Htop<div><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/375697951860081841-5108537475560488385?l=www.jonathanlevin.co.uk" alt="" /></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23390&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23390&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Mon, 08 Feb 2010 22:54:00 +0000</pubDate>
    <dc:creator>Jonathan Levin</dc:creator>
  </item>

  <item>
    <title>Don't forget the COMMIT in MySQL</title>
    <guid isPermaLink="false">tag:blogger.com,1999:blog-5702936365231918674.post-8120553126411850327</guid>
    <link>http://blog.some-abstract-type.com/2010/02/dont-forget-commit-in-mysql.html</link>
    <description>Yes, MySQL has transactions if you use InnoDB or NDB Cluster for example. Using these transactional storage engines, you'll have to commit (or roll back) your inserts, deletes or updates.I've seen it a few times now with people being surprised that no data is going into the tables. It's not so a silly problem in the end. If you are used to the defaults in MySQL you don't have to commit anything since it is automatically done for you.Take the Python Database Interfaces for MySQL. PEP-249 says that, by default, auto-commit should be turned off. You could turn it back on, but it's good practice to be explicit and commit in your code. Remember the Zen of Python!Here is just a small example to show it. Uses MySQL Connector/Python, but it does work also with others:import mysql.connectorcnx = mysql.connector.connect(db='test')cur = cnx.cursor()cur.execute(&quot;&quot;&quot;CREATE TABLE innodb_t1 (  id INT UNSIGNED NOT NULL,  c1 VARCHAR(128),  PRIMARY KEY (id)) ENGINE=InnoDB&quot;&quot;&quot;)ins = &quot;INSERT INTO innodb_t1 (id,c1) VALUES (%s,%s)&quot;cur.execute(ins,  (1,'MySQL Support Team _is_ already the best',))cnx.commit()cur.close()cnx.close()</description>
    <content:encoded><![CDATA[<p>Yes, <a href="http://dev.mysql.com">MySQL</a> has transactions if you use <a href="http://dev.mysql.com/doc/refman/5.1/en/innodb.html">InnoDB</a> or <a href="http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster.html">NDB Cluster</a> for example. Using these transactional storage engines, you'll have <a href="http://dev.mysql.com/doc/refman/5.1/en/commit.html">to commit</a> (or roll back) your inserts, deletes or updates.</p><p>I've seen it a few times now with people being surprised that no data is going into the tables. It's not so a silly problem in the end. If you are used to the defaults in MySQL you don't have to commit anything since it is automatically done for you.</p><p>Take the <a href="http://python.org">Python</a> Database Interfaces for MySQL. <a href="http://www.python.org/dev/peps/pep-0249/">PEP-249</a> says that, by default, auto-commit should be turned off. You could turn it back on, but it's good practice to be explicit and commit in your code. Remember <a href="http://www.python.org/dev/peps/pep-0020/">the Zen of Python</a>!<p>Here is just a small example to show it. Uses <a href="https://launchpad.net/myconnpy">MySQL Connector/Python</a>, but it does work also with others:</p><pre><br />import mysql.connector<br />cnx = mysql.connector.connect(db='test')<br />cur = cnx.cursor()<br />cur.execute("""CREATE TABLE innodb_t1 (<br />  id INT UNSIGNED NOT NULL,<br />  c1 VARCHAR(128),<br />  PRIMARY KEY (id)<br />) ENGINE=InnoDB""")<br />ins = "INSERT INTO innodb_t1 (id,c1) VALUES (%s,%s)"<br />cur.execute(ins,<br />  (1,'MySQL Support Team _is_ already the best',))<br />cnx.commit()<br />cur.close()<br />cnx.close()<br /></pre><div><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/5702936365231918674-8120553126411850327?l=blog.some-abstract-type.com" alt="" /></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23391&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23391&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Mon, 08 Feb 2010 22:29:00 +0000</pubDate>
    <dc:creator>Geert Vanderkelen</dc:creator>
    <category>mysql</category>
    <category>python</category>
    <category>myconnpy</category>
  </item>

  <item>
    <title>How PostgreSQL protects against partial page writes and data corruption</title>
    <guid isPermaLink="false">http://www.xaprb.com/blog/?p=1616</guid>
    <link>http://www.xaprb.com/blog/2010/02/08/how-postgresql-protects-against-partial-page-writes-and-data-corruption/</link>
    <description>I explored two interesting topics today while learning more about Postgres.

Partial page writes

PostgreSQL&amp;#8217;s partial page write protection is configured by the following setting, which defaults to &amp;#8220;on&amp;#8221;:

full_page_writes (boolean)

When this parameter is on, the PostgreSQL server writes the entire content of each disk page to WAL during the first modification of that page after a checkpoint&amp;#8230; Storing the full page image guarantees that the page can be correctly restored, but at a price in increasing the amount of data that must be written to WAL. (Because WAL replay always starts from a checkpoint, it is sufficient to do this during the first change of each page after a checkpoint. Therefore, one way to reduce the cost of full-page writes is to increase the checkpoint interval parameters.)

Trying to reduce the cost of full-page writes by increasing the checkpoint interval highlights a compromise.  If you decrease the interval, then you&amp;#8217;ll be writing full pages to the WAL quite often.  This should in theory lead to surges in the number of bytes written to the WAL, immediately following each checkpoint. As pages are revisited over time for further changes, the number of bytes written should taper off gradually until the next checkpoint.   Hopefully someone who knows more can confirm this.  Does anyone graph the number of bytes written to their WAL?  That would be a nice illustration to see how dramatic this surging is.

Decreasing the checkpoint interval seems a bit scary, and is bound to have its own costs, for all the usual reasons.  A massive checkpoint once in a while should be really expensive, and would lead to a bad worst-case time for recovery.  Does the new bgwriter implementation in 8.3 fix any of this?  In theory it could, but I don&amp;#8217;t know enough yet to say.  I have heard conflicting opinions on this point.  I have a lot more to read about it before I form my own opinion.

Storing full pages might not really be that expensive.  It could bloat the WAL, but is the cost (in terms of time) really that high?  InnoDB (in MySQL) protects against partial page writes with a double-write strategy: a region in the tablespace is called the doublewrite buffer.  Page writes are first sent to the doublewrite buffer, then to their actual location in the data file.  I don&amp;#8217;t remember where, but I&amp;#8217;ve seen benchmarks showing that this doesn&amp;#8217;t hurt performance, even though it seems counter-intuitive.  Modern disks can do a lot of sequential writes, and the way InnoDB writes its data makes a lot of things sequential.  I doubt that putting full pages into the PostgreSQL WAL is forced to cost a lot, unless there is an implementation-specific aspect that makes it expensive.

The TODO has some items on the WAL, which look interesting &amp;#8212; &amp;#8220;Eliminate need to write full pages to WAL before page modification&amp;#8221; and a couple more items.  I need to understand PostgreSQL&amp;#8217;s recovery process better before I know what these really mean.

Detecting data corruption

I was able to verify that the WAL entries have a checksum.  It is a CRC32.  This is in xlog.c.

However, as far as I can understand, the answer for detecting data corruption in normal data pages is &amp;#8220;Postgres doesn&amp;#8217;t do that.&amp;#8221;  I was told on the IRC channel that normal data pages don&amp;#8217;t have checksums.  I am not sure how to verify that, but if it&amp;#8217;s true it seems like a weakness.  I&amp;#8217;ve seen hardware-induced corruption on InnoDB data many times, and it could sometimes only be detected by page checksums.

What happens when a page is corrupt?  It probably depends on where the corruption is.  If a few bytes of the user&amp;#8217;s data is changed, then I assume you could just get different data out of the database than you inserted into it.  But if non-user data is corrupted then do you get bizarre behavior, or do you get a crash or error?  I need to learn more about PostgreSQL&amp;#8217;s data file layout to understand this.  Imagining (I haven&amp;#8217;t verified this) that a page has a pointer to the next page, what happens if that pointer is flipped to refer to some other page, say, a page from a different table?  If TABLE1 and TABLE2 have identical structures but different data, could SELECT * FROM TABLE1 suddenly start showing rows from TABLE2 partway through the results?  Again I need to learn more about this.

Related posts:The Ma.gnolia data might not be permanently lost I keep reaWhat data types does your innovative storage engine NOT support? I&amp;#8217;vePostgreSQL Conference East 2009, Day Three As I said 
Related posts brought to you by Yet Another Related Posts Plugin.</description>
    <content:encoded><![CDATA[<p>I explored two interesting topics today while learning more about Postgres.</p>

<h3>Partial page writes</h3>

<p>PostgreSQL&#8217;s partial page write protection is configured by the following setting, which defaults to &#8220;on&#8221;:</p>

<blockquote cite="http://www.postgresql.org/docs/8.3/static/runtime-config-wal.html#GUC-FULL-PAGE-WRITES"><p>full_page_writes (boolean)</p>

<p>When this parameter is on, the PostgreSQL server writes the entire content of each disk page to WAL during the first modification of that page after a checkpoint&#8230; Storing the full page image guarantees that the page can be correctly restored, but at a price in increasing the amount of data that must be written to WAL. (Because WAL replay always starts from a checkpoint, it is sufficient to do this during the first change of each page after a checkpoint. Therefore, one way to reduce the cost of full-page writes is to increase the checkpoint interval parameters.)</p></blockquote>

<p>Trying to reduce the cost of full-page writes by increasing the checkpoint interval highlights a compromise.  If you decrease the interval, then you&#8217;ll be writing full pages to the WAL quite often.  This should in theory lead to surges in the number of bytes written to the WAL, immediately following each checkpoint. As pages are revisited over time for further changes, the number of bytes written should taper off gradually until the next checkpoint.   Hopefully someone who knows more can confirm this.  Does anyone graph the number of bytes written to their WAL?  That would be a nice illustration to see how dramatic this surging is.</p>

<p>Decreasing the checkpoint interval seems a bit scary, and is bound to have its own costs, for all the usual reasons.  A massive checkpoint once in a while should be really expensive, and would lead to a bad worst-case time for recovery.  Does the new bgwriter implementation in 8.3 fix any of this?  In theory it could, but I don&#8217;t know enough yet to say.  I have heard conflicting opinions on this point.  I have a lot more to read about it before I form my own opinion.</p>

<p>Storing full pages might not really be that expensive.  It could bloat the WAL, but is the cost (in terms of time) really that high?  InnoDB (in MySQL) protects against partial page writes with a double-write strategy: a region in the tablespace is called the doublewrite buffer.  Page writes are first sent to the doublewrite buffer, then to their actual location in the data file.  I don&#8217;t remember where, but I&#8217;ve seen benchmarks showing that this doesn&#8217;t hurt performance, even though it seems counter-intuitive.  Modern disks can do a lot of sequential writes, and the way InnoDB writes its data makes a lot of things sequential.  I doubt that putting full pages into the PostgreSQL WAL is forced to cost a lot, unless there is an implementation-specific aspect that makes it expensive.</p>

<p>The TODO has some <a href="http://wiki.postgresql.org/wiki/Todo#Write-Ahead_Log">items on the WAL</a>, which look interesting &#8212; &#8220;Eliminate need to write full pages to WAL before page modification&#8221; and a couple more items.  I need to understand PostgreSQL&#8217;s recovery process better before I know what these really mean.</p>

<h3>Detecting data corruption</h3>

<p>I was able to verify that the WAL entries have a checksum.  It is a CRC32.  This is in <a href="http://doxygen.postgresql.org/xlog_8c-source.html#l00567">xlog.c</a>.</p>

<p>However, as far as I can understand, the answer for detecting data corruption in normal data pages is &#8220;Postgres doesn&#8217;t do that.&#8221;  I was told on the IRC channel that normal data pages don&#8217;t have checksums.  I am not sure how to verify that, but if it&#8217;s true it seems like a weakness.  I&#8217;ve seen hardware-induced corruption on InnoDB data many times, and it could sometimes only be detected by page checksums.</p>

<p>What happens when a page is corrupt?  It probably depends on where the corruption is.  If a few bytes of the user&#8217;s data is changed, then I assume you could just get different data out of the database than you inserted into it.  But if non-user data is corrupted then do you get bizarre behavior, or do you get a crash or error?  I need to learn more about PostgreSQL&#8217;s data file layout to understand this.  Imagining (I haven&#8217;t verified this) that a page has a pointer to the next page, what happens if that pointer is flipped to refer to some other page, say, a page from a different table?  If TABLE1 and TABLE2 have identical structures but different data, could SELECT * FROM TABLE1 suddenly start showing rows from TABLE2 partway through the results?  Again I need to learn more about this.</p>

<p>Related posts:<ol><li><a href="http://www.xaprb.com/blog/2009/02/19/the-magnolia-data-might-not-be-permanently-lost/" rel="bookmark" title="Permanent Link: The Ma.gnolia data might not be permanently lost">The Ma.gnolia data might not be permanently lost</a> <small>I keep rea</small></li><li><a href="http://www.xaprb.com/blog/2009/09/29/what-data-types-does-your-innovative-storage-engine-not-support/" rel="bookmark" title="Permanent Link: What data types does your innovative storage engine NOT support?">What data types does your innovative storage engine NOT support?</a> <small>I&#8217;ve</small></li><li><a href="http://www.xaprb.com/blog/2009/04/05/postgresql-conference-east-2009-day-three/" rel="bookmark" title="Permanent Link: PostgreSQL Conference East 2009, Day Three">PostgreSQL Conference East 2009, Day Three</a> <small>As I said </small></li></ol></p>
<p>Related posts brought to you by <a href="http://mitcho.com/code/yarpp/">Yet Another Related Posts Plugin</a>.</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23387&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23387&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Mon, 08 Feb 2010 19:36:15 +0000</pubDate>
    <dc:creator>Baron Schwartz (xaprb)</dc:creator>
    <category>PostgreSQL</category>
    <category>SQL</category>
    <category>checkpoint</category>
    <category>checksums</category>
    <category>CRC32</category>
    <category>InnoDB</category>
    <category>mysql</category>
    <category>recovery</category>
    <category>wal</category>
  </item>

  <item>
    <title>News, Jacob's leaves, Assay to Canonical</title>
    <guid isPermaLink="false">http://krow.livejournal.com/681615.html</guid>
    <link>http://krow.livejournal.com/681615.html</link>
    <description>News Monday! Matt Assay to JOIN Canonical as COOThis took me a bit by surprise at first. I don't find myself often agreeing with Matt. Most of what he tends to write/argue for is what I have referred to in the past as &quot;crippleware&quot;. Canonical in recent time has taken to opening up their platform. I've been a strong advocate for Launchpad, it is a great service. I love that they opened it up in recent time. When it comes to infrastructure software on the size of LP, I don't believe that many others will ever install it. Slash, G-Forge, and the Livejournal software are examples of infrastructure software that approach the size or outweigh the LP codebase. They have rarely been successfully deployed by others. The advantage in the Launchpad software being open source is the potential for others to audit the code. I suspect that they will receive some patches, but I doubt that the number of patches will ever out pace what the conical staff itself creates. This morning I got a number of worried pieces of email over Matt's new position at Canonical.  Do I find that I am worried about Assay joining Canonical? Not really. The job of the COO is too keep the company moving on a day to day basis. With his background at Alfresco, the COO role makes sense. Canonical has a lot of strong open source advocates so I wouldn't expect change in a direction that would create issue. Canonical's Ubuntu One is their longterm play. Service based revenue work hand in hand with open source go well together (...how many online services can you name that aren't based on open source?). The COO position is one of the key positions that a company will hire for, yet, many smaller companies tend to pass over the creation of this position in lieu of having the CEO also fill this role. This is a real shame since you can often have a great CEO, who makes for a poor COO.  Ken Jacobs leaves OracleWhen Innodb was first acquired by Oracle there was a lot of shock and dismay within the MySQ Ecosystem. MySQL INC's reaction to the acquisition, which then rippled to the community, created a mistrust of Oracle. Ken Jacobs really changed that reaction in the community. There has been a number of times over the years that I found myself on the same side of the fence as Ken when it came to both leadership and technical vision about MySQL. I am sure Oracle has other competent executives to fill his shoes, but Ken has been a real asset to Oracle over the years. I am sad to see him leave the ecosystem, he played a very positive role in the community.  Oracle buying Innodb was never the killer move most envisioned at the time. It kick started engine development around MySQL, which was the only real innovation we saw for many years. Around the time of the acquisition all but one of the engineers who knew MySQL well, worked for MySQL. Having multiple companies working on engines re-invogorated outside development in the project. Without Oracle buying Innodb, the MySQL ecosystem would have never been forced into an innovators cycle again.</description>
    <content:encoded><![CDATA[News Monday!<br /><br /><li> <a href="http://news.cnet.com/8301-13505_3-10447913-16.html">Matt Assay to JOIN Canonical as COO</a><br /><br />This took me a bit by surprise at first. I don't find myself often agreeing with Matt. Most of what he tends to write/argue for is what I have referred to in the past as <a href="http://krow.livejournal.com/594927.html">"crippleware"</a>. Canonical in recent time has taken to opening up their platform. I've been a strong advocate for Launchpad, it is a great service. I love that they opened it up in recent time. When it comes to infrastructure software on the size of LP, I don't believe that many others will ever install it. Slash, G-Forge, and the Livejournal software are examples of infrastructure software that approach the size or outweigh the LP codebase. They have rarely been successfully deployed by others. The advantage in the Launchpad software being open source is the potential for others to audit the code. I suspect that they will receive some patches, but I doubt that the number of patches will ever out pace what the conical staff itself creates. <br /><br />This morning I got a number of worried pieces of email over Matt's new position at Canonical.  <br /><br />Do I find that I am worried about Assay joining Canonical? <br /><br />Not really. <br /><br />The job of the COO is too keep the company moving on a day to day basis. With his background at Alfresco, the COO role makes sense. Canonical has a lot of strong open source advocates so I wouldn't expect change in a direction that would create issue. Canonical's <a href="https://one.ubuntu.com/">Ubuntu One</a> is their longterm play. Service based revenue work hand in hand with open source go well together (...how many online services can you name that aren't based on open source?). <br /><br />The COO position is one of the key positions that a company will hire for, yet, many smaller companies tend to pass over the creation of this position in lieu of having the CEO also fill this role. This is a real shame since you can often have a great CEO, who makes for a poor COO. <br /><br /><li> Ken Jacobs leaves Oracle<br /><br />When Innodb was first acquired by Oracle there was a lot of shock and dismay within the MySQ Ecosystem. MySQL INC's reaction to the acquisition, which then rippled to the community, created a mistrust of Oracle. Ken Jacobs really changed that reaction in the community. There has been a number of times over the years that I found myself on the same side of the fence as Ken when it came to both leadership and technical vision about MySQL. I am sure Oracle has other competent executives to fill his shoes, but Ken has been a real asset to Oracle over the years. I am sad to see him leave the ecosystem, he played a very positive role in the community.  <br /><br />Oracle buying Innodb was never the killer move most envisioned at the time. It kick started engine development around MySQL, which was the only real innovation we saw for many years. Around the time of the acquisition all but one of the engineers who knew MySQL well, worked for MySQL. Having multiple companies working on engines re-invogorated outside development in the project. Without Oracle buying Innodb, the MySQL ecosystem would have never been forced into an innovators cycle again.<br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23386&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23386&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Mon, 08 Feb 2010 18:41:55 +0000</pubDate>
    <dc:creator>Brian Aker</dc:creator>
  </item>

  <item>
    <title>Introducing tpce-like workload for MySQL</title>
    <guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=2173</guid>
    <link>http://www.mysqlperformanceblog.com/2010/02/08/introducing-tpce-like-workload-for-mysql/</link>
    <description>We have been using tpcc-mysql benchmark for long time, and there many results published in our blog, but that's just single workload. That's why we are looking into different benchmarks, and one
of them is TPCE. Yasufumi made some efforts to make TPCE working with MySQL, and  we are making it available for public consideration.
You can download it from our Lauchpad Percona-tools project, it's
bzr branch lp:~percona-dev/perconatools/tpcemysql
Important DISCLAIMER:
Using this package you should agree with TPC-E License Agreement,
which in human words is:

You can't name results as &quot;TPC Benchmark Results&quot;
You can't compare results with results published on http://www.tpc.org/ and you can't pretend the results are compatible with published by TPC.

And we are not going to do anything from that, your primary goals is XtraDB/InnoDB performance research and/or compare with available Storage Engines for MySQL.
The workload in tpce is quite different from tpcc. Tpcc is write intensive, while tpce
is read oriented.
To give more details, there is stats for 10 seconds:
PLAIN TEXT
CODE:




| Com_select&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 46272&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|


| Com_update&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 5214&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |


| Com_delete&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 385&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|


| Com_insert&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 3468&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |


| Com_commit&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 5404&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 






The result  is quite chatty, 
PLAIN TEXT
CODE:




|&amp;nbsp; &amp;nbsp; |&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#91;MEE&amp;#93;&amp;nbsp; &amp;nbsp; | &amp;#91;DM&amp;#93; |&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#91;CE&amp;#93;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |


sec. |&amp;nbsp; &amp;nbsp; TR,&amp;nbsp; &amp;nbsp; MF |&amp;nbsp; &amp;nbsp;DM |&amp;nbsp; &amp;nbsp;BV,&amp;nbsp; &amp;nbsp; CP,&amp;nbsp; &amp;nbsp; MW,&amp;nbsp; &amp;nbsp; SD,&amp;nbsp; &amp;nbsp; TL,&amp;nbsp; &amp;nbsp; TO,&amp;nbsp; &amp;nbsp; TS,&amp;nbsp; &amp;nbsp; TU | MEEThreads, ReqQueue


&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#40;1st line: count, 2nd line: 90%ile response &amp;#91;msec.&amp;#93;&amp;#41;


&amp;nbsp;260 |&amp;nbsp; &amp;nbsp;402,&amp;nbsp; &amp;nbsp; 39,&amp;nbsp; &amp;nbsp; &amp;nbsp;0,&amp;nbsp; &amp;nbsp;195,&amp;nbsp; &amp;nbsp;532,&amp;nbsp; &amp;nbsp;749,&amp;nbsp; &amp;nbsp;588,&amp;nbsp; &amp;nbsp;342,&amp;nbsp; &amp;nbsp;415,&amp;nbsp; &amp;nbsp;816,&amp;nbsp; &amp;nbsp; 88 | 30, 0


&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 20,&amp;nbsp; &amp;nbsp; 60,&amp;nbsp; &amp;nbsp; &amp;nbsp;0,&amp;nbsp; &amp;nbsp; 30,&amp;nbsp; &amp;nbsp; 20,&amp;nbsp; &amp;nbsp; 20,&amp;nbsp; &amp;nbsp; 20,&amp;nbsp; &amp;nbsp; 50,&amp;nbsp; &amp;nbsp; 20,&amp;nbsp; &amp;nbsp;310,&amp;nbsp; &amp;nbsp; 60


&amp;nbsp;


&amp;nbsp;270 |&amp;nbsp; &amp;nbsp;395,&amp;nbsp; &amp;nbsp; 40,&amp;nbsp; &amp;nbsp; &amp;nbsp;0,&amp;nbsp; &amp;nbsp;201,&amp;nbsp; &amp;nbsp;608,&amp;nbsp; &amp;nbsp;842,&amp;nbsp; &amp;nbsp;608,&amp;nbsp; &amp;nbsp;358,&amp;nbsp; &amp;nbsp;449,&amp;nbsp; &amp;nbsp;833,&amp;nbsp; &amp;nbsp; 89 | 30, 0


&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 30,&amp;nbsp; &amp;nbsp; 40,&amp;nbsp; &amp;nbsp; &amp;nbsp;0,&amp;nbsp; &amp;nbsp; 30,&amp;nbsp; &amp;nbsp; 20,&amp;nbsp; &amp;nbsp; 20,&amp;nbsp; &amp;nbsp; 20,&amp;nbsp; &amp;nbsp; 50,&amp;nbsp; &amp;nbsp; 20,&amp;nbsp; &amp;nbsp;300,&amp;nbsp; &amp;nbsp; 50 






but it allows you to see count of 11 different transactions per 10 secs and 90% response time.
and final result
PLAIN TEXT
CODE:




&amp;#91;TradeResult&amp;#40;TR&amp;#41; transaction&amp;#93;


Succeed: 150243


Lated:&amp;nbsp; &amp;nbsp;0


Retried: 3


Failed:&amp;nbsp; 0


&amp;nbsp;


41.7342 TpsE 






where you can see count of successful TR (TradeResult) transactions, and
the summary result in TpsE (transactions per seconds).
Expect our results soon!
    
    Entry posted by Vadim |
      No comment
    Add to:  |  |  |  | </description>
    <content:encoded><![CDATA[<p>We have been using tpcc-mysql benchmark for long time, and there many results published in our blog, but that's just single workload. That's why we are looking into different benchmarks, and one<br />
of them is TPCE. Yasufumi made some efforts to make TPCE working with MySQL, and  we are making it available for public consideration.</p>
<p>You can download it from our Lauchpad Percona-tools project, it's<br />
<code>bzr branch lp:~percona-dev/perconatools/tpcemysql</code></p>
<p>Important <strong>DISCLAIMER</strong>:<br />
Using this package you should agree with <a href="http://www.tpc.org/tpce/egen/TPC-E%20License%20Agreement.pdf%20">TPC-E License Agreement</a>,<br />
which in human words is:</p>
<ul>
<li>You can't name results as "TPC Benchmark Results"</li>
<li>You can't compare results with results published on <a href="http://www.tpc.org/">http://www.tpc.org/</a> and you can't pretend the results are compatible with published by TPC.</li>
</ul>
<p>And we are not going to do anything from that, your primary goals is XtraDB/InnoDB performance research and/or compare with available Storage Engines for MySQL.</p>
<p>The workload in tpce is quite different from tpcc. Tpcc is write intensive, while tpce<br />
is read oriented.<br />
To give more details, there is stats for 10 seconds:</p>
<div><span><a href="http://www.mysqlperformanceblog.com">PLAIN TEXT</a></span></div>
<div><span>CODE:</span>
<div>
<div>
<ol>
<li>
<div>| Com_select&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | <span>46272</span>&nbsp; &nbsp; &nbsp; &nbsp;|</div>
</li>
<li>
<div>| Com_update&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | <span>5214</span>&nbsp; &nbsp; &nbsp; &nbsp; |</div>
</li>
<li>
<div>| Com_delete&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | <span>385</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|</div>
</li>
<li>
<div>| Com_insert&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | <span>3468</span>&nbsp; &nbsp; &nbsp; &nbsp; |</div>
</li>
<li>
<div>| Com_commit&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | <span>5404</span>&nbsp; &nbsp; &nbsp; &nbsp; | </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>The result  is quite chatty, </p>
<div><span><a href="http://www.mysqlperformanceblog.com">PLAIN TEXT</a></span></div>
<div><span>CODE:</span>
<div>
<div>
<ol>
<li>
<div>|&nbsp; &nbsp; |&nbsp; &nbsp; &nbsp;<span>&#91;</span>MEE<span>&#93;</span>&nbsp; &nbsp; | <span>&#91;</span>DM<span>&#93;</span> |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span>&#91;</span>CE<span>&#93;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</div>
</li>
<li>
<div>sec. |&nbsp; &nbsp; TR,&nbsp; &nbsp; MF |&nbsp; &nbsp;DM |&nbsp; &nbsp;BV,&nbsp; &nbsp; CP,&nbsp; &nbsp; MW,&nbsp; &nbsp; SD,&nbsp; &nbsp; TL,&nbsp; &nbsp; TO,&nbsp; &nbsp; TS,&nbsp; &nbsp; TU | MEEThreads, ReqQueue</div>
</li>
<li>
<div>&nbsp; &nbsp; &nbsp; <span>&#40;</span>1st line: count, 2nd line: <span>90</span>%ile response <span>&#91;</span>msec.<span>&#93;</span><span>&#41;</span></div>
</li>
<li>
<div>&nbsp;<span>260</span> |&nbsp; &nbsp;<span>402</span>,&nbsp; &nbsp; <span>39</span>,&nbsp; &nbsp; &nbsp;<span>0</span>,&nbsp; &nbsp;<span>195</span>,&nbsp; &nbsp;<span>532</span>,&nbsp; &nbsp;<span>749</span>,&nbsp; &nbsp;<span>588</span>,&nbsp; &nbsp;<span>342</span>,&nbsp; &nbsp;<span>415</span>,&nbsp; &nbsp;<span>816</span>,&nbsp; &nbsp; <span>88</span> | <span>30</span>, <span>0</span></div>
</li>
<li>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>20</span>,&nbsp; &nbsp; <span>60</span>,&nbsp; &nbsp; &nbsp;<span>0</span>,&nbsp; &nbsp; <span>30</span>,&nbsp; &nbsp; <span>20</span>,&nbsp; &nbsp; <span>20</span>,&nbsp; &nbsp; <span>20</span>,&nbsp; &nbsp; <span>50</span>,&nbsp; &nbsp; <span>20</span>,&nbsp; &nbsp;<span>310</span>,&nbsp; &nbsp; <span>60</span></div>
</li>
<li>
<div>&nbsp;</div>
</li>
<li>
<div>&nbsp;<span>270</span> |&nbsp; &nbsp;<span>395</span>,&nbsp; &nbsp; <span>40</span>,&nbsp; &nbsp; &nbsp;<span>0</span>,&nbsp; &nbsp;<span>201</span>,&nbsp; &nbsp;<span>608</span>,&nbsp; &nbsp;<span>842</span>,&nbsp; &nbsp;<span>608</span>,&nbsp; &nbsp;<span>358</span>,&nbsp; &nbsp;<span>449</span>,&nbsp; &nbsp;<span>833</span>,&nbsp; &nbsp; <span>89</span> | <span>30</span>, <span>0</span></div>
</li>
<li>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>30</span>,&nbsp; &nbsp; <span>40</span>,&nbsp; &nbsp; &nbsp;<span>0</span>,&nbsp; &nbsp; <span>30</span>,&nbsp; &nbsp; <span>20</span>,&nbsp; &nbsp; <span>20</span>,&nbsp; &nbsp; <span>20</span>,&nbsp; &nbsp; <span>50</span>,&nbsp; &nbsp; <span>20</span>,&nbsp; &nbsp;<span>300</span>,&nbsp; &nbsp; <span>50</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
but it allows you to see count of 11 different transactions per 10 secs and 90% response time.</p>
<p>and final result</p>
<div><span><a href="http://www.mysqlperformanceblog.com">PLAIN TEXT</a></span></div>
<div><span>CODE:</span>
<div>
<div>
<ol>
<li>
<div><span>&#91;</span>TradeResult<span>&#40;</span>TR<span>&#41;</span> transaction<span>&#93;</span></div>
</li>
<li>
<div>Succeed: <span>150243</span></div>
</li>
<li>
<div>Lated:&nbsp; &nbsp;<span>0</span></div>
</li>
<li>
<div>Retried: <span>3</span></div>
</li>
<li>
<div>Failed:&nbsp; <span>0</span></div>
</li>
<li>
<div>&nbsp;</div>
</li>
<li>
<div><span>41</span>.<span>7342</span> TpsE </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>where you can see count of successful TR (TradeResult) transactions, and<br />
the summary result in TpsE (transactions per seconds).</p>
<p>Expect our results soon!</p>
    <hr noshade style="margin:0;height:1px" />
    <p>Entry posted by Vadim |
      <a href="http://www.mysqlperformanceblog.com/2010/02/08/introducing-tpce-like-workload-for-mysql/#comments">No comment</a></p>
    <p>Add to: <a href="http://del.icio.us/post?url=http://www.mysqlperformanceblog.com/2010/02/08/introducing-tpce-like-workload-for-mysql/&amp;title=Introducing%20tpce-like%20workload%20for%20MySQL" title="Bookmark this post on del.icio.us"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/delicious.png" alt="delicious" /></a> | <a href="http://digg.com/submit?phase=2&amp;url=http://www.mysqlperformanceblog.com/2010/02/08/introducing-tpce-like-workload-for-mysql/&amp;title=Introducing%20tpce-like%20workload%20for%20MySQL" title="Digg this post on Digg.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/digg.png" alt="digg" /></a> | <a href="http://reddit.com/submit?url=http://www.mysqlperformanceblog.com/2010/02/08/introducing-tpce-like-workload-for-mysql/&amp;title=Introducing%20tpce-like%20workload%20for%20MySQL" title="Submit this post on reddit.com"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/reddit.png" alt="reddit" /></a> | <a href="http://www.netscape.com/submit/?U=http://www.mysqlperformanceblog.com/2010/02/08/introducing-tpce-like-workload-for-mysql/&amp;T=Introducing%20tpce-like%20workload%20for%20MySQL" title="Vote for this article on Netscape"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/netscape.gif" alt="netscape" /></a> | <a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.mysqlperformanceblog.com/2010/02/08/introducing-tpce-like-workload-for-mysql/&amp;title=Introducing%20tpce-like%20workload%20for%20MySQL" title="Add to Google Bookmarks"><img src="http://www.mysqlperformanceblog.com/wp-content/themes/boxy-but-gold/images/google.png" alt="Google Bookmarks" /></a></p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23389&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23389&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Mon, 08 Feb 2010 17:30:44 +0000</pubDate>
    <dc:creator>MySQL Performance Blog</dc:creator>
    <category>announce</category>
    <category>benchmarks</category>
    <category>mysql</category>
  </item>

  <item>
    <title>Automating MySQL access with expect and bash scripting</title>
    <guid isPermaLink="false">http://mysqlpreacher.com/wordpress/?p=327</guid>
    <link>http://mysqlpreacher.com/wordpress/2010/02/automating-mysql-access-with-expect-and-bash-scripting/</link>
    <description>If you have multiple database servers with strange names, or if you have to hop over multiple machines to connect to any mysql database server, then you know what a pain it can be to administer such a setup. Thanks to some scripting, you can automate such tasks as follows:
Create an expect script:
/path/to/sshmysql.exp
#!/usr/bin/expect -f
#script by darren cassar
#mysqlpreacher.com
set machine  [lindex $argv 0]
set timeout -1
spawn ssh username@$machine
match_max 100000
expect -exact &amp;#8220;assword: &amp;#8221;
send &amp;#8212; &amp;#8220;password\r&amp;#8221;
send &amp;#8212; &amp;#8220;sudo -k; sudo su &amp;#8211; mysql\r&amp;#8221;
expect -exact &amp;#8220;sudo -k; sudo su &amp;#8211; mysql&amp;#8221;
expect -exact &amp;#8220;assword:&amp;#8221;
send &amp;#8212; &amp;#8220;password\r&amp;#8221;
interact
# you should change the word password in &amp;#8217;send &amp;#8212; &amp;#8220;password\r&amp;#8221;&amp;#8216; to your login password
# if you have the same password for each environment you could also script logging into mysql directly from the same expect script BUT that is not recommended.
Create a bash script:
/path/to/login.sh
#!/bin/bash
#script by darren cassar
#mysqlpreacher.com
sm=&amp;#8217;/path/to/sshmysql.exp&amp;#8217;
menu() {
  echo &amp;#8221; 101 &amp;#8211; dev.databaseserver1 &amp;#8221;
  echo &amp;#8221; 102 &amp;#8211; dev.databaseserver2 &amp;#8221;
  echo &amp;#8221; 103 &amp;#8211; dev.databaseserver3 &amp;#8221;
  echo &amp;#8221; 201 &amp;#8211; qa.databaseserver1 &amp;#8221;
  echo &amp;#8221; 301 &amp;#8211; uat.databaseserver1 &amp;#8221;
  echo &amp;#8221; 302 &amp;#8211; uat.databaseserver2 &amp;#8221;
  echo &amp;#8221; 401 &amp;#8211; prod.databaseserver1 &amp;#8221;
  echo &amp;#8221; &amp;#8221;
}
ARGUMENT=notmenu
if [ -z &quot;$1&quot; ]
  then
    ARGUMENT=menu
else
  choice=$1
fi
if [ $ARGUMENT = &quot;menu&quot; ]
  then
    menu
else
  case &amp;#8220;$choice&amp;#8221; in
  101|dev.databaseserver1   ) $sm dev.databaseserver1;;
  102|dev.databaseserver2   ) $sm dev.databaseserver2;;
  103|dev.databaseserver3   ) $sm dev.databaseserver3;;
  201|qa.databaseserver1   ) $sm qa.databaseserver1;;
  301|uat.databaseserver1   ) $sm uat.databaseserver1;;
  302|uat.databaseserver2   ) $sm uat.databaseserver2;;
  401|prod.databaseserver1   ) $sm prod.databaseserver1;;
  *        ) echo &amp;#8220;Wrong value passed to script&amp;#8221;
             menu ;;
  esac
fi
alias l=&amp;#8217;/path/to/login.sh&amp;#8217;
Output: 
[darrencassar@mymachine ~ ]$ l
 101 &amp;#8211; dev.databaseserver1
 102 &amp;#8211; dev.databaseserver2
 103 &amp;#8211; dev.databaseserver3
 201 &amp;#8211; qa.databaseserver1
 301 &amp;#8211; uat.databaseserver1
 302 &amp;#8211; uat.databaseserver2
 401 &amp;#8211; prod.databaseserver1
Output:
The below command would log you into the first development database server as mysql user.
[darrencassar@mymachine ~ ]$ l 101 
On each machine place aliases for each instance in the .profile
alias use3306=&amp;#8217;mysql -u root -p -h 127.0.0.1 -P 3306 &amp;#8211;prompt=&amp;#8221;mysql \D&gt; &amp;#8220;&amp;#8216;
The above setup can be used using any client/server OS: Linux, Solaris, MAC OS or Windows(running Cygwin)
NOTE: If you store the password in clear text inside the expect script, you should at least save the scripts inside an encrypted partition on your machine and make sure that folder is not shared or accessible by anyone. Another way of doing it would be to use either SSHKeys OR save the password inside a file and encrypt it using OpenSSL
Enjoy!</description>
    <content:encoded><![CDATA[<p>If you have multiple database servers with strange names, or if you have to hop over multiple machines to connect to any mysql database server, then you know what a pain it can be to administer such a setup. Thanks to some scripting, you can automate such tasks as follows:</p>
<p>Create an expect script:<br />
/path/to/sshmysql.exp</p>
<blockquote><p>#!/usr/bin/expect -f<br />
#script by darren cassar<br />
#mysqlpreacher.com</p>
<p>set machine  [lindex $argv 0]</p>
<p>set timeout -1</p>
<p>spawn ssh username@$machine<br />
match_max 100000<br />
expect -exact &#8220;assword: &#8221;<br />
send &#8212; &#8220;password\r&#8221;<br />
send &#8212; &#8220;sudo -k; sudo su &#8211; mysql\r&#8221;<br />
expect -exact &#8220;sudo -k; sudo su &#8211; mysql&#8221;<br />
expect -exact &#8220;assword:&#8221;<br />
send &#8212; &#8220;password\r&#8221;<br />
interact</p></blockquote>
<p># you should change the word password in &#8217;send &#8212; &#8220;password\r&#8221;&#8216; to your login password<br />
# if you have the same password for each environment you could also script logging into mysql directly from the same expect script BUT that is not recommended.</p>
<p>Create a bash script:<br />
/path/to/login.sh</p>
<blockquote><p>#!/bin/bash<br />
#script by darren cassar<br />
#mysqlpreacher.com</p>
<p>sm=&#8217;/path/to/sshmysql.exp&#8217;</p>
<p>menu() {<br />
  echo &#8221; 101 &#8211; dev.databaseserver1 &#8221;<br />
  echo &#8221; 102 &#8211; dev.databaseserver2 &#8221;<br />
  echo &#8221; 103 &#8211; dev.databaseserver3 &#8221;<br />
  echo &#8221; 201 &#8211; qa.databaseserver1 &#8221;<br />
  echo &#8221; 301 &#8211; uat.databaseserver1 &#8221;<br />
  echo &#8221; 302 &#8211; uat.databaseserver2 &#8221;<br />
  echo &#8221; 401 &#8211; prod.databaseserver1 &#8221;<br />
  echo &#8221; &#8221;<br />
}</p>
<p>ARGUMENT=notmenu</p>
<p>if [ -z "$1" ]<br />
  then<br />
    ARGUMENT=menu<br />
else<br />
  choice=$1<br />
fi</p>
<p>if [ $ARGUMENT = "menu" ]<br />
  then<br />
    menu<br />
else<br />
  case &#8220;$choice&#8221; in<br />
  101|dev.databaseserver1   ) $sm dev.databaseserver1;;<br />
  102|dev.databaseserver2   ) $sm dev.databaseserver2;;<br />
  103|dev.databaseserver3   ) $sm dev.databaseserver3;;<br />
  201|qa.databaseserver1   ) $sm qa.databaseserver1;;<br />
  301|uat.databaseserver1   ) $sm uat.databaseserver1;;<br />
  302|uat.databaseserver2   ) $sm uat.databaseserver2;;<br />
  401|prod.databaseserver1   ) $sm prod.databaseserver1;;<br />
  *        ) echo &#8220;Wrong value passed to script&#8221;<br />
             menu ;;<br />
  esac<br />
fi</p></blockquote>
<blockquote><p>alias l=&#8217;/path/to/login.sh&#8217;</p></blockquote>
<p>Output: </p>
<blockquote><p>[darrencassar@mymachine ~ ]$ l<br />
 101 &#8211; dev.databaseserver1<br />
 102 &#8211; dev.databaseserver2<br />
 103 &#8211; dev.databaseserver3<br />
 201 &#8211; qa.databaseserver1<br />
 301 &#8211; uat.databaseserver1<br />
 302 &#8211; uat.databaseserver2<br />
 401 &#8211; prod.databaseserver1</p></blockquote>
<p>Output:<br />
The below command would log you into the first development database server as mysql user.</p>
<blockquote><p>[darrencassar@mymachine ~ ]$ l 101 </p></blockquote>
<p>On each machine place aliases for each instance in the .profile</p>
<blockquote><p>alias use3306=&#8217;mysql -u root -p -h 127.0.0.1 -P 3306 &#8211;prompt=&#8221;mysql \D> &#8220;&#8216;</p></blockquote>
<p>The above setup can be used using any client/server OS: Linux, Solaris, MAC OS or Windows(running Cygwin)</p>
<p><strong>NOTE: If you store the password in clear text inside the expect script, you should at least save the scripts inside an encrypted partition on your machine and make sure that folder is not shared or accessible by anyone. Another way of doing it would be to use either SSHKeys OR save the password inside a file and encrypt it using <a href="http://www.madboa.com/geek/openssl/#encrypt-simple" target="_blank">OpenSSL</a></strong></p>
<p>Enjoy!</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23385&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23385&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Mon, 08 Feb 2010 17:08:26 +0000</pubDate>
    <dc:creator>Darren Cassar</dc:creator>
    <category>Databases</category>
    <category>Intermediate</category>
    <category>OS</category>
    <category>Uncategorized</category>
    <category>access</category>
    <category>automation</category>
    <category>bash</category>
    <category>expect</category>
    <category>MySQL</category>
  </item>

  <item>
    <title>Copyrights and wrongs</title>
    <guid isPermaLink="false">http://blogs.the451group.com/opensource/?p=1344</guid>
    <link>http://feedproxy.google.com/~r/451opensource/~3/N8iVkewGYHo/</link>
    <description>One of the issues I have with the Free Software approach is that advocates have habit of throwing the baby out with the bathwater when discussing issues that they see as in any way negative to free software. 
I was reminded of this while reading Bradley M. Kuhn&amp;#8217;s criticism of Mark Shuttleworth&amp;#8217;s reported views on copyright assignment.
Having read the original interview with Mark, and then Bradley&amp;#8217;s response, it is pretty clear that the two have very different perspectives on copyright assignment: Mark is speaking from the perspective of a commercial business, Bradley form that of a non-profit foundation.
The two entities have very different reasons for enforcing copyright assignment policies, and Bradley is right to point out that a potential contributor should approach a copyright assignment policy from a commercial entity with a great degree of caution.
However, the ultimate reason for enforcing copyright assignment is about control. From a vendor&amp;#8217;s perspective the desire for control is often to produce closed versions of the code. From the FSF&amp;#8217;s perspective the desire for control is about keeping the code, and derivatives of it, open.
However, the fact that the FSF &amp;#8220;promises to never proprietarize its versions of the software assigned to it&amp;#8221;, does not support Bradley&amp;#8217;s assertion that Mark &amp;#8220;wants to confuse us about copyright assignment so we just start signing away our software&amp;#8221;.
This claim is especially problematic given that Mark appeared (and it must be said we are reliant on the reporting of his statements to understand what he meant by them) to be attempting to reduce confusion around copyright assignments by, if possible, introducing some sort of standardization.
This is a suggestion that deserves more consideration. However, Bradley is so busy protecting the FSF from being maligned by Mark that he completely ignores the point raised by Mark - that copyright assignment policies are confusing, complex, and potentially problematic.
As the iTWire report demonstrates, the issue of copyright assignment is not just one that impacts contributions by individual developers (which is a common way of looking at it) but also of contributions from employees of Canonical to projects led by the likes of MySQL, Zope, Novell, Red Hat, Intel and others.
As previously noted, Oracle&amp;#8217;s acquisition of Sun, and with it MySQL, has highlighted the issue of copyright control in encouraging/restricting community development in vendor-led development projects and providing acquirers with the potential to close an open source project. 
Clearly, the issue is not as problematic for non-profit foundation-led projects, but the issue of copyright assignment needs more thoughtful assessment than a response that amounts to &amp;#8220;non-profit=good, for-profit=bad&amp;#8221;.
For more considered analysis of the issue of copyright assignment see:
Dave Neary: Copyright assignment and other barriers to entry
CAOS Theory: On the importance of copyright assignment
Daniel Chalef: OSBC, Community Engagement and Contributor Agreements
Michael Meeks: Some thoughts on Copyright Assignment
Tarus Balog: More on Copyright Assignment

</description>
    <content:encoded><![CDATA[<p>One of the issues I have with the Free Software approach is that advocates have habit of throwing the baby out with the bathwater when discussing issues that they see as in any way negative to free software. </p>
<p>I was reminded of this while reading Bradley M. Kuhn&#8217;s <a href="http://ebb.org/bkuhn/blog/2010/02/01/copyright-not-all-equal.html">criticism</a> of Mark Shuttleworth&#8217;s <a href="http://www.itwire.com/blogs/open-sauce/the-linux-blog/36379-canonical-copyright-assignment-policy-same-as-others">reported</a> views on copyright assignment.</p>
<p>Having read the original interview with Mark, and then Bradley&#8217;s response, it is pretty clear that the two have very different perspectives on copyright assignment: Mark is speaking from the perspective of a commercial business, Bradley form that of a non-profit foundation.</p>
<p>The two entities have very different reasons for enforcing copyright assignment policies, and Bradley is right to point out that a potential contributor should approach a copyright assignment policy from a commercial entity with a great degree of caution.</p>
<p>However, the ultimate reason for enforcing copyright assignment is about control. From a vendor&#8217;s perspective the desire for control is often to produce closed versions of the code. From the FSF&#8217;s perspective the desire for control is about keeping the code, and derivatives of it, open.</p>
<p>However, the fact that the FSF &#8220;promises to never proprietarize its versions of the software assigned to it&#8221;, does not support Bradley&#8217;s assertion that Mark &#8220;wants to confuse us about copyright assignment so we just start signing away our software&#8221;.</p>
<p>This claim is especially problematic given that Mark appeared (and it must be said we are reliant on the reporting of his statements to understand what he meant by them) to be attempting to reduce confusion around copyright assignments by, if possible, introducing some sort of standardization.</p>
<p>This is a suggestion that deserves more consideration. However, Bradley is so busy protecting the FSF from being maligned by Mark that he completely ignores the point raised by Mark - that copyright assignment policies are confusing, complex, and potentially problematic.</p>
<p>As the iTWire report demonstrates, the issue of copyright assignment is not just one that impacts contributions by individual developers (which is a common way of looking at it) but also of contributions from employees of Canonical to projects led by the likes of MySQL, Zope, Novell, Red Hat, Intel and others.</p>
<p>As previously <a href="http://blogs.the451group.com/opensource/2009/11/11/copyrightleft-at-the-centre-of-open-source-business-strategies/">noted</a>, Oracle&#8217;s acquisition of Sun, and with it MySQL, has highlighted the issue of copyright control in encouraging/restricting community development in vendor-led development projects and providing acquirers with the potential to close an open source project. </p>
<p>Clearly, the issue is not as problematic for non-profit foundation-led projects, but the issue of copyright assignment needs more thoughtful assessment than a response that amounts to &#8220;non-profit=good, for-profit=bad&#8221;.</p>
<p>For more considered analysis of the issue of copyright assignment see:<br />
Dave Neary: <a href="http://blogs.gnome.org/bolsh/2009/04/08/copyright-assignment-and-other-barriers-to-entry/">Copyright assignment and other barriers to entry</a><br />
CAOS Theory: <a href="http://blogs.the451group.com/opensource/2009/04/06/on-the-importance-of-copyright-assignment/">On the importance of copyright assignment</a><br />
Daniel Chalef: <a href="http://www.knowledgetree.com/blog/company-driven-open-source-communities-copyright-assignment">OSBC, Community Engagement and Contributor Agreements</a><br />
Michael Meeks: <a href="http://www.gnome.org/~michael/blog/copyright-assignment.html">Some thoughts on Copyright Assignment</a><br />
Tarus Balog: <a href="http://www.adventuresinoss.com/?p=1300">More on Copyright Assignment</a><br />
</a></p>
<img src="http://feeds.feedburner.com/~r/451opensource/~4/N8iVkewGYHo" height="1" width="1" /><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23383&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23383&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Mon, 08 Feb 2010 16:16:44 +0000</pubDate>
    <dc:creator>The 451 Group</dc:creator>
    <category>Licensing</category>
    <category>Software</category>
    <category>451 group</category>
    <category>451caostheory</category>
    <category>451group</category>
    <category>bradley m Kuhn</category>
    <category>caostheory</category>
    <category>copyright assigment</category>
    <category>free software foundation</category>
    <category>Linux</category>
    <category>Mark Shuttleworth</category>
    <category>matt aslett</category>
    <category>mattaslett</category>
    <category>matthew aslett</category>
    <category>matthewaslett</category>
    <category>mysql</category>
    <category>open-source</category>
    <category>opensource</category>
    <category>Oracle</category>
    <category>sun</category>
    <category>The 451 Group</category>
    <category>th</category>
  </item>

  <item>
    <title>Ken Jacobs a great advocate of the database user communities</title>
    <guid isPermaLink="false">tag:blogger.com,1999:blog-6480555434853676325.post-2383774446964046057</guid>
    <link>http://feedproxy.google.com/~r/MysqlDba-AnOracleDbasJourney/~3/vJ5y5JjQ_Hg/ken-jacobs-great-advocate-of-database.html</link>
    <description>Ken Jacobs has been a fantastic advocate of the Oracle and MySQL user communites.  I met Ken on the board of the Independent Oracle Users Group (IOUG).  While Ken was the board liasson on the IOUG board, he was always supporting the Oracle user groups and made very important contributions throughout his time on the board and afterwards.  After serving time on the board, Ken was still always </description>
    <content:encoded><![CDATA[Ken Jacobs has been a fantastic advocate of the Oracle and MySQL user communites.  I met Ken on the board of the Independent Oracle Users Group (IOUG).  While Ken was the board liasson on the IOUG board, he was always supporting the Oracle user groups and made very important contributions throughout his time on the board and afterwards.  After serving time on the board, Ken was still always <img src="http://feeds.feedburner.com/~r/MysqlDba-AnOracleDbasJourney/~4/vJ5y5JjQ_Hg" height="1" width="1" /><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23382&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23382&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Mon, 08 Feb 2010 15:07:00 +0000</pubDate>
    <dc:creator>George Trujillo</dc:creator>
    <category>MySQL and Oracle</category>
  </item>

  <item>
    <title>Ken we will miss you!</title>
    <guid isPermaLink="false">tag:blogger.com,1999:blog-24359421.post-7491922018832034299</guid>
    <link>http://pbxt.blogspot.com/2010/02/ken-we-will-miss-you.html</link>
    <description>What does it take for someone, fiercely loyal to a company to suddenly leave? Ken Jakobs, Oracle employee number 18, a man that sincerely loves the company, has resigned! The only reason I can think of is an extreme snub!I must say, I am very disappointed. The prospect of Ken running MySQL was a light at the end of the tunnel for the community. Why? Because Ken is a MySQL insider! He knows the project, he knows the community.As an engine developer I have come to know Ken well over the last 4 years. He lead the InnoDB team and is largely responsible for the improvements made to the engine since the Oracle acquisition. At the yearly Engine Summit he was always professional and constructive in his suggestions, with a deep technical knowledge of the subject. His track record shows that he has always kept his word with regard to Oracle's intensions with InnoDB, and I would trust him to do the same with MySQL.Goodbye Ken. This is great loss for both the MySQL community and Oracle!</description>
    <content:encoded><![CDATA[What does it take for someone, fiercely loyal to a company to suddenly leave? Ken Jakobs, Oracle employee number 18, a man that sincerely loves the company, <a href="http://news.cnet.com/8301-13505_3-10448783-16.html">has resigned</a>! The only reason I can think of is an extreme snub!<br /><br />I must say, I am very disappointed. The prospect of Ken running MySQL was a light at the end of the tunnel for the community. Why? Because Ken is a MySQL insider! He knows the project, he knows the community.<br /><br />As an engine developer I have come to know Ken well over the last 4 years. He lead the InnoDB team and is largely responsible for the improvements made to the engine since the Oracle acquisition. At the yearly Engine Summit he was always professional and constructive in his suggestions, with a deep technical knowledge of the subject. His track record shows that he has always kept his word with regard to Oracle's intensions with InnoDB, and I would trust him to do the same with MySQL.<br /><br />Goodbye Ken. This is great loss for both the MySQL community and Oracle!<div><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/24359421-7491922018832034299?l=pbxt.blogspot.com" alt="" /></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23379&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23379&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Mon, 08 Feb 2010 11:34:00 +0000</pubDate>
    <dc:creator>Paul McCullagh</dc:creator>
  </item>

  <item>
    <title>Python, oursql and MacOS X 10.6 (Snow Leopard)</title>
    <guid isPermaLink="false">tag:blogger.com,1999:blog-5702936365231918674.post-1630538266823111730</guid>
    <link>http://blog.some-abstract-type.com/2010/02/python-oursql-and-macos-x-106-snow.html</link>
    <description>This post explains how to compile oursql and install it on MacOS 10.6. oursql is a Python database interface for MySQL, an alternative to MySQL for Python (i.e. MySQLdb) and MySQL Connector/Python.First, find out which MySQL you installed. This can be either the 32-bit or the 64-bit version. To make sure, find the mysqld (e.g. in /usr/local/mysql/bin) and do the following in a Terminal window:shell&gt; file /usr/local/mysql/bin/mysqld.../mysqld: Mach-O 64-bit executable x86_64If you see x86_64, you got 64-bit, otherwise 32-bit. If you see both, then you have a universal build. This is important for specifying the ARGSFLAG when building.Download oursql from Launchpad and unpack it into some directory. Using the information from above, you'll have to do following for 64-bit platform (or universal build) in a Terminal window: shell&gt; ARCHFLAGS=&quot;-arch x86_64&quot; python setup.py build shell&gt; sudo python setup.py installFor 32-bit, you'll have to do: shell&gt; ARCHFLAGS=&quot;-arch i386&quot; python setup.py build shell&gt; sudo python setup.py installFollowing error will be reported when you don't specify the correct ARCHFLAGS: ld: warning: in .../lib/libmysqlclient.dylib,   file is not of required architectureTips:When building failed, it is good to remove oursql, unpack it and try again.If you don't want to compile anything, or run into more troubles, give MySQL Connector/Python a try (alpha releases). It's a pure Python implementation of the MySQL Client/Server protocol and doesn't need compiling or a MySQL installation.You can download MySQL from either www.mysql.com or dev.mysql.com.</description>
    <content:encoded><![CDATA[<p>This post explains how to compile <b><a href="https://launchpad.net/oursql">oursql</a></b> and install it on MacOS 10.6. oursql is a Python database interface for MySQL, an alternative to <a href="http://sourceforge.net/projects/mysql-python/files/">MySQL for Python</a> (i.e. <a href="http://blog.some-abstract-type.com/2009/09/mysql-python-and-mac-os-x-106-snow.html">MySQLdb</a>) and <a href="https://launchpad.net/myconnpy">MySQL Connector/Python</a>.</p><p>First, <b>find out which MySQL you installed</b>. This can be either the 32-bit or the 64-bit version. To make sure, find the mysqld (e.g. in /usr/local/mysql/bin) and do the following in a Terminal window:</p><pre><br />shell> file /usr/local/mysql/bin/mysqld<br />.../mysqld: Mach-O 64-bit executable <b>x86_64</b><br /></pre><p>If you see x86_64, you got 64-bit, otherwise 32-bit. If you see both, then you have a universal build. This is important for specifying the <tt>ARGSFLAG</tt> when building.</p><p><a href="https://launchpad.net/oursql/+download"><b>Download oursql</b> from Launchpad</a> and unpack it into some directory. Using the information from above, you'll have to do following for 64-bit platform (or universal build) in a Terminal window:</p><pre><br /> shell> ARCHFLAGS="-arch x86_64" python setup.py build<br /> shell> sudo python setup.py install<br /></pre><p>For 32-bit, you'll have to do:</p><pre><br /> shell> ARCHFLAGS="-arch i386" python setup.py build<br /> shell> sudo python setup.py install<br /></pre><p>Following error will be reported when you don't specify the correct <tt>ARCHFLAGS</tt>:</p><pre><br /> ld: warning: in .../lib/libmysqlclient.dylib,<br />   file is not of required architecture<br /></pre></p><p><b>Tips</b>:</p><ul><li>When building failed, it is good to remove oursql, unpack it and try again.</li><li>If you don't want to compile anything, or run into more troubles, give <a href="https://launchpad.net/myconnpy/+download">MySQL Connector/Python a try</a> (alpha releases). It's a pure Python implementation of the MySQL Client/Server protocol and doesn't need compiling or a MySQL installation.</li><li>You can download MySQL from either <a href="http://www.mysql.com">www.mysql.com</a> or <a href="http://dev.mysql.com">dev.mysql.com</a>.</li></ul><div><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/5702936365231918674-1630538266823111730?l=blog.some-abstract-type.com" alt="" /></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23378&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23378&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Mon, 08 Feb 2010 10:09:00 +0000</pubDate>
    <dc:creator>Geert Vanderkelen</dc:creator>
    <category>mysql</category>
    <category>macos</category>
    <category>howto</category>
    <category>community</category>
    <category>python</category>
  </item>

  <item>
    <title>InfiniDB load 60 Billion SSB rows trended</title>
    <guid isPermaLink="false">http://infinidb.org/infinidb-blog/infinidb-load-60-billion-ssb-rows-trended.html</guid>
    <link>http://infinidb.org/infinidb-blog/infinidb-load-60-billion-ssb-rows-trended.html</link>
    <description>I wanted to offer another InfiniDB&amp;nbsp;load rate metric&amp;nbsp;using the SSB lineorder fact table.&amp;nbsp; In this case we are using a scale factor of 10,000 which translates to 60 Billion rows.&amp;nbsp; As a point of reference, the recent Percona benchmark was at a scale factor of 1000 (6 billion rows) http://www.mysqlperformanceblog.com/2010/01/07/star-schema-bechmark-infobright-infinidb-and-luciddb/&amp;nbsp;.&amp;nbsp;The load rate per hour varied only slightly across the entire run, averaging about 4Read More...</description>
    <content:encoded><![CDATA[<p>I wanted to offer another InfiniDB&nbsp;load rate metric&nbsp;using the SSB lineorder fact table.&nbsp; In this case we are using a scale factor of 10,000 which translates to 60 Billion rows.&nbsp; As a point of reference, the recent Percona benchmark was at a scale factor of 1000 (6 billion rows) http://www.mysqlperformanceblog.com/2010/01/07/star-schema-bechmark-infobright-infinidb-and-luciddb/&nbsp;.&nbsp;<br/>The load rate per hour varied only slightly across the entire run, averaging about 4Read More...<br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23388&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23388&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Mon, 08 Feb 2010 09:35:23 +0000</pubDate>
    <dc:creator>Jim Tommaney</dc:creator>
    <category>10k Scale Factor</category>
  </item>

  <item>
    <title>Poor Matt, poor Ken</title>
    <guid isPermaLink="false">262 at http://openlife.cc</guid>
    <link>http://openlife.cc/blogs/2010/february/poor-matt-poor-ken</link>
    <description>Well, for Matt Asay, I should start by congratulating you for the new job and nice title! (Also, we learn some intelligence from Matt's blog: apparently Canonical is already close to the size of MySQL AB at the time of the Sun acquisition.)
Usually we are told to &quot;ignore the trolls&quot; and all that. The blogosphere unfortunately seems to be full of commentators who like to have share their opinion - even while they are entirely clueless. Sometimes, like the comments on Slashdot, it is ok and considered part of the entertainment. Sometimes it is harmless, because nobody reads that blog. And sometimes, it is just unacceptable:

read more</description>
    <content:encoded><![CDATA[<p>Well, for <a href="http://news.cnet.com/8301-13505_3-10447913-16.html">Matt Asay</a>, I should start by congratulating you for the new job and nice title! (Also, we learn some intelligence from Matt's blog: apparently Canonical is already close to the size of MySQL AB at the time of the Sun acquisition.)</p>
<p>Usually we are told to "ignore the trolls" and all that. The blogosphere unfortunately seems to be full of commentators who like to have share their opinion - even while they are entirely clueless. Sometimes, like the comments on Slashdot, it is ok and considered part of the entertainment. Sometimes it is harmless, because nobody reads that blog. And sometimes, it is just unacceptable:</p>
<blockquote>
</blockquote><p><a href="http://openlife.cc/blogs/2010/february/poor-matt-poor-ken" target="_blank">read more</a></p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23377&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23377&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Mon, 08 Feb 2010 09:10:57 +0000</pubDate>
    <dc:creator>Henrik Ingo</dc:creator>
    <category>Community</category>
    <category>Microsoft</category>
    <category>MySQL</category>
    <category>Open Source</category>
    <category>Ubuntu</category>
  </item>

  <item>
    <title>Stored procedure to add-remove prefix by rename table mysql</title>
    <guid isPermaLink="false">http://kedar.nitty-witty.com/blog/?p=472</guid>
    <link>http://kedar.nitty-witty.com/blog/stored-procedure-to-add-remove-prefix-by-rename-table-mysql/</link>
    <description>Here is one more procedure &amp;#8211; (this time) for mass renaming of table. Adding and Removing table-name prefixes  
A friend of mine was renaming 100+ tables by using replace methods in notepad.
I showed em a bit better editor: Editplus and then I thought of rescue rest of those who are still interested in some [...]


Related posts:Stored procedure &amp;#8211; Execute query if table or Column exists
Stored procedure to Find database objects
MySQL Stored procedure &amp;#8211; Split Delimited string into Rows
</description>
    <content:encoded><![CDATA[Here is one more procedure &#8211; (this time) for mass renaming of table. Adding and Removing table-name prefixes  
A friend of mine was renaming 100+ tables by using replace methods in notepad.
I showed em a bit better editor: Editplus and then I thought of rescue rest of those who are still interested in some [...]


Related posts:<ol><li><a href="http://kedar.nitty-witty.com/blog/stored-procedure-execute-query-if-table-or-column-exists/" rel="bookmark" title="Permanent Link: Stored procedure – Execute query if table or Column exists">Stored procedure &#8211; Execute query if table or Column exists</a></li>
<li><a href="http://kedar.nitty-witty.com/blog/stored-procedure-to-find-database-objects/" rel="bookmark" title="Permanent Link: Stored procedure to Find database objects">Stored procedure to Find database objects</a></li>
<li><a href="http://kedar.nitty-witty.com/blog/mysql-stored-procedure-split-delimited-string-into-rows/" rel="bookmark" title="Permanent Link: MySQL Stored procedure – Split Delimited string into Rows">MySQL Stored procedure &#8211; Split Delimited string into Rows</a></li>
</ol><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23376&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23376&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Mon, 08 Feb 2010 08:56:19 +0000</pubDate>
    <dc:creator>Kedar</dc:creator>
    <category>technical</category>
    <category>mysql</category>
    <category>stored procedure</category>
  </item>

  <item>
    <title>Ken Jacobs leaves Oracle</title>
    <guid isPermaLink="false">http://openquery.com/blog/?p=1183</guid>
    <link>http://openquery.com/blog/ken-jacobs-leaves-oracle</link>
    <description>Matt Asay writes today in Oracle loses some MySQL mojo about Ken Jacobs leaving Oracle. For me, that&amp;#8217;s a major bummer. Ken has been a long-time visitor of the MySQL Conference and that&amp;#8217;s where I first met him: a friendly and knowledgeable person, on database technology in general but also about MySQL. When Innobase Oy got bought by Oracle, InnoDB got placed under Ken&amp;#8217;s leadership and did pretty well there. We&amp;#8217;d occasionally exchange emails, and I&amp;#8217;ve always found him to be responsive and helpful.
I think it was kinda presumed by people that the technical part of MySQL at Oracle would also reside with Ken. Obviously now, that&amp;#8217;s not going to be the case. What that means exactly, I don&amp;#8217;t know as I am not familiar with the other person (Edward Screven). We&amp;#8217;ve got to know Ken over the years, so it would&amp;#8217;ve been nice to keep going with him. Ohwell.
Now we&amp;#8217;ll see what Edward does with it all, and how he will interact with the MySQL community. And I wonder what new adventures Ken might be off to, if any?</description>
    <content:encoded><![CDATA[<p>Matt Asay writes today in <a href="http://news.cnet.com/8301-13505_3-10448783-16.html" target="_blank">Oracle loses some MySQL mojo</a> about Ken Jacobs leaving Oracle. For me, that&#8217;s a major bummer. Ken has been a long-time visitor of the MySQL Conference and that&#8217;s where I first met him: a friendly and knowledgeable person, on database technology in general but also about MySQL. When Innobase Oy got bought by Oracle, InnoDB got placed under Ken&#8217;s leadership and did pretty well there. We&#8217;d occasionally exchange emails, and I&#8217;ve always found him to be responsive and helpful.</p>
<p>I think it was kinda presumed by people that the technical part of MySQL at Oracle would also reside with Ken. Obviously now, that&#8217;s not going to be the case. What that means exactly, I don&#8217;t know as I am not familiar with the other person (Edward Screven). We&#8217;ve got to know Ken over the years, so it would&#8217;ve been nice to keep going with him. Ohwell.</p>
<p>Now we&#8217;ll see what Edward does with it all, and how he will interact with the MySQL community. And I wonder what new adventures Ken might be off to, if any?</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23375&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23375&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Mon, 08 Feb 2010 07:44:14 +0000</pubDate>
    <dc:creator>Open Query</dc:creator>
    <category>Uncategorized</category>
    <category>edward screven</category>
    <category>ken jacobs</category>
    <category>mysql</category>
    <category>open query</category>
    <category>oracle</category>
  </item>

  <item>
    <title>More on InfiniDB Release Intentions and Practice</title>
    <guid isPermaLink="false">http://infinidb.org/infinidb-blog/more-on-infinidb-release-intentions-and-practice.html</guid>
    <link>http://infinidb.org/infinidb-blog/more-on-infinidb-release-intentions-and-practice.html</link>
    <description>We received some nice feedback on our care and feeding of InfiniDB blog entry, and we appreciate all of you who were kind enough to respond. We did fail, however, to communicate a few other intentions we have regarding how we plan to release and label the InfiniDB software so here&amp;rsquo;s some more thoughts from us on this important matter:For new releases, we plan to follow the traditional alpha, beta, RC framework. Alpha means an upcoming release is not yet feature complete and moreRead More...</description>
    <content:encoded><![CDATA[<p>We received some nice feedback on our care and feeding of InfiniDB blog entry, and we appreciate all of you who were kind enough to respond. We did fail, however, to communicate a few other intentions we have regarding how we plan to release and label the InfiniDB software so here&rsquo;s some more thoughts from us on this important matter:</p><br/><p>For new releases, we plan to follow the traditional alpha, beta, RC framework. Alpha means an upcoming release is not yet feature complete and moreRead More...<br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23380&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23380&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Mon, 08 Feb 2010 02:15:26 +0000</pubDate>
    <dc:creator>Robin Schumacher</dc:creator>
  </item>

  <item>
    <title>How often should you use OPTIMIZE TABLE?</title>
    <guid isPermaLink="false">http://www.xaprb.com/blog/?p=1611</guid>
    <link>http://www.xaprb.com/blog/2010/02/07/how-often-should-you-use-optimize-table/</link>
    <description>Many times I&amp;#8217;ve heard people advise on &amp;#8220;best practices&amp;#8221; for a MySQL database.  This often includes routine maintenance, such as &amp;#8220;you should run OPTIMIZE TABLE on all of your InnoDB tables once a week to defragment them for better performance.&amp;#8221;

But this advice is unsubstantiated and could even be detrimental.  Here are some of the obvious problems that I can think of:


The optimized table compacts the primary key (clustered index) to its default 15/16ths fill factor per page.  But other indexes will be built in pseudo-random order and are likely to end up just as fragmented afterwards as before.  Which indexes are more important for performance?  Maybe the primary key is just a dummy value that&amp;#8217;s not even used, and the secondary indexes are the ones that would benefit from compacting.
Suppose the primary key is the important one, and SELECT queries will perform more quickly if it&amp;#8217;s defragmented.  Why does it get fragmented?  Because of changes to the table.  Now these changes could suddenly slow down dramatically as they are forced to split pages at a much higher rate due to the more compact data layout.


Why do people make a blanket &amp;#8220;you should defragment&amp;#8221; statement without supporting it with hard facts?  It sounds like something you&amp;#8217;d hear from a naive Windows user who buys a $99 piece of software to make his PC &amp;#8220;boot faster&amp;#8221; or &amp;#8220;fix his registry&amp;#8221; or something.  Maybe it ain&amp;#8217;t broke and should not be fixed.

I believe we hear advice like this because there isn&amp;#8217;t easy-to-get data that can tell us the truth.  To make decisions about defragmenting tables responsibly, we need either performance data on that table (hard to get in most cases), or failing that, information about cost and frequency of page splits in general (not available from InnoDB at present).  It would help to have these metrics, and I think it might not be very hard to add page-split instrumentation to InnoDB.

Related posts:Analyze and optimize memcached usage with Maatkit Ryan posteExtended covering indexes As you canThe difference between a unique index and primary key in MySQL There
Related posts brought to you by Yet Another Related Posts Plugin.</description>
    <content:encoded><![CDATA[<p>Many times I&#8217;ve heard people advise on &#8220;best practices&#8221; for a MySQL database.  This often includes routine maintenance, such as &#8220;you should run OPTIMIZE TABLE on all of your InnoDB tables once a week to defragment them for better performance.&#8221;</p>

<p>But this advice is unsubstantiated and could even be detrimental.  Here are some of the obvious problems that I can think of:</p>

<ul>
<li>The optimized table compacts the primary key (clustered index) to its default 15/16ths fill factor per page.  But other indexes will be built in pseudo-random order and are likely to end up just as fragmented afterwards as before.  Which indexes are more important for performance?  Maybe the primary key is just a dummy value that&#8217;s not even used, and the secondary indexes are the ones that would benefit from compacting.</li>
<li>Suppose the primary key is the important one, and SELECT queries will perform more quickly if it&#8217;s defragmented.  Why does it get fragmented?  Because of changes to the table.  Now these changes could suddenly slow down dramatically as they are forced to split pages at a much higher rate due to the more compact data layout.</li>
</ul>

<p>Why do people make a blanket &#8220;you should defragment&#8221; statement without supporting it with hard facts?  It sounds like something you&#8217;d hear from a naive Windows user who buys a $99 piece of software to make his PC &#8220;boot faster&#8221; or &#8220;fix his registry&#8221; or something.  Maybe it ain&#8217;t broke and should not be fixed.</p>

<p>I believe we hear advice like this because there isn&#8217;t easy-to-get data that can tell us the truth.  To make decisions about defragmenting tables responsibly, we need either performance data on that table (hard to get in most cases), or failing that, information about cost and frequency of page splits in general (not available from InnoDB at present).  It would help to have these metrics, and I think it might not be very hard to add page-split instrumentation to InnoDB.</p>

<p>Related posts:<ol><li><a href="http://www.xaprb.com/blog/2009/07/25/analyze-and-optimize-memcached-usage-with-maatkit/" rel="bookmark" title="Permanent Link: Analyze and optimize memcached usage with Maatkit">Analyze and optimize memcached usage with Maatkit</a> <small>Ryan poste</small></li><li><a href="http://www.xaprb.com/blog/2009/06/07/extended-covering-indexes/" rel="bookmark" title="Permanent Link: Extended covering indexes">Extended covering indexes</a> <small>As you can</small></li><li><a href="http://www.xaprb.com/blog/2009/09/12/the-difference-between-a-unique-index-and-primary-key-in-mysql/" rel="bookmark" title="Permanent Link: The difference between a unique index and primary key in MySQL">The difference between a unique index and primary key in MySQL</a> <small>There</small></li></ol></p>
<p>Related posts brought to you by <a href="http://mitcho.com/code/yarpp/">Yet Another Related Posts Plugin</a>.</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23373&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23373&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sun, 07 Feb 2010 22:39:07 +0000</pubDate>
    <dc:creator>Baron Schwartz (xaprb)</dc:creator>
    <category>SQL</category>
    <category>Clustered indexes</category>
    <category>defragmenting</category>
    <category>fill factor</category>
    <category>InnoDB</category>
    <category>instrumentation</category>
    <category>mysql</category>
    <category>page splits</category>
  </item>

  <item>
    <title>Changing MySQL parser code on Windows – Build breaks due to Bison</title>
    <guid isPermaLink="false">http://venublog.com/2010/02/07/changing-mysql-parser-code-on-windows-build-breaks-due-to-bison/</guid>
    <link>http://venublog.com/2010/02/07/changing-mysql-parser-code-on-windows-build-breaks-due-to-bison/</link>
    <description>In case if you working on Windows environment for MySQL development (sometimes I use visual studio for easy debugging); and in case if you change the parser code (sql_yacc.yy) or if you are working directly from development branch (bzr launchpad), then the build breaks to generate the yacc files (sql_yacc.h and sql_yacc.cc) with an error bison: M4: Invalid argument as shown below:

1&amp;gt;------ Build started: Project: sql, Configuration: Debug Win32 ------
1&amp;gt;Generating sql_yacc.h, sql_yacc.cc
2&amp;gt;------ Build started: Project: GenServerSource, Configuration: Debug Win32 ------
2&amp;gt;Generating sql_yacc.h, sql_yacc.cc
1&amp;gt;bison: m4: Invalid argument
1&amp;gt;Project : error PRJ0019: A tool returned an error code from &amp;quot;Generating sql_yacc.h, sql_yacc.cc&amp;quot;
1&amp;gt;sql - 1 error&amp;#40;s&amp;#41;, 0 warning&amp;#40;s&amp;#41;
2&amp;gt;bison: m4: Invalid argument
2&amp;gt;Project : error PRJ0019: A tool returned an error code from &amp;quot;Generating sql_yacc.h, sql_yacc.cc&amp;quot;
2&amp;gt;GenServerSource - 1 error&amp;#40;s&amp;#41;, 0 warning&amp;#40;s&amp;#41;

But if use source zip file for any particular release, then it won&amp;#8217;t fail as the files (sql_yacc.cc and sql_yacc.h) are pre-built and copied to the distribution zip file.

But, again if you wanted to change the code or happen to save sql_yacc.yy, then it starts generating the files and build will break. It looks like lot of people are experincing the same problem to build parser code on Windows using any recent version of bison (not just MySQL code base).


Both bison.exe and m4.exe are in the path and they are the latest version; but still it fails.. 

c:\mysql-5.1\sql&amp;gt;which bison
C:\Gnu\GetGnuWin32\gnuwin32\bin\bison.EXE
&amp;nbsp;
c:\mysql-5.1\sql&amp;gt;which m4
C:\Gnu\GetGnuWin32\gnuwin32\bin\m4.EXE
&amp;nbsp;
c:\mysql-5.1\sql&amp;gt;bison --version
bison &amp;#40;GNU Bison&amp;#41; 2.4.1
&amp;nbsp;
c:\mysql-5.1\sql&amp;gt;m4 --version
m4 &amp;#40;GNU M4&amp;#41; 1.4.13

It looks like the problem is with Windows version of bison to pick m4 executable even though m4 is in the path. For example, you can directy try to generate the files from sql directory using bison as&amp;#8230; 

c:\mysql-5.1\sql&amp;gt;bison -y -p MYSQL --defines=sql_yacc.h --output=sql_yacc.cc sql_yacc.yy
bison: m4: Invalid argument

The work around what I found is to copy m4.exe to sql directory directly, so that bison can pick from local working directory, then everything starts working as expected.

c:\mysql-5.1\sql&amp;gt;bison -y -p MYSQL --defines=sql_yacc.h --output=sql_yacc.cc sql_yacc.yy
bison: m4: Invalid argument
&amp;nbsp;
c:\mysql-5.1\sql&amp;gt;ls -al sql_yacc.*
-rw-rw-rw-  1 venu 0 413012 2010-02-07 11:58 sql_yacc.yy
&amp;nbsp;
c:\mysql-5.1\sql&amp;gt;which m4
C:\Gnu\GetGnuWin32\gnuwin32\bin\m4.EXE
&amp;nbsp;
c:\mysql-5.1\sql&amp;gt;copy C:\Gnu\GetGnuWin32\gnuwin32\bin\m4.EXE .
        1 file&amp;#40;s&amp;#41; copied.
&amp;nbsp;
c:\mysql-5.1\sql&amp;gt;which m4
c:\mysql-5.1\sql\m4.EXE
&amp;nbsp;
c:\mysql-5.1\sql&amp;gt;bison -y -p MYSQL --defines=sql_yacc.h --output=sql_yacc.cc sql_yacc.yy
&amp;nbsp;
c:\mysql-5.1\sql&amp;gt;ls -al sql_yacc.*
-rw-rw-rw-  1 venu 0 1510389 2010-02-07 14:33 sql_yacc.cc
-rw-rw-rw-  1 venu 0   30532 2010-02-07 14:33 sql_yacc.h
-rw-rw-rw-  1 venu 0  413012 2010-02-07 11:58 sql_yacc.yy

Kind of weired, but atleast there is a work around to change the parser code on Windows now; and it works great including Visual studio also starts building without any errors. But if you remove m4.exe from sql directory, then things starts to break immediately.</description>
    <content:encoded><![CDATA[<p>In case if you working on Windows environment for MySQL development (sometimes I use visual studio for easy debugging); and in case if you change the parser code (<i>sql_yacc.yy</i>) or if you are working directly from development branch (<a href="https://code.launchpad.net/mysql-server">bzr launchpad</a>), then the build breaks to generate the yacc files (<i>sql_yacc.h</i> and <i>sql_yacc.cc</i>) with an error <b>bison: M4: Invalid argument</b> as shown below:</p>

<div><table><tr><td><pre><span>1</span><span>&gt;</span>------ Build started: Project: sql, Configuration: Debug Win32 <span>------</span>
<span>1</span><span>&gt;</span>Generating sql_yacc.h, sql_yacc.cc
<span>2</span><span>&gt;</span>------ Build started: Project: GenServerSource, Configuration: Debug Win32 <span>------</span>
<span>2</span><span>&gt;</span>Generating sql_yacc.h, sql_yacc.cc
<span>1</span><span>&gt;</span><span>bison</span>: <span>m4</span>: Invalid argument
<span>1</span><span>&gt;</span>Project : error PRJ0019: A tool returned an error code from <span>&quot;Generating sql_yacc.h, sql_yacc.cc&quot;</span>
<span>1</span><span>&gt;</span>sql - <span>1</span> error<span>&#40;</span>s<span>&#41;</span>, <span>0</span> warning<span>&#40;</span>s<span>&#41;</span>
<span>2</span><span>&gt;</span><span>bison</span>: <span>m4</span>: Invalid argument
<span>2</span><span>&gt;</span>Project : error PRJ0019: A tool returned an error code from <span>&quot;Generating sql_yacc.h, sql_yacc.cc&quot;</span>
<span>2</span><span>&gt;</span>GenServerSource - <span>1</span> error<span>&#40;</span>s<span>&#41;</span>, <span>0</span> warning<span>&#40;</span>s<span>&#41;</span></pre></td></tr></table></div>

<p>But if use source zip file for any particular release, then it won&#8217;t fail as the files (sql_yacc.cc and sql_yacc.h) are pre-built and copied to the distribution zip file.</p>
<p>
But, again if you wanted to change the code or happen to save sql_yacc.yy, then it starts generating the files and build will break. It looks like lot of people are experincing the same problem to build parser code on Windows using any recent version of bison (not just MySQL code base).
</p>
<p>
Both bison.exe and m4.exe are in the path and they are the latest version; but still it fails.. </p>

<div><table><tr><td><pre>c:\mysql-<span>5.1</span>\sql<span>&gt;</span><span>which</span> <span>bison</span>
C:\Gnu\GetGnuWin32\gnuwin32\bin\bison.EXE
&nbsp;
c:\mysql-<span>5.1</span>\sql<span>&gt;</span><span>which</span> <span>m4</span>
C:\Gnu\GetGnuWin32\gnuwin32\bin\m4.EXE
&nbsp;
c:\mysql-<span>5.1</span>\sql<span>&gt;</span><span>bison</span> <span>--version</span>
<span>bison</span> <span>&#40;</span>GNU Bison<span>&#41;</span> 2.4.1
&nbsp;
c:\mysql-<span>5.1</span>\sql<span>&gt;</span><span>m4</span> <span>--version</span>
<span>m4</span> <span>&#40;</span>GNU M4<span>&#41;</span> 1.4.13</pre></td></tr></table></div>

<p>It looks like the problem is with Windows version of bison to pick m4 executable even though m4 is in the path. For example, you can directy try to generate the files from sql directory using bison as&#8230; </p>

<div><table><tr><td><pre>c:\mysql-<span>5.1</span>\sql<span>&gt;</span><span>bison</span> <span>-y</span> <span>-p</span> MYSQL <span>--defines</span>=sql_yacc.h <span>--output</span>=sql_yacc.cc sql_yacc.yy
<span>bison</span>: <span>m4</span>: Invalid argument</pre></td></tr></table></div>

<p>The <b>work around</b> what I found is to copy m4.exe to sql directory directly, so that bison can pick from local working directory, then everything starts working as expected.</p>

<div><table><tr><td><pre>c:\mysql-<span>5.1</span>\sql<span>&gt;</span><span>bison</span> <span>-y</span> <span>-p</span> MYSQL <span>--defines</span>=sql_yacc.h <span>--output</span>=sql_yacc.cc sql_yacc.yy
<span>bison</span>: <span>m4</span>: Invalid argument
&nbsp;
c:\mysql-<span>5.1</span>\sql<span>&gt;</span><span>ls</span> <span>-al</span> sql_yacc.<span>*</span>
<span>-rw-rw-rw-</span>  <span>1</span> venu <span>0</span> <span>413012</span> <span>2010</span>-02-07 <span>11</span>:<span>58</span> sql_yacc.yy
&nbsp;
c:\mysql-<span>5.1</span>\sql<span>&gt;</span><span>which</span> <span>m4</span>
C:\Gnu\GetGnuWin32\gnuwin32\bin\m4.EXE
&nbsp;
c:\mysql-<span>5.1</span>\sql<span>&gt;</span>copy C:\Gnu\GetGnuWin32\gnuwin32\bin\m4.EXE .
        <span>1</span> <span>file</span><span>&#40;</span>s<span>&#41;</span> copied.
&nbsp;
c:\mysql-<span>5.1</span>\sql<span>&gt;</span><span>which</span> <span>m4</span>
c:\mysql-<span>5.1</span>\sql\m4.EXE
&nbsp;
c:\mysql-<span>5.1</span>\sql<span>&gt;</span><span>bison</span> <span>-y</span> <span>-p</span> MYSQL <span>--defines</span>=sql_yacc.h <span>--output</span>=sql_yacc.cc sql_yacc.yy
&nbsp;
c:\mysql-<span>5.1</span>\sql<span>&gt;</span><span>ls</span> <span>-al</span> sql_yacc.<span>*</span>
<span>-rw-rw-rw-</span>  <span>1</span> venu <span>0</span> <span>1510389</span> <span>2010</span>-02-07 <span>14</span>:<span>33</span> sql_yacc.cc
<span>-rw-rw-rw-</span>  <span>1</span> venu <span>0</span>   <span>30532</span> <span>2010</span>-02-07 <span>14</span>:<span>33</span> sql_yacc.h
<span>-rw-rw-rw-</span>  <span>1</span> venu <span>0</span>  <span>413012</span> <span>2010</span>-02-07 <span>11</span>:<span>58</span> sql_yacc.yy</pre></td></tr></table></div>

<p>Kind of weired, but atleast there is a work around to change the parser code on Windows now; and it works great including Visual studio also starts building without any errors. But if you remove m4.exe from sql directory, then things starts to break immediately.</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23372&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23372&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sun, 07 Feb 2010 22:00:40 +0000</pubDate>
    <dc:creator>Venu Anuganti</dc:creator>
    <category>Database</category>
    <category>MySQL</category>
    <category>Windows</category>
    <category>Bison errors on windows</category>
    <category>bison: m4: Invalid argument</category>
    <category>generating yacc files windows</category>
    <category>how to build mysql on windows</category>
    <category>Windows mysql build</category>
  </item>

  <item>
    <title>Oracle loses some MySQL mojo</title>
    <guid isPermaLink="false">http://news.cnet.com/8301-13505_3-10448783-16.html</guid>
    <link>http://news.cnet.com/8301-13505_3-10448783-16.html?part=rss&amp;amp;tag=feed&amp;amp;subj=TheOpenRoad</link>
    <description>Oracle veteran and MySQL sympathizer Ken Jacobs has resigned from the database giant, calling into question Oracle's ability to deliver on its MySQL promises.</description>
    <content:encoded><![CDATA[Oracle veteran and MySQL sympathizer Ken Jacobs has resigned from the database giant, calling into question Oracle's ability to deliver on its MySQL promises.<br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23374&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23374&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sun, 07 Feb 2010 21:25:00 +0000</pubDate>
    <dc:creator>Matt Asay</dc:creator>
  </item>

  <item>
    <title>Conditional Joins in MySQL</title>
    <guid isPermaLink="false">http://www.mysqldiary.com/?p=71</guid>
    <link>http://www.mysqldiary.com/conditional-joins-in-mysql/</link>
    <description>One way to do a “Conditional Join” in MySQL is by using a “LEFT JOIN”.  Create a “LEFT JOIN” for each condition and combine the results into one column using an “IF” statement by the “SELECT” expression.  Here’s an example:
Suppose you have three tables:

questions: a table consisting of question ids, timestamps, and whether or [...]</description>
    <content:encoded><![CDATA[One way to do a “Conditional Join” in MySQL is by using a “LEFT JOIN”.  Create a “LEFT JOIN” for each condition and combine the results into one column using an “IF” statement by the “SELECT” expression.  Here’s an example:
Suppose you have three tables:

questions: a table consisting of question ids, timestamps, and whether or [...]<br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23371&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23371&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sun, 07 Feb 2010 19:43:12 +0000</pubDate>
    <dc:creator>Ilan Hazan</dc:creator>
    <category>Cool MySQL Queries</category>
  </item>

  <item>
    <title>How To Set Up MySQL Database Replication With SSL Encryption On Ubuntu 9.10</title>
    <guid isPermaLink="false">http://www.howtoforge.com/how-to-set-up-mysql-database-replication-with-ssl-encryption-on-ubuntu-9.10</guid>
    <link>http://www.howtoforge.com/how-to-set-up-mysql-database-replication-with-ssl-encryption-on-ubuntu-9.10</link>
    <description>


How To Set Up MySQL Database Replication With SSL Encryption On Ubuntu 9.10

 This tutorial describes how to set up database replication in MySQL
using an SSL connection for encryption (to make it impossible for
hackers to sniff out passwords and data transferred between the master
and slave). MySQL replication allows you to have an exact copy of a
database from a master server on another server (slave), and all
updates to the database on the master server are immediately replicated
to the database on the slave server so that both databases are in sync.
This is not a backup policy because an accidentally issued DELETE
command will also be carried out on the slave; but replication can help
protect against hardware failures though.</description>
    <content:encoded><![CDATA[<span>


</span><table align="left" cellpadding="0" cellspacing="0" width="128" height="40"><tr><td><img class="teaser-image-odd" src="http://images.howtoforge.com/images/teaser/mysql.gif" width="125" height="40" alt="" /></td></tr></table><p><b>How To Set Up MySQL Database Replication With SSL Encryption On Ubuntu 9.10</b></p>

<p> This tutorial describes how to set up database replication in MySQL
using an SSL connection for encryption (to make it impossible for
hackers to sniff out passwords and data transferred between the master
and slave). MySQL replication allows you to have an exact copy of a
database from a master server on another server (slave), and all
updates to the database on the master server are immediately replicated
to the database on the slave server so that both databases are in sync.
This is not a backup policy because an accidentally issued DELETE
command will also be carried out on the slave; but replication can help
protect against hardware failures though.</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23370&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23370&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sun, 07 Feb 2010 17:04:46 +0000</pubDate>
    <category>Ubuntu</category>
    <category>MySQL</category>
    <category>Security</category>
  </item>

  <item>
    <title>Multi-Master Manager for MySQL  &amp;#8211; FOSDEM 2010</title>
    <guid isPermaLink="false">http://ronaldbradford.com/blog/?p=2375</guid>
    <link>http://ronaldbradford.com/blog/multi-master-manager-for-mysql-fosdem-2010-2010-02-07/</link>
    <description>The next presentation by Piotr Biel from Percona was on Multi-Master Manager for MySQL.
The introduction included a discussion of the popular MySQL HA solutions including:

MySQL Master-slave replication with failover
MMM managed bi-directional replication
Heartbeat/SAN
Heartbeat/DRBD
NDB Cluster

A key problem that was clarified in the talk is the discussion of Multi-Master and this IS NOT master-master.  You only write to a single node.  With MySQL is this critical because MySQL replication does not manage collision detection.
The MMM Cluster Elements are:

monitoring node
database nodes

And the Application Components are:

mon
agent
angel

MMM works with 3 layers.

Network Layer &amp;#8211;   uses a virtual IP address, related to servers, not a physical machine
Database Layer
Application Layer

MMM uses two roles for management with your application.

exclusive &amp;#8211; also known as the writer
balanced &amp;#8211; also known as the reader

There are 3 different statuses are used to indicate node state

proper operation
maintenance
fatal errors

The mmm_control is the tool used to manage the cluster including:

move roles
enable/disable individual nodes
view cluster status
configure failover

The Implementation challenges require the use of the following MySQL settings to minimize problems.

auto_increment_offset/auto_increment_increment
log_slave_updates
read_only

FOSDEM 2010 MySQL Developer Room Schedule
FOSDEM 2010 Website
Brussels, Belgium
February 7, 2010</description>
    <content:encoded><![CDATA[<p>The next presentation by Piotr Biel from Percona was on Multi-Master Manager for MySQL.</p>
<p>The introduction included a discussion of the popular MySQL HA solutions including:</p>
<ul>
<li>MySQL Master-slave replication with failover</li>
<li>MMM managed bi-directional replication</li>
<li>Heartbeat/SAN</li>
<li>Heartbeat/DRBD</li>
<li>NDB Cluster</li>
</ul>
<p>A key problem that was clarified in the talk is the discussion of Multi-Master and this IS NOT master-master.  You only write to a single node.  With MySQL is this critical because MySQL replication does not manage collision detection.</p>
<p>The MMM Cluster Elements are:</p>
<ul>
<li>monitoring node</li>
<li>database nodes</li>
</ul>
<p>And the Application Components are:</p>
<ul>
<li>mon</li>
<li>agent</li>
<li>angel</li>
</ul>
<p>MMM works with 3 layers.</p>
<ul>
<li>Network Layer &#8211;   uses a virtual IP address, related to servers, not a physical machine</li>
<li>Database Layer</li>
<li>Application Layer</li>
</ul>
<p>MMM uses two roles for management with your application.</p>
<ul>
<li>exclusive &#8211; also known as the writer</li>
<li>balanced &#8211; also known as the reader</li>
</ul>
<p>There are 3 different statuses are used to indicate node state</p>
<ul>
<li>proper operation</li>
<li>maintenance</li>
<li>fatal errors</li>
</ul>
<p>The <code>mmm_control</code> is the tool used to manage the cluster including:</p>
<ul>
<li>move roles</li>
<li>enable/disable individual nodes</li>
<li>view cluster status</li>
<li>configure failover</li>
</ul>
<p>The Implementation challenges require the use of the following MySQL settings to minimize problems.</p>
<ul>
<li>auto_increment_offset/auto_increment_increment</li>
<li>log_slave_updates</li>
<li>read_only</li>
</ul>
<p><a href="http://forge.mysql.com/wiki/FOSDEM_2010_Developer_Room">FOSDEM 2010 MySQL Developer Room Schedule</a><br />
<a href="http://fosdem.org/2010/">FOSDEM 2010 Website</a><br />
Brussels, Belgium<br />
February 7, 2010</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23368&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23368&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sun, 07 Feb 2010 15:21:39 +0000</pubDate>
    <dc:creator>Ronald Bradford</dc:creator>
    <category>Databases</category>
    <category>FOSDEM 2010</category>
    <category>MySQL</category>
    <category>Professional</category>
    <category>fosdem</category>
    <category>high availability</category>
    <category>mmm</category>
  </item>

  <item>
    <title>FOSDEM: 'Connecting MySQL and Python', handout &amp;amp; wrap-up</title>
    <guid isPermaLink="false">tag:blogger.com,1999:blog-5702936365231918674.post-3344461649327831856</guid>
    <link>http://blog.some-abstract-type.com/2010/02/fosdem-connecting-mysql-and-python.html</link>
    <description>Apparently, my talk at FOSDEM 2010 about Connecting MySQL and Python was the only one about Python? There should be more, or?I have a hand-out ready in PDF. The slides are not usable without my chatter. It contains a few examples and links. Any comments, corrections, criticism.. are welcome!The longer version of this talk will be given at the O'Reilly MySQL Conference&amp;Expo 2010 in Santa Clara, California (USA).</description>
    <content:encoded><![CDATA[<p>Apparently, my talk at <a href="http://fosdem.org">FOSDEM</a> 2010 about <a href="http://forge.mysql.com/wiki/FOSDEM_2010_Developer_Room">Connecting MySQL and Python</a> was the only one about <a href="http://python.org">Python</a>? There should be more, or?</p><p>I have a <a href="http://tr.im/NbMt">hand-out ready in PDF</a>. The slides are not usable without my chatter. It contains a few examples and links. Any comments, corrections, criticism.. are welcome!</p><p>The longer version of this talk will be given at the <a href="http://en.oreilly.com/mysql2010/">O'Reilly MySQL Conference&Expo 2010</a> in Santa Clara, California (USA).</p><div><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/5702936365231918674-3344461649327831856?l=blog.some-abstract-type.com" alt="" /></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23369&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23369&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sun, 07 Feb 2010 14:54:00 +0000</pubDate>
    <dc:creator>Geert Vanderkelen</dc:creator>
    <category>conference</category>
    <category>mysql</category>
    <category>python</category>
    <category>myconnpy</category>
    <category>fosdem</category>
    <category>talk</category>
  </item>

  <item>
    <title>2 MySQL lessons for real life</title>
    <guid isPermaLink="false">261 at http://openlife.cc</guid>
    <link>http://openlife.cc/blogs/2010/february/2-mysql-lessons-real-life</link>
    <description>Between following (from a distance) the talks at Fosdem and anticipating the ones at MySQL User Conference in April, I was reminded of 2 interesting MySQL talks that have had a deeper meaning to me than their original speakers probably intended. I thought today could be a good time to share these 2 stories that for me personally are filed in the &quot;things I learned from MySQL AB and Sun&quot; folder...
&quot;If you can't solve the problem, try solving some other problem&quot;
read more</description>
    <content:encoded><![CDATA[<p>Between following (from a distance) the <a href="http://fosdem.org/2010/schedule/devrooms/mysql">talks at Fosdem</a> and anticipating the ones at <a href="http://en.oreilly.com/mysql2010/">MySQL User Conference</a> in April, I was reminded of 2 interesting MySQL talks that have had a deeper meaning to me than their original speakers probably intended. I thought today could be a good time to share these 2 stories that for me personally are filed in the "things I learned from MySQL AB and Sun" folder...</p>
<h2>"If you can't solve the problem, try solving some other problem"</h2>
<p><a href="http://openlife.cc/blogs/2010/february/2-mysql-lessons-real-life" target="_blank">read more</a></p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23366&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23366&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sun, 07 Feb 2010 14:40:13 +0000</pubDate>
    <dc:creator>Henrik Ingo</dc:creator>
    <category>MySQL</category>
    <category>Personal</category>
  </item>

  <item>
    <title>10x Performance Improvements in MySQL &amp;#8211; A Case Study</title>
    <guid isPermaLink="false">http://ronaldbradford.com/blog/?p=2377</guid>
    <link>http://ronaldbradford.com/blog/10x-performance-improvements-in-mysql-a-case-study-2010-02-07/</link>
    <description>The slides for my presentation at FOSDEM 2010 are now available online at slideshare. In this presentation I describe a successful client implementation with the result of 10x performance improvements. My presentation covers monitoring, reviewing and analyzing SQL, the art of indexes, improving SQL, storage engines and caching.
 The end result was a page load improvement from 700+ms load time to a a consistent 60ms.  
10x Performance Improvements &amp;#8211; A Case Study
View more presentations from Ronald Bradford.
</description>
    <content:encoded><![CDATA[<p>The slides for my presentation at FOSDEM 2010 are now available online at <a href="http://bit.ly/10xFOSDEM">slideshare</a>. In this presentation I describe a successful client implementation with the result of 10x performance improvements. My presentation covers monitoring, reviewing and analyzing SQL, the art of indexes, improving SQL, storage engines and caching.</p>
<p> The end result was a page load improvement from 700+ms load time to a a consistent 60ms.  </p>
<div><a href="http://www.slideshare.net/ronaldbradford/10x-performance-improvements-a-case-study" title="10x Performance Improvements - A Case Study">10x Performance Improvements &#8211; A Case Study</a>
<div>View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/ronaldbradford">Ronald Bradford</a>.</div>
</div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23364&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23364&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sun, 07 Feb 2010 13:36:34 +0000</pubDate>
    <dc:creator>Ronald Bradford</dc:creator>
    <category>Databases</category>
    <category>FOSDEM 2010</category>
    <category>InnoDB</category>
    <category>MySQL</category>
    <category>Professional</category>
    <category>Uncategorized</category>
    <category>caching</category>
    <category>explain</category>
    <category>indexes</category>
    <category>memcached</category>
    <category>performance</category>
  </item>

  <item>
    <title>Oracle's Commitment to MySQL,  MySQL Releases and Development Cycles</title>
    <guid isPermaLink="false">tag:blogger.com,1999:blog-6480555434853676325.post-61703886980018451</guid>
    <link>http://feedproxy.google.com/~r/MysqlDba-AnOracleDbasJourney/~3/-xC7EYz2WCA/oracles-commitment-to-mysql-mysql.html</link>
    <description>The last few weeks I am still being asked what is going on with Oracle and MySQL and where is MySQL with it's software releases.  So I am going to include some URLs to hopefully answer some of your questions regarding MySQL.
Oracle's press release on December 14, 2009 regarding MySQL.http://www.oracle.com/us/corporate/press/042364
Summary list MySQL software releases. A more detailed list can be </description>
    <content:encoded><![CDATA[The last few weeks I am still being asked what is going on with Oracle and MySQL and where is MySQL with it's software releases.  So I am going to include some URLs to hopefully answer some of your questions regarding MySQL.
Oracle's press release on December 14, 2009 regarding MySQL.http://www.oracle.com/us/corporate/press/042364
Summary list MySQL software releases. A more detailed list can be <img src="http://feeds.feedburner.com/~r/MysqlDba-AnOracleDbasJourney/~4/-xC7EYz2WCA" height="1" width="1" /><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23365&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23365&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sun, 07 Feb 2010 13:27:00 +0000</pubDate>
    <dc:creator>George Trujillo</dc:creator>
    <category>Oracle MySQL</category>
  </item>

  <item>
    <title>State of phpMyAdmin &amp;#8211; FOSDEM 2010</title>
    <guid isPermaLink="false">http://ronaldbradford.com/blog/?p=2363</guid>
    <link>http://ronaldbradford.com/blog/state-of-phpmyadmin-fosdem-2010-2010-02-07/</link>
    <description>Following the opening keynote &amp;#8220;Dolphins, now and beyond&amp;#8221;, Marc Delisle presented on &amp;#8220;State of phpMyAdmin&amp;#8221;.
phpMyAdmin is an DBA administration tool for MySQL available today in 57 different languages. This is found today in many distributions, LAMP stack products and also in cpanel.  The product is found at http://phpmyadmin.net.
There are current two versions, the legacy 2.x version to support older php 3.x &amp;#038; 4.x,  The current version 3.x is for PHP 5.2 or greater.
The current UI includes some new features including.

calendar input for date fields
meta data for mime types e.g images, which is great for showing the output as an image, otherwise blob data
Relational designer with the able to show and create foreign keys

The New features in 3.3 (currently in beta) include:

Replication support  including configuring master/slave, start/stop slave.
Synchronization model showing structure and data differences between two servers and ability to sync.
New export  to php array, xslx, mediawiki,  new importing features including progress bar.
Changes tracking  for changes on per instance or per table.  Providing change report and export options.

FOSDEM 2010 MySQL Developer Room Schedule
FOSDEM 2010 Website
Brussels, Belgium
February 7, 2010</description>
    <content:encoded><![CDATA[<p>Following the <a href="http://ronaldbradford.com/blog/dolphins-now-beyond-fosdem-2010-2010-02-07/">opening keynote</a> &#8220;Dolphins, now and beyond&#8221;, Marc Delisle presented on &#8220;State of phpMyAdmin&#8221;.</p>
<p>phpMyAdmin is an DBA administration tool for MySQL available today in 57 different languages. This is found today in many distributions, LAMP stack products and also in cpanel.  The product is found at <a href="http://phpmyadmin.net">http://phpmyadmin.net</a>.</p>
<p>There are current two versions, the legacy 2.x version to support older php 3.x &#038; 4.x,  The current version 3.x is for PHP 5.2 or greater.</p>
<p>The current UI includes some new features including.</p>
<ul>
<li>calendar input for date fields
<li>meta data for mime types e.g images, which is great for showing the output as an image, otherwise blob data</li>
<li>Relational designer with the able to show and create foreign keys</li>
</ul>
<p>The New features in 3.3 (currently in beta) include:</p>
<ul>
<li>Replication support  including configuring master/slave, start/stop slave.</li>
<li>Synchronization model showing structure and data differences between two servers and ability to sync.</li>
<li>New export  to php array, xslx, mediawiki,  new importing features including progress bar.</li>
<li>Changes tracking  for changes on per instance or per table.  Providing change report and export options.</li>
</ul>
<p><a href="http://forge.mysql.com/wiki/FOSDEM_2010_Developer_Room">FOSDEM 2010 MySQL Developer Room Schedule</a><br />
<a href="http://fosdem.org/2010/">FOSDEM 2010 Website</a><br />
Brussels, Belgium<br />
February 7, 2010</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23362&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23362&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sun, 07 Feb 2010 10:30:56 +0000</pubDate>
    <dc:creator>Ronald Bradford</dc:creator>
    <category>Databases</category>
    <category>FOSDEM 2010</category>
    <category>MySQL</category>
    <category>Professional</category>
    <category>fosdem</category>
    <category>Open Source</category>
    <category>phpmyadmin</category>
  </item>

  <item>
    <title>Dolphins, now &amp;amp; beyond &amp;#8211; FOSDEM 2010</title>
    <guid isPermaLink="false">http://ronaldbradford.com/blog/?p=2364</guid>
    <link>http://ronaldbradford.com/blog/dolphins-now-beyond-fosdem-2010-2010-02-07/</link>
    <description>I had the honor of opening the day at the MySQL developer room at FOSDEM 2010 where I had a chance to talk about the MySQL product and community, now and what&amp;#8217;s happening moving forward.
For those that missed the talk, my slides are available online at Slideshare however slides never due justice to some of the jokes including:

What do you consider? the Blue Pill, or the Red Pill
Why think two dimensionally, how about the Green Pill
Emerging Breeds with performance enhancing modifications

Dolphins Now And Beyond &amp;#8211; FOSDEM 2010
View more presentations from Ronald Bradford.
</description>
    <content:encoded><![CDATA[<p>I had the honor of opening the day at the MySQL developer room at FOSDEM 2010 where I had a chance to talk about the MySQL product and community, now and what&#8217;s happening moving forward.</p>
<p>For those that missed the talk, my slides are available online at <a href="http://www.slideshare.net/ronaldbradford/dolphins-now-and-beyond-fosdem-2010">Slideshare</a> however slides never due justice to some of the jokes including:</p>
<ul>
<li>What do you consider? the Blue Pill, or the Red Pill</li>
<li>Why think two dimensionally, how about the Green Pill</li>
<li>Emerging Breeds with performance enhancing modifications</li>
</ul>
<div><a href="http://www.slideshare.net/ronaldbradford/dolphins-now-and-beyond-fosdem-2010" title="Dolphins Now And Beyond - FOSDEM 2010">Dolphins Now And Beyond &#8211; FOSDEM 2010</a>
<div>View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/ronaldbradford">Ronald Bradford</a>.</div>
</div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23363&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23363&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sun, 07 Feb 2010 10:07:26 +0000</pubDate>
    <dc:creator>Ronald Bradford</dc:creator>
    <category>Databases</category>
    <category>FOSDEM 2010</category>
    <category>MySQL</category>
    <category>Professional</category>
  </item>

  <item>
    <title>MySQL Meetup Group - Back in the Bay!</title>
    <guid isPermaLink="false">tag:everythingmysql.ning.com,2010-02-07:3993569:BlogPost:1308</guid>
    <link>http://everythingmysql.ning.com/xn/detail/3993569%3ABlogPost%3A1308</link>
    <description>The recently revived MySQL Meetup group had its first meeting. A big thanks to Venu Anuganti, our host and Schooner our sponsor. If anyone is interested in joining the fun please check out the Meetup.com site here. During our first meetup we went over basic MySQL topics including configuration, performance tuning, locking, along with running MySQL in the cloud. All in all it was a well done presentation and I am looking forward to the next.Thanks again for getting the Meetup going!Chris </description>
    <content:encoded><![CDATA[The recently revived MySQL Meetup group had its first meeting. A big thanks to Venu Anuganti, our host and <a href="http://www.schoonerinfotech.com">Schooner</a> our sponsor. If anyone is interested in joining the fun please check out the Meetup.com site <a href="http://www.meetup.com/bay-mysql/">here</a>. <br/><br/>During our first meetup we went over basic MySQL topics including configuration, performance tuning, locking, along with running MySQL in the cloud. All in all it was a well done presentation and I am looking forward to the next.<br/><br/>Thanks again for getting the Meetup going!<br/><br/>Chris <br/><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23361&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23361&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sun, 07 Feb 2010 06:52:28 +0000</pubDate>
    <dc:creator>Chris Schneider</dc:creator>
  </item>

  <item>
    <title>Tip: MySQL Workbench Model Option Token Filters</title>
    <guid isPermaLink="false">http://cesaric.com/?p=517</guid>
    <link>http://cesaric.com/?p=517</link>
    <description>In MySQL Workbench, there&amp;#8217;s the standard tokens (table, stable, dtable, column) that you can use to help customize your naming conventions of your columns, keys, etc.  What you can also do is apply/pipe filters to these tokens.  The filters are upper, lower &amp;amp; capitalize.  You can see in the image above how they can be applied.</description>
    <content:encoded><![CDATA[<p>In MySQL Workbench, there&#8217;s the standard tokens (table, stable, dtable, column) that you can use to help customize your naming conventions of your columns, keys, etc.  What you can also do is apply/pipe filters to these tokens.  The filters are <strong>upper</strong>, <strong>lower</strong> &amp; <strong>capitalize</strong>.  You can see in the image above how they can be applied.</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23360&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23360&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sun, 07 Feb 2010 05:54:50 +0000</pubDate>
    <dc:creator>Robert Cesaric</dc:creator>
    <category>MySQL</category>
  </item>

  <item>
    <title>Monitoring for errors</title>
    <guid isPermaLink="false">http://www.facebook.com/note.php?note_id=293204560932</guid>
    <link>http://www.facebook.com/note.php?note_id=293204560932</link>
    <description>I am trying to debug a server with a high rate of Aborted connects reported  in SHOW STATUS.This frequently occurs when the maximum number of concurrent connections, max_connections, has been exceeded. Alas, this server does not have too many connections, I have no problem creating a connection and there are connections for all accounts so the password table is probably valid. It is time to read the source code. The aborted_connects counter is incremented when:

the call to pthread_create in create_new_thread() fails. This creates a new thread to handle the new connection and failure is unlikely.
the call to my_thread_init() in handle_one_connection() fails.  This is unlikely.
the call to THD::store_globals() in handle_one_connection() fails. This is unlikely.
the call to check_connection() in handle_one_connection() fails. This is likely.

At this point I assume the failure is in check_connection() but there are many reasons for that to fail:

return ER_BAD_HOST_ERR when vio_peer_addr() fails
return ER_OUT_OF_RESOURCES when memory allocation fails
return ER_HOST_IS_BLOCKED when there were too many connection errors for this client's host. The counters for this are reset when FLUSH HOSTS is run.
return ER_HOST_NOT_PRIVILEGED when the client's host is not allowed to connect
return ER_HANDSHAKE_ERROR when there is a network during authentication (read or write fails, not enough data)
return an error when check_user() fails

Running FLUSH HOSTS does not fix the problem and I don't think memory allocation is failing. check_user() calls mysql_change_db() and that can fail for several reasons:

return ER_NO_DB_ERROR because a db name was not specified
return ??? on memory allocation errors
return ER_WRONG_DB_NAME because the format of the db name is bad
return ER_DBACCESS_DENIED_ERROR because the user is not allowed to access the db
return ER_BAD_DB_ERROR because the filesystem directory for the db does not exist or cannot be accessed

Finally, there are several reasons for a failure in check_user() other than failures from mysql_change_db():

return ER_HANDSHAKE_ERROR when there is not enough data in the authentication packet or network writes fail
return ER_CON_COUNT_ERROR when there are too many concurrent connections (max_connections)
return ER_TOO_MANY_USER_CONNECTIONS when max_user_connections has been exceeded
return ER_USER_LIMIT_REACHED when there were too many connections, updates or queries in the last hour for this account
return ER_NOT_SUPPORTED_AUTH_MODE when the client uses the wrong a short hash to authenticate
return ER_ACCESS_DENIED_ERROR when authentication fails

That is a lot of potential errors. How do I find the problem? It would be easy if I had access to all client hosts and all client software logged all errors. That is rarely true for large deployments. It would be easier if I had SHOW USER_STATISTICS which had a few counters for authentication failures per user. From that I could determine whether the problem was limited to a known account. However, even that doesn't count some of the errors including attempts to use accounts that don't exist.

I want to know which errors occur most frequently. For that I need the command SHOW ERROR COUNTS. Alas, that command does not exist. Otherwise, I need to figure out how to count errors by parsing tcpdump output.

Time to assign the problem to someone else.</description>
    <content:encoded><![CDATA[I am trying to debug a server with a high rate of <b>Aborted connects</b> reported  in <b>SHOW STATUS</b>.This frequently occurs when the maximum number of concurrent connections, <b>max_connections</b>, has been exceeded. Alas, this server does not have too many connections, I have no problem creating a connection and there are connections for all accounts so the password table is probably valid. It is time to read the source code. The aborted_connects counter is incremented when:
<ul>
<li>the call to pthread_create in create_new_thread() fails. This creates a new thread to handle the new connection and failure is unlikely.
<li>the call to my_thread_init() in handle_one_connection() fails.  This is unlikely.
<li>the call to THD::store_globals() in handle_one_connection() fails. This is unlikely.
<li>the call to check_connection() in handle_one_connection() fails. This is likely.
</ul>
At this point I assume the failure is in check_connection() but there are many reasons for that to fail:
<ul>
<li>return ER_BAD_HOST_ERR when vio_peer_addr() fails
<li>return ER_OUT_OF_RESOURCES when memory allocation fails
<li>return ER_HOST_IS_BLOCKED when there were too many connection errors for this client's host. The counters for this are reset when <b>FLUSH HOSTS</b> is run.
<li>return ER_HOST_NOT_PRIVILEGED when the client's host is not allowed to connect
<li>return ER_HANDSHAKE_ERROR when there is a network during authentication (read or write fails, not enough data)
<li>return an error when check_user() fails
</ul>
Running FLUSH HOSTS does not fix the problem and I don't think memory allocation is failing. check_user() calls mysql_change_db() and that can fail for several reasons:
<ul>
<li>return ER_NO_DB_ERROR because a db name was not specified
<li>return ??? on memory allocation errors
<li>return ER_WRONG_DB_NAME because the format of the db name is bad
<li>return ER_DBACCESS_DENIED_ERROR because the user is not allowed to access the db
<li>return ER_BAD_DB_ERROR because the filesystem directory for the db does not exist or cannot be accessed
</ul>
Finally, there are several reasons for a failure in check_user() other than failures from mysql_change_db():
<ul>
<li>return ER_HANDSHAKE_ERROR when there is not enough data in the authentication packet or network writes fail
<li>return ER_CON_COUNT_ERROR when there are too many concurrent connections (max_connections)
<li>return ER_TOO_MANY_USER_CONNECTIONS when max_user_connections has been exceeded
<li>return ER_USER_LIMIT_REACHED when there were too many connections, updates or queries in the last hour for this account
<li>return ER_NOT_SUPPORTED_AUTH_MODE when the client uses the wrong a short hash to authenticate
<li>return ER_ACCESS_DENIED_ERROR when authentication fails
</ul>
That is a lot of potential errors. How do I find the problem? It would be easy if I had access to all client hosts and all client software logged all errors. That is rarely true for large deployments. It would be easier if I had <b>SHOW USER_STATISTICS</b> which had a few counters for authentication failures per user. From that I could determine whether the problem was limited to a known account. However, even that doesn't count some of the errors including attempts to use accounts that don't exist.

I want to know which errors occur most frequently. For that I need the command <b>SHOW ERROR COUNTS</b>. Alas, that command does not exist. Otherwise, I need to figure out how to count errors by parsing tcpdump output.

Time to assign the problem to someone else.<br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23359&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23359&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sat, 06 Feb 2010 15:55:37 +0000</pubDate>
  </item>

  <item>
    <title>More MySQL quizzes</title>
    <guid isPermaLink="false">http://www.bitbybit.dk/carsten/blog/?p=275</guid>
    <link>http://www.bitbybit.dk/carsten/blog/?p=275</link>
    <description>Not quite pop quiz format, but if you enjoyed the ones I published some time ago (almost 2 years ago now&amp;#8230; how time flies), you&amp;#8217;ll probably be interested to know that  (more&amp;#8230;)</description>
    <content:encoded><![CDATA[<p>Not quite pop quiz format, but if you enjoyed <a href="http://www.bitbybit.dk/carsten/blog/?page_id=158">the ones I published</a> some time ago (almost 2 years ago now&#8230; how time flies), you&#8217;ll probably be interested to know that  <a href="http://www.bitbybit.dk/carsten/blog/?p=275#more-275">(more&#8230;)</a></p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23357&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23357&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sat, 06 Feb 2010 13:05:10 +0000</pubDate>
    <dc:creator>Carsten Pedersen</dc:creator>
    <category>MySQL</category>
    <category>Pop Quiz</category>
  </item>

  <item>
    <title>Knowing your PERC 6/i BBU</title>
    <guid isPermaLink="false">http://www.pablowe.net/?p=331</guid>
    <link>http://www.pablowe.net/2010/02/knowing-you-perc-6i-bbu/</link>
    <description>I&amp;#8217;ve recently become supremely disappointed in the availability of Nagios checks for RAID cards.  Too often, I see administrators rely on chance (or their hosting provider) to discover failed drives, a dying BBU, or a degrading capacity on their RAID cards.  So I began work on check_raid (part of check_mysql_all) to provide a [...]</description>
    <content:encoded><![CDATA[I&#8217;ve recently become supremely disappointed in the availability of Nagios checks for RAID cards.  Too often, I see administrators rely on chance (or their hosting provider) to discover failed drives, a dying BBU, or a degrading capacity on their RAID cards.  So I began work on check_raid (part of check_mysql_all) to provide a [...]<br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23355&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23355&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Sat, 06 Feb 2010 00:50:33 +0000</pubDate>
    <dc:creator>Ryan Lowe</dc:creator>
    <category>Nagios</category>
    <category>Performance</category>
    <category>Uncategorized</category>
    <category>Monitoring</category>
    <category>RAID</category>
  </item>

  <item>
    <title>CAOS Theory Podcast 2010.02.05</title>
    <guid isPermaLink="false">http://blogs.the451group.com/opensource/?p=1343</guid>
    <link>http://feedproxy.google.com/~r/451opensource/~3/AQEBenJwpxE/</link>
    <description>Topics for this podcast:
*Matt Asay moves from Alfresco to Canonical
*GPL fade fuels heated discussion
*Apple&amp;#8217;s iPad and its enterprise and open source impact
*Open source in data warehousing and storage
*Our perspective on Oracle&amp;#8217;s plans for Sun open source
iTunes or direct download (32:50, 9.2 MB)
</description>
    <content:encoded><![CDATA[<p>Topics for this podcast:</p>
<p>*Matt Asay moves from Alfresco to Canonical<br />
*GPL fade fuels heated discussion<br />
*Apple&#8217;s iPad and its enterprise and open source impact<br />
*Open source in data warehousing and storage<br />
*Our perspective on Oracle&#8217;s plans for Sun open source</p>
<p><a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=280595473">iTunes</a> or <a href="http://media.libsyn.com/media/caostheory/CAOSTheory20100205.mp3">direct download</a> (32:50, 9.2 MB)</p>
<img src="http://feeds.feedburner.com/~r/451opensource/~4/AQEBenJwpxE" height="1" width="1" /><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23354&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23354&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Fri, 05 Feb 2010 20:23:17 +0000</pubDate>
    <dc:creator>The 451 Group</dc:creator>
    <category>Podcast</category>
    <category>alfresco</category>
    <category>android</category>
    <category>apache</category>
    <category>Apple</category>
    <category>calpont</category>
    <category>canonical</category>
    <category>caos theory</category>
    <category>caostheory</category>
    <category>Chris Hazelton</category>
    <category>Chrome</category>
    <category>Coraid</category>
    <category>data warehousing</category>
    <category>developers</category>
    <category>eclipse</category>
    <category>glassfish</category>
    <category>google</category>
    <category>GPL</category>
    <category>ipad</category>
    <category>iPhone</category>
    <category>jay lyman</category>
    <category>LGPL</category>
    <category>Linux</category>
    <category>matt asay</category>
    <category>matt aslett</category>
    <category>mysql</category>
    <category>netbeans</category>
    <category>open-source</category>
    <category>OpenOffi</category>
  </item>

  <item>
    <title>MySQL Cluster Performance Tuning Best Practices – Webinar replay available</title>
    <guid isPermaLink="false">http://www.clusterdb.com/?p=950</guid>
    <link>http://www.clusterdb.com/mysql-cluster/mysql-cluster-performance-tuning-best-practices-webinar-replay-available/</link>
    <description>For anyone that missed the recent webinar on getting the best performance out of MySQL Cluster then the replay is now available from mysql.com.
Benefits of connection pooling
Are you experiencing current performance bottlenecks in your high availability applications ? Are you designing a new mission-critical application and want to know how best to structure your schema and index strategy for optimal performance? Interested in how to transform your SQL into faster, more efficient queries?
Then this free web presentation is for you! You will get expert insight and learn best practices to help you identify those areas of database and application design that will give you the greatest benefits for performance when using MySQL Cluster.
It discusses guidelines and best practices covering the following areas:

General Design Concepts and Guidelines
Schema Optimization

BLOB/Text vs VARBINARY/VARCHAR
Partition by Key


Index Selection and Tuning
Basic Query Tuning
MySQL Cluster Parameter Tuning Guidelines
Tools to accelerate application development and testing
</description>
    <content:encoded><![CDATA[<p>For anyone that missed the recent webinar on getting the best performance out of MySQL Cluster then the replay is now available from <a href="http://www.mysql.com/news-and-events/on-demand-webinars/display-od-480.html" target="_blank">mysql.com</a>.</p>
<div><a href="http://www.clusterdb.com/wp-content/uploads/2010/01/connection_pooling_graph.jpg"><img class="size-medium wp-image-898" title="connection_pooling_graph" src="http://www.clusterdb.com/wp-content/uploads/2010/01/connection_pooling_graph-300x77.jpg" alt="Benefits of connection pooling" width="300" height="77" /></a><p>Benefits of connection pooling</p></div>
<p>Are you experiencing current performance bottlenecks in your high availability applications ? Are you designing a new mission-critical application and want to know how best to structure your schema and index strategy for optimal performance? Interested in how to transform your SQL into faster, more efficient queries?</p>
<p>Then this free web presentation is for you! You will get expert insight and learn best practices to help you identify those areas of database and application design that will give you the greatest benefits for performance when using MySQL Cluster.</p>
<p>It discusses guidelines and best practices covering the following areas:</p>
<ul>
<li>General Design Concepts and Guidelines</li>
<li>Schema Optimization
<ul>
<li>BLOB/Text vs VARBINARY/VARCHAR</li>
<li>Partition by Key</li>
</ul>
</li>
<li>Index Selection and Tuning</li>
<li>Basic Query Tuning</li>
<li>MySQL Cluster Parameter Tuning Guidelines</li>
<li>Tools to accelerate application development and testing</li>
</ul><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23353&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23353&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Fri, 05 Feb 2010 19:19:24 +0000</pubDate>
    <dc:creator>Andrew Morgan</dc:creator>
    <category>MySQL Cluster</category>
    <category>MySQL</category>
    <category>MySQL Cluster CGE</category>
  </item>

  <item>
    <title>Log Buffer #177: a Carnival of the Vanities for DBAs</title>
    <guid isPermaLink="false">http://www.pythian.com/news/?p=8255</guid>
    <link>http://www.pythian.com/news/8255/log-buffer-177-a-carnival-of-the-vanities-for-dbas/</link>
    <description>Welcome, everyone, to the 177th edition of Log Buffer, the weekly review of database blogs.  It was another week heavy with technical posts, so let&amp;#8217;s waste no time, and get it all started with&amp;nbsp;.&amp;nbsp;.&amp;nbsp;.&amp;nbsp;
PostgreSQL
David Fetter shares his recipe for adding only new rows: &amp;#8220;Let&amp;#8217;s say you have a table and a data set, and would like to add only those rows in your data set that aren&amp;#8217;t already in the table. There are hard ways, but here&amp;#8217;s an easy one.&amp;#8221;
Simon Riggs, the Database Explorer, offers his thoughts on parallel query in Postgres: &amp;#8220;I&amp;#8217;m disappointed we&amp;#8217;ve not made much progress with parallel operations and partitioning in core Postgres in last few releases. Recent Greenplum results show we have much work to do in improving things.&amp;#8221;
David Christensen shares a PostgreSQL tip: using pg_dump to extract a single function.
Roppert Kalmar shares a screenshot of the new Sun Oracle PostgreSQL.  That doesn&amp;#8217;t even sound right, does it?

Oracle
Let&amp;#8217;s begin with Chen Shapira, since she is so excited about the NoCOUG Winter Conference, and here gives a quick rundown of what attendees can expect to see.
Contrariwise (or not), Iggy Fernandez offers five reasons not to attend a NoCOUG conference in 2010.  &amp;#8220;Most Oracle professionals will benefit a lot from attending a NoCOUG conference in 2010. However, the following categories will not benefit much: &amp;nbsp;.&amp;nbsp;.&amp;nbsp;.&amp;nbsp; Those Oracle professionals who believe that Oracle’s goal in buying Sun is to replace Oracle Database with MySQL. This is probably a very small group&amp;nbsp;.&amp;nbsp;.&amp;nbsp;.&amp;nbsp;&amp;#8221;
Uwe Hesse, the Oracle Instructor and his readers share a discussion on sharing READ ONLY Tablespaces between databases.  Uwe says, &amp;#8220;&amp;nbsp;.&amp;nbsp;.&amp;nbsp;.&amp;nbsp;the question was raised, whether it is possible to use the same READ ONLY Tablespace in multiple Databases. At first glance, I thought that this should of course be possible, though the answers where somewhat discouraging. So I have done a quick test to prove it&amp;nbsp;.&amp;nbsp;.&amp;nbsp;.&amp;nbsp;&amp;#8221;
Krishna Manoharan of Performance Engineering and Capacity Planning steps up with an item on understanding CPU time as an Oracle Wait event.  Krishna pursues the question, &amp;#8220;[What] if the stats from the system show that CPU Utilization (% Util and Run queue) are well within thresholds and show plenty of available capacity, but Oracle continues to report CPU time as a Top 5 wait event?&amp;#8221;
Charles Hooper grapples the question, Which Plan is Better? Charles writes, &amp;#8220;A recent post appeared in the OTN forums that indirectly asked the question: which execution plan is better? &amp;nbsp;.&amp;nbsp;.&amp;nbsp;.&amp;nbsp; If you are attempting to conclude which plan is faster/better based on the estimates in [a] first plan and an altered plan with a hinted cardinality estimate, you might be setting yourself up for failure.&amp;#8221;
&amp;#8220;Seems like all I ever write about these days is SQL Profiles,&amp;#8221; writes Kerry Osborne.  &amp;#8220;I do other stuff, honest! It just seems like getting Oracle to do what you want when you can’t touch the code is the closest thing to &amp;#8216;Magic&amp;#8217; that DBAs get to do.&amp;#8221; Here&amp;#8217;s Kerry&amp;#8217;s post on single-hint SQL profiles, inspired by a discussion with Jonathan Lewis.
And now here is Jonathan with a post on SQL Server. &amp;nbsp;.&amp;nbsp;.&amp;nbsp;.&amp;nbsp; Wait a minute&amp;#8211;what the?!
SQL Server
Ahem. And now here is Jonathan Lewis with a post on SQL Server.  Yes, Jonathan Lewis, famous Oracle guy.  &amp;#8220;A few days ago,&amp;#8221; Jonathan writes, &amp;#8220;I did a presentation on SQL Server. &amp;nbsp;.&amp;nbsp;.&amp;nbsp;.&amp;nbsp; The title was &amp;#8216;What the Enterprise needs in an RDBMS&amp;#8217;&amp;nbsp;.&amp;nbsp;.&amp;nbsp;.&amp;nbsp;and the presentation was about whether or not you could find everything you needed in SQL Server 2008, where you’d have to look in the manuals, and supplementary questions you’d have to ask.&amp;#8221;
Buck Woody also has been, as it were, treading the boards: &amp;#8220;I give series of classes and presentations on Data Design. I say &amp;#8216;data&amp;#8217; design instead of &amp;#8216;database&amp;#8217; design because we should consider more than just the database. &amp;nbsp;.&amp;nbsp;.&amp;nbsp;.&amp;nbsp; Here are the links I use in that presentation. Although this isn&amp;#8217;t a comprehensive list of Data Design topics, I’ll visit this topic from time to time so you may want to bookmark this page in your favorites[.]&amp;#8221;
Merrill Aldrich admonishes, don&amp;#8217;t get burned by replication of SQL Server files: &amp;#8220;&amp;nbsp;.&amp;nbsp;.&amp;nbsp;.&amp;nbsp;if you try to use file system replication (robocopy, xcopy, repli-whatever) to maintain a DR server from your production SQL Server, you might be in for a nasty surprise.&amp;#8221;
Buck Woody relays more nastiness in his post, Transparent Data Encryption and the Latest Data Breach: &amp;#8220;Well, It’s happened again. Hundreds of thousands of private records were stolen from a database. This one, however, was different. No one stole any passwords, no one did any social engineering, nothing was captured in-line. No, this one was accomplished by stealing the actual hard drives themselves!&amp;#8221; 
One way to circumvent this&amp;#8211;no hard drives! But wait&amp;#8211;before you send them all to the kilns, Aaron Bertrand says, your laptop may be ready for SSDs, but are your SQL Servers? &amp;#8220;I am not trying to be Debbie Downer here,&amp;#8221; he explains,&amp;#8221; &amp;#8230; SSDs sound great&amp;nbsp;.&amp;nbsp;.&amp;nbsp;.&amp;nbsp; But right now, if you are looking at expanding or upgrading your I/O under SQL Server, I&amp;#8217;d give the vendors some time to shake off these early jitters.&amp;#8221; 
Here&amp;#8217;s Thomas LaRock, DBA Survivor, with a Name That Caption Contest. The deal is: &amp;#8220;The person who provides the best caption will win a copy of my book,&amp;#8221; DBA Survivor, &amp;#8220;and I will figure out a way to incorporate your caption into the main page.&amp;#8221;
MySQL
On Serge&amp;#8217;s blog appears a useful item on using UNIX_TIMESTAMP as a partitioning function for MySQL 5.1.43
Falko Timme shares How To Back Up MySQL Databases With mylvmbackup On Debian Lenny on HowtoForge.
Simon Mudd has some further thoughts on mysql upgrades.
From atop his MySQL Soapbox, Lachlan Mulcahy address the matter of a replicate-do-db gotcha, discovered lurking in the config file.
Gotcha again. Dathan Vance Pattishall says, &amp;#8220;INNODB has some irritating gotchas that makes disk space management hard. In 2002ish INNODB, added innodb_file_per_table to get around allot of these issues, but it does not fix everything.&amp;#8221;  The post is innodb_file_per_table, shrinking table spaces and the data dictionary.
On EXPLAIN EXTENDED, Quassnoi examines some details of join on overlapping date ranges in answering the question, &amp;#8220;Is there any way to optimize the query for overlapping ranges in MySQL if both ranges are dynamic?&amp;#8221;
Last, The InfiniDB Team Blog announces that InfiniDB 1.0 is Now Available!
That&amp;#8217;s all there&amp;#8217;s room and time for.  Let&amp;#8217;s hear your favourite DB blogs from this week, and we&amp;#8217;ll see each other again in the next one.  Till then!</description>
    <content:encoded><![CDATA[<p>Welcome, everyone, to the 177<sup>th</sup> edition of <em>Log Buffer</em>, the weekly review of database blogs.  It was another week heavy with technical posts, so let&#8217;s waste no time, and get it all started with&nbsp;.&nbsp;.&nbsp;.&nbsp;</p>
<h3>PostgreSQL</h3>
<p><a href="http://people.planetpostgresql.org/dfetter"><strong>David Fetter</strong></a> shares his recipe for <a href="http://people.planetpostgresql.org/dfetter/index.php?/archives/48-Adding-Only-New-Rows-INSERT-IGNORE,-Done-Right.html">adding only new rows</a>: &#8220;Let&#8217;s say you have a table and a data set, and would like to add only those rows in your data set that aren&#8217;t already in the table. There are hard ways, but here&#8217;s an easy one.&#8221;</p>
<p><strong>Simon Riggs</strong>, the <a href="http://database-explorer.blogspot.com">Database Explorer</a>, offers his thoughts on <a href="http://database-explorer.blogspot.com/2010/02/parallel-query-1.html">parallel query</a> in Postgres: &#8220;I&#8217;m disappointed we&#8217;ve not made much progress with parallel operations and partitioning in core Postgres in last few releases. Recent Greenplum results show we have much work to do in improving things.&#8221;</p>
<p><a href="http://blog.endpoint.com"><strong>David Christensen</strong></a> shares a <a href="http://blog.endpoint.com/2010/01/postgresql-tip-using-pgdump-to-extract.html">PostgreSQL tip: using pg_dump to extract a single function</a>.</p>
<p><a href="http://postgresql.blogg.se"><strong>Roppert Kalmar</strong></a> shares a screenshot of the new <a href="http://postgresql.blogg.se/2010/february/sun-oracle-postgresql.html">Sun Oracle PostgreSQL</a>.  That doesn&#8217;t even sound right, does it?</p>
<p><span></span></p>
<h3>Oracle</h3>
<p>Let&#8217;s begin with <a href="http://prodlife.wordpress.com"><strong>Chen Shapira</strong></a>, since she is so <a href="http://prodlife.wordpress.com/2010/02/04/excited-about-nocoug-winter-conference">excited about the NoCOUG Winter Conference</a>, and here gives a quick rundown of what attendees can expect to see.</p>
<p>Contrariwise (or not), <a href="http://iggyfernandez.wordpress.com"><strong>Iggy Fernandez</strong></a> offers <a href="http://iggyfernandez.wordpress.com/2010/01/30/advertisement-five-reasons-not-to-attend-a-nocoug-conference-in-2010">five reasons <em>not</em> to attend a NoCOUG conference in 2010</a>.  &#8220;Most Oracle professionals will benefit a lot from attending a NoCOUG conference in 2010. However, the following categories will not benefit much: &nbsp;.&nbsp;.&nbsp;.&nbsp; Those Oracle professionals who believe that Oracle’s goal in buying Sun is to replace Oracle Database with MySQL. This is probably a very small group&nbsp;.&nbsp;.&nbsp;.&nbsp;&#8221;</p>
<p><strong>Uwe Hesse</strong>, the <a href="http://uhesse.wordpress.com">Oracle Instructor</a> and his readers share a discussion on <a href="http://uhesse.wordpress.com/2010/02/03/sharing-read-only-tablespaces-between-databases">sharing READ ONLY Tablespaces between databases</a>.  Uwe says, &#8220;&nbsp;.&nbsp;.&nbsp;.&nbsp;the question was raised, whether it is possible to use the same READ ONLY Tablespace in multiple Databases. At first glance, I thought that this should of course be possible, though the answers where somewhat discouraging. So I have done a quick test to prove it&nbsp;.&nbsp;.&nbsp;.&nbsp;&#8221;</p>
<p><strong>Krishna Manoharan</strong> of <a href="http://dsstos.blogspot.com">Performance Engineering and Capacity Planning</a> steps up with an item on <a href="http://dsstos.blogspot.com/2010/01/understanding-cpu-time-as-oracle-wait.html">understanding CPU time as an Oracle Wait event</a>.  Krishna pursues the question, &#8220;[What] if the stats from the system show that CPU Utilization (% Util and Run queue) are well within thresholds and show plenty of available capacity, but Oracle continues to report CPU time as a Top 5 wait event?&#8221;</p>
<p><a href="http://hoopercharles.wordpress.com"><strong>Charles Hooper</strong></a> grapples the question, <a href="http://hoopercharles.wordpress.com/2010/01/29/explain-plan-which-plan-is-better">Which Plan is Better?</a> Charles writes, &#8220;A recent post appeared in the OTN forums that indirectly asked the question: which execution plan is better? &nbsp;.&nbsp;.&nbsp;.&nbsp; If you are attempting to conclude which plan is faster/better based on the estimates in [a] first plan and an altered plan with a hinted cardinality estimate, you might be setting yourself up for failure.&#8221;</p>
<p>&#8220;Seems like all I ever write about these days is SQL Profiles,&#8221; writes <a href="http://kerryosborne.oracle-guy.com"><strong>Kerry Osborne</strong></a>.  &#8220;I do other stuff, honest! It just seems like getting Oracle to do what you want when you can’t touch the code is the closest thing to &#8216;Magic&#8217; that DBAs get to do.&#8221; Here&#8217;s Kerry&#8217;s post on <a href="http://kerryosborne.oracle-guy.com/2010/02/single-hint-sql-profiles">single-hint SQL profiles</a>, inspired by a discussion with <a href="http://jonathanlewis.wordpress.com"><strong>Jonathan Lewis</strong></a>.</p>
<p>And now here is Jonathan with a post on SQL Server. &nbsp;.&nbsp;.&nbsp;.&nbsp; Wait a minute&#8211;what the?!</p>
<h3>SQL Server</h3>
<p>Ahem. And now here is <a href="http://jonathanlewis.wordpress.com/2010/02/04/sql-server/">Jonathan Lewis with a post on SQL Server</a>.  Yes, Jonathan Lewis, famous Oracle guy.  &#8220;A few days ago,&#8221; Jonathan writes, &#8220;I did a presentation on SQL Server. &nbsp;.&nbsp;.&nbsp;.&nbsp; The title was &#8216;What the Enterprise needs in an RDBMS&#8217;&nbsp;.&nbsp;.&nbsp;.&nbsp;and the presentation was about whether or not you could find everything you needed in SQL Server 2008, where you’d have to look in the manuals, and supplementary questions you’d have to ask.&#8221;</p>
<p><a href="http://blogs.msdn.com/buckwoody"><strong>Buck Woody</strong></a> also has been, as it were, treading the boards: &#8220;I give series of classes and presentations on Data Design. I say &#8216;data&#8217; design instead of &#8216;database&#8217; design because we should consider more than just the database. &nbsp;.&nbsp;.&nbsp;.&nbsp; Here are the links I use in that presentation. Although this isn&#8217;t a comprehensive <a href="http://blogs.msdn.com/buckwoody/archive/2010/02/02/data-design.aspx">list of Data Design topics</a>, I’ll visit this topic from time to time so you may want to bookmark this page in your favorites[.]&#8221;</p>
<p><a href="http://sqlblog.com/blogs/merrill_aldrich"><strong>Merrill Aldrich</strong></a> admonishes, <a href="http://sqlblog.com/blogs/merrill_aldrich/archive/2010/02/01/don-t-get-burned-by-replication-of-sql-server-files.aspx">don&#8217;t get burned by replication of SQL Server files</a>: &#8220;&nbsp;.&nbsp;.&nbsp;.&nbsp;if you try to use file system replication (robocopy, xcopy, repli-whatever) to maintain a DR server from your production SQL Server, you might be in for a nasty surprise.&#8221;</p>
<p><a href="http://sqlblog.com/blogs/buck_woody"><strong>Buck Woody</strong></a> relays more nastiness in his post, <a href="http://sqlblog.com/blogs/buck_woody/archive/2010/02/01/transparent-data-encryption-and-the-latest-data-breach.aspx">Transparent Data Encryption and the Latest Data Breach</a>: &#8220;Well, It’s happened again. Hundreds of thousands of private records were stolen from a database. This one, however, was different. No one stole any passwords, no one did any social engineering, nothing was captured in-line. No, this one was accomplished by stealing the actual hard drives themselves!&#8221; </p>
<p>One way to circumvent this&#8211;no hard drives! But wait&#8211;before you send them all to the kilns, <a href="http://sqlblog.com/blogs/aaron_bertrand"><strong>Aaron Bertrand</strong></a> says, <a href="http://sqlblog.com/blogs/aaron_bertrand/archive/2010/02/01/your-laptop-may-be-ready-for-ssds-but-are-your-sql-servers.aspx">your laptop may be ready for SSDs, but are your SQL Servers?</a> &#8220;I am not trying to be Debbie Downer here,&#8221; he explains,&#8221; &#8230; SSDs sound great&nbsp;.&nbsp;.&nbsp;.&nbsp; But right now, if you are looking at expanding or upgrading your I/O under SQL Server, I&#8217;d give the vendors some time to shake off these early jitters.&#8221; </p>
<p>Here&#8217;s <strong>Thomas LaRock</strong>, <a href="http://dbasurvivor.com">DBA Survivor</a>, with a <a href="http://dbasurvivor.com/?p=29">Name That Caption Contest</a>. The deal is: &#8220;The person who provides the best caption will win a copy of my book,&#8221; <em>DBA Survivor</em>, &#8220;and I will figure out a way to incorporate your caption into the main page.&#8221;</p>
<h3>MySQL</h3>
<p>On <a href="http://serge.frezefond.free.fr">Serge&#8217;s blog</a> appears a useful item on <a href="http://serge.frezefond.free.fr/?p=286">using UNIX_TIMESTAMP as a partitioning function for MySQL 5.1.43</a></p>
<p><strong>Falko Timme</strong> shares <a href="http://www.howtoforge.com/how-to-back-up-mysql-databases-with-mylvmbackup-on-debian-lenny">How To Back Up MySQL Databases With mylvmbackup On Debian Lenny</a> on <a href="http://www.howtoforge.com">HowtoForge</a>.</p>
<p><a href="http://blog.wl0.org">Simon Mudd</a> has some <a href="http://blog.wl0.org/2010/01/further-thoughts-on-mysql-upgrades/">further thoughts on mysql upgrades</a>.</p>
<p>From atop his <a href="http://mysqlsoapbox.blogspot.com">MySQL Soapbox</a>, <strong>Lachlan Mulcahy</strong> address the matter of a <a href="http://mysqlsoapbox.blogspot.com/2010/02/replicate-do-db-gotcha.html">replicate-do-db gotcha</a>, discovered lurking in the config file.</p>
<p>Gotcha again. <a href="http://mysqldba.blogspot.com/"><strong>Dathan Vance Pattishall</strong></a> says, &#8220;INNODB has some irritating gotchas that makes disk space management hard. In 2002ish INNODB, added innodb_file_per_table to get around allot of these issues, but it does not fix everything.&#8221;  The post is <a href="http://mysqldba.blogspot.com/2010/02/innodbfilepertable-shrinking-table.html">innodb_file_per_table, shrinking table spaces and the data dictionary</a>.</p>
<p>On <a href="http://explainextended.com"><strong>EXPLAIN EXTENDED</strong></a>, Quassnoi examines some details of <a href="http://explainextended.com/2010/02/01/join-on-overlapping-date-ranges/">join on overlapping date ranges</a> in answering the question, &#8220;Is there any way to optimize the query for overlapping ranges in MySQL if both ranges are dynamic?&#8221;</p>
<p>Last, <a href="http://infinidb.org/infinidb-blog">The InfiniDB Team Blog</a> announces that <a href="http://infinidb.org/infinidb-blog/infinidb-10-is-now-available.html">InfiniDB 1.0 is Now Available!</a></p>
<p>That&#8217;s all there&#8217;s room and time for.  Let&#8217;s hear your favourite DB blogs from this week, and we&#8217;ll see each other again in the next one.  Till then!</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23352&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23352&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Fri, 05 Feb 2010 18:23:49 +0000</pubDate>
    <dc:creator>Dave Edwards</dc:creator>
    <category>Log Buffer</category>
    <category>MySQL</category>
    <category>Oracle</category>
    <category>PostgreSQL</category>
    <category>Pythian</category>
    <category>SQL Server</category>
    <category>Technical Blog</category>
  </item>

  <item>
    <title>451 CAOS Links 2010.02.06</title>
    <guid isPermaLink="false">http://blogs.the451group.com/opensource/?p=1342</guid>
    <link>http://feedproxy.google.com/~r/451opensource/~3/wcycXDullNM/</link>
    <description>Matt Asay joins Canonical. Paula Hunter joins the CodePlex Foundation. And more.
Follow 451 CAOS Links live @caostheory on Twitter and Identi.ca
&amp;#8220;Tracking the open source news wires, so you don&amp;#8217;t have to.&amp;#8221;
# Matt Asay joined Canonical as chief operating officer. 
# Paula Hunter was named executive director of the CodePlex Foundation.  
# Actuate recorded $6.5m in BIRT-related business for Q4; annual BIRT-related business of $18.2m up 18%. 
# Glyn Moody outlined The Great Oracle Experiment. 
# The Symbian Foundation confirmed the 100% open source Symbian platform.
# Zarafa&amp;#8217;s Collaboration Platform is to be packaged for Ubuntu and Fedora.  
# Jaspersoft 3.7 Community release is now available. 
# Oracle updated its Oracle Enterprise Pack plug-ins for Eclipse. 
# CBR published an interview with Novell CEO on the company&amp;#8217;s new strategy. 
# Nuxeo released its open source Digital Asset Management offering Nuxeo DAM.  
# Oracle is discontinuing access to Project Kenai, Sun&amp;#8217;s open source project-hosting site. 
# Jonathan Schwartz explained his departure from Sun: &amp;#8220;Financial crisis/Stalled too many customers/CEO no more.&amp;#8221; 
# Funambol released version 8.5 of its mobile data sync and collaboration platform.  
# Sauce Labs added a number of Python and Jython core committers to its team.  
# OSOR.eu is offering public administrations access to more than two thousand free and open source applications.  
# INSIDE Contactless is making its Open NFC protocol stack available using the Apache License.  
# Bradley M Kuhn provided his views on copyright assignment.  
# Black Duck Software was awarded a patent for automatically resolving software license obligations and conflicts. 
# Greg Kroah-Hartman published Android and the Linux kernel community.
# Monty Widenius&amp;#8217;s view on what to expect next from Oracle-MySQL. Parts one and two.
# Facebook released HipHop, a source code transformer for PHP.
</description>
    <content:encoded><![CDATA[<p>Matt Asay joins Canonical. Paula Hunter joins the CodePlex Foundation. And more.</p>
<p>Follow 451 CAOS Links live @caostheory on <a href="http://twitter.com/caostheory">Twitter</a> and <a href="http://identi.ca/caostheory">Identi.ca</a><br />
<em>&#8220;Tracking the open source news wires, so you don&#8217;t have to.&#8221;</em></p>
<p># Matt Asay <a href="http://bit.ly/bxVpyD">joined</a> Canonical as chief operating officer. </p>
<p># Paula Hunter was <a href="http://bit.ly/aQcLEC">named</a> executive director of the CodePlex Foundation.  </p>
<p># Actuate <a href="http://bit.ly/dfr26I">recorded</a> $6.5m in BIRT-related business for Q4; annual BIRT-related business of $18.2m up 18%. </p>
<p># Glyn Moody <a href="http://bit.ly/b5udNy">outlined</a> The Great Oracle Experiment. </p>
<p># The Symbian Foundation <a href="http://bit.ly/bvgf0y">confirmed</a> the 100% open source Symbian platform.</p>
<p># Zarafa&#8217;s Collaboration Platform is to be <a href="http://bit.ly/cy65Gx">packaged</a> for Ubuntu and Fedora.  </p>
<p># Jaspersoft 3.7 Community release is now <a href="http://bit.ly/axyJYR">available</a>. </p>
<p># Oracle <a href="http://bit.ly/bi3BDL">updated</a> its Oracle Enterprise Pack plug-ins for Eclipse. </p>
<p># CBR <a href="http://bit.ly/bhThr7">published</a> an interview with Novell CEO on the company&#8217;s new strategy. </p>
<p># Nuxeo <a href="http://bit.ly/bTPchk">released</a> its open source Digital Asset Management offering Nuxeo DAM.  </p>
<p># Oracle is <a href="http://bit.ly/9A2aol">discontinuing</a> access to Project Kenai, Sun&#8217;s open source project-hosting site. </p>
<p># Jonathan Schwartz <a href="http://twitter.com/OpenJonathan/status/8620937722">explained</a> his departure from Sun: &#8220;Financial crisis/Stalled too many customers/CEO no more.&#8221; </p>
<p># Funambol <a href="http://bit.ly/azqOzd">released</a> version 8.5 of its mobile data sync and collaboration platform.  </p>
<p># Sauce Labs <a href="http://bit.ly/c6wldJ">added</a> a number of Python and Jython core committers to its team.  </p>
<p># OSOR.eu is <a href="http://bit.ly/cK0J5v">offering</a> public administrations access to more than two thousand free and open source applications.  </p>
<p># INSIDE Contactless is making its Open NFC protocol stack <a href="http://bit.ly/cimX3l">available</a> using the Apache License.  </p>
<p># Bradley M Kuhn <a href="http://bit.ly/cKUHbO">provided</a> his views on copyright assignment.  </p>
<p># Black Duck Software was <a href="http://bit.ly/8XQ4Ru">awarded</a> a patent for automatically resolving software license obligations and conflicts. </p>
<p># Greg Kroah-Hartman <a href="http://bit.ly/c58R8I">published</a> Android and the Linux kernel community.</p>
<p># Monty Widenius&#8217;s view on what to expect next from Oracle-MySQL. Parts <a href="http://bit.ly/auAueI">one</a> and <a href="http://bit.ly/aGPAyN">two</a>.</p>
<p># Facebook <a href="http://bit.ly/bSiAkS">released</a> HipHop, a source code transformer for PHP.</p>
<img src="http://feeds.feedburner.com/~r/451opensource/~4/wcycXDullNM" height="1" width="1" /><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23351&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23351&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Fri, 05 Feb 2010 17:23:55 +0000</pubDate>
    <dc:creator>The 451 Group</dc:creator>
    <category>Links</category>
    <category>451 group</category>
    <category>451caostheory</category>
    <category>451group</category>
    <category>actuate</category>
    <category>android</category>
    <category>birt</category>
    <category>black duck</category>
    <category>bradley m Kuhn</category>
    <category>canonical</category>
    <category>caostheory</category>
    <category>codeplex</category>
    <category>copyright assignment</category>
    <category>digital asset management</category>
    <category>eclipse</category>
    <category>facebook</category>
    <category>fedora</category>
    <category>funambol</category>
    <category>haiku</category>
    <category>INside contactless</category>
    <category>jaspersoft</category>
    <category>jonathan schwartz</category>
    <category>jython</category>
  </item>

  <item>
    <title>Summary of recent MySQL releases</title>
    <guid isPermaLink="false">http://www.lenzg.net/archives/287-guid.html</guid>
    <link>http://www.lenzg.net/archives/287-Summary-of-recent-MySQL-releases.html</link>
    <description>Even though things have been a tad bit turbulent around here in the recent weeks, our engineers did not rest and churned out an impressive number of updates and new releases of the MySQL Server and related products.

Here's a quick summary of what we released this year so far (in chronological order):


MySQL Server 5.1.42
MySQL Server 5.5.1 Milestone 2 aka &quot;Betony&quot;
MySQL Workbench 5.2.14 Beta 4
MySQL Connector/J 5.1.11
MySQL Proxy 0.8.0
MySQL Workbench 5.2.15 Beta 5
MySQL Server 5.0.90
MySQL Server 5.1.43
MySQL Cluster 6.3.31
MySQL Cluster 7.0.11
MySQL Cluster 7.1.1-beta


Kudos to the developers! Source and binaries can be downloaded from the usual place. Enjoy! We welcome your feedback and bug reports.</description>
    <content:encoded><![CDATA[<p>Even though things have been <a href="http://www.oracle.com/us/corporate/press/044428">a tad bit turbulent</a> around here in the recent weeks, our engineers did not rest and churned out an impressive number of updates and new releases of the MySQL Server and related products.</p>

<p>Here's a quick summary of what we released this year so far (in chronological order):

<ul>
<li><a href="http://lists.mysql.com/announce/654">MySQL Server 5.1.42</a></li>
<li><a href="http://lists.mysql.com/announce/655">MySQL Server 5.5.1 Milestone 2 aka "Betony"</a></li>
<li><a href="http://lists.mysql.com/announce/656">MySQL Workbench 5.2.14 Beta 4</a></li>
<li><a href="http://lists.mysql.com/announce/657">MySQL Connector/J 5.1.11</a></li>
<li><a href="http://jan.kneschke.de/2010/1/26/mysql-proxy-0-8-0-release">MySQL Proxy 0.8.0</a></li>
<li><a href="http://lists.mysql.com/announce/658">MySQL Workbench 5.2.15 Beta 5</a></li>
<li><a href="http://lists.mysql.com/announce/659">MySQL Server 5.0.90</a></li>
<li><a href="http://lists.mysql.com/announce/660">MySQL Server 5.1.43</a></li>
<li><a href="http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-news-5-1-41-ndb-6-3-31.html">MySQL Cluster 6.3.31</a></li>
<li><a href="http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-news-5-1-41-ndb-7-0-11.html">MySQL Cluster 7.0.11</a></li>
<li><a href="http://lists.mysql.com/announce/661">MySQL Cluster 7.1.1-beta</a></li>
</ul>

Kudos to the developers! Source and binaries can be downloaded from <a href="http://dev.mysql.com/downloads/">the usual place</a>. Enjoy! We welcome your feedback and <a href="http://bugs.mysql.com/">bug reports</a>.</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23350&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23350&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Fri, 05 Feb 2010 16:38:58 +0000</pubDate>
    <dc:creator>Lenz Grimmer</dc:creator>
    <category>MySQL</category>
    <category>OSS</category>
  </item>

  <item>
    <title>MySQL Cluster Uses</title>
    <guid isPermaLink="false">http://blogs.sun.com/LinuxJedi/entry/mysql_cluster_uses</guid>
    <link>http://blogs.sun.com/LinuxJedi/entry/mysql_cluster_uses</link>
    <description>MySQL Cluster can be used as a general purpose transactional storage engine, but if you convert all your InnoDB tables to it and connect your application straight to it you may not see the performance you were hoping for.&amp;nbsp; This is because MySQL Cluster was originally designed for real-time telecommunications applications (such as RADIUS servers).&amp;nbsp; It has slowly been modified to become more general purpose and improvements are being made every day but there are still some performance considerations which go with this.&amp;nbsp; In some cases tweaking your schema and/or queries can help performance dramatically, so I shall try and outline some of things to watch for here. 
  Indexes 
  The fastest type of lookup you can do in Cluster is a primary key equality lookup (ie. SELECT * FROM table WHERE pkey = 2).&amp;nbsp; This is because the primary key is stored as a hash index as well as an optional ordered index.&amp;nbsp; This hash index is used to partition the data between the data nodes.&amp;nbsp; MySQL is smart enough to process the hash and go directly to the data node with the data. 
  When running a query which uses an ordered index (or unique hash index) the query is sent to the Transaction Coordinator in one node which then asks the Local Query Handlers in one or more nodes to return rows that match this query.&amp;nbsp; The Transaction Coordinator is aware of the indexes so knows which nodes to ask to process the query.&amp;nbsp; This in general is slightly slower and can actually perform worse for ordered indexes as more data nodes are added because more Local Query Handlers need to be contacted. 
  Finally if the query is a table scan the Transaction Coordinator must ask all the Local Query Handlers to search for the data.&amp;nbsp; This is much slower. 
  Joins 
  Joins in MySQL Cluster do not currently perform well.&amp;nbsp; Internally the second table must be queried to match every row returned by the first table, this can mean a lot of network traffic which can slow things down.&amp;nbsp; There is work in progress to improve this by pushing the join condition down into the data nodes, this will give a massive performance increase when using joins.&amp;nbsp; More information about this (called SPJ) can be seen in Jonas' blog. 
  BLOBs and TEXT 
   As I have already mentioned in this blog BLOBs (and TEXT) columns require a separate table to hold most of the BLOB data.&amp;nbsp; This can cause performance problems and locking issues so if possible VARCHAR or VARBINARY should be used instead. 
  Transactions 
  MySQL Cluster currently only supports READ COMMITTED transaction isolation level so if you are used to REPEATABLE READ that you typically get from engines such as InnoDB you may want to check that this will not cause problems with your application. 
  In general we recommend transactions should be short, limited to just a few queries.&amp;nbsp; MySQL Cluster can give temporary errors for a number of reasons, these do not happen often but will mean that the entire transaction will need to be started again.&amp;nbsp; For many applications it will be very hard to replay a transaction which has been running for a whole hour.&amp;nbsp; Also committing very large transactions can lead to GCP Stop.</description>
    <content:encoded><![CDATA[<p>MySQL Cluster can be used as a general purpose transactional storage engine, but if you convert all your InnoDB tables to it and connect your application straight to it you may not see the performance you were hoping for.&nbsp; This is because MySQL Cluster was originally designed for real-time telecommunications applications (such as RADIUS servers).&nbsp; It has slowly been modified to become more general purpose and improvements are being made every day but there are still some performance considerations which go with this.&nbsp; In some cases tweaking your schema and/or queries can help performance dramatically, so I shall try and outline some of things to watch for here.</p> 
  <h2>Indexes</h2> 
  <p>The fastest type of lookup you can do in Cluster is a primary key equality lookup (ie. SELECT * FROM table WHERE pkey = 2).&nbsp; This is because the primary key is stored as a hash index as well as an optional ordered index.&nbsp; This hash index is used to partition the data between the data nodes.&nbsp; MySQL is smart enough to process the hash and go directly to the data node with the data.</p> 
  <p>When running a query which uses an ordered index (or unique hash index) the query is sent to the Transaction Coordinator in one node which then asks the Local Query Handlers in one or more nodes to return rows that match this query.&nbsp; The Transaction Coordinator is aware of the indexes so knows which nodes to ask to process the query.&nbsp; This in general is slightly slower and can actually perform worse for ordered indexes as more data nodes are added because more Local Query Handlers need to be contacted.</p> 
  <p>Finally if the query is a table scan the Transaction Coordinator must ask all the Local Query Handlers to search for the data.&nbsp; This is much slower.</p> 
  <h2>Joins</h2> 
  <p>Joins in MySQL Cluster do not currently perform well.&nbsp; Internally the second table must be queried to match every row returned by the first table, this can mean a lot of network traffic which can slow things down.&nbsp; There is work in progress to improve this by pushing the join condition down into the data nodes, this will give a massive performance increase when using joins.&nbsp; More information about this (called SPJ) can be seen in <a target="_blank" href="http://jonasoreland.blogspot.com/">Jonas' blog</a>.</p> 
  <h2>BLOBs and TEXT<br /></h2> 
  <p> As I have already <a target="_blank" href="http://blogs.sun.com/LinuxJedi/entry/blobs_in_mysql_cluster">mentioned in this blog</a> BLOBs (and TEXT) columns require a separate table to hold most of the BLOB data.&nbsp; This can cause performance problems and locking issues so if possible VARCHAR or VARBINARY should be used instead.<br /></p> 
  <h2>Transactions</h2> 
  <p>MySQL Cluster currently only supports READ COMMITTED <a target="_blank" href="http://dev.mysql.com/doc/refman/5.1/en/set-transaction.html">transaction isolation level</a> so if you are used to REPEATABLE READ that you typically get from engines such as InnoDB you may want to check that this will not cause problems with your application.</p> 
  <p>In general we recommend transactions should be short, limited to just a few queries.&nbsp; MySQL Cluster can give temporary errors for a number of reasons, these do not happen often but will mean that the entire transaction will need to be started again.&nbsp; For many applications it will be very hard to replay a transaction which has been running for a whole hour.&nbsp; Also committing very large transactions can lead to <a target="_blank" href="http://blogs.sun.com/LinuxJedi/entry/mysql_cluster_gcp_stop">GCP Stop</a>.<br /></p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23348&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23348&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Fri, 05 Feb 2010 13:56:13 +0000</pubDate>
    <dc:creator>Andrew Hutchings</dc:creator>
    <category>MySQL</category>
    <category>cluster</category>
    <category>mysql</category>
  </item>

  <item>
    <title>MySQL Developers Room at FOSDEM 2010</title>
    <guid isPermaLink="false">tag:blogger.com,1999:blog-16959946.post-3406920118223355009</guid>
    <link>http://datacharmer.blogspot.com/2010/02/mysql-developers-room-at-fosdem-2010.html</link>
    <description>I am in Brussels, waiting to attend FOSDEM 2010, one of the biggest open source gatherings in Europe, taking place this weekend in Brussels.On Sunday, there is a Developers Room for MySQL and Friends, with 14 talks from open source professionals coming from Europe and North America.The novelty of this round of talks is that thy will be 20 minutes long, rather than 1 hour. This will force all presenters to be more cautious about their timing, and to concentrate their talks on the essential. Even the experienced ones, who have given the same talk several times, will have to make an effort to come to the point in less time. The idea cam from reading Scott Berkun's book, Confessions of a public speaker, where he argues successfully on the usefulness of short lectures. It's going to be interesting! The hosts of the Developers Room are Ronald Bradford and myself, but nothing of this could have happened without the excellent preparatory work done by Lenz Grimmer, who can't be here to enjoy the results of his organization, because he must stay home, waiting for his second child to come any moment. Thanks, Lenz, and good luck! In addition to the DevRoom, I will have a lightning talk on an unusual (for my public speaking record) topic: Blaming the unknown: a positive approach to technology. If you happen to be around, come see it. It's fun, I promise you, and also informative, or so I hope.</description>
    <content:encoded><![CDATA[<table border="0"><tr><td><br /><a href="http://www.fosdem.org"><img src="http://www.fosdem.org/promo/going-to" title="FOSDEM 2010" alt="I'm going to FOSDEM, the Free and Open Source Software Developers' European Meeting" /></a><br /></td><td><br />I am in Brussels, waiting to attend <a href="http://www.fosdem.org">FOSDEM 2010</a>, one of the biggest open source gatherings in Europe, taking place this weekend in Brussels.<br />On Sunday, there is a <a href="http://forge.mysql.com/wiki/FOSDEM_2010_Developer_Room">Developers Room for MySQL and Friends</a>, with 14 talks from open source professionals coming from Europe and North America.<br /></td></tr></table><br />The novelty of this round of talks is that thy will be 20 minutes long, rather than 1 hour. This will force all presenters to be more cautious about their timing, and to concentrate their talks on the essential. Even the experienced ones, who have given the same talk several times, will have to make an effort to come to the point in less time. The idea cam from reading <a href="http://www.scottberkun.com/">Scott Berkun</a>'s book, <i>Confessions of a public speaker</i>, where he argues successfully on the usefulness of short lectures. It's going to be interesting! <br />The hosts of the Developers Room are <a href="http://42sql.com">Ronald Bradford</a> and myself, but nothing of this could have happened without the excellent preparatory work done by <a href="http://lenzg.net">Lenz Grimmer</a>, who can't be here to enjoy the results of his organization, because he must stay home, waiting for his second child to come any moment. Thanks, Lenz, and good luck! <br />In addition to the DevRoom, I will have a <a href="http://www.fosdem.org/2010/schedule/rooms/ferrer">lightning talk</a> on an unusual (for my public speaking record) topic: <i>Blaming the unknown: a positive approach to technology</i>. If you happen to be around, come see it. It's fun, I promise you, and also informative, or so I hope.<div><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/16959946-3406920118223355009?l=datacharmer.blogspot.com" alt="" /></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23347&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23347&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Fri, 05 Feb 2010 13:54:00 +0000</pubDate>
    <dc:creator>Giuseppe Maxia</dc:creator>
    <category>presentations</category>
    <category>conference</category>
    <category>mysql</category>
    <category>community</category>
    <category>fosdem</category>
    <category>talk</category>
  </item>

  <item>
    <title>MariaDB 5.1.42 released!</title>
    <guid isPermaLink="false">http://www.bytebot.net/blog/?p=1665</guid>
    <link>http://feedproxy.google.com/~r/ColinCharles/~3/rVQ0II8mxLE/mariadb-5-1-42-released</link>
    <description>Dear MariaDB users,
MariaDB 5.1.42, a new branch of the MySQL database which includes all major open source storage engines, myriad bug fixes, and many community patches, has been released. We are very proud to have made our first final release, and we encourage you to test it out and use it on your systems. 
For an overview of what&amp;#8217;s new in MariaDB 5.1.42, please check out the release notes.
For information on installing MariaDB 5.1.42 on new servers or upgrading to MariaDB 5.1.42 from previous releases, please check out the installation guide.
MariaDB is available in source and binary form for a variety of platforms and is available from the download pages.
It is also our pleasure to announce that we have a partnership with Webyog to offer their tools for trial and at a discounted rate if purchased within 30 days. Find out more at: Download &amp;#8211; SQLyog MySQL Fronted, MONyog MySQL Monitoring Tool or via the software partner downloads.
We welcome and appreciate your feedback, bug reports, bug fixes, patches, and participation on our mailing list. Find out more about working with the community.
Enjoy!


Related posts:MySQL on Leopard OS X 10.5 PrefPane fixed!
MySQL with yaSSL vulnerability
MySQL Connector/PHP for MySQL 5.0.24 and PHP 5.1.5 released



   
</description>
    <content:encoded><![CDATA[<p>Dear MariaDB users,</p>
<p>MariaDB 5.1.42, a new branch of the MySQL database which includes all major open source storage engines, myriad bug fixes, and many community patches, has been released. We are very proud to have made our first final release, and we encourage you to test it out and use it on your systems. </p>
<p>For an overview of what&#8217;s new in MariaDB 5.1.42, please check out the <a href="http://askmonty.org/wiki/index.php/Manual%3AMariaDB_5.1.42_Release_Notes">release notes.</a></p>
<p>For information on installing MariaDB 5.1.42 on new servers or upgrading to MariaDB 5.1.42 from previous releases, please <a href="http://askmonty.org/wiki/index.php/Manual%3AInstallation">check out the installation guide</a>.</p>
<p>MariaDB is available in source and binary form for a variety of platforms and is available from the <a href="http://askmonty.org/wiki/index.php/MariaDB%3ADownload%3AMariaDB_5.1.42">download pages</a>.</p>
<p>It is also our pleasure to announce that we have a partnership with Webyog to offer their tools for trial and at a discounted rate if purchased within 30 days. Find out more at: <a href="http://askmonty.org/downloads/links/webyog">Download &#8211; SQLyog MySQL Fronted, MONyog MySQL Monitoring Tool</a> or via the <a href="http://askmonty.org/wiki/index.php/MariaDB%3ADownload#Software_Partner_Downloads">software partner downloads</a>.</p>
<p>We welcome and appreciate your feedback, bug reports, bug fixes, patches, and participation on our mailing list. Find out more <a href="http://askmonty.org/wiki/index.php/MariaDB#How_can_I_participate_in_the_development_of_MariaDB.3F">about working with the community</a>.</p>
<p>Enjoy!</p>


<p>Related posts:<ol><li><a href="http://www.bytebot.net/blog/archives/2008/04/06/mysql-on-leopard-os-x-105-prefpane-fixed" rel="bookmark" title="Permanent Link: MySQL on Leopard OS X 10.5 PrefPane fixed!">MySQL on Leopard OS X 10.5 PrefPane fixed!</a></li>
<li><a href="http://www.bytebot.net/blog/archives/2010/01/19/mysql-with-yassl-vulnerability" rel="bookmark" title="Permanent Link: MySQL with yaSSL vulnerability">MySQL with yaSSL vulnerability</a></li>
<li><a href="http://www.bytebot.net/blog/archives/2006/08/22/mysql-connectorphp-for-mysql-5024-and-php-515-released" rel="bookmark" title="Permanent Link: MySQL Connector/PHP for MySQL 5.0.24 and PHP 5.1.5 released">MySQL Connector/PHP for MySQL 5.0.24 and PHP 5.1.5 released</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/4mp-MNEj6_0XyolFNk6BuI3sgpQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/4mp-MNEj6_0XyolFNk6BuI3sgpQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/4mp-MNEj6_0XyolFNk6BuI3sgpQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/4mp-MNEj6_0XyolFNk6BuI3sgpQ/1/di" border="0" ismap="true"></img></a></p><div>
<a href="http://feeds.feedburner.com/~ff/ColinCharles?a=rVQ0II8mxLE:su0qLCccCRs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ColinCharles?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ColinCharles?a=rVQ0II8mxLE:su0qLCccCRs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ColinCharles?i=rVQ0II8mxLE:su0qLCccCRs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ColinCharles?a=rVQ0II8mxLE:su0qLCccCRs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ColinCharles?i=rVQ0II8mxLE:su0qLCccCRs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ColinCharles?a=rVQ0II8mxLE:su0qLCccCRs:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ColinCharles?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ColinCharles/~4/rVQ0II8mxLE" height="1" width="1" /><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23345&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23345&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Fri, 05 Feb 2010 08:46:49 +0000</pubDate>
    <dc:creator>Colin Charles</dc:creator>
    <category>MariaDB</category>
    <category>MySQL</category>
    <category>MariaDB 5.1.42</category>
    <category>MONyog</category>
    <category>SQLyog</category>
  </item>

  <item>
    <title>InfiniDB gets the release process right</title>
    <guid isPermaLink="false">http://www.xaprb.com/blog/?p=1607</guid>
    <link>http://www.xaprb.com/blog/2010/02/04/infinidb-gets-the-release-process-right/</link>
    <description>InfiniDB has a sensible Enterprise/Community release process, which seems similar to what I suggested for MySQL.  Its simplicity also stands in stark contrast to MySQL&amp;#8217;s new release policy, which is hard to understand and has been confusing people.

Related posts:Thank you for the MySQL 5.4 Community Release MySQL 5.4 How to find per-process I/O statistics on Linux Newer LinuMySQL Enterprise/Community split could be renewed under Oracle One of MyS
Related posts brought to you by Yet Another Related Posts Plugin.</description>
    <content:encoded><![CDATA[<p>InfiniDB has <a href="http://infinidb.org/infinidb-blog/care-and-feeding-of-infinidb.html">a sensible Enterprise/Community release process</a>, which seems similar to what <a href="http://www.xaprb.com/blog/2007/08/12/what-would-make-me-buy-mysql-enterprise/">I suggested for MySQL</a>.  Its simplicity also stands in stark contrast to <a href="http://forge.mysql.com/wiki/Development_Cycle">MySQL&#8217;s new release policy</a>, which is hard to understand and has been <a href="http://antbits.blogspot.com/2009/12/version-number-5-point-wtf.html">confusing people</a>.</p>

<p>Related posts:<ol><li><a href="http://www.xaprb.com/blog/2009/04/25/thank-you-for-the-mysql-54-community-release/" rel="bookmark" title="Permanent Link: Thank you for the MySQL 5.4 Community Release">Thank you for the MySQL 5.4 Community Release</a> <small>MySQL 5.4 </small></li><li><a href="http://www.xaprb.com/blog/2009/08/23/how-to-find-per-process-io-statistics-on-linux/" rel="bookmark" title="Permanent Link: How to find per-process I/O statistics on Linux">How to find per-process I/O statistics on Linux</a> <small>Newer Linu</small></li><li><a href="http://www.xaprb.com/blog/2009/12/14/mysql-enterprisecommunity-split-could-be-renewed-under-oracle/" rel="bookmark" title="Permanent Link: MySQL Enterprise/Community split could be renewed under Oracle">MySQL Enterprise/Community split could be renewed under Oracle</a> <small>One of MyS</small></li></ol></p>
<p>Related posts brought to you by <a href="http://mitcho.com/code/yarpp/">Yet Another Related Posts Plugin</a>.</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23342&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23342&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Thu, 04 Feb 2010 22:01:55 +0000</pubDate>
    <dc:creator>Baron Schwartz (xaprb)</dc:creator>
    <category>Commentary</category>
    <category>SQL</category>
    <category>InfiniDB</category>
    <category>mysql</category>
  </item>

  <item>
    <title>On Testing MySQL Knowledge</title>
    <guid isPermaLink="false">http://mtocker.livejournal.com/51977.html</guid>
    <link>http://mtocker.livejournal.com/51977.html</link>
    <description>I can't read posts like this one without at least a little chuckle.  Is the number one question you should be asking people how to start and stop MySQL on Windows?  How does that really demonstrate how good someone is at their job when most people deploy on Linux[1]?The original MySQL certification for 4.1 used to ask a whole bunch of trivia exactly like this - my favourite was a question where you had to say if a particular subqueries caused a syntax error.  I don't know how this tests skill, since most subqueries shouldn't be used in production (hint: they are unoptimized in MySQL).But MySQL changed its certification format:  the new exams are Performanced-Based.  This means to pass, you have to solve some of the problems you will be doing in real life.  Hats off to Dave for leading this initiative.Technical interviews need to change just as MySQL has.  They should be organized in a way that doesn't intimidate the candidate who might know what they are doing, but can't always express it words when under pressure.  Silly questions and 'gut feelings' about responses tend to favour the over confident.I had a hand in designing the interview process at Percona.  One of the steps candidates go through is a challenge to be completed on two running EC2 instances.  I don't think it's flawless, but you tell me what is likely to be a better indication of talent:Test #1: * What does tee command do in MySQL? * What is a serial data type in MySQL? * If I created a column with data type VARCHAR(3), what would I expect to see in MySQL table?Test #2: * Log into these two servers (xxx is the master, yyy is the slave). * Tell me if you think there is a replication problem. * Resync the slave using the lowest impact method possible if there is. * Optimize these two queries while you are at it.Test #2 isn't the actual test we use, but it's not far off.I know a lot of DBAs that probably can't answer test #1 correctly.  Does this mean they are bad at their job?  That is one possibility, but the more likely is that this test is useless and should only come out on Pub Trivia night.[1] On an unrelated note, the example answers for questions 3, 11, 12, 14, 15, 22 also demonstrate a misunderstanding ranging from small to just fundamentally wrong.</description>
    <content:encoded><![CDATA[I can't read posts like <a href="http://www.techinterviews.com/29-mysql-interview-questions">this one</a> without at least a little chuckle.  Is the number one question you should be asking people how to start and stop MySQL on Windows?  How does that really demonstrate how good someone is at their job when most people deploy on Linux[1]?<br /><br />The original MySQL certification for 4.1 used to ask a whole bunch of trivia exactly like this - my favourite was a question where you had to say if a particular subqueries caused a syntax error.  I don't know how this tests skill, since most subqueries shouldn't be used in production (hint: they are unoptimized in MySQL).<br /><br />But MySQL changed its certification format:  the new exams are <a href="http://www.mysql.com/certification/performance_based.html">Performanced-Based</a>.  This means to pass, you have to solve some of the problems you will be doing in real life.  Hats off to <a href="http://dave-stokes.blogspot.com/">Dave</a> for leading this initiative.<br /><br />Technical interviews need to change just as MySQL has.  They should be organized in a way that doesn't intimidate the candidate who might know what they are doing, but can't always express it words when under pressure.  Silly questions and 'gut feelings' about responses tend to favour the over confident.<br /><br />I had a hand in designing the interview process at <a href="http://www.percona.com/">Percona</a>.  One of the steps candidates go through is a challenge to be completed on two running EC2 instances.  I don't think it's flawless, but you tell me what is likely to be a better indication of talent:<br /><br />Test #1:<br /> * What does tee command do in MySQL?<br /> * What is a serial data type in MySQL?<br /> * If I created a column with data type VARCHAR(3), what would I expect to see in MySQL table?<br /><br />Test #2:<br /> * Log into these two servers (xxx is the master, yyy is the slave).<br /> * Tell me if you think there is a replication problem.<br /> * Resync the slave using the lowest impact method possible if there is.<br /> * Optimize these two queries while you are at it.<br /><br />Test #2 isn't the actual test we use, but it's not far off.<br /><br />I know a lot of DBAs that probably can't answer test #1 correctly.  Does this mean they are bad at their job?  That is one possibility, but the more likely is that this test is useless and should only come out on Pub Trivia night.<br /><br />[1] On an unrelated note, the example answers for questions 3, 11, 12, 14, 15, 22 also demonstrate a misunderstanding ranging from small to <i>just fundamentally</i> wrong.<br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23341&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23341&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Thu, 04 Feb 2010 20:58:20 +0000</pubDate>
    <dc:creator>Morgan Tocker</dc:creator>
    <category>mysql</category>
  </item>

  <item>
    <title>Index search time depends on the value being searched</title>
    <guid isPermaLink="false">http://explainextended.com/?p=4183</guid>
    <link>http://explainextended.com/2010/02/04/index-search-time-depends-on-the-value-being-searched/</link>
    <description>Answering questions asked on the site.
Daniel asks:
I have a table which stores track titles in a VARCHAR(200) field. The field is indexed, but searching for titles beginning with a letter Z is noticeably slower than for those beginning with A, and the closer the initial letter is to Z, the slower is the query.
My understanding is that a full table scan occurs, but EXPLAIN shows that the index is used. Besides, the table is quite large but the query is still reasonably fast.
Could you please explain this behavior?
MySQL stores its indexes in B-Tree data structures.
The Wikipedia link above explains the structure quite well so I won&amp;#8217;t repeat it. I&amp;#8217;ll rather draw a picture similar to the one in the article:

This picture is quite self-explanatory. The records are sorted in a tree order, so if you are searching for a certain value, say, 11, you, starting from the first page, should find the link to follow. To do this, you need to find the pair of values less than and greater than 11. In this case, you should follow the link which is between 8 and 12. Then you search for the next pair, etc, until you find your value or reach the end and make sure that your value is not there.
Following the links is quite simple, but how does the engine search for the values within one page?
This depends on how you declared the table.
MyISAM supports two algorithms for storing the index keys in a page: packed keys and unpacked keys.

Unpacked keys are what you are seeing on the picture above: each page just stores the key values and the links to the pages down the tree. This is very simple.
Packed keys are designed to improve performance on character data. Many words and phrases, especially those that are close to each other, start with the same sequence of characters.
If you are going to store track names like:


The Man Who Sold The World


The Man Who Invented Himself


The Man Who Has Everything


, MyISAM can optimize it in terms of storage space and store them like this


(The Man Who) Sold The World


(&amp;times;11) Invented Himself


(&amp;times;11) Has Everything


This is called key compression: instead of repeating the key value for each record, MyISAM just stores the longest common prefix once and prepends the subsequent records that share it with its lengths. This makes the keys shorter and the index more compact.
However, this affects the index search time.
With an unpacked index, a binary search is applied to find the keys within each level page.
With a packed index, this won&amp;#8217;t work: you need to know the value of two keys to compare them and not every record contains full information about the key.
So in case of a packed index, MySQL remembers the value of the prefix and iterates the records one by one. This is less efficient than a binary search, but due to the fact that much more records can fit on on page, this keeps the amount of page traversals to a minimum and overall efficiency increases.
But the records on one page still need to be compared and searched for. And with a linear search, the keys with less values tend to require less iterations than those with greater values.
Let&amp;#8217;s look on the picture above again. The keys are searched left to right.
To search for key 1, we only need two comparisons: compare to 4, get the next page, compare to 1.
But to search for key 15, we need to compare to 4, 8, 12 then get to the next page and compare to 13, 14 and finally to 15.
This is 6 operations compared to 2 required to fetch the first key.
Now, let&amp;#8217;s create the sample tables and see some figures:
Table creation details



CREATE TABLE filler (
        id INT NOT NULL PRIMARY KEY AUTO_INCREMENT
) ENGINE=Memory;

CREATE TABLE t_source (
        id INT NOT NULL PRIMARY KEY
) ENGINE=MyISAM;

CREATE TABLE t_packed (
        id INT NOT NULL PRIMARY KEY,
        name CHAR(6) NOT NULL,
        KEY ix_packed_name (name)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=1;

CREATE TABLE t_unpacked (
        id INT NOT NULL PRIMARY KEY,
        name CHAR(6) NOT NULL,
        KEY ix_unpacked_name (name)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;

DELIMITER $$

CREATE PROCEDURE prc_filler(cnt INT)
BEGIN
        DECLARE _cnt INT;
        SET _cnt = 1;
        WHILE _cnt &amp;lt;= cnt DO
                INSERT
                INTO    filler
                SELECT  _cnt;
                SET _cnt = _cnt + 1;
        END WHILE;
END
$$

DELIMITER ;

START TRANSACTION;
CALL prc_filler(50000);
COMMIT;

INSERT
INTO    t_source
SELECT  id
FROM    filler;

INSERT
INTO    t_packed
SELECT  id,
        (
        SELECT  GROUP_CONCAT(CHAR(65 + FLOOR(RAND(20100204) * 26)) SEPARATOR &amp;#039;&amp;#039;)
        FROM    (
                SELECT  NULL
                UNION ALL
                SELECT  NULL
                UNION ALL
                SELECT  NULL
                UNION ALL
                SELECT  NULL
                UNION ALL
                SELECT  NULL
                UNION ALL
                SELECT  NULL
                ) q
        )
FROM    filler;

INSERT
INTO    t_unpacked
SELECT  *
FROM    t_packed;


There are two MyISAM tables with randomly generated character sequences like this:



id
name


1
RTUPPH


2
RKZQJW


3
FKMEKL


4
BYOZFE


5
GSTRAF


6
YBNMSG


7
ZEZKCE


8
PMPNUJ


9
OQMMYH


10
OYAFDZ




49999
DZMKRC


50000
NHYWLR



The structure of the tables is identical, except that t_packed packs keys and t_unpacked does not.
Unpacked keys


SELECT  COUNT(*)
FROM    t_source s
LEFT JOIN
        t_unpacked p
ON      p.name = IF(s.id &amp;gt; -1, _UTF8&amp;#039;ABCDEF&amp;#039;, NULL)




COUNT(*)


50000


1 row fetched in 0.0001s (0.7656s)




SELECT  COUNT(*)
FROM    t_source s
LEFT JOIN
        t_unpacked p
ON      p.name = IF(s.id &amp;gt; -1, _UTF8&amp;#039;GHIJKL&amp;#039;, NULL)




COUNT(*)


50000


1 row fetched in 0.0001s (0.7331s)




SELECT  COUNT(*)
FROM    t_source s
LEFT JOIN
        t_unpacked p
ON      p.name = IF(s.id &amp;gt; -1, _UTF8&amp;#039;NOPQRS&amp;#039;, NULL)




COUNT(*)


50000


1 row fetched in 0.0001s (0.7656s)




SELECT  COUNT(*)
FROM    t_source s
LEFT JOIN
        t_unpacked p
ON      p.name = IF(s.id &amp;gt; -1, _UTF8&amp;#039;ZYXWVU&amp;#039;, NULL)




COUNT(*)


50000


1 row fetched in 0.0001s (0.7712s)



The queries against the strings beginning with A, G, N and Z take the same time. All queries have been run several times to populate the cache and the execution times are consistent.
The LEFT JOIN against a non-existent value was used in the query to avoid stopping on a found key and make the query traverse the index as much as possible. We also put a formal dependency on s.id here so that t_source is always leading in the join and no const optimizations are performed.
Packed keys

Let&amp;#8217;s try the same queries on packed keys:

SELECT  COUNT(*)
FROM    t_source s
LEFT JOIN
        t_packed p
ON      p.name = IF(s.id &amp;gt; -1, _UTF8&amp;#039;ABCDEF&amp;#039;, NULL)




COUNT(*)


50000


1 row fetched in 0.0001s (1.9531s)




SELECT  COUNT(*)
FROM    t_source s
LEFT JOIN
        t_packed p
ON      p.name = IF(s.id &amp;gt; -1, _UTF8&amp;#039;GHIJKL&amp;#039;, NULL)




COUNT(*)


50000


1 row fetched in 0.0001s (2.3593s)




SELECT  COUNT(*)
FROM    t_source s
LEFT JOIN
        t_packed p
ON      p.name = IF(s.id &amp;gt; -1, _UTF8&amp;#039;NOPQRS&amp;#039;, NULL)




COUNT(*)


50000


1 row fetched in 0.0002s (2.7812s)




SELECT  COUNT(*)
FROM    t_source s
LEFT JOIN
        t_packed p
ON      p.name = IF(s.id &amp;gt; -1, _UTF8&amp;#039;ZYXWVU&amp;#039;, NULL)




COUNT(*)


50000


1 row fetched in 0.0002s (2.9375s)



The query against the string beginning with the letter Z takes more than 50% more time than the query against a string beginning with A.
Summary

Here&amp;#8217;s a little summary table:


Search string
Unpacked key
Time, %
Packed key
Time, %


ABCDEF
0.7656
100.00
1.9531
100.00


GHIJKL
0.7331
95.75
2.3593
120.79


NOPQRS
0.7656
100.00
2.7812
142.39


ZYXWVU
0.7712
100.73
2.9375
150.40


We see that the value being searched for does not affect time to search the index with unpacked keys but seriously affects performance of the indexes with packed keys.
This increase is due to linear search used to locate the records within a single page.
Note that not any pair of records in a page (both with packed and unpacked keys) have a corresponding lower-level page containing intermediate values. There can be leaves and branches on the same depth in the tree.
This can lead to some artifacts: certain strings can be found (or proved absent) faster than the others. However, in average, all records have same depth. And in average, with packed indexes, the need for linear search increases the time required to find the keys with the greater values.
Hope that helps.

I&amp;#8217;m always glad to answer the questions regarding database queries.
Ask me a question</description>
    <content:encoded><![CDATA[<p>Answering questions asked on the site.</p>
<p><strong>Daniel</strong> asks:</p>
<blockquote><p>I have a table which stores track titles in a <code>VARCHAR(200)</code> field. The field is indexed, but searching for titles beginning with a letter <strong>Z</strong> is noticeably slower than for those beginning with <strong>A</strong>, and the closer the initial letter is to <strong>Z</strong>, the slower is the query.</p>
<p>My understanding is that a full table scan occurs, but <code>EXPLAIN</code> shows that the index is used. Besides, the table is quite large but the query is still reasonably fast.</p>
<p>Could you please explain this behavior?</p></blockquote>
<p><strong>MySQL</strong> stores its indexes in <a href="http://en.wikipedia.org/wiki/B-Tree"><strong>B-Tree</strong></a> data structures.</p>
<p>The Wikipedia link above explains the structure quite well so I won&#8217;t repeat it. I&#8217;ll rather draw a picture similar to the one in the article:</p>
<p><img src="http://explainextended.com/wp-content/uploads/2010/02/index.png" alt="" title="B-Tree" width="600" height="120" class="aligncenter size-full wp-image-4207 noborder" /></p>
<p>This picture is quite self-explanatory. The records are sorted in a tree order, so if you are searching for a certain value, say, <strong>11</strong>, you, starting from the first page, should find the link to follow. To do this, you need to find the pair of values less than and greater than <strong>11</strong>. In this case, you should follow the link which is between <strong>8</strong> and <strong>12</strong>. Then you search for the next pair, etc, until you find your value or reach the end and make sure that your value is not there.</p>
<p>Following the links is quite simple, but how does the engine search for the values within one page?</p>
<p>This depends on how you declared the table.</p>
<p><strong>MyISAM</strong> supports two algorithms for storing the index keys in a page: <em>packed keys</em> and <em>unpacked keys</em>.<br />
<span></span></p>
<p>Unpacked keys are what you are seeing on the picture above: each page just stores the key values and the links to the pages down the tree. This is very simple.</p>
<p>Packed keys are designed to improve performance on character data. Many words and phrases, especially those that are close to each other, start with the same sequence of characters.</p>
<p>If you are going to store track names like:</p>
<table>
<tr>
<td>The Man Who Sold The World</td>
</tr>
<tr>
<td>The Man Who Invented Himself</td>
</tr>
<tr>
<td>The Man Who Has Everything</td>
</tr>
</table>
<p>, <strong>MyISAM</strong> can optimize it in terms of storage space and store them like this</p>
<table>
<tr>
<td><strong>(The Man Who)</strong> Sold The World</td>
</tr>
<tr>
<td><strong>(&times;11)</strong> Invented Himself</td>
</tr>
<tr>
<td><strong>(&times;11)</strong> Has Everything</td>
</tr>
</table>
<p>This is called key compression: instead of repeating the key value for each record, <strong>MyISAM</strong> just stores the longest common prefix once and prepends the subsequent records that share it with its lengths. This makes the keys shorter and the index more compact.</p>
<p>However, this affects the index search time.</p>
<p>With an unpacked index, a binary search is applied to find the keys within each level page.</p>
<p>With a packed index, this won&#8217;t work: you need to know the value of two keys to compare them and not every record contains full information about the key.</p>
<p>So in case of a packed index, <strong>MySQL</strong> remembers the value of the prefix and iterates the records one by one. This is less efficient than a binary search, but due to the fact that much more records can fit on on page, this keeps the amount of page traversals to a minimum and overall efficiency increases.</p>
<p>But the records on one page still need to be compared and searched for. And with a linear search, the keys with less values tend to require less iterations than those with greater values.</p>
<p>Let&#8217;s look on the picture above again. The keys are searched left to right.</p>
<p>To search for key <strong>1</strong>, we only need two comparisons: compare to <strong>4</strong>, get the next page, compare to <strong>1</strong>.</p>
<p>But to search for key <strong>15</strong>, we need to compare to <strong>4</strong>, <strong>8</strong>, <strong>12</strong> then get to the next page and compare to <strong>13</strong>, <strong>14</strong> and finally to <strong>15</strong>.</p>
<p>This is <strong>6</strong> operations compared to <strong>2</strong> required to fetch the first key.</p>
<p>Now, let&#8217;s create the sample tables and see some figures:</p>
<p><a href="http://explainextended.com"><strong>Table creation details</strong></a><br />
</p>
<div>
<pre>
CREATE TABLE filler (
        id INT NOT NULL PRIMARY KEY AUTO_INCREMENT
) ENGINE=Memory;

CREATE TABLE t_source (
        id INT NOT NULL PRIMARY KEY
) ENGINE=MyISAM;

CREATE TABLE t_packed (
        id INT NOT NULL PRIMARY KEY,
        name CHAR(6) NOT NULL,
        KEY ix_packed_name (name)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=1;

CREATE TABLE t_unpacked (
        id INT NOT NULL PRIMARY KEY,
        name CHAR(6) NOT NULL,
        KEY ix_unpacked_name (name)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;

DELIMITER $$

CREATE PROCEDURE prc_filler(cnt INT)
BEGIN
        DECLARE _cnt INT;
        SET _cnt = 1;
        WHILE _cnt &lt;= cnt DO
                INSERT
                INTO    filler
                SELECT  _cnt;
                SET _cnt = _cnt + 1;
        END WHILE;
END
$$

DELIMITER ;

START TRANSACTION;
CALL prc_filler(50000);
COMMIT;

INSERT
INTO    t_source
SELECT  id
FROM    filler;

INSERT
INTO    t_packed
SELECT  id,
        (
        SELECT  GROUP_CONCAT(CHAR(65 + FLOOR(RAND(20100204) * 26)) SEPARATOR &#039;&#039;)
        FROM    (
                SELECT  NULL
                UNION ALL
                SELECT  NULL
                UNION ALL
                SELECT  NULL
                UNION ALL
                SELECT  NULL
                UNION ALL
                SELECT  NULL
                UNION ALL
                SELECT  NULL
                ) q
        )
FROM    filler;

INSERT
INTO    t_unpacked
SELECT  *
FROM    t_packed;
</pre>
</div>
<p>There are two <strong>MyISAM</strong> tables with randomly generated character sequences like this:</p>
<div>
<table>
<tr>
<th>id</th>
<th>name</th>
</tr>
<tr>
<td>1</td>
<td>RTUPPH</td>
</tr>
<tr>
<td>2</td>
<td>RKZQJW</td>
</tr>
<tr>
<td>3</td>
<td>FKMEKL</td>
</tr>
<tr>
<td>4</td>
<td>BYOZFE</td>
</tr>
<tr>
<td>5</td>
<td>GSTRAF</td>
</tr>
<tr>
<td>6</td>
<td>YBNMSG</td>
</tr>
<tr>
<td>7</td>
<td>ZEZKCE</td>
</tr>
<tr>
<td>8</td>
<td>PMPNUJ</td>
</tr>
<tr>
<td>9</td>
<td>OQMMYH</td>
</tr>
<tr>
<td>10</td>
<td>OYAFDZ</td>
</tr>
<tr>
<td colspan="100"/></tr>
<tr>
<td>49999</td>
<td>DZMKRC</td>
</tr>
<tr>
<td>50000</td>
<td>NHYWLR</td>
</tr>
</table>
</div>
<p>The structure of the tables is identical, except that <code>t_packed</code> packs keys and <code>t_unpacked</code> does not.</p>
<h3>Unpacked keys</h3>
<hr/>
<pre>
SELECT  COUNT(*)
FROM    t_source s
LEFT JOIN
        t_unpacked p
ON      p.name = IF(s.id &gt; -1, _UTF8&#039;ABCDEF&#039;, NULL)
</pre>
<div>
<table>
<tr>
<th>COUNT(*)</th>
</tr>
<tr>
<td>50000</td>
</tr>
<tr>
<td colspan="100">1 row fetched in 0.0001s (0.7656s)</td>
</tr>
</table>
</div>
<pre>
SELECT  COUNT(*)
FROM    t_source s
LEFT JOIN
        t_unpacked p
ON      p.name = IF(s.id &gt; -1, _UTF8&#039;GHIJKL&#039;, NULL)
</pre>
<div>
<table>
<tr>
<th>COUNT(*)</th>
</tr>
<tr>
<td>50000</td>
</tr>
<tr>
<td colspan="100">1 row fetched in 0.0001s (0.7331s)</td>
</tr>
</table>
</div>
<pre>
SELECT  COUNT(*)
FROM    t_source s
LEFT JOIN
        t_unpacked p
ON      p.name = IF(s.id &gt; -1, _UTF8&#039;NOPQRS&#039;, NULL)
</pre>
<div>
<table>
<tr>
<th>COUNT(*)</th>
</tr>
<tr>
<td>50000</td>
</tr>
<tr>
<td colspan="100">1 row fetched in 0.0001s (0.7656s)</td>
</tr>
</table>
</div>
<pre>
SELECT  COUNT(*)
FROM    t_source s
LEFT JOIN
        t_unpacked p
ON      p.name = IF(s.id &gt; -1, _UTF8&#039;ZYXWVU&#039;, NULL)
</pre>
<div>
<table>
<tr>
<th>COUNT(*)</th>
</tr>
<tr>
<td>50000</td>
</tr>
<tr>
<td colspan="100">1 row fetched in 0.0001s (0.7712s)</td>
</tr>
</table>
</div>
<p>The queries against the strings beginning with <strong>A</strong>, <strong>G</strong>, <strong>N</strong> and <strong>Z</strong> take the same time. All queries have been run several times to populate the cache and the execution times are consistent.</p>
<p>The <code>LEFT JOIN</code> against a non-existent value was used in the query to avoid stopping on a found key and make the query traverse the index as much as possible. We also put a formal dependency on <code>s.id</code> here so that <code>t_source</code> is always leading in the join and no <code>const</code> optimizations are performed.</p>
<h3>Packed keys</h3>
<hr/>
<p>Let&#8217;s try the same queries on packed keys:</p>
<pre>
SELECT  COUNT(*)
FROM    t_source s
LEFT JOIN
        t_packed p
ON      p.name = IF(s.id &gt; -1, _UTF8&#039;ABCDEF&#039;, NULL)
</pre>
<div>
<table>
<tr>
<th>COUNT(*)</th>
</tr>
<tr>
<td>50000</td>
</tr>
<tr>
<td colspan="100">1 row fetched in 0.0001s (1.9531s)</td>
</tr>
</table>
</div>
<pre>
SELECT  COUNT(*)
FROM    t_source s
LEFT JOIN
        t_packed p
ON      p.name = IF(s.id &gt; -1, _UTF8&#039;GHIJKL&#039;, NULL)
</pre>
<div>
<table>
<tr>
<th>COUNT(*)</th>
</tr>
<tr>
<td>50000</td>
</tr>
<tr>
<td colspan="100">1 row fetched in 0.0001s (2.3593s)</td>
</tr>
</table>
</div>
<pre>
SELECT  COUNT(*)
FROM    t_source s
LEFT JOIN
        t_packed p
ON      p.name = IF(s.id &gt; -1, _UTF8&#039;NOPQRS&#039;, NULL)
</pre>
<div>
<table>
<tr>
<th>COUNT(*)</th>
</tr>
<tr>
<td>50000</td>
</tr>
<tr>
<td colspan="100">1 row fetched in 0.0002s (2.7812s)</td>
</tr>
</table>
</div>
<pre>
SELECT  COUNT(*)
FROM    t_source s
LEFT JOIN
        t_packed p
ON      p.name = IF(s.id &gt; -1, _UTF8&#039;ZYXWVU&#039;, NULL)
</pre>
<div>
<table>
<tr>
<th>COUNT(*)</th>
</tr>
<tr>
<td>50000</td>
</tr>
<tr>
<td colspan="100">1 row fetched in 0.0002s (2.9375s)</td>
</tr>
</table>
</div>
<p>The query against the string beginning with the letter <strong>Z</strong> takes more than <strong>50%</strong> more time than the query against a string beginning with <strong>A</strong>.</p>
<h3>Summary</h3>
<hr/>
<p>Here&#8217;s a little summary table:</p>
<table>
<tr>
<th>Search string</th>
<th>Unpacked key</th>
<th>Time, %</th>
<th>Packed key</th>
<th>Time, %</th>
</tr>
<tr>
<td><strong>ABCDEF</strong></td>
<td>0.7656</td>
<td>100.00</td>
<td>1.9531</td>
<td>100.00</td>
</tr>
<tr>
<td><strong>GHIJKL</strong></td>
<td>0.7331</td>
<td>95.75</td>
<td>2.3593</td>
<td>120.79</td>
</tr>
<tr>
<td><strong>NOPQRS</strong></td>
<td>0.7656</td>
<td>100.00</td>
<td>2.7812</td>
<td>142.39</td>
</tr>
<tr>
<td><strong>ZYXWVU</strong></td>
<td>0.7712</td>
<td>100.73</td>
<td>2.9375</td>
<td>150.40</td>
</tr>
</table>
<p>We see that the value being searched for does not affect time to search the index with unpacked keys but seriously affects performance of the indexes with packed keys.</p>
<p>This increase is due to linear search used to locate the records within a single page.</p>
<p>Note that not any pair of records in a page (both with packed and unpacked keys) have a corresponding lower-level page containing intermediate values. There can be leaves and branches on the same depth in the tree.</p>
<p>This can lead to some artifacts: certain strings can be found (or proved absent) faster than the others. However, in average, all records have same depth. And in average, with packed indexes, the need for linear search increases the time required to find the keys with the greater values.</p>
<p>Hope that helps.</p>
<hr/>
<p>I&#8217;m always glad to answer the questions regarding database queries.</p>
<p><a href="http://explainextended.com/ask-a-question"><strong>Ask me a question</strong></a></p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23343&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23343&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Thu, 04 Feb 2010 20:00:58 +0000</pubDate>
    <dc:creator>Alex Bolenok (Quassnoi)</dc:creator>
    <category>MySQL</category>
  </item>

  <item>
    <title>innodb_file_per_table, shrinking table spaces and the data dictionary</title>
    <guid isPermaLink="false">tag:blogger.com,1999:blog-31421954.post-3160215463006945464</guid>
    <link>http://mysqldba.blogspot.com/2010/02/innodbfilepertable-shrinking-table.html</link>
    <description>INNODB has some irritating gotchas that makes disk space management hard. In 2002ish INNODB, added innodb_file_per_table to get around allot of these issues, but it does not fix everything.If you are running innodb_file_per_table, you will notice in your database directory db.opt - database characteristics file.  tablename.frm - the table structure.  tablename.ibd - the actual innodb table space file Imagine that you have a table with 10 million rows and you delete say 5 million rows in multiple chunks around 400K chunks, because deletes are slow. Next, you notice that the table space file did not shrink. So what do you do? OPTIMIZE tablename, tada all the wasted space is reclaimed, but here is the PROBLEM the ibdata file grew!ibdata stores all of the UNDO LOGS thus GROWS due to the deletes and space is never reclaimed.Ok, lets try coping the tablespace file to another directory and re-import the tablespace file after wiping the data dictionary (ibdata).For instance/etc/init.d/mysql stopcd /var/lib/mysql/DBcp * /tmp/holdrm /var/lib/mysql/ib*cp /tmp/hold/* /var/lib/mysql/DB/etc/init.d/mysql start // create the ibdata fileALTER TABLE tablename IMPORT TABLESPACEERROR 1146 (42S02): Table 'DB.tablename' does not existReally, there is nothing that you can do to force innodb to purge the undo logs in the ibdata file without a full dump of the data to text and then reimport the data.So here are the steps to shrink all table spaces and the ibdata filemysqldump --all-databases (or use mk-parallel-dump)stop mysqlrm -f /var/lib/mysql/ib* /var/lib/mysql/DB/*start mysqlmysqlimport (or use mk-parallel-restore)Takes a bunch of time but there is no other recourse. If you know of another way please share :)</description>
    <content:encoded><![CDATA[INNODB has some irritating gotchas that makes disk space management hard. In 2002ish INNODB, added innodb_file_per_table to get around allot of these issues, but it does not fix everything.<br /><br />If you are running innodb_file_per_table, you will notice in your database directory <br /><UL><br /><LI>db.opt - database characteristics file. </LI><br /><LI> tablename.frm - the table structure. </LI><br /><LI> tablename.ibd - the actual innodb table space file </LI><br /></UL><br /><br />Imagine that you have a table with 10 million rows and you delete say 5 million rows in multiple chunks around 400K chunks, because deletes are slow. Next, you notice that the table space file did not shrink. So what do you do? OPTIMIZE tablename, tada all the wasted space is reclaimed, but here is the PROBLEM the ibdata file grew!<br /><b><br />ibdata stores all of the UNDO LOGS thus GROWS due to the deletes and space is never reclaimed.<br /></b><br /><br />Ok, lets try coping the tablespace file to another directory and re-import the tablespace file after wiping the data dictionary (ibdata).<br /><br />For instance<br />/etc/init.d/mysql stop<br />cd /var/lib/mysql/DB<br />cp * /tmp/hold<br />rm /var/lib/mysql/ib*<br />cp /tmp/hold/* /var/lib/mysql/DB<br />/etc/init.d/mysql start // create the ibdata file<br /><br />ALTER TABLE tablename IMPORT TABLESPACE<br />ERROR 1146 (42S02): Table 'DB.tablename' does not exist<br /><br />Really, there is nothing that you can do to force innodb to purge the undo logs in the ibdata file without a full dump of the data to text and then reimport the data.<br /><br />So here are the steps to shrink all table spaces and the ibdata file<br /><br />mysqldump --all-databases (or use mk-parallel-dump)<br />stop mysql<br />rm -f /var/lib/mysql/ib* /var/lib/mysql/DB/*<br />start mysql<br />mysqlimport (or use mk-parallel-restore)<br /><br />Takes a bunch of time but there is no other recourse. If you know of another way please share :)<div><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/31421954-3160215463006945464?l=mysqldba.blogspot.com" alt="" /></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23340&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23340&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Thu, 04 Feb 2010 19:24:00 +0000</pubDate>
    <dc:creator>Dathan Pattishall</dc:creator>
    <category>maintenance</category>
    <category>INNODB</category>
  </item>

  <item>
    <title>Installing Nginx With PHP5 And MySQL Support On Fedora 12</title>
    <guid isPermaLink="false">http://www.howtoforge.com/installing-nginx-with-php5-and-mysql-support-on-fedora-12</guid>
    <link>http://www.howtoforge.com/installing-nginx-with-php5-and-mysql-support-on-fedora-12</link>
    <description>


Installing Nginx With PHP5 And MySQL Support On Fedora 12

Nginx (pronounced
&quot;engine x&quot;) is a free, open-source, high-performance HTTP server. Nginx
is known for its stability, rich feature set, simple configuration, and
low resource consumption. This tutorial shows how you can install Nginx
on a Fedora 12 server with PHP5 support (through FastCGI) and MySQL
support.</description>
    <content:encoded><![CDATA[<span>


</span><table align="left" cellpadding="0" cellspacing="0" width="43" height="40"><tr><td><img class="teaser-image-even" src="http://images.howtoforge.com/images/teaser/fedora.gif" width="40" height="40" alt="" /></td></tr></table><p><b>Installing Nginx With PHP5 And MySQL Support On Fedora 12</b></p>

<p>Nginx (pronounced
"engine x") is a free, open-source, high-performance HTTP server. Nginx
is known for its stability, rich feature set, simple configuration, and
low resource consumption. This tutorial shows how you can install Nginx
on a Fedora 12 server with PHP5 support (through FastCGI) and MySQL
support.</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23338&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23338&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Thu, 04 Feb 2010 16:44:04 +0000</pubDate>
    <category>Fedora</category>
    <category>MySQL</category>
    <category>PHP</category>
  </item>

  <item>
    <title>MONyog MySQL Monitor 3.7 introduces multi-user authentication and licensing changes.</title>
    <guid isPermaLink="false">http://www.webyog.com/blog/?p=1542</guid>
    <link>http://www.webyog.com/blog/2010/02/04/monyog-mysql-monitor-3-7-introduces-multi-user-authentication-and-licensing-changes/</link>
    <description> MONyog MySQL Monitor 3.7  Has Been Released.
From MONyog 3.7 we have introduced 3 editions of the commercial version of MONyog. When we had first released MONyog 2 years back, it was already an almost complete tool for monitoring MySQL servers based on what the MySQL server exposes on SHOW statements.  Since then we have added features that are not basic server monitoring features in the strict sense but additional or supplementing features.  Most important the Query Analyzer was added around one year ago.
Multi-user authentication is a long standing request from customers belonging to large organizations &amp;#8211; or just having the need for monitoring lots of MySQL servers. There may be multiple server administrators. There may be development/test servers that the developers of that organization should be able to monitor, but is may also be unwanted to give them access to see details from servers having delicate information (customer data, payroll data etc.).  We have completely rewritten the MONyog authentication system.  It is now possible to create multiple user profiles and give access for a specific user to a subset of servers available only.  Additionally specific &amp;#8216;admin&amp;#8217; functionalities (access to edit server settings, to KILL queries and to execute  FLUSH STATUS) can be disabled for a user.
As MONyog is no longer just a tool that organizes what the server exposes on SHOW statements &amp;#8211; but rather a &amp;#8216;bundle&amp;#8217; of tools &amp;#8211; we have realized that not all tools are useful to every MONyog customer. MONyog is no longer a “one-size-fits-all” application. MONyog caters to a very diverse range to customers. In some organizations MONyog may be used by a single person only, and in other organizations by dozens of people. Some users will not use the Query Analyzer at all (because they only run standard applications where they are not in control of schema and query design anyway). And so on.  The Ultimate edition is for those users in particular that have full control over their database and their applications and who need multiuser authentication.  The Enterprise edition provides the basic monitoring functionalities as well as the Query Analyzer &amp;#8211; but not multi-user authentication.  The Professional edition is an entry-level version with the (original) basic monitoring functionalities. Refer to the comparison sheet for full details.
We thought it is now the right time to have multiple editions of MONyog. This also means that people can start with the lower edition and gradually move to a higher edition if the need arises. This will also reduce the overall complexity and total cost of ownership for several customers.
We have also migrated all existing MONyog customers to MONyog Ultimate and Ultimate upgrade prices are kept moderate.  So if you are already a MONyog customer your Total Cost of Ownership remains same while you continue to enjoy the powerful tools and features of Ultimate.
Release notes in traditional form can be viewed here.
Feel free to leave your feedback in the comments section.</description>
    <content:encoded><![CDATA[<p><strong> MONyog MySQL Monitor 3.7  Has Been Released.</strong></p>
<p>From MONyog 3.7 we have introduced 3 editions of the commercial version of MONyog. When we had first released MONyog 2 years back, it was already an almost complete tool for monitoring MySQL servers based on what the MySQL server exposes on SHOW statements.  Since then we have added features that are not basic server monitoring features in the strict sense but additional or supplementing features.  Most important the Query Analyzer was added around one year ago.</p>
<p>Multi-user authentication is a long standing request from customers belonging to large organizations &#8211; or just having the need for monitoring lots of MySQL servers. There may be multiple server administrators. There may be development/test servers that the developers of that organization should be able to monitor, but is may also be unwanted to give them access to see details from servers having delicate information (customer data, payroll data etc.).  We have completely rewritten the MONyog authentication system.  It is now possible to create multiple user profiles and give access for a specific user to a subset of servers available only.  Additionally specific &#8216;admin&#8217; functionalities (access to edit server settings, to KILL queries and to execute  FLUSH STATUS) can be disabled for a user.</p>
<p>As MONyog is no longer just a tool that organizes what the server exposes on SHOW statements &#8211; but rather a &#8216;bundle&#8217; of tools &#8211; we have realized that not all tools are useful to every MONyog customer. MONyog is no longer a “one-size-fits-all” application. MONyog caters to a very diverse range to customers. In some organizations MONyog may be used by a single person only, and in other organizations by dozens of people. Some users will not use the Query Analyzer at all (because they only run standard applications where they are not in control of schema and query design anyway). And so on.  The Ultimate edition is for those users in particular that have full control over their database and their applications and who need multiuser authentication.  The Enterprise edition provides the basic monitoring functionalities as well as the Query Analyzer &#8211; but not multi-user authentication.  The Professional edition is an entry-level version with the (original) basic monitoring functionalities. Refer to the <a href="http://webyog.com/en/monyog_feature_list.php">comparison sheet</a> for full details.</p>
<p>We thought it is now the right time to have multiple editions of MONyog. This also means that people can start with the lower edition and gradually move to a higher edition if the need arises. This will also reduce the overall complexity and total cost of ownership for several customers.</p>
<p>We have also migrated all existing MONyog customers to MONyog Ultimate and Ultimate upgrade prices are kept moderate.  So if you are already a MONyog customer your Total Cost of Ownership remains same while you continue to enjoy the powerful tools and features of Ultimate.</p>
<p>Release notes in traditional form can be viewed <a href="http://www.webyog.com/blog/2010/01/18/monyog-mysql-monitor-3-7-beta-1-has-been-released/">here</a>.</p>
<p>Feel free to leave your feedback in the comments section.</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23336&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23336&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Thu, 04 Feb 2010 12:07:34 +0000</pubDate>
    <dc:creator>Webyog</dc:creator>
    <category>MONyog</category>
    <category>MySQL</category>
    <category>Releases</category>
  </item>

  <item>
    <title>Using NDBINFO – example of monitoring data nodes with MySQL Enterprise Monitor</title>
    <guid isPermaLink="false">http://www.clusterdb.com/?p=929</guid>
    <link>http://www.clusterdb.com/mysql-cluster/using-ndbinfo-example-of-monitoring-data-nodes-with-mysql-enterprise-monitor/</link>
    <description>You may have read Bernd&amp;#8217;s recent post that explained how to try out some new beta functionality for MySQL Cluster and wondered what kind of use you could put the new ndb$info to. ndb$info uses tables/views to give real-time access to a whole host of information that helps you monitor and tune your MySQL Cluster deployment. This article gives one example, extending MySQL Enterprise Monitor to keep an eye on the amount of free memory on the data nodes and then raise an alarm when it starts to run low &amp;#8211; even generating SNMP traps if that&amp;#8217;s what you need.
One of the features of MySQL Enterprise Monitor is that you can define custom data collectors and that those data collectors can run SQL queries to get the data. The information retrieved by those custom data collectors can then be used with rules that the user defines through the MySQL Enterprise Monitor GUI to create warning/alarms.
In this example, I create two new data collectors and store the files in the &amp;#8220;&amp;lt;MySQL Enterprise Monitor installation directory&amp;gt;/agent/share/mysql-proxy/items/&amp;#8221; directory before starting up the MySQL Enterprise Monitor agents:
cluster_max_used.xml:
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;classes&amp;gt;
  &amp;lt;class&amp;gt;
    &amp;lt;namespace&amp;gt;mysql&amp;lt;/namespace&amp;gt;
    &amp;lt;classname&amp;gt;cluster_max_used&amp;lt;/classname&amp;gt;
    &amp;lt;query&amp;gt;&amp;lt;![CDATA[SELECT MAX(used) as Used FROM ndbinfo.memoryusage
      WHERE DATA_MEMORY = 'DATA_MEMORY']]&amp;gt;
    &amp;lt;/query&amp;gt;
  &amp;lt;/class&amp;gt;
&amp;lt;/classes&amp;gt;
cluster_min_avail.xml:
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;classes&amp;gt;
  &amp;lt;class&amp;gt;
    &amp;lt;namespace&amp;gt;mysql&amp;lt;/namespace&amp;gt;
    &amp;lt;classname&amp;gt;cluster_min_avail&amp;lt;/classname&amp;gt;
    &amp;lt;query&amp;gt;&amp;lt;![CDATA[SELECT MIN(max)as Max FROM ndbinfo.memoryusage
       WHERE DATA_MEMORY = 'DATA_MEMORY']]&amp;gt;
    &amp;lt;/query&amp;gt;
  &amp;lt;/class&amp;gt;
&amp;lt;/classes&amp;gt;
Fig. 1 Rule definition
In MySQL Enterprise Monitor, rules are grouped together into Advisors and so I create a new Advisor called &amp;#8220;MySQL Cluster&amp;#8221; and then create just one new rule within that Advisor group.
As shown in Fig. 1 the rule is called &amp;#8220;Data Node Low Memory&amp;#8221;. The &amp;#8220;Variable Assignment&amp;#8221; section is used to define 2 variables %used_mem% and %config_mem% which are populated from the Used and Max results from the 2 new data collectors. The &amp;#8220;Expression&amp;#8221; section is used to test &amp;#8220;(Max - Used) &amp;lt; THRESHOLD&amp;#8221; and then the values to be substituted for THRESHOLD are defined in the &amp;#8220;Thresholds&amp;#8221; section &amp;#8211; indicating at what points the Info, Warning and Critical Alters should be raised.
There are then a number of optional sections that you can use to add useful information to the person investigating the alert.
Once the rule has been created, the next step is to schedule it and (if desired) tag that the alerts should also result in SNMP traps being raised. This is standard MySQL Enterprise Monitor practice and so it isn&amp;#8217;t explained here except to point out that this rule is monitoring information from the data nodes but the rule has to be applied to a MySQL Server (MySQL Enterprise Monitor has no idea what a data node is) and so you need to schedule the rule against one or more arbitrary MySQL Server instances in the Cluster.
Fig. 2 Warning alert
 
 
To test the functionality, start adding more data to your MySQL Cluster until the Warning alert is triggered as shown in Fig. 2. As you can see, the optional information we included is shown &amp;#8211; including values from Used and Max.
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
Fig. 3 Critical alarm
I then add more data to the database until the critical alert is raised and confirm that it&amp;#8217;s displayed on the main monitoring panel of the MySQL Enterprise Monitor dashboard. Note that if you requested these alerts be included with the SNMP feed then SNMP traps will also be raised.
Please note that this example is intended to illustrate the mechanics of setting up monitoring on an arbitrary piece of data from ndbinfo and obviously in the real world you would want to monitor more than just the memory and even for the memory, you might want to use a more sophisticated rule.</description>
    <content:encoded><![CDATA[<p><a href="http://www.clusterdb.com/wp-content/uploads/2010/02/mysql-cluster-logo-150x105.png"><img class="alignright size-full wp-image-919" title="mysql-cluster-logo-150x105" src="http://www.clusterdb.com/wp-content/uploads/2010/02/mysql-cluster-logo-150x105.png" alt="" width="150" height="105" /></a>You may have read <a href="http://ocklin.blogspot.com/2010/02/mysql-cluster-711-is-there.html" target="_blank">Bernd&#8217;s recent post</a> that explained how to try out some new beta functionality for MySQL Cluster and wondered what kind of use you could put the new ndb$info to. ndb$info uses tables/views to give real-time access to a whole host of information that helps you monitor and tune your MySQL Cluster deployment. This article gives one example, extending MySQL Enterprise Monitor to keep an eye on the amount of free memory on the data nodes and then raise an alarm when it starts to run low &#8211; even generating SNMP traps if that&#8217;s what you need.</p>
<p>One of the features of MySQL Enterprise Monitor is that you can define custom data collectors and that those data collectors can run SQL queries to get the data. The information retrieved by those custom data collectors can then be used with rules that the user defines through the MySQL Enterprise Monitor GUI to create warning/alarms.</p>
<p>In this example, I create two new data collectors and store the files in the &#8220;&lt;MySQL Enterprise Monitor installation directory&gt;/agent/share/mysql-proxy/items/&#8221; directory before starting up the MySQL Enterprise Monitor agents:</p>
<p><strong>cluster_max_used.xml</strong>:</p>
<pre><span>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;classes&gt;
  &lt;class&gt;
    &lt;namespace&gt;mysql&lt;/namespace&gt;
    &lt;classname&gt;cluster_max_used&lt;/classname&gt;
    &lt;query&gt;&lt;![CDATA[SELECT MAX(used) as Used FROM ndbinfo.memoryusage
      WHERE DATA_MEMORY = 'DATA_MEMORY']]&gt;
    &lt;/query&gt;
  &lt;/class&gt;
&lt;/classes&gt;</span></pre>
<p><strong>cluster_min_avail.xml</strong>:</p>
<pre><span>&lt;?xml version="1.0" encoding="utf-8"?&gt;</span><span>
&lt;classes&gt;
</span><span>  &lt;class&gt;
</span><span>    &lt;namespace&gt;mysql&lt;/namespace&gt;
    &lt;classname&gt;cluster_min_avail&lt;/classname&gt;
    &lt;query&gt;&lt;![CDATA[SELECT MIN(max)as Max FROM ndbinfo.memoryusage
       WHERE DATA_MEMORY = 'DATA_MEMORY']]&gt;
    &lt;/query&gt;
  &lt;/class&gt;
&lt;/classes&gt;</span></pre>
<div><a href="http://www.clusterdb.com/wp-content/uploads/2010/02/rule.jpg"><img class="size-medium wp-image-927" title="rule" src="http://www.clusterdb.com/wp-content/uploads/2010/02/rule-300x297.jpg" alt="" width="300" height="297" /></a><p>Fig. 1 Rule definition</p></div>
<p>In MySQL Enterprise Monitor, rules are grouped together into Advisors and so I create a new Advisor called &#8220;MySQL Cluster&#8221; and then create just one new rule within that Advisor group.</p>
<p>As shown in Fig. 1 the rule is called &#8220;Data Node Low Memory&#8221;. The &#8220;Variable Assignment&#8221; section is used to define 2 variables %used_mem% and %config_mem% which are populated from the <span>Used </span>and <span>Max </span>results from the 2 new data collectors. The &#8220;Expression&#8221; section is used to test &#8220;(<span>Max </span>- <span>Used</span>) &lt; THRESHOLD&#8221; and then the values to be substituted for THRESHOLD are defined in the &#8220;Thresholds&#8221; section &#8211; indicating at what points the Info, Warning and Critical Alters should be raised.</p>
<p>There are then a number of optional sections that you can use to add useful information to the person investigating the alert.</p>
<p>Once the rule has been created, the next step is to schedule it and (if desired) tag that the alerts should also result in SNMP traps being raised. This is standard MySQL Enterprise Monitor practice and so it isn&#8217;t explained here except to point out that this rule is monitoring information from the data nodes but the rule has to be applied to a MySQL Server (MySQL Enterprise Monitor has no idea what a data node is) and so you need to schedule the rule against one or more arbitrary MySQL Server instances in the Cluster.</p>
<div><a href="http://www.clusterdb.com/wp-content/uploads/2010/02/Info_warning.jpg"><img class="size-medium wp-image-928" title="Info_warning" src="http://www.clusterdb.com/wp-content/uploads/2010/02/Info_warning-300x239.jpg" alt="" width="300" height="239" /></a><p>Fig. 2 Warning alert</p></div>
<p> <br />
 <br />
To test the functionality, start adding more data to your MySQL Cluster until the Warning alert is triggered as shown in Fig. 2. As you can see, the optional information we included is shown &#8211; including values from <span>Used </span>and <span>Max</span>.<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
<div><a href="http://www.clusterdb.com/wp-content/uploads/2010/02/critical.jpg"><img class="size-medium wp-image-926" title="critical" src="http://www.clusterdb.com/wp-content/uploads/2010/02/critical-300x146.jpg" alt="" width="300" height="146" /></a><p>Fig. 3 Critical alarm</p></div></p>
<p>I then add more data to the database until the critical alert is raised and confirm that it&#8217;s displayed on the main monitoring panel of the MySQL Enterprise Monitor dashboard. Note that if you requested these alerts be included with the SNMP feed then SNMP traps will also be raised.</p>
<p>Please note that this example is intended to illustrate the mechanics of setting up monitoring on an arbitrary piece of data from ndbinfo and obviously in the real world you would want to monitor more than just the memory and even for the memory, you might want to use a more sophisticated rule.</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23335&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23335&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Thu, 04 Feb 2010 10:33:48 +0000</pubDate>
    <dc:creator>Andrew Morgan</dc:creator>
    <category>MySQL Cluster</category>
    <category>MySQL</category>
    <category>MySQL Cluster CGE</category>
    <category>MySQL Enterprise Monitor</category>
    <category>ndbinfo</category>
    <category>snmp</category>
  </item>

  <item>
    <title>MySQL makes community server edition difficult to find and download!</title>
    <guid isPermaLink="false">267 at http://www.ruturaj.net</guid>
    <link>http://www.ruturaj.net/dev-mysql-com</link>
    <description>Read this post today, http://mysqlha.blogspot.com/2010/02/dude-where-is-my-link.html. And I was amazed to find that on mysql.com it was so hard to download the community version of MySQL Server.
On the home page, could see links for 

Enterprise Products
Resources
Consulting
Training
News and Events

Couldn't find a link for Community Server Download or something similar, I've been working with MySQL for over 5 yrs, I know that the downloads and most of the useful stuff for open source devs like me is on http://dev.mysql.com. The Developer Zone hosts the following for us

Community Server Downloads
Documentation (which keeps changing its links)
Articles
Forums
Beginner articles
MySQL forge
... and much more

I'm really surprised and ashamed of this MySQL's or Ora@#$'s move to hide such a widely used link.
I've done my part in adding rel='nofollow' attribute to http://mysql.com
read more</description>
    <content:encoded><![CDATA[<p>Read this post today, <a href="http://mysqlha.blogspot.com/2010/02/dude-where-is-my-link.html">http://mysqlha.blogspot.com/2010/02/dude-where-is-my-link.html</a>. And I was amazed to find that on <a href="http://mysql.com" rel="nofollow">mysql.com</a> it was so hard to download the community version of MySQL Server.</p>
<p>On the home page, could see links for </p>
<ul>
<li>Enterprise Products</li>
<li>Resources</li>
<li>Consulting</li>
<li>Training</li>
<li>News and Events</li>
</ul>
<p>Couldn't find a link for <em>Community Server Download</em> or something similar, I've been working with MySQL for over 5 yrs, I know that the downloads and most of the <em>useful</em> stuff for open source devs like me is on <a href="http://dev.mysql.com">http://dev.mysql.com</a>. The Developer Zone hosts the following for <em>us</em></p>
<ul>
<li>Community Server Downloads</li>
<li>Documentation (which keeps changing its links)</li>
<li>Articles</li>
<li>Forums</li>
<li>Beginner articles</li>
<li>MySQL forge</li>
<li>... and much more</li>
</ul>
<p>I'm really surprised and ashamed of this MySQL's or Ora@#$'s move to hide such a widely used link.</p>
<p>I've done my part in adding <code>rel='nofollow'</code> <a href="http://en.wikipedia.org/wiki/Nofollow">attribute</a> to http://mysql.com</p>
<p><a href="http://www.ruturaj.net/dev-mysql-com">read more</a></p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23333&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23333&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Thu, 04 Feb 2010 04:12:38 +0000</pubDate>
    <dc:creator>Ruturaj Vartak</dc:creator>
    <category>Open Source</category>
    <category>MySQL</category>
  </item>

  <item>
    <title>Dude, where is my link?</title>
    <guid isPermaLink="false">tag:blogger.com,1999:blog-5915567578707286635.post-3309689673108036564</guid>
    <link>http://mysqlha.blogspot.com/2010/02/dude-where-is-my-link.html</link>
    <description>What happened to the obvious link from mysql.com to dev.mysql.com? Did it move here or here?</description>
    <content:encoded><![CDATA[What happened to the obvious link from <a href="http://mysql.com/">mysql.com</a> to <a href="http://dev.mysql.com/">dev.mysql.com</a>? Did it move <a href="http://www.postgresql.org/">here</a> or <a href="http://www.askmonty.org/">here</a>?<div><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/5915567578707286635-3309689673108036564?l=mysqlha.blogspot.com" alt="" /></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23331&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23331&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Thu, 04 Feb 2010 00:03:00 +0000</pubDate>
    <dc:creator>Mark Callaghan</dc:creator>
  </item>

  <item>
    <title>MySQL Cluster 7.1</title>
    <guid isPermaLink="false">http://dev.mysql.com/downloads/cluster/7.1.html</guid>
    <link>http://dev.mysql.com/downloads/cluster/7.1.html</link>
    <description>MySQL Cluster 7.1 (7.1.1 beta, published on Thursday, 04 Feb 2010)</description>
    <content:encoded><![CDATA[MySQL Cluster 7.1 (7.1.1 beta, published on Thursday, 04 Feb 2010)<br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23339&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23339&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
    <pubDate>Thu, 04 Feb 2010 00:00:00 +0000</pubDate>
    <dc:creator>MySQL</dc:creator>
  </item>

</channel>
</rss>
