<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Sequential Read Ahead</title><link>http://blogs.msdn.com/craigfr/archive/2008/09/23/sequential-read-ahead.aspx</link><description>Balancing CPU and I/O throughput is essential to achieve good overall performance and to maximize hardware utilization. SQL Server includes two asynchronous I/O mechanisms - sequential read ahead and random prefetching - that are designed to address this</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>re: Sequential Read Ahead</title><link>http://blogs.msdn.com/craigfr/archive/2008/09/23/sequential-read-ahead.aspx#8965612</link><pubDate>Fri, 26 Sep 2008 00:56:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8965612</guid><dc:creator>logicalmind</dc:creator><description>&lt;p&gt;I hope the question I emailed you got you interested in blogging on this subject. Thanks for the reply btw. &lt;/p&gt;
&lt;p&gt;You said, &amp;quot;The read ahead mechanism tries to stay 500 pages ahead of the scan.&amp;quot; Is SQL Server doing 500 pagesized asynchronous I/O's in this case? A single (500*pagesize) I/O? Or some other combination? It would seem that this should vary depending on whether you are doing OLTP (better response time) or OLAP (better throughput).&lt;/p&gt;
</description></item><item><title>re: Sequential Read Ahead</title><link>http://blogs.msdn.com/craigfr/archive/2008/09/23/sequential-read-ahead.aspx#8966826</link><pubDate>Fri, 26 Sep 2008 20:57:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8966826</guid><dc:creator>craigfr</dc:creator><description>&lt;p&gt;SQL Server tries to combine up to 32 contiguous pages (256 Kbytes) into a single (asynchronous) I/O. &amp;nbsp;So, in a best case scenario, it can read ahead 500 pages in just 16 I/Os. &amp;nbsp;However, if the pages in the table are not contiguous (e.g., due to fragmentation), SQL Server cannot combine the I/Os and must issue one I/O per page (8 Kbytes).&lt;/p&gt;
</description></item><item><title>Random Prefetching</title><link>http://blogs.msdn.com/craigfr/archive/2008/09/23/sequential-read-ahead.aspx#8987908</link><pubDate>Wed, 08 Oct 2008 00:50:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8987908</guid><dc:creator>Craig Freedman's SQL Server Blog</dc:creator><description>&lt;p&gt;In my last post , I explained the importance of asynchronous I/O and described how SQL Server uses sequential&lt;/p&gt;
</description></item><item><title>re: Sequential Read Ahead</title><link>http://blogs.msdn.com/craigfr/archive/2008/09/23/sequential-read-ahead.aspx#9023046</link><pubDate>Thu, 30 Oct 2008 00:27:09 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9023046</guid><dc:creator>SergeyL</dc:creator><description>&lt;p&gt;Craig,&lt;/p&gt;
&lt;p&gt;Few moments here I think need further elaboration.&lt;/p&gt;
&lt;p&gt;First - &amp;quot;The memory subsystem on a modern CPU can deliver data sequentially at roughly 5 Gbytes per second per core&amp;quot;&lt;/p&gt;
&lt;p&gt;There are NUMA and non-NUMA hardware systems. Non-NUMA share FSB for exclusive access to RAM, so it becomes 5 Gbytes perl ALL CPUs on board. For NUMA systesms - all cores on the same NUMA node share that 5Gbytes. Thus its not per core.&lt;/p&gt;
&lt;p&gt;Second is &amp;quot;Solid State Disks (SSDS) can reduce the gap between sequential and random I/O performance by eliminating the moving parts from the equation, but a performance gap remains.&amp;quot; Do you mean performance = throughput here?&lt;/p&gt;
&lt;p&gt;Thank you, Serge&lt;/p&gt;
</description></item><item><title>re: Sequential Read Ahead</title><link>http://blogs.msdn.com/craigfr/archive/2008/09/23/sequential-read-ahead.aspx#9025402</link><pubDate>Fri, 31 Oct 2008 01:22:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9025402</guid><dc:creator>craigfr</dc:creator><description>&lt;p&gt;First, I should have written 5 Gbytes per second per SOCKET. &amp;nbsp;And, you are correct. &amp;nbsp;With a shared bus, this bandwidth does not scale. &amp;nbsp;I will clarify the post. &amp;nbsp;Thanks.&lt;/p&gt;
&lt;p&gt;Second, yes, I'm referring to the gap between memory and disk/SSD throughput.&lt;/p&gt;
</description></item><item><title>Optimizing I/O Performance by Sorting – Part 1</title><link>http://blogs.msdn.com/craigfr/archive/2008/09/23/sequential-read-ahead.aspx#9444353</link><pubDate>Wed, 25 Feb 2009 20:32:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9444353</guid><dc:creator>Craig Freedman's SQL Server Blog</dc:creator><description>&lt;p&gt;In this post from last year, I discussed how random I/Os are slower than sequential I/Os (particularly&lt;/p&gt;
</description></item><item><title>Discrepancy with BOL</title><link>http://blogs.msdn.com/craigfr/archive/2008/09/23/sequential-read-ahead.aspx#9883601</link><pubDate>Tue, 25 Aug 2009 15:48:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9883601</guid><dc:creator>OLAP</dc:creator><description>&lt;p&gt;Your comment: &amp;quot;SQL Server tries to combine up to 32 contiguous pages (256 Kbytes) into a single (asynchronous) I/O.&amp;quot;&lt;/p&gt;
&lt;p&gt;BOL ('Reading Pages'): &amp;quot;The read-ahead mechanism allows the Database Engine to read up to 64 contiguous pages (512KB) from one file.&amp;quot;&lt;/p&gt;
&lt;p&gt;Is it 32 or 64 contiguous pages?&lt;/p&gt;
</description></item><item><title>Precise definitions for Contiguous and Fragmentation</title><link>http://blogs.msdn.com/craigfr/archive/2008/09/23/sequential-read-ahead.aspx#9883614</link><pubDate>Tue, 25 Aug 2009 16:00:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9883614</guid><dc:creator>OLAP</dc:creator><description>&lt;p&gt;Your comment: &amp;quot;If the pages in the table are not contiguous (e.g., due to fragmentation), SQL Server cannot combine the I/Os and must issue one I/O per page (8 Kbytes).&amp;quot; &lt;/p&gt;
&lt;p&gt;'Contiguous' loses its meaning, however, in a world based on RAID striping and proportional fill. Precisely what is meant by contiguous and fragmented? Are we only talking about page splits?&lt;/p&gt;
</description></item><item><title>re: Sequential Read Ahead</title><link>http://blogs.msdn.com/craigfr/archive/2008/09/23/sequential-read-ahead.aspx#9889412</link><pubDate>Mon, 31 Aug 2009 19:23:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9889412</guid><dc:creator>craigfr</dc:creator><description>&lt;p&gt;BOL is correct. &amp;nbsp;SQL Server does combine up to 64 contiguous pages into a single read. &amp;nbsp;However, it will combine only 32 contiguous pages into a single write. &amp;nbsp;Thanks for the correction. &amp;nbsp;I apologize for the error.&lt;/p&gt;
&lt;p&gt;From the perspective of SQL Server, the terms contiguous and fragmented refer to the logical layout within a database file. &amp;nbsp;SQL Server has no visibility to the physical layout.&lt;/p&gt;
</description></item></channel></rss>