<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MySQL Expert &#124; MySQL Performance &#124; MySQL Consulting &#187; mysqluc07</title>
	<atom:link href="http://ronaldbradford.com/blog/category/professional/databases/mysql/mysql-user-conferences/mysqluc07/feed/" rel="self" type="application/rss+xml" />
	<link>http://ronaldbradford.com/blog</link>
	<description>Expert times and information on MySQL</description>
	<lastBuildDate>Tue, 07 Sep 2010 18:45:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Everything fails, Monitor Everything</title>
		<link>http://ronaldbradford.com/blog/everything-fails-monitor-everything-2007-05-20/</link>
		<comments>http://ronaldbradford.com/blog/everything-fails-monitor-everything-2007-05-20/#comments</comments>
		<pubDate>Sat, 19 May 2007 23:00:01 +0000</pubDate>
		<dc:creator>ronald</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Professional]]></category>
		<category><![CDATA[mysqluc07]]></category>

		<guid isPermaLink="false">http://ronaldbradford.com/blog/?p=658</guid>
		<description><![CDATA[
From the recent MySQL Conference a number of things resonate strongly almost daily with me.  These included:

Guy Kawasaki &#8211; Don’t let the bozos grind you down.

Boy, the bozos have ground me down this week. I slept for 16 hrs today, the first day of solid rest in 3 weeks.


 Paul Tuckfield &#8211; YouTube and [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.ronaldbradford.com/images/mysqlconference.gif" style="float:right; margin:10px" /><br />
From the recent <a href="http://www.mysqlconf.com">MySQL Conference</a> a number of things resonate strongly almost daily with me.  These included:</p>
<ol>
<li><a href="http://blog.arabx.com.au/?p=625">Guy Kawasaki</a> &#8211; Don’t let the bozos grind you down.
<ul>
<li>Boy, the bozos have ground me down this week. I slept for 16 hrs today, the first day of solid rest in 3 weeks.</li>
</ul>
</li>
<li><a href="http://blog.arabx.com.au/?p=634"> Paul Tuckfield &#8211; YouTube</a> and his various caching tip insights.
<ul>
<li>I&#8217;ve seen the promising results of Paul Tuckfield&#8217;s comment of pre-fetching for Replication written recently by <a href="http://mysqldatabaseadministration.blogspot.com/2007/05/miracles-happen-speeding-up-replication.html">Farhan</a>.</li>
</ul>
</li>
<li><a href="http://blog.arabx.com.au/?p=632">Ramus &#8211; SSL is not secure</a> &#8212; This still really scares me.
<ul>
<li>How do I tell rather computer illiterate friends about running multiple browsers, clearing caches, never visiting SSL sites after other sites that are insecure etc.</li>
</ul>
</li>
<li><a href="http://blog.arabx.com.au/?p=638">Everything fails, Monitor Everything &#8211; Google</a></li>
</ol>
<p>What I&#8217;ve been working on most briefly lately, and really want to be far more prepared everywhere I go is <b>Monitor Everything</b>.</p>
<p>It&#8217;s so easy on site to just do a <b>vmstat 1</b> in one session and a <b>mysqladmin -r -i extended-status | grep -v &#8221; | 0 &#8220;</b> in another, and you may observe a trend, make some notes, say 25% CPU, 3000 Selects, 4000 Insert/Updates per second etc, but the problem is, the next day you don&#8217;t have actual figures to compare.  What was the table_lock_waits yesterday, they seem high today.</p>
<p>I also only found a problem on a site when I graphed the results.  I&#8217;ll give you a specific example.  The average CPU for the system was 55%, the target was 50%. When graphing the CPU, it was plainly obvious something was not right. I could see with extremely regularity (and count 12 in one hour) a huge CPU spike for a second or two. It was so regular in the graph it was not possible it was random.  So, after further investigation and testing, a 5 minute job on this production server (and not on previous testing servers) took 25% CPU for a second or two, and a huge amount of Page Faults.  Did it effect the overall impact of the performance of the system.  I don&#8217;t know, but it was a significant anonomoly that required investigation.</p>
<p>So, quite simply, always monitor and record so you can later reference, even if you don&#8217;t process the raw figures at the time.  The question is then, &#8220;What do I monitor&#8221;.  Answer, monitor everything.</p>
<p>The problem is with most monitoring, e.g. vmstat and mysqladmin is the lack of a timestamp for easy comparison. It&#8217;s really, really annoying that you can add this to the line output.  The simple solution is to segment your data into both manageable chunks and consistent chunks.</p>
<p><b>Manageable chucks</b> can be as easy as creating log files hourly, ensuring the start exactly at the top of the hour. Use a YYYYMMDD.HHMMSS naming standard for all files and you can never go wrong.<br />
<b>Consistent chunks</b> is to ensure you start all manageable monitor (e.g. hourly) at the exact same time, so you can compare.</p>
<p>You need to monitor at least the following:</p>
<ul>
<li>vmstat</li>
<li>mysqladmin extended-status</li>
<li>mysqladmin processlist</li>
<li>mysqladmin variables</li>
<li>mysqladmin -r -i [n] extended-status | grep -v &#8221; | 0 &#8220;</li>
</ul>
<p>I haven&#8217;t found an appropriate network monitoring, but you should also at that.</p>
<p>The issue here is frequency.  Here are some guidelines. vmstat every 5 seconds. extended-status and processlist every 30 seconds, variables every hour, and extended-status differences is difficult, but it saves a lot of number crunching later for quick analysis.  I do it every second, but not all the time, you need to work out a trigger to enable, or to say run it for 30 seconds every 15-30 minutes.</p>
<p>So in one hour I could have:</p>
<ul>
<li>20070519.160000.os.vmstat.log</li>
<li>20070519.160000.mysql.variables.log</li>
<li>20070519.160000.mysql.status.log</li>
<li>20070519.160000.mysql.processlist.log</li>
<li>20070519.160500.mysql.status.increment.log, then 1610, 1620, 1630 etc</li>
</ul>
<p>I have my own scripts for monitoring under development, and I&#8217;ve been revising slowly, particularly to be able to load data into a MySQL database so I can easily use SQL for analysis.  One thing I actually do is parse files into CSV for easy loading.</p>
<p>There are two tools out there that I&#8217;m reviewing and you should look at.  Mark Leith has written a <a href="http://www.markleith.co.uk/?p=19">Aggregated SHOW STATUS</a> stat pack, and there is also tool called <a href="http://hackmysql.com/mysqlreport">mysqlreport</a>.  These both go some what to ultimately what I want.</p>
<p>I haven&#8217;t used it yet, but I&#8217;ve seen and been very impressed with the simplicity of <a href="http://munin.projects.linpro.no/">Munin</a> for graphing. I really need to get some free time to get this operational.</p>
<p>So <b style="font-size:14pt">Monitor Everything</b> and <b style="font-size:14pt">Graph Everything</b>.    Plenty of work to do here.</p>
]]></content:encoded>
			<wfw:commentRss>http://ronaldbradford.com/blog/everything-fails-monitor-everything-2007-05-20/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The MySQL Conference recap</title>
		<link>http://ronaldbradford.com/blog/the-mysql-conference-recap-2007-05-15/</link>
		<comments>http://ronaldbradford.com/blog/the-mysql-conference-recap-2007-05-15/#comments</comments>
		<pubDate>Tue, 15 May 2007 06:26:08 +0000</pubDate>
		<dc:creator>ronald</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[MySQL User Conferences]]></category>
		<category><![CDATA[Professional]]></category>
		<category><![CDATA[mysqluc07]]></category>

		<guid isPermaLink="false">http://ronaldbradford.com/blog/?p=651</guid>
		<description><![CDATA[
I recently had the opportunity to return and speak at the Brisbane MySQL Users Group.  I spent some time talking about MySQL User Conference 2007 Summary and Life as a Consultant. My summary of  included:

Overview
Keynotes
Marten Mickos &#8211; MySQL
Guy Kawasaki
Michael Evans &#8211; OLPC
Rasmus Lerdorf &#8211; PHP
Paul Tuckfield – YouTube
Community Awards
Product Road Map
Google
Storage Engines
Dorsal Source
What&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><a style="float:right" href="http://www.arabx.com.au/UC2007Summary.pdf"><img src="http://media.ronaldbradford.com/images/type-pdf.gif" border="0"/></a></p>
<p>I recently had the opportunity to return and speak at the <a href="http://mysql.meetup.com/84/">Brisbane MySQL Users Group</a>.  I spent some time talking about <a href="http://www.arabx.com.au/articles.htm">MySQL User Conference 2007 Summary</a> and Life as a Consultant. My summary of  included:</p>
<ul>
<li>Overview</li>
<li>Keynotes</li>
<li>Marten Mickos &#8211; MySQL</li>
<li>Guy Kawasaki</li>
<li>Michael Evans &#8211; OLPC</li>
<li>Rasmus Lerdorf &#8211; PHP</li>
<li>Paul Tuckfield – YouTube</li>
<li>Community Awards</li>
<li>Product Road Map</li>
<li>Google</li>
<li>Storage Engines</li>
<li>Dorsal Source</li>
<li>What&#8217;s Next</li>
</ul>
<p>One question was posed to me. &#8220;What new did MySQL do this year?&#8221; being from the last User Conference.  <a href="http://www.mysql.com">MySQL</a> did seem to not make a great impact at the conference over the successes of the previous year. I had to think some time to come up with the following list.</p>
<ul>
<li>MySQL Network Monitoring and Advisory Service for Enterprise Level Customers <a href="http://www.mysql.com/products/enterprise/advisors.html">Read More</a></li>
<li>MySQL Enterprise and MySQL Community split <a href="http://www.planetmysql.org/kaj/?p=64">Read More</a></li>
<li>MySQL Enterprise Unlimited <a href="http://www.mysql.com/news-and-events/press-release/release_2007_01.html">Read More</a></li>
<li>Pluggable Storage Engine Architecture continuing to become more viable for engines like <a href="http://www.primebase.com/xt/">PBXT</a>, <a href="http://www.mysql.com/news-and-events/news/article_1181.html">Nitro</a> and <a href="http://www.mysql.com/news-and-events/news/article_1180.html">InfoBright</a></li>
<li>Falcon Alpha <a href="http://dev.mysql.com/downloads/mysql/6.0.html">Download</a></li>
<li>Time You Person of the Year, with all websites like <a href="http://www.youtube.com">YouTube</a>, <a href="http://www.wikipedia.org">Wikipedia</a>, <a href="http://www.facebook">FaceBook</a> and <a href="http://flickr.com">Flickr</a> all powered by MySQL. <a href="http://www.time.com/time/magazine/article/0,9171,1569514,00.html">Read More</a></li>
</ul>
<p>And most recently:</p>
<ul>
<li>Open Source Database Vendor Partners with LINBIT to Jointly Promote &#038; Support DRBD for MySQL Enterprise <a href="http://www.mysql.com/news-and-events/press-release/release_1321.html">Read More</a></li>
<li>IBM DB2 as a Certified Storage Engine for MySQL on System i <a href="http://www.mysql.com/news-and-events/press-release/release_2007_06.html">Read More</a></li>
</ul>
<p>It&#8217;s hard to say if these are big ticket items or not, but it is definitely disappointing that 5.1 GA is still MIA. We stay tuned.</p>
<p>I also managed a much better response then from my Conference Presentation opening Slide.</p>
<p><center><br />
&#8220;How can you tell an Oracle DBA has touched your MySQL Installation?&#8221;</p>
<p>MYSQL_HOME=/home/<span style="color: #FF0000"><b>oracle</b></span>/products/mysql-version<br />
mysqld_safe –user=<span style="color: #FF0000"><b>oracle</b></span> &#038;</center></p>
]]></content:encoded>
			<wfw:commentRss>http://ronaldbradford.com/blog/the-mysql-conference-recap-2007-05-15/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Cluster Certified</title>
		<link>http://ronaldbradford.com/blog/mysql-cluster-certified-2007-04-28/</link>
		<comments>http://ronaldbradford.com/blog/mysql-cluster-certified-2007-04-28/#comments</comments>
		<pubDate>Sat, 28 Apr 2007 02:31:21 +0000</pubDate>
		<dc:creator>ronald</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[mysqluc07]]></category>

		<guid isPermaLink="false">http://ronaldbradford.com/blog/?p=643</guid>
		<description><![CDATA[Jonathon Coombes recently blogged in MySQL Cluster Certified that he passed the MySQL Cluster DBA Certification as was the first Australian. Lucky for him I passed the exam after my presentation on the second day of the conference.  I guess us Australian&#8217;s are leading the world!
As Jonathon said it was rather hard, certainly more [...]]]></description>
			<content:encoded><![CDATA[<p>Jonathon Coombes recently blogged in <a href="http://www.cybersite.com.au/databases/cluster_certified" target="_blank">MySQL Cluster Certified</a> that he passed the <a href="http://mysql.com/certification/">MySQL Cluster DBA Certification</a> as was the first Australian. Lucky for him I passed the exam after my presentation on the second day of the conference.  I guess us Australian&#8217;s are leading the world!</p>
<p>As Jonathon said it was rather hard, certainly more difficult then the other DBA exams but nothing for an experienced Cluster DBA.</p>
]]></content:encoded>
			<wfw:commentRss>http://ronaldbradford.com/blog/mysql-cluster-certified-2007-04-28/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Conference &#8211; YouTube</title>
		<link>http://ronaldbradford.com/blog/mysql-conference-youtube-2007-04-27/</link>
		<comments>http://ronaldbradford.com/blog/mysql-conference-youtube-2007-04-27/#comments</comments>
		<pubDate>Fri, 27 Apr 2007 03:19:16 +0000</pubDate>
		<dc:creator>ronald</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[mysqluc07]]></category>

		<guid isPermaLink="false">http://ronaldbradford.com/blog/?p=634</guid>
		<description><![CDATA[MySQL Conference 2007 Day 4 rolled quickly into the second keynote Scaling MySQL at YouTube  by Paul Tuckfield.
The introduction by Paul Tuckfield  was; &#8220;What do I know about anything, I was just the DBA at PayPal, now I&#8217;m just the DBA at youTube.  There are only 3 DBA&#8217;s at YouTube.&#8221;
This talk had [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mysqlconf.com/" target="_blank">MySQL Conference 2007</a> Day 4 rolled quickly into the second keynote <a href="http://mysqlconf.com/cs/mysqluc2007/view/e_sess/14292">Scaling MySQL at YouTube</a>  by Paul Tuckfield.</p>
<p>The introduction by Paul Tuckfield  was; &#8220;What do I know about anything, I was just the DBA at PayPal, now I&#8217;m just the DBA at youTube.  There are only 3 DBA&#8217;s at YouTube.&#8221;</p>
<p>This talk had a number of great performance points, with various caching situations. Very interesting.</p>
<p><b>Scaling MySQL at YouTube</b></p>
<p><b>Top Reasons for YouTube Scalability</b></p>
<p>The technology stack:</p>
<ul>
<li>Python</li>
<li>Memcache</li>
<li>MySQL Replication</li>
</ul>
<p>Caching outside the database is huge.</p>
<p>It a display of numbers of hits per day it was said  &#8220;I can neither confirm or deny the interpretation will work here (using an Alexa graph)&#8221;. This is not the first time I&#8217;ve heard this standard &#8220;Google&#8221; response. They must get lessons by lawyers in what you can say.</p>
<p><b>Standardizing on DB boxes (but they crash almost daily)</b></p>
<ul>
<li>4&#215;2ghz opteron core</li>
<li>16G RAM</li>
<li>12&#215;10k scsi</li>
<li>LSI hardware raid 10</li>
<li>Replication played a big part in fixing</li>
<li>Get a reliable H/W supplier</li>
</ul>
<p><b>Replication Lessons</b></p>
<ul>
<li>You don&#8217;t worry about it when a replicas fail.</li>
<li>One thing that sucks, Innodb doesn&#8217;t recover very fast.  It does that durability think, but it takes hours to finish recovering (was it going to finish)</li>
<li>How many backups can you restore.  When you switch you a replica, are you sure it&#8217;s right?</li>
<li>Did you test recovery, did you test your backups.</li>
<li>replication was key to trying different H/W permutations to identify incompatible H/W   (combinations of controllers/disks)</li>
<li>we got good at re-parenting/promoting replicas, really fast</li>
<li>we built up ways to clone databases as fast as possible </li>
<li>Excellent way to test tuning changes or fixes  (powerful place to test things)</li>
<li><u>Keep &#8220;intentional lag&#8221;/Stemcell replicas  &#8211; Stop SQL thread,  keeps a server a few hours or a day behind.  Say if you drop a table you have a online backup.</u></li>
<li>When upgrading, always mysqldump then reload, rather then upgrade database.</li>
<li>Don&#8217;t care about CPU&#8217;s.  I want as much memory as possible, <u>I want as many spindles as possible.</u></li>
<li>For YouTube 2-3 second lag is acceptable.</li>
</ul>
<p><b>If you db fits in ram, great otherwise</b></p>
<ul>
<li>Cache is king</li>
<li>Writes should be cached by raid controller (buffered really) not the OS</li>
<li>Only the db should cache reads (not raid, not Linux buffer cache)</li>
</ul>
<p><b>Only DB should cache reads</b></p>
<ul>
<li>Hit in db cache means lower caches went unused.</li>
<li>Miss in db cache can only miss in other caches since they&#8217;re smaller.</li>
<li>Caching reads is worse then useless. It&#8217;s serialized writes.</li>
<li>Avoiding serialization in reads reaps compounds benefits under high concurrency</li>
</ul>
<p>An important lesson learned. Do no cache reads in F/S and Raid Controller.</p>
<p><b>Caching Lessons</b><br />
Overcoming Mystery Serialization</p>
<ul>
<li>Use O_DIRECT</li>
<li>vm.swappiness=1-5</li>
<li>if you&#8217;re >80% buys &#8212; your not doing I/O concurrently  look at other figures e.g. 80% busy 8 I/O&#8217;s, next configuration 80%, only 4 I/O&#8217;s</li>
<li>Mirror in H/W strip in S/W</li>
</ul>
<p><b>Scale Out</b></p>
<ul>
<li>Writes are parallel to master, but serialized to replicas. We need true horizontal partitioning.</li>
<li>We want true independent masters</li>
<li>EMD &#8211; Even More Databases &#8212; Extreme Makeover Database</li>
<li>Slave transactions must serialize to preserve commit order (this is why replication is always way slower)</li>
<li>The oracle caching algorithm (that&#8217;s a small o) &#8212; predicting the future</li>
<li>Replication lags: one IO bound thread.  You do know the future, commands are coming up serially.</li>
<li><u>Write a script to do reads, before updates coming up (because they are cache hits)</u>.</li>
<li>The diamond.  For golive, play shards binlogs back to original master for fallback.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ronaldbradford.com/blog/mysql-conference-youtube-2007-04-27/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Conference &#8211; Get Behind Dorsal Source</title>
		<link>http://ronaldbradford.com/blog/mysql-conference-get-behind-dorsal-source-2007-04-27/</link>
		<comments>http://ronaldbradford.com/blog/mysql-conference-get-behind-dorsal-source-2007-04-27/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 22:11:45 +0000</pubDate>
		<dc:creator>ronald</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[mysqluc07]]></category>

		<guid isPermaLink="false">http://ronaldbradford.com/blog/?p=637</guid>
		<description><![CDATA[
In a community session yesterday at MySQL Conference 2007,  I first heard about Dorsal Source. A collaboration between Solid DB and  Proven Scaling that allows for community people to upload patches to MySQL, get it compiled across multiple platforms, and have a downloadable distribution available on H/W individual contributors will never have access [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.dorsalsource.org/themes/bluebreeze/logo.png" style="float:right; margin:20px"/><br />
In a community session yesterday at <a href="http://mysqlconf.com/" target="_blank">MySQL Conference 2007</a>,  I first heard about <a href="http://www.dorsalsource.org/">Dorsal Source</a>. A collaboration between <a href="http://soliddb.com">Solid DB</a> and  <a href="http://www.provenscaling.com">Proven Scaling</a> that allows for community people to upload patches to <a href="http://www.mysql.com">MySQL</a>, get it compiled across multiple platforms, and have a downloadable distribution available on H/W individual contributors will never have access to.</p>
<p>That&#8217;s a great idea. I also hope we get the opportunity to get compiling of patches into multiple versions, as well to get builds of a lot of patches together.  Personally, I&#8217;m running 3 versions just to diagnose one problem.  5.0.36 with a custom binary change, 5.0.37 so I have SHOW PROFILE, and 5.0.33 so I have microslow patch.</p>
<p>With new patches becoming available from the community, I hope I can see builds that combine all known patches that <a href="http://www.dorsalsource.org/">Dorsal Source</a> may have.</p>
<p>I think this is going to be a great project.</p>
]]></content:encoded>
			<wfw:commentRss>http://ronaldbradford.com/blog/mysql-conference-get-behind-dorsal-source-2007-04-27/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Conference &#8211; PHP on Hormones</title>
		<link>http://ronaldbradford.com/blog/mysql-conference-php-on-hormones-2007-04-27/</link>
		<comments>http://ronaldbradford.com/blog/mysql-conference-php-on-hormones-2007-04-27/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 22:06:33 +0000</pubDate>
		<dc:creator>ronald</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[mysqluc07]]></category>

		<guid isPermaLink="false">http://ronaldbradford.com/blog/?p=632</guid>
		<description><![CDATA[MySQL Conference 2007 Day 4 started early again at 8:20 am with PHP on Hormones  by the father of PHP Ramus Lerdorf.
A very funny man, one of the best insightful talks of the conference (rather scary actually). Here are some opening comments.

In his own words as Keynote speaker.  &#8220;I&#8217;m here because I&#8217;m old&#8221;.
Php [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mysqlconf.com/" target="_blank">MySQL Conference 2007</a> Day 4 started early again at 8:20 am with <a href="http://mysqlconf.com/cs/mysqluc2007/view/e_sess/14281">PHP on Hormones</a>  by the father of PHP Ramus Lerdorf.</p>
<p>A very funny man, one of the best insightful talks of the conference (rather scary actually). Here are some opening comments.</p>
<ul>
<li>In his own words as Keynote speaker.  &#8220;I&#8217;m here because I&#8217;m old&#8221;.</li>
<li>Php 1 from 1994 started after seeing Mozilla in 1993. Because it was just me using it, I could change the language any time.</li>
<li>In 2005 the code looks like this  (in comparison on 1995) &#8212; I&#8217;m not sure if this is worth 10 years of development</li>
<li>I wrote PHP to avoid programming</li>
<li>It&#8217;s changed to be more OO because people expect that. Universities teach this.</li>
<li>Hey, I was fixing bugs in my sleep.  Iwould wake up, and in my mail box there would be bug fixes to bugs I didn&#8217;t even know I had.</li>
</ul>
<p><b>Why do people contribute?</b></p>
<ul>
<li>Self-interest</li>
<li>self expression</li>
<li>hormones</li>
<li>Improve the world</li>
</ul>
<p>The slide included a great Chemical equation of &#8220;The Neuropeptide oxytocin&#8221; &#8212;  Nature&#8217;s trust hormone</p>
<p><i>People need to attract other people, it makes you feel good, it comes out when you interact with people.</i></p>
<p><b>It&#8217;s not what people think about you, but rather what they think about themselves.</b></p>
<ul>
<li>PHP was my baby, giving up control, just because I started it, doesn&#8217;t mean I have a bigger say in it.</li>
<li>Systems that harness network effects and get better the more people use them in a way that caters to their own self-interest. &#8212; Web 2.0</li>
<li>Once you build a framework your done, the users build the site, they drive the content.</li>
<li>The same people that work on open source projects, are the same people that use websites.
<ul>
<li>Self-interest</li>
<li>self expression</li>
<li>hormones</li>
<li>Improve the world</li>
</ul>
</li>
</ul>
<p><b>1. Performance</b><br />
It your sites falls apart your done.</p>
<ul>
<li>Benchmark
<ul>
<li>http_load</li>
<li>Callgrind inside valgrind</li>
<li>XDebug</li>
</ul>
</li>
</ul>
<p><b>valgrind &#8211;tool=callgrind</b></p>
<ul>
<li>Excellent tool to see where time is spent in the code.  You have to run a profiler.</li>
<li>
</li>
<li>Example of using Drupal.  It turns out 50% of time was spent in the them, it had  47 SQL queries, 46 Selects.</li>
<li>
</li>
<li>Went from 4 per second to 80 per second, without any code changes. Some performance options, and some caching.</li>
<li>
</li>
<li>Guaranteed you can double the speed of your website by using a profiler.</li>
</ul>
<p><b>2. Security</b><br />
Critical problem areas.</p>
<ul>
<li>404 pages</li>
<li>Search page</li>
<li>PHP_SELF</li>
<li>$_GET, $_POST, $_COOKIE</li>
<li>$_SERVER</li>
<li>Lots of stupidity in IE  (e.g. Always send a charset)</li>
</ul>
<p><b style="font-size:14pt">The web is broken you can all go home now.</b></p>
<p>People are venerable because people run older versions of browsers, and their data is not secure, and you can&#8217;t secure their data.</p>
<p><b>What can happen??</b><br />
9 out of 10 of you have cross-site scripting hole on your site</p>
<p>Remote Greasemonkey<br />
Profile Hacks<br />
JS Trojans</p>
<p>Added a PHP logo to the MySQL User Website, it&#8217;s really the PHP website<br />
IBM webpage, on article about security.</p>
<p>Tool to find holes,   banks, insurance companies, CIA, even Yahoo where I work.</p>
<p>You know if they have been to bankofamerica.com,  you can tell if they are a customer, you can tell if they are logged, you can then see their cookie credentials.</p>
<p>You don&#8217;t know if any sites have these problems.</p>
<p>JS trojan, iframe that captures<br />
reconfigures your wireless router, moves it outside your DMZ, then uses traditional techniques to attack your machine (that you thought was secure inside a firewall)</p>
<p>You should never ever click on a link. It sort of defeats the purpose of the web.</p>
<p>Never use the same browser instance to do personal stuff and browsing.</p>
<p>So what are we doing about this?<br />
There isn&#8217;t much we (PHP) can do to secure sites developed.<br />
Built a filter extension in 5.2, back in 5.1.</p>
<p>http://php.net/filter   *** YOU MUST IMPLEMENT THIS<br />
filter.default=special_chars</p>
<p><b>3. APIs are Cool!</b></p>
<p>Two lines to grap the Atom feed from flickr of photos just uploaded.<br />
That&#8217;s all I have to add to my code.</p>
<p>The really make you want to use the servers. It&#8217;s so easy.</p>
<p>API drives passion, drive people to use your site.<br />
You can add a lot of cool things to your sites.</p>
<p><b>What to do</b></p>
<ul>
<li>Avoid Participation Gimmicks</li>
<li>Get their Oxytocin flowing</li>
<li>Solve <b>One</b> Problem</li>
<li>Clean and Intuitive UI</li>
<li>API&#8217;s</li>
<li>Make it work</li>
</ul>
<p>A full copy of the slides can be found at <a href="http://talks.php.net/show/mysql07key">http://talks.php.net/show/mysql07key</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ronaldbradford.com/blog/mysql-conference-php-on-hormones-2007-04-27/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Conference &#8211; Google</title>
		<link>http://ronaldbradford.com/blog/mysql-conference-google-2007-04-27/</link>
		<comments>http://ronaldbradford.com/blog/mysql-conference-google-2007-04-27/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 18:10:39 +0000</pubDate>
		<dc:creator>ronald</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Professional]]></category>
		<category><![CDATA[mysqluc07]]></category>

		<guid isPermaLink="false">http://ronaldbradford.com/blog/?p=638</guid>
		<description><![CDATA[MySQL: The Real Grid Database
Introduction

Can&#8217;t work on performance problems until we solve the availability
We want MySQL to fix our problems first.

The problem

Deploy a DBMS for a workload with

too many queries
to many transactions
to much data



A well known solution
deploy a grid database
-use many replicas to scale read performance
-shard your data over many master to scale write performance
-sharding [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mysqlconf.com/cs/mysqluc2007/view/e_sess/12484">MySQL: The Real Grid Database</a></p>
<p><b>Introduction</b></p>
<ul>
<li>Can&#8217;t work on performance problems until we solve the availability</li>
<li>We want MySQL to fix our problems first.</li>
</ul>
<p><b>The problem</b></p>
<ul>
<li>Deploy a DBMS for a workload with
<ul>
<li>too many queries</li>
<li>to many transactions</li>
<li>to much data</li>
</ul>
</li>
</ul>
<p><b>A well known solution</b></p>
<li>deploy a grid database</li>
<p>-use many replicas to scale read performance<br />
-shard your data over many master to scale write performance<br />
-sharding is easy, resharding is hard</p>
<li>availability and manageability trump performance</li>
<p>- make it easy to run many severs<br />
- unbretable aggregate perfomance</p>
<li>we describe problems that matter to us.</li>
<p><b>The grid database approach</b></p>
<ul>
<li>Deploy a large number of small servers</li>
<li>use highly redundant commodity components</li>
<li>added capacity has a low incremental cost</li>
<li>not much capacity lost when a server fails</li>
<li>support many servers with a few DBAs</li>
</ul>
<p><b>Managability</b><br />
Make it easy to do the tasks that must be done. Reduce, Reduce.<br />
Make all tasks scriptable<br />
Why does it mater, support hundreds of servers, spend time solving more interesting problems. You generally have lots of problems to solve.</p>
<p><b>Underutilize your severs</b><br />
Require less maintenance<br />
Requre less tuning<br />
tolerate load spikes better<br />
tolerate bad query plans better</p>
<p><b>In a Perfect World</b><br />
Short running queries<br />
uses kill mistake and runaway queries<br />
accounts new use to many connections<br />
query plans are good<br />
new apps increase database workload by a small amount<br />
only appropiate date is stored in the database</p>
<p><b>Reality</b></p>
<ul>
<li>Long running transactions, create replication delays everywhere</li>
<li>servers with round robin DNS aliases make queries hard to find</li>
<li>applications create more connections where the database is slow</li>
<li>some storage engines use sampling to get query plan statistics</li>
<li>new applications create new database performance problems</li>
<li>applications use the database as long as rows are never deleted</li>
<li>many long running queries on replicas</li>
</ul>
<p><b>Solutions</b></p>
<ul>
<li>Improve your ability to respond because prevention is impossible</li>
<li>Need tools to make monitoring easier</li>
<li>determine what is happening across servers</li>
<li>detemine what happened in the past</li>
</ul>
<p><b>Mantra</b></p>
<ul>
<li>Monitor everything you can, and archive as long as possible.  (vmstat 5 secs, iostat, mysql error logs)</li>
<li>You will need these to reconstruct failures</li>
<li>save as much as possible</li>
<li>script as much as possible</li>
</ul>
<p><b>Monitoring Matters</b></p>
<ul>
<li>Display what is happening</li>
<p>-which table, account or statemsns caused most of the load<br />
-many fast queries can be as much a problem as one slow query</p>
<li>Record what happending</li>
<p>&#8211;archivce show status counters somweere<br />
- query data from the archive<br />
&#8211; visualise data from the archivce</p>
<li>record queries that have been run</li>
<p>&#8211; archive show processlist output  (do every 30 seconds)<br />
&#8211; support queries on this archive</p>
<li>All of this much scale to an environment with many servers</li>
</ul>
<p><b>Monitoring Tools</b></p>
<ul>
<li>Display counters and rate change for counters</li>
<li>aggregate values over many servers</li>
<li>visualize and rang results</li>
<li>display results over time</li>
</ul>
<p>Google mpgrep tools</p>
<p><b>New Commands</b><br />
We changed mysql, three new commands<br />
SHOW USER _STATISTICS<br />
SHOW TABLE STATISTICS<br />
SHOW INDEX STATISTICS</p>
<p><b>Per Account Activity</b><br />
USER_STATISTICS<br />
seconds executing commands<br />
number of rows fetched and changed<br />
total connections<br />
number of select/updates/other/commits/rollback/binlog bytes written.</p>
<p>TABLE STATISTICS<br />
number of rows fetched/changed</p>
<p>INDEX STATISTICS<br />
display number of rows fetched per index<br />
helps find indexes that are never used</p>
<p>available in code.google.com in 4.0, porting to 5.0</p>
<p><b>MySQL High Availability</b></p>
<ul>
<li>Great options
<ul>
<li>Cluster</li>
<li>Replication</li>
<li>Middelware &#8212; e.g. continum</li>
<li>DRBD</li>
</ul>
</li>
<li>We need some features right now</li>
<li>we are committed to innodb and mysql replication</li>
<p>*a lot of appplicaton code works on this<br />
*our tools and processed support this</p>
<li>We favor commodity hardware</li>
</ul>
<p>There are all great features  but we are much more limited in what we can use.<br />
Management want to know we don&#8217;t loose transactions, not loose some transactions.</p>
<p><b>Desired HA Functionality</b></p>
<ul>
<li>Zero transaction loss on failures of a master</li>
<li>minimal downtime on failures of a master</li>
<li>reasonable cost in performance and dollars</li>
<li>fast and automatic failover to local or remove server</li>
<li>no changes to our programming model
<ul>
<li>does it support MVCC</li>
<p>does it support long running transactions (5 mins &#8211; populate temp table then use to update another table, changing rows), 5 mins on master, causes 5 mins on slave, causes code to failover from slaves to master</ul>
</li>
<li>replication and reporting are concurrent on a slave</li>
</ul>
<p>MVCC must have update concurrent with query.</p>
<p><b>Failures happen everywhere</b><br />
OS &#8211; kernal oom or panic (older 2.4 32 bit systems)<br />
mysqld &#8211; caused also by code we added<br />
disk, misdirected write, corrupt write (love innodb checksums)<br />
file system &#8211; inconsisted after unplanned hardware reboot (use ext2)<br />
server &#8211; bad RAM<br />
lan, switch &#8211; lose<br />
Rack &#8211; reboot<br />
Data center &#8211; power loss, overheading, lightning, fire<br />
People &#8211; things get killed or rebooted by mistake  ( a typo can take out the wrong server, when names differ by a character or a digit)</p>
<p>ext2 and 4.0 are great, there are the same generation.<br />
Trying not to use RAID, not battery backed raid etc, we try work around with software solutions. We do use RAID 0,  but we also try software solution.<br />
When we have the right HA solution, we won&#8217;t need RAID.</p>
<p>Mark. &#8220;Yes, Google programmers have bugs. Not me personally, it was my predecessor.&#8221;</p>
<p><b>HA Features we want in MySQL</b><br />
Synchronous replication as an option<br />
a product that watches a master and initiates a failover<br />
archives of the master binlogs stored elsewhere<br />
state stored in the filesytstem t obe consistent after a crash<br />
. innodb and mysql dictionaries can get out of sync<br />
.replicatoin state on a slave can get out of sync</p>
<p><b>We could not wait</b><br />
Features we added to MySQL 4.0.26<br />
We can do things a lot faster<br />
. we have more developers lying around<br />
. Our needs as specific, not a general product solution</p>
<p>Transactional replications for slaves<br />
semi-synchronous replication<br />
mirrored binlogs<br />
fast and automated failover</p>
<p><b>Transactional Replication</b><br />
Replication state on a slave is stored in files<br />
slave sql thread commits to storage engines and then updates a file<br />
a crash between the two can make replication state inconsistent<br />
transactional replication<br />
MySQL can solve this in the future by storing replication state in tables</p>
<p><b>Semi-synchronous replication</b><br />
Block return from commit on a master until at least one slave has acknowledged receipt of<br />
slave io thread acknowledges receipt after buffering the changes<br />
modified mysql replication protocol to support acknowledgments<br />
conifuration options<br />
where to the master uses it<br />
where a slave used it<br />
how long the maser waits for an acknowledgement</p>
<p>can run a server with some semi-sync replication slaves and some regulare replication salves<br />
this can be worked with any storage engines that supports commit, but we only use innodb</p>
<p>* This is how we guarantee to management for Zero Transaction Loss.</p>
<p>Latency single stream 1ms, multi-stream 10ms. This is acceptable for us.</p>
<p><b>The MySQL Replication Protocol</b></p>
<ul>
<li>The current replication protocol is efficient</li>
<li>a slaves makes one request</li>
</ul>
<p><b>Replication Acknowledgment</b></p>
<ul>
Slaves register as semi-sync or async at connect time<br />
prepend flag bytes to all replication events sent to semi-sync clients<br />
the master sends the flag bytes to request acknowledged for replication events that represent the end of the transaction<br />
the slave use the existing connection for acknowledgments
</ul>
<p><b>Mirrored Binlogs</b><br />
mysql does not provide a way to maintain a copy of a master&#8217;s binlog on a replica. By copy we me a file of same name and equivalent byte for byte.<br />
Hierarachial replication works much better where a slave can disconnect from one replication proxy and reconnect to another with adjusting binlog offsets.<br />
Hot backups taken before a failover and difficult to use after a failover</p>
<p><b>Mirrored Binlog Implementions</b><br />
Slave IO threads write their own relay log and a copy of the bin log<br />
all events but the rotate log event are written</p>
<p>After failover, start a new binlog on new master</p>
<p><b>Fast Failover</b></p>
<p>Slaves use a hostname, rather then an IP<br />
You can&#8217;t enable the binlog dynamically (in 4.0)<br />
Added new SQL STATEMENTS that does<br />
disconnect users with SUPER privilege<br />
disable new connections<br />
enable the bin log<br />
enable connections from all users</p>
<p><b>Automatic failover</b><br />
Something must decided that a master has failed<br />
Something must choose the new master</p>
<p>Q: What keeps up from moving to 5.0?<br />
A: Queries don&#8217;t parse (Joins)</p>
<p>Data sets, 8GB servers, 50-100GB&#8217;s</p>
]]></content:encoded>
			<wfw:commentRss>http://ronaldbradford.com/blog/mysql-conference-google-2007-04-27/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quote &#8211; 26 April 2007</title>
		<link>http://ronaldbradford.com/blog/quote-26-april-2007-2007-04-27/</link>
		<comments>http://ronaldbradford.com/blog/quote-26-april-2007-2007-04-27/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 17:13:07 +0000</pubDate>
		<dc:creator>ronald</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[MySQL User Conferences]]></category>
		<category><![CDATA[Professional]]></category>
		<category><![CDATA[mysqluc07]]></category>

		<guid isPermaLink="false">http://ronaldbradford.com/blog/?p=636</guid>
		<description><![CDATA[&#8220;The web is broken you can all go home now.&#8221;
Ramus Lerdorf &#8212; Father of PHP &#8212; MySQL Conference 2007
]]></description>
			<content:encoded><![CDATA[<div style="font-size:14pt;font-weight:bold; text-align:center; margin:20px">&#8220;The web is broken you can all go home now.&#8221;</div>
<p><i>Ramus Lerdorf &#8212; Father of PHP &#8212; MySQL Conference 2007</i></p>
]]></content:encoded>
			<wfw:commentRss>http://ronaldbradford.com/blog/quote-26-april-2007-2007-04-27/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quote &#8211; 25 April 2007</title>
		<link>http://ronaldbradford.com/blog/quote-25-april-2007-2007-04-26/</link>
		<comments>http://ronaldbradford.com/blog/quote-25-april-2007-2007-04-26/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 06:12:02 +0000</pubDate>
		<dc:creator>ronald</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[MySQL User Conferences]]></category>
		<category><![CDATA[Professional]]></category>
		<category><![CDATA[mysqluc07]]></category>

		<guid isPermaLink="false">http://ronaldbradford.com/blog/?p=633</guid>
		<description><![CDATA[
&#8220;Don&#8217;t complain, do something about it&#8221;

Baron Schwartz &#8211; Creator of MySQL Toolkit &#8212; MySQL Conference 2007
]]></description>
			<content:encoded><![CDATA[<div style="font-size:14pt;font-weight:bold; text-align:center; margin:20px">
&#8220;Don&#8217;t complain, do something about it&#8221;
</div>
<p><i>Baron Schwartz &#8211; Creator of MySQL Toolkit &#8212; MySQL Conference 2007</i></p>
]]></content:encoded>
			<wfw:commentRss>http://ronaldbradford.com/blog/quote-25-april-2007-2007-04-26/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Roadmap</title>
		<link>http://ronaldbradford.com/blog/mysql-roadmap-2007-04-26/</link>
		<comments>http://ronaldbradford.com/blog/mysql-roadmap-2007-04-26/#comments</comments>
		<pubDate>Wed, 25 Apr 2007 22:20:02 +0000</pubDate>
		<dc:creator>ronald</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[mysqluc07]]></category>

		<guid isPermaLink="false">http://ronaldbradford.com/blog/?p=631</guid>
		<description><![CDATA[Here are some notes from the MySQL Server Roadmap session at the MySQL Conference 2007.
MySQL: Past and Future

2001: 3:23
2003: 4.0 UNION query Cache Embedded
2004: 41. Subqueries
2005: 5.0 Stored Procedures, Triggers, Views
Now: 5.1.17 Partitioning, Events, Row-based replication
2007?: 6.0 Falcon, Performance, Conflict detection
2008?: 6.1 Online Backup, FK Constraints

2007 Timeline

Q1: 5.1 Beta, 5.1 Telco Production Ready, Monitoring Service [...]]]></description>
			<content:encoded><![CDATA[<p>Here are some notes from the <a href="http://mysqlconf.com/cs/mysqluc2007/view/e_sess/12492">MySQL Server Roadmap</a> session at the <a href="http://mysqlconf.com/" target="_blank">MySQL Conference 2007</a>.</p>
<p><b>MySQL: Past and Future</b></p>
<ul>
<li>2001: 3:23</li>
<li>2003: 4.0 UNION query Cache Embedded</li>
<li>2004: 41. Subqueries</li>
<li>2005: 5.0 Stored Procedures, Triggers, Views</li>
<li>Now: 5.1.17 Partitioning, Events, Row-based replication</li>
<li>2007?: 6.0 Falcon, Performance, Conflict detection</li>
<li>2008?: 6.1 Online Backup, FK Constraints</li>
</ul>
<p><b>2007 Timeline</b></p>
<ul>
<li>Q1: 5.1 Beta, 5.1 Telco Production Ready, Monitoring Service 1.1, MySQL 6.0 Alpha, Community GA</li>
<li>Q2: MySQL 6.0 Beta, New Connectors GA</li>
<li>Q3: 5.1 RC, 6.0 Beta, MS 2.0, Enterprise Dashboard beta</li>
<li>Q4: 5.1 GA, 6.0 Beta </li>
</ul>
<p><b>Where are we today?</b></p>
<ul>
<li>We are by fare the most populate open source database</li>
<li>The Enterprise world is moving online and MySQL is well-positioned for that trend, But:
<ul>
<li>Transactional scalability</li>
<li>Manageability</li>
<li>Specific online features</li>
</ul>
</li>
</ul>
<p><b>MySQL Server Vision &#8211; The Future</b></p>
<ul>
<li>Always Online    &#8212; 24&#215;7, Online backup,online analytics, online schema changes</li>
<li>Dynamic Scale-out &#8212; online partitioning, add node, replication aides,</li>
<li>Reliable &#8212; fault-tolerant, easy disagnosis, stable memory, ultimately self-healing</li>
<li>High-performance &#8212; Interactive web, real-time response, apps, 10,000-100,000 clients </li>
<li>Ease of use &#8212; Portable, Best for development, multiple connectors, easy tuning</li>
<li>Modularity and Ubiquity &#8212; Storage engines, plug ins</li>
</ul>
<p><b>How can you help?</b></p>
<ul>
<li>Bug finding and fixing &#8212; Community Quality Contributor</li>
<li>Feature/patch contribution</li>
<li>But, to expedite your patch</li>
</ul>
<p>The goal: <b style="font-size:14pt">&#8220;Be the Best Online Database for Modern Applications&#8221;</b></p>
]]></content:encoded>
			<wfw:commentRss>http://ronaldbradford.com/blog/mysql-roadmap-2007-04-26/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
