<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Book review: Optimizing Oracle Peformance</title>
	<atom:link href="http://hackmysql.com/blog/2010/01/06/book-review-optimizing-oracle-peformance/feed/" rel="self" type="application/rss+xml" />
	<link>http://hackmysql.com/blog/2010/01/06/book-review-optimizing-oracle-peformance/</link>
	<description>Dolphins and camels, oh my!</description>
	<lastBuildDate>Fri, 08 Jan 2010 04:37:33 -0800</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Shlomi Noach</title>
		<link>http://hackmysql.com/blog/2010/01/06/book-review-optimizing-oracle-peformance/comment-page-1/#comment-513</link>
		<dc:creator>Shlomi Noach</dc:creator>
		<pubDate>Fri, 08 Jan 2010 04:37:33 +0000</pubDate>
		<guid isPermaLink="false">http://hackmysql.com/blog/?p=98#comment-513</guid>
		<description>Hi Cary,

100% agree to all of the above

Shlomi</description>
		<content:encoded><![CDATA[<p>Hi Cary,</p>
<p>100% agree to all of the above</p>
<p>Shlomi</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Cary Millsap</title>
		<link>http://hackmysql.com/blog/2010/01/06/book-review-optimizing-oracle-peformance/comment-page-1/#comment-512</link>
		<dc:creator>Cary Millsap</dc:creator>
		<pubDate>Thu, 07 Jan 2010 19:16:32 +0000</pubDate>
		<guid isPermaLink="false">http://hackmysql.com/blog/?p=98#comment-512</guid>
		<description>Shlomi,

I agree with your idea that it&#039;s difficult to create an environment in which you&#039;ll foresee all your production problems in advance of actually encountering those problems in production. But I think the following points are important:

...You&#039;ll catch a lot more problems if you try to catch them prior to production than if you don&#039;t even try. I think a lot of people don&#039;t even try because they feel it would be futile to execute any plan that&#039;s provably imperfect from the outset!

...You&#039;ll never catch all your problems in pre-production testing. That&#039;s why you need a reliable and fast method for solving the problems that leak through your pre-production testing processes.

Somewhere in the middle between &quot;no testing&quot; and &quot;full production emulation&quot; is the *right* amount of testing.

My main point about Method R, though, is that &lt;a href=&quot;http://carymillsap.blogspot.com/search?q=profiling&quot; rel=&quot;nofollow&quot;&gt;*profiling*&lt;/a&gt; is an absolutely essential part of the software life cycle: in production, yes, but also long before then, early in the development of the software too. That, in fact, (and this was Knuth&#039;s point) is where profiling is the *most* important.

—Cary</description>
		<content:encoded><![CDATA[<p>Shlomi,</p>
<p>I agree with your idea that it&#8217;s difficult to create an environment in which you&#8217;ll foresee all your production problems in advance of actually encountering those problems in production. But I think the following points are important:</p>
<p>&#8230;You&#8217;ll catch a lot more problems if you try to catch them prior to production than if you don&#8217;t even try. I think a lot of people don&#8217;t even try because they feel it would be futile to execute any plan that&#8217;s provably imperfect from the outset!</p>
<p>&#8230;You&#8217;ll never catch all your problems in pre-production testing. That&#8217;s why you need a reliable and fast method for solving the problems that leak through your pre-production testing processes.</p>
<p>Somewhere in the middle between &#8220;no testing&#8221; and &#8220;full production emulation&#8221; is the *right* amount of testing.</p>
<p>My main point about Method R, though, is that <a href="http://carymillsap.blogspot.com/search?q=profiling" rel="nofollow">*profiling*</a> is an absolutely essential part of the software life cycle: in production, yes, but also long before then, early in the development of the software too. That, in fact, (and this was Knuth&#8217;s point) is where profiling is the *most* important.</p>
<p>—Cary</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shlomi Noach</title>
		<link>http://hackmysql.com/blog/2010/01/06/book-review-optimizing-oracle-peformance/comment-page-1/#comment-511</link>
		<dc:creator>Shlomi Noach</dc:creator>
		<pubDate>Thu, 07 Jan 2010 18:49:48 +0000</pubDate>
		<guid isPermaLink="false">http://hackmysql.com/blog/?p=98#comment-511</guid>
		<description>Hi Cary,
Many thanks. 
Though, even as you suggest, it would be impossible to actually measure the performance of that task which is most important to the customer, since real-life load tests may not be achieved; it is therefore back to estimations, is it not?
But I&#039;m not talking about estimation per se. I&#039;m referring to basic, reasonable table_query design. Of course, that query which only runs twice per day, is not that important. And of course, that query which is used extensively throughout the day should be taken care of. And I see this as the very basic question a consultant should ask the customer.
If I understand correctly your comment, it&#039;s basically the same thing.
Only in preactive mode it cannot be truely measured, so it&#039;s not technically deterministic and correct.

Again, I enjoy reading through your book!

Regards</description>
		<content:encoded><![CDATA[<p>Hi Cary,<br />
Many thanks.<br />
Though, even as you suggest, it would be impossible to actually measure the performance of that task which is most important to the customer, since real-life load tests may not be achieved; it is therefore back to estimations, is it not?<br />
But I&#8217;m not talking about estimation per se. I&#8217;m referring to basic, reasonable table_query design. Of course, that query which only runs twice per day, is not that important. And of course, that query which is used extensively throughout the day should be taken care of. And I see this as the very basic question a consultant should ask the customer.<br />
If I understand correctly your comment, it&#8217;s basically the same thing.<br />
Only in preactive mode it cannot be truely measured, so it&#8217;s not technically deterministic and correct.</p>
<p>Again, I enjoy reading through your book!</p>
<p>Regards</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Cary Millsap</title>
		<link>http://hackmysql.com/blog/2010/01/06/book-review-optimizing-oracle-peformance/comment-page-1/#comment-510</link>
		<dc:creator>Cary Millsap</dc:creator>
		<pubDate>Thu, 07 Jan 2010 17:38:00 +0000</pubDate>
		<guid isPermaLink="false">http://hackmysql.com/blog/?p=98#comment-510</guid>
		<description>We&#039;ve been working a lot over the past five years or so on the &quot;reactive vs. preventative&quot; issue. Granted, the book doesn&#039;t really say anything about the subject of problem prevention, so it&#039;s left to the imagination of the reader how to tackle problems in that domain.

But in reality, the only reliable way I know to prevent performance problems is to measure your code prior to going production with it. Doing it any other way—like trying to guess where your code is probably slow—just doesn&#039;t work. It&#039;s the same today as &lt;a href=&quot;http://carymillsap.blogspot.com/2009/02/reading-knuth.html&quot; rel=&quot;nofollow&quot;&gt;Knuth observed several decades ago&lt;/a&gt;.

So, the only step that changes in Method R when you need a preventive context is step 1, the targeting step. We actually &lt;a href=&quot;http://method-r.com/faq/31-method-r/35-what-is-method-r&quot; rel=&quot;nofollow&quot;&gt;list at our Method R web site&lt;/a&gt; as &quot;Identify the task that&#039;s the most important to you.&quot; Note the subtle change here from what you see on p20 of the book: &quot;Select the user action for which the &lt;em&gt;business&lt;/em&gt; needs improved performance.&quot;

This subtle change makes it easier to see the relevance of Method R in the union of reactive and preventive contexts. For example, the definition of &lt;em&gt;important&lt;/em&gt; to you might be...

...a task that&#039;s giving your business a performance problem today. That&#039;s what the book talks about.

...a business-critical task that&#039;s not executing slowly right now, but if it were to slow down, it would damage your business. You need to measure tasks like this periodically and engage your problem repair skills any time you notice a negative trend.

...a task that&#039;s not business-critical, but that has a long run-time. This kind of task is important, not matter what its business priority is, because it has the most potential for getting in the way of everything else.

...a task that consumes a lot of a resource that you&#039;re trying to conserve. Most often in my experience, this resource is CPU, because that&#039;s the most expensive resource in the machine. (A lot of my customers have the biggest, fastest CPUs that humans can make; to upgrade from there, they have to await new inventions, which is an expensive kind of wait, both in time and, ultimately, money.)

...a task that you&#039;re writing today for production use sometime in the future. In this context, Method R is simply measuring to find your &quot;critical code&quot; in the Knuth sense.

—Cary Millsap</description>
		<content:encoded><![CDATA[<p>We&#8217;ve been working a lot over the past five years or so on the &#8220;reactive vs. preventative&#8221; issue. Granted, the book doesn&#8217;t really say anything about the subject of problem prevention, so it&#8217;s left to the imagination of the reader how to tackle problems in that domain.</p>
<p>But in reality, the only reliable way I know to prevent performance problems is to measure your code prior to going production with it. Doing it any other way—like trying to guess where your code is probably slow—just doesn&#8217;t work. It&#8217;s the same today as <a href="http://carymillsap.blogspot.com/2009/02/reading-knuth.html" rel="nofollow">Knuth observed several decades ago</a>.</p>
<p>So, the only step that changes in Method R when you need a preventive context is step 1, the targeting step. We actually <a href="http://method-r.com/faq/31-method-r/35-what-is-method-r" rel="nofollow">list at our Method R web site</a> as &#8220;Identify the task that&#8217;s the most important to you.&#8221; Note the subtle change here from what you see on p20 of the book: &#8220;Select the user action for which the <em>business</em> needs improved performance.&#8221;</p>
<p>This subtle change makes it easier to see the relevance of Method R in the union of reactive and preventive contexts. For example, the definition of <em>important</em> to you might be&#8230;</p>
<p>&#8230;a task that&#8217;s giving your business a performance problem today. That&#8217;s what the book talks about.</p>
<p>&#8230;a business-critical task that&#8217;s not executing slowly right now, but if it were to slow down, it would damage your business. You need to measure tasks like this periodically and engage your problem repair skills any time you notice a negative trend.</p>
<p>&#8230;a task that&#8217;s not business-critical, but that has a long run-time. This kind of task is important, not matter what its business priority is, because it has the most potential for getting in the way of everything else.</p>
<p>&#8230;a task that consumes a lot of a resource that you&#8217;re trying to conserve. Most often in my experience, this resource is CPU, because that&#8217;s the most expensive resource in the machine. (A lot of my customers have the biggest, fastest CPUs that humans can make; to upgrade from there, they have to await new inventions, which is an expensive kind of wait, both in time and, ultimately, money.)</p>
<p>&#8230;a task that you&#8217;re writing today for production use sometime in the future. In this context, Method R is simply measuring to find your &#8220;critical code&#8221; in the Knuth sense.</p>
<p>—Cary Millsap</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shlomi Noach</title>
		<link>http://hackmysql.com/blog/2010/01/06/book-review-optimizing-oracle-peformance/comment-page-1/#comment-509</link>
		<dc:creator>Shlomi Noach</dc:creator>
		<pubDate>Thu, 07 Jan 2010 03:50:29 +0000</pubDate>
		<guid isPermaLink="false">http://hackmysql.com/blog/?p=98#comment-509</guid>
		<description>Hi Daniel,

I&#039;m also now reading the book. I like it, but I want to further support your observation that it is reactive.
I&#039;ve also left notes on Baron&#039;s post: &lt;a href=&quot;http://www.xaprb.com/blog/2009/12/09/response-time-optimization-in-systems-that-are-queued/&quot; rel=&quot;nofollow&quot;&gt;http://www.xaprb.com/blog/2009/12/09/response-time-optimization-in-systems-that-are-queued/&lt;/a&gt;, where I try to convey a point discussing with Fernando.

If I understand correctly from my reading so far, method R will not require me to do *anything* if I&#039;m observing a relaxed MySQL machine a customer has asked me to review.
Perhaps I can see 50% of the queries are using full table scans, and queries EXPLAIN says &quot;using join buffer&quot; or other &quot;atrocities&quot;. According to method R, dealing with these is working by &quot;hunch&quot; and is inappropriate.
I disagree. I do not consider this a hunch. IT is a fundamental check up.

When you build a building, you must have the foundations and pillars set up straight. If they&#039;re not, and you only have 2 floors, all me be well. But counting on adding another 20 floors is a different matter.
So even while you have only 2 floors, and all is well, it is proper and important to do what basic fixed would make the foundations stronger.

In a sense, working by Method R only (and again, I&#039;m still reading through the book, I hope I&#039;m not commenting prematurely), is a &quot;recipe for disaster&quot;. The author tells us companies only call up on his hotsos company when all hell breaks loose and they&#039;re in emergency. Method R probably works best then. 
But how (if!) will method R work when a customer is intelligent and careful enough to call up on consultant advice while still developing the application? Before it&#039;s even online? To have the consultant share his opinion: &quot;Is this a good design?&quot;. So, sure, load tests and all; but this still leaves territory untouched by Method R.

My 2 cents

Regards</description>
		<content:encoded><![CDATA[<p>Hi Daniel,</p>
<p>I&#8217;m also now reading the book. I like it, but I want to further support your observation that it is reactive.<br />
I&#8217;ve also left notes on Baron&#8217;s post: <a href="http://www.xaprb.com/blog/2009/12/09/response-time-optimization-in-systems-that-are-queued/" rel="nofollow">http://www.xaprb.com/blog/2009/12/09/response-time-optimization-in-systems-that-are-queued/</a>, where I try to convey a point discussing with Fernando.</p>
<p>If I understand correctly from my reading so far, method R will not require me to do *anything* if I&#8217;m observing a relaxed MySQL machine a customer has asked me to review.<br />
Perhaps I can see 50% of the queries are using full table scans, and queries EXPLAIN says &#8220;using join buffer&#8221; or other &#8220;atrocities&#8221;. According to method R, dealing with these is working by &#8220;hunch&#8221; and is inappropriate.<br />
I disagree. I do not consider this a hunch. IT is a fundamental check up.</p>
<p>When you build a building, you must have the foundations and pillars set up straight. If they&#8217;re not, and you only have 2 floors, all me be well. But counting on adding another 20 floors is a different matter.<br />
So even while you have only 2 floors, and all is well, it is proper and important to do what basic fixed would make the foundations stronger.</p>
<p>In a sense, working by Method R only (and again, I&#8217;m still reading through the book, I hope I&#8217;m not commenting prematurely), is a &#8220;recipe for disaster&#8221;. The author tells us companies only call up on his hotsos company when all hell breaks loose and they&#8217;re in emergency. Method R probably works best then.<br />
But how (if!) will method R work when a customer is intelligent and careful enough to call up on consultant advice while still developing the application? Before it&#8217;s even online? To have the consultant share his opinion: &#8220;Is this a good design?&#8221;. So, sure, load tests and all; but this still leaves territory untouched by Method R.</p>
<p>My 2 cents</p>
<p>Regards</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Callaghan</title>
		<link>http://hackmysql.com/blog/2010/01/06/book-review-optimizing-oracle-peformance/comment-page-1/#comment-508</link>
		<dc:creator>Mark Callaghan</dc:creator>
		<pubDate>Wed, 06 Jan 2010 21:07:34 +0000</pubDate>
		<guid isPermaLink="false">http://hackmysql.com/blog/?p=98#comment-508</guid>
		<description>MySQL will have something equivalent when the performance schema data described by PeterG can generate a trace of events in timestamp order so we can see where a connection ran and waited while executing a query. And the trace must be done for code above the storage engine and code in the storage engine.

InnoDB/Oracle has yet to comment on whether they will instrument their code.</description>
		<content:encoded><![CDATA[<p>MySQL will have something equivalent when the performance schema data described by PeterG can generate a trace of events in timestamp order so we can see where a connection ran and waited while executing a query. And the trace must be done for code above the storage engine and code in the storage engine.</p>
<p>InnoDB/Oracle has yet to comment on whether they will instrument their code.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel Nichter</title>
		<link>http://hackmysql.com/blog/2010/01/06/book-review-optimizing-oracle-peformance/comment-page-1/#comment-507</link>
		<dc:creator>Daniel Nichter</dc:creator>
		<pubDate>Wed, 06 Jan 2010 20:20:50 +0000</pubDate>
		<guid isPermaLink="false">http://hackmysql.com/blog/?p=98#comment-507</guid>
		<description>Peter,

That&#039;s excellent!  I&#039;ve not been following MySQL 6.0 so this is pleasant news.  Keep up the good work.  This is going to open a lot of doors for MySQL performance optimization.</description>
		<content:encoded><![CDATA[<p>Peter,</p>
<p>That&#8217;s excellent!  I&#8217;ve not been following MySQL 6.0 so this is pleasant news.  Keep up the good work.  This is going to open a lot of doors for MySQL performance optimization.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Peter Gulutzan</title>
		<link>http://hackmysql.com/blog/2010/01/06/book-review-optimizing-oracle-peformance/comment-page-1/#comment-506</link>
		<dc:creator>Peter Gulutzan</dc:creator>
		<pubDate>Wed, 06 Jan 2010 19:34:50 +0000</pubDate>
		<guid isPermaLink="false">http://hackmysql.com/blog/?p=98#comment-506</guid>
		<description>&gt; Does MySQL have anything similar?

We&#039;re on the way. The next version of MySQL
has instrumentation, including timing and
counting, for some mutex and disk input/output.
That&#039;s comparable to certain Oracle Wait Interface
tables.

Blog postings in order of appearance:
http://blogs.mysql.com/peterg/2009/02/05/mysql-performance-schema/
http://blogs.mysql.com/peterg/2009/02/06/mysql-performance-schema-2/
http://blogs.mysql.com/peterg/2009/02/09/mysql-performance-schema-3/
http://blogs.mysql.com/peterg/2009/02/10/mysql-performance-schema-4/
http://blogs.mysql.com/peterg/2009/02/11/mysql-performance-schema-5/
http://blogs.mysql.com/peterg/2009/02/12/mysql-performance-schema-6/
http://blogs.mysql.com/peterg/2009/02/13/todo-mysql-performance-schema-7/

Specifications:
WL#2360: Performance Schema
 http://forge.mysql.com/worklog/task.php?id=2360
WL#2515: Performance statements
 http://forge.mysql.com/worklog/task.php?id=2515
WL#3249: SHOW PROCESSLIST should show memory
 http://forge.mysql.com/worklog/task.php?id=3249
WL#4674: PERFORMANCE_SCHEMA Setup For Actors
 http://forge.mysql.com/worklog/task.php?id=4674
WL#4678: PERFORMANCE_SCHEMA Instrumenting File IO
 http://forge.mysql.com/worklog/task.php?id=4678
WL#4813 PERFORMANCE_SCHEMA Instrumenting Stages
 http://forge.mysql.com/worklog/task.php?id=4813
WL#4816: PERFORMANCE_SCHEMA Summaries
 http://forge.mysql.com/worklog/task.php?id=4816
WL#4895: PERFORMANCE_SCHEMA Instrumenting Table IO
 http://forge.mysql.com/worklog/task.php?id=4895
WL#4878: PERFORMANCE_SCHEMA Trace
 http://forge.mysql.com/worklog/task.php?id=4878
WL#4896: PERFORMANCE_SCHEMA Instrumenting Net IO
 http://forge.mysql.com/worklog/task.php?id=4896
WL#2333: SHOW ENGINE ... LOCK STATUS
 http://forge.mysql.com/worklog/task.php?id=2333</description>
		<content:encoded><![CDATA[<p>&gt; Does MySQL have anything similar?</p>
<p>We&#8217;re on the way. The next version of MySQL<br />
has instrumentation, including timing and<br />
counting, for some mutex and disk input/output.<br />
That&#8217;s comparable to certain Oracle Wait Interface<br />
tables.</p>
<p>Blog postings in order of appearance:<br />
<a href="http://blogs.mysql.com/peterg/2009/02/05/mysql-performance-schema/" rel="nofollow">http://blogs.mysql.com/peterg/2009/02/05/mysql-performance-schema/</a><br />
<a href="http://blogs.mysql.com/peterg/2009/02/06/mysql-performance-schema-2/" rel="nofollow">http://blogs.mysql.com/peterg/2009/02/06/mysql-performance-schema-2/</a><br />
<a href="http://blogs.mysql.com/peterg/2009/02/09/mysql-performance-schema-3/" rel="nofollow">http://blogs.mysql.com/peterg/2009/02/09/mysql-performance-schema-3/</a><br />
<a href="http://blogs.mysql.com/peterg/2009/02/10/mysql-performance-schema-4/" rel="nofollow">http://blogs.mysql.com/peterg/2009/02/10/mysql-performance-schema-4/</a><br />
<a href="http://blogs.mysql.com/peterg/2009/02/11/mysql-performance-schema-5/" rel="nofollow">http://blogs.mysql.com/peterg/2009/02/11/mysql-performance-schema-5/</a><br />
<a href="http://blogs.mysql.com/peterg/2009/02/12/mysql-performance-schema-6/" rel="nofollow">http://blogs.mysql.com/peterg/2009/02/12/mysql-performance-schema-6/</a><br />
<a href="http://blogs.mysql.com/peterg/2009/02/13/todo-mysql-performance-schema-7/" rel="nofollow">http://blogs.mysql.com/peterg/2009/02/13/todo-mysql-performance-schema-7/</a></p>
<p>Specifications:<br />
WL#2360: Performance Schema<br />
 <a href="http://forge.mysql.com/worklog/task.php?id=2360" rel="nofollow">http://forge.mysql.com/worklog/task.php?id=2360</a><br />
WL#2515: Performance statements<br />
 <a href="http://forge.mysql.com/worklog/task.php?id=2515" rel="nofollow">http://forge.mysql.com/worklog/task.php?id=2515</a><br />
WL#3249: SHOW PROCESSLIST should show memory<br />
 <a href="http://forge.mysql.com/worklog/task.php?id=3249" rel="nofollow">http://forge.mysql.com/worklog/task.php?id=3249</a><br />
WL#4674: PERFORMANCE_SCHEMA Setup For Actors<br />
 <a href="http://forge.mysql.com/worklog/task.php?id=4674" rel="nofollow">http://forge.mysql.com/worklog/task.php?id=4674</a><br />
WL#4678: PERFORMANCE_SCHEMA Instrumenting File IO<br />
 <a href="http://forge.mysql.com/worklog/task.php?id=4678" rel="nofollow">http://forge.mysql.com/worklog/task.php?id=4678</a><br />
WL#4813 PERFORMANCE_SCHEMA Instrumenting Stages<br />
 <a href="http://forge.mysql.com/worklog/task.php?id=4813" rel="nofollow">http://forge.mysql.com/worklog/task.php?id=4813</a><br />
WL#4816: PERFORMANCE_SCHEMA Summaries<br />
 <a href="http://forge.mysql.com/worklog/task.php?id=4816" rel="nofollow">http://forge.mysql.com/worklog/task.php?id=4816</a><br />
WL#4895: PERFORMANCE_SCHEMA Instrumenting Table IO<br />
 <a href="http://forge.mysql.com/worklog/task.php?id=4895" rel="nofollow">http://forge.mysql.com/worklog/task.php?id=4895</a><br />
WL#4878: PERFORMANCE_SCHEMA Trace<br />
 <a href="http://forge.mysql.com/worklog/task.php?id=4878" rel="nofollow">http://forge.mysql.com/worklog/task.php?id=4878</a><br />
WL#4896: PERFORMANCE_SCHEMA Instrumenting Net IO<br />
 <a href="http://forge.mysql.com/worklog/task.php?id=4896" rel="nofollow">http://forge.mysql.com/worklog/task.php?id=4896</a><br />
WL#2333: SHOW ENGINE &#8230; LOCK STATUS<br />
 <a href="http://forge.mysql.com/worklog/task.php?id=2333" rel="nofollow">http://forge.mysql.com/worklog/task.php?id=2333</a></p>
]]></content:encoded>
	</item>
</channel>
</rss>
