{"id":524,"date":"2011-10-12T03:48:00","date_gmt":"2011-10-12T03:48:00","guid":{"rendered":"\/blogs\/joe\/post\/Parallelism-and-Batch-Execution-Mode-with-Columnstore-Indexes.aspx"},"modified":"2013-01-02T20:32:36","modified_gmt":"2013-01-03T04:32:36","slug":"row-and-batch-execution-modes-and-columnstore-indexes","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/joe\/row-and-batch-execution-modes-and-columnstore-indexes\/","title":{"rendered":"Row and batch execution modes and columnstore indexes"},"content":{"rendered":"<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<em><font face=\"Calibri\"><font style=\"font-size: 11pt\">This post covers examples from <strike>Denali<\/strike>&nbsp; SQL Server 2012 CTP3, version 11.0.1440.<\/font><\/font><\/em>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">In my last post I hinted towards some interesting findings regarding parallelism and columnstore indexes.<span>&nbsp; <\/span>I&rsquo;ll talk about what I observed in this post.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Just as a quick level-set, columnstore indexing provides two new areas of functionality within SQL Server 2012&nbsp;that can potentially improve query performance for typical relational data warehouse workloads.<span>&nbsp; <\/span>The features contributing to this potential performance gain include the&nbsp;Vertipaq columnstore technology (which uses compression and stores the data by column instead of row) and the new method of query processing that processes blocks of column data in batches.<span>&nbsp; <\/span>You can benefit from from the columnstore storage alone &nbsp;&ndash; but you may also see further query performance improvements if the query runs in &quot;batch&quot; execution mode versus &quot;row&quot;.&nbsp;&nbsp;<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><em>One key point to underscore&ndash; just because you add a columnstore index to a table doesn&rsquo;t mean that your query will use &ldquo;batch&rdquo; execution mode<\/em>.<\/font><span><font style=\"font-size: 11pt\">&nbsp; <\/font><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Let&rsquo;s walk through an example of row vs. batch using the AdventureWorksDWDenali database. <span>&nbsp;<\/span>The test server used in this illustration has four visible schedulers (not including the DAC) and 8GB of RAM.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Also &ndash; in order to increase the cost of the queries against this table and make it worth the columnstore index&#39;s time, I put together the below query to bump up the row count in FactInternetSales from 60,398 rows to 483,184 rows (SalesOrderNumber was part of the primary key, so I populated it with NEWID() and kept the other column values static from the existing rows and then used &quot;GO 3&quot; to populate it a few times):<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><span style=\"color: blue\"><font face=\"Courier New\" size=\"2\">INSERT <\/font><\/span><font size=\"2\"><font face=\"Courier New\"><span style=\"color: black\">dbo.FactInternetSales<br \/>\n<\/span><span style=\"color: gray\">(<\/span><span style=\"color: black\">ProductKey<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">OrderDateKey<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">DueDateKey<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">ShipDateKey<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">CustomerKey<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">PromotionKey<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">CurrencyKey<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">SalesTerritoryKey<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">SalesOrderNumber<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">SalesOrderLineNumber<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">RevisionNumber<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">OrderQuantity<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">UnitPrice<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">ExtendedAmount<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">UnitPriceDiscountPct<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">DiscountAmount<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">ProductStandardCost<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">TotalProductCost<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">SalesAmount<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">TaxAmt<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">Freight<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">CarrierTrackingNumber<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">CustomerPONumber<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">OrderDate<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">DueDate<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">ShipDate<\/span><\/font><\/font><font size=\"2\"><font face=\"Courier New\"><span style=\"color: gray\">)<\/p>\n<p><\/span><span style=\"color: blue\">SELECT <\/span><span style=\"color: black\">ProductKey<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">OrderDateKey<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">DueDateKey<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">ShipDateKey<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">CustomerKey<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">PromotionKey<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">CurrencyKey<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">SalesTerritoryKey<\/span><span style=\"color: gray\">, <\/span><span style=\"color: magenta\">LEFT<\/span><span style=\"color: gray\">(<\/span><span style=\"color: magenta\">CAST<\/span><span style=\"color: gray\">(<\/span><span style=\"color: magenta\">NEWID<\/span><span style=\"color: gray\">() <\/span><span style=\"color: blue\">AS NVARCHAR<\/span><span style=\"color: gray\">(<\/span><span style=\"color: black\">36<\/span><span style=\"color: gray\">)),<\/span><span style=\"color: black\">20<\/span><span style=\"color: gray\">), <\/span><span style=\"color: black\">SalesOrderLineNumber<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">RevisionNumber<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">OrderQuantity<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">UnitPrice<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">ExtendedAmount<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">UnitPriceDiscountPct<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">DiscountAmount<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">ProductStandardCost<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">TotalProductCost<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">SalesAmount<\/span><\/font><\/font><font size=\"2\"><font face=\"Courier New\"><span style=\"color: gray\">, <br \/>\n<\/span><span style=\"color: black\">TaxAmt<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">Freight<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">CarrierTrackingNumber<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">CustomerPONumber<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">OrderDate<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">DueDate<\/span><span style=\"color: gray\">, <\/span><\/font><\/font><font size=\"2\"><font face=\"Courier New\"><span style=\"color: black\">ShipDate<br \/>\n<\/span><span style=\"color: blue\">FROM <\/span><\/font><\/font><span style=\"color: black\"><font face=\"Courier New\" size=\"2\">dbo.FactInternetSales<br \/>\nGO 3<\/font><\/span><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><span style=\"color: black\"><font face=\"Courier New\" size=\"2\"><\/font><br \/>\n&nbsp;<\/span><\/font><\/font>\n<\/p>\n<p><font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font><\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">The following query is executed against a table with no columnstore index (I&rsquo;ve also enabled the actual Execution Plan to show afterwards &ndash; and also execute the query twice in order to measure results with the data in cache):<\/font><\/font>\n<\/p>\n<blockquote>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n\t<font face=\"Calibri\"><font style=\"font-size: 11pt\"><font size=\"2\"><font face=\"Courier New\"><span style=\"color: blue\">SET STATISTICS <\/span><span style=\"color: black\">IO <\/span><\/font><\/font><font size=\"2\"><font face=\"Courier New\"><span style=\"color: blue\">ON <br \/>\n\tSET STATISTICS <\/span><span style=\"color: black\">TIME <\/span><\/font><\/font><font size=\"2\"><font face=\"Courier New\"><span style=\"color: blue\">ON <\/p>\n<p>\n\tSELECT <\/span><span style=\"color: black\">c.CommuteDistance<\/span><\/font><\/font><font size=\"2\"><font face=\"Courier New\"><span style=\"color: gray\">,&nbsp;<br \/>\n\t<\/span><span style=\"color: black\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d.CalendarYear<\/span><\/font><\/font><font size=\"2\"><font face=\"Courier New\"><span style=\"color: gray\">, <br \/>\n\t<\/span><span style=\"color: magenta\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM<\/span><span style=\"color: gray\">(<\/span><span style=\"color: black\">f.SalesAmount<\/span><span style=\"color: gray\">) <\/span><\/font><\/font><font size=\"2\"><font face=\"Courier New\"><span style=\"color: black\">TotalSalesByCommuteDistance <br \/>\n\t<\/span><span style=\"color: blue\">FROM <\/span><\/font><\/font><font size=\"2\"><font face=\"Courier New\"><span style=\"color: black\">dbo.FactInternetSales as&nbsp;f <br \/>\n\t<\/span><span style=\"color: blue\">INNER JOIN <\/span><span style=\"color: black\">dbo.DimCustomer as&nbsp;c <\/span><\/font><\/font><font size=\"2\"><font face=\"Courier New\"><span style=\"color: blue\">ON <br \/>\n\t<\/span><span style=\"color: black\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f.CustomerKey <\/span><span style=\"color: blue\">= <\/span><\/font><\/font><font size=\"2\"><font face=\"Courier New\"><span style=\"color: black\">c.CustomerKey <br \/>\n\t<\/span><span style=\"color: blue\">INNER JOIN <\/span><span style=\"color: black\">dbo.DimDate d <\/span><\/font><\/font><font size=\"2\"><font face=\"Courier New\"><span style=\"color: blue\">ON <br \/>\n\t<\/span><span style=\"color: black\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d.DateKey <\/span><span style=\"color: blue\">= <\/span><\/font><\/font><font size=\"2\"><font face=\"Courier New\"><span style=\"color: black\">f.OrderDateKey <br \/>\n\t<\/span><span style=\"color: blue\">GROUP BY <\/span><span style=\"color: black\">c.CommuteDistance<\/span><\/font><\/font><span style=\"color: gray\"><font face=\"Courier New\" size=\"2\">, <br \/>\n\t<\/font><\/span><span style=\"color: black\"><font face=\"Courier New\" size=\"2\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d.CalendarYear&nbsp;<\/font><br \/>\n\t<\/span><\/font><\/font>\n\t<\/p>\n<\/blockquote>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">The results for STATISTICS IO were as follows:<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt 0.5in\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Table &#39;Worktable&#39;. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt 0.5in\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Table &#39;FactInternetSales&#39;. Scan count 1, <span style=\"background-image: none; background-attachment: scroll; background-repeat: repeat; background-position: 0% 0%\"><font style=\"background-color: #ffff00\">logical reads 20289<\/font><\/span>, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt 0.5in\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Table &#39;DimCustomer&#39;. Scan count 1, logical reads 979, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt 0.5in\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Table &#39;DimDate&#39;. Scan count 1, logical reads 66, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">And the results of the SET STATISTICS TIME ON were as follows:<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">SQL Server Execution Times:<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in\" class=\"MsoNormal\">\n<font face=\"Calibri\"><span><font style=\"font-size: 11pt\">&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 11pt\">CPU time = 562 ms,<span>&nbsp; <\/span>elapsed time = 625 ms.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">As for the execution plan, if we hover over the Clustered Index Scan for FactInternetSales you&rsquo;ll see the &ldquo;Actual Execution Mode&rdquo;. <\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/parallelism-and-batch-execution-mode-wit\/0cbb7f14\/clip_image0024.png\"><img fetchpriority=\"high\" decoding=\"async\" style=\"background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px\" src=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/parallelism-and-batch-execution-mode-wit\/1dbfacf7\/clip_image0024_thumb.png\" border=\"0\" alt=\"clip_image002[4]\" title=\"clip_image002[4]\" width=\"423\" height=\"239\" \/><\/a><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\">So we see a value of &ldquo;Row&rdquo; (the execution mode we&rsquo;re used to) and &ldquo;Actual Number of Batches&rdquo; of 0.<\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\">Now let&rsquo;s create a columnstore index:<\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\"><font size=\"2\"><font face=\"Courier New\"><span style=\"color: blue\">CREATE NONCLUSTERED <\/span><span style=\"color: black\">COLUMNSTORE <\/span><span style=\"color: blue\">INDEX <\/span><span style=\"color: black\">[CSI_FactInternetSales] <\/span><span style=\"color: blue\">ON <\/span><\/font><\/font><span style=\"color: black\"><font face=\"Courier New\" size=\"2\">[dbo].[FactInternetSales] <br \/>\n<\/font><\/span><font size=\"2\"><font face=\"Courier New\"><span style=\"color: gray\">( <br \/>\n<\/span><span style=\"color: black\">[OrderDateKey]<\/span><\/font><\/font><font size=\"2\"><font face=\"Courier New\"><span style=\"color: gray\">, <br \/>\n<\/span><span style=\"color: black\">[CustomerKey]<\/span><\/font><\/font><span style=\"color: gray\"><font face=\"Courier New\" size=\"2\">, <br \/>\n<\/font><\/span><span style=\"color: black\"><font face=\"Courier New\" size=\"2\">[SalesAmount] <br \/>\n<\/font><\/span><span style=\"color: gray\"><font face=\"Courier New\" size=\"2\">) <\/p>\n<p>\n<\/font><\/span><span style=\"color: black\"><font face=\"Courier New\" size=\"2\">GO <\/font><\/p>\n<p><\/span><\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\">Re-executing the query after creating the index, I see the following STATISTICS IO output:<\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\">Table &#39;Worktable&#39;. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.<\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\">Table &#39;FactInternetSales&#39;. Scan count 1, <span style=\"background-image: none; background-attachment: scroll; background-repeat: repeat; background-position: 0% 0%\"><font style=\"background-color: #ffff00\">logical reads 597<\/font><\/span>, physical reads 0, read-ahead reads 1167, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.<\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\">Table &#39;DimCustomer&#39;. Scan count 1, logical reads 979, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.<\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\">Table &#39;DimDate&#39;. Scan count 1, logical reads 66, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.<\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><span><font style=\"font-size: 11pt\">That&rsquo;s a reduction in logical reads against FactInternetSales from <\/font><\/span><font style=\"font-size: 11pt\">20289<\/font><span><font style=\"font-size: 11pt\"> down to 597.<span>&nbsp; <\/span>Very likeable. <\/font><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><span><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><span><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\">What about STATISTICS TIME?<\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\">SQL Server Execution Times:<\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><span><font style=\"font-size: 11pt\">&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 11pt\">CPU time = 453 ms,<span>&nbsp; <\/span>elapsed time = 485 ms.<\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Okay so CPU time was 562 ms now it is 453 ms.<span>&nbsp; <\/span>Elapsed time was 625 ms and now it is 485 ms.<span>&nbsp; <\/span><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">What about the execution plan, were we using batch execution mode?<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in\" class=\"MsoNormal\">\n<span><font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font><\/span>\n<\/p>\n<p><span><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/parallelism-and-batch-execution-mode-wit\/7ccc3a4f\/clip_image0044.png\"><img decoding=\"async\" style=\"background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px\" src=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/parallelism-and-batch-execution-mode-wit\/7bf3d465\/clip_image0044_thumb.png\" border=\"0\" alt=\"clip_image004[4]\" title=\"clip_image004[4]\" width=\"447\" height=\"242\" \/><\/a><\/span> <\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">No.<span>&nbsp; <\/span>Still using &ldquo;Row&rdquo; with a columnstore index scan.<span>&nbsp;&nbsp; <\/span>So things brings me to what I observed a few days ago.<\/font><span><font style=\"font-size: 11pt\">&nbsp; <\/font><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><span><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><span><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><span><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">One thing I didn&rsquo;t mention is that in my test environment &#8211;&nbsp; <u><em>my max degree of parallelism was set to &ldquo;1&rdquo;<\/em><\/u>.<span>&nbsp; <\/span><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">What happens if I uncap the max degree of parallelism for my 4-scheduler server and re-execute the query?<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/parallelism-and-batch-execution-mode-wit\/100cf0ef\/clip_image0054.png\"><img decoding=\"async\" style=\"background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px\" src=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/parallelism-and-batch-execution-mode-wit\/7aaf3b86\/clip_image0054_thumb.png\" border=\"0\" alt=\"clip_image005[4]\" title=\"clip_image005[4]\" width=\"357\" height=\"179\" \/><\/a><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">After lifting the cap on max degree of parallelism, the query executes using a parallel plan and also switches from &ldquo;row&rdquo; to &ldquo;batch&rdquo; mode.<span>&nbsp; <\/span>Notice also the &ldquo;Actual Number of Batches&rdquo; &ndash; which shows a value of 1,482.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">This is all nice &ndash; but what about the query performance and I\/O.<span>&nbsp; <\/span>Any further reductions?<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">The I\/O results are as follows:<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<blockquote>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n\t<font face=\"Calibri\"><font style=\"font-size: 11pt\">Table &#39;DimCustomer&#39;. Scan count 5, logical reads 1072, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.<\/font><\/font>\n\t<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n\t<font face=\"Calibri\"><font style=\"font-size: 11pt\">Table &#39;DimDate&#39;. Scan count 3, logical reads 56, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.<\/font><\/font>\n\t<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n\t<span style=\"background-image: none; background-attachment: scroll; background-repeat: repeat; background-position: 0% 0%\"><font face=\"Calibri\"><font style=\"background-color: #ffff00; font-size: 11pt\">Table &#39;FactInternetSales&#39;. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.<\/font><\/font><\/span>\n\t<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n\t<font face=\"Calibri\"><font style=\"font-size: 11pt\">Table &#39;Worktable&#39;. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.<\/font><\/font>\n\t<\/p>\n<\/blockquote>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">What&rsquo;s this? Zero for all stats related to FactInternetSales?<span>&nbsp; <\/span>I even dropped clean buffers to double-check, and it still displayed all zeros.<span>&nbsp; (<\/span>More on this for another day.)<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">What about the execution statistics?<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; text-indent: 0.5in; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">SQL Server Execution Times:<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; text-indent: 0.5in; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><span><font style=\"font-size: 11pt\">&nbsp;<\/font><\/span><font style=\"font-size: 11pt\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp; <\/span>CPU time = 78 ms,<span>&nbsp; <\/span>elapsed time = 114 ms.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Now we&#39;re talking big improvements. CPU time was 562 ms without columnstore, then 453 ms with columnstore + row processing and then 78 ms for columnstore + batch processing.<span>&nbsp; <\/span>Elapsed time was 625 ms without columnstore and then 485 ms for columnstore + row processing and then 114 ms for columnstore + batch processing.<span>&nbsp; <\/span>So more non-trivial reductions.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">So a few key findings in closing:<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n&nbsp;\n<\/p>\n<p style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 0pt 0.5in\" class=\"MsoListParagraphCxSpFirst\">\n<span><span><font face=\"Symbol\"><font style=\"font-size: 11pt\">&middot;<\/font><\/font><span style=\"line-height: normal\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/font><\/span><\/span><\/span><font face=\"Calibri\"><font style=\"font-size: 11pt\">Columnstore + row processing can provide a performance boost (getting column based storage and compression)<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 0pt 0.5in\" class=\"MsoListParagraphCxSpMiddle\">\n<span><span><font face=\"Symbol\"><font style=\"font-size: 11pt\">&middot;<\/font><\/font><span style=\"line-height: normal\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/font><\/span><\/span><\/span><font face=\"Calibri\"><font style=\"font-size: 11pt\">Columnstore + batch processing can provide additional performance improvements on top of the columnstore index I\/O benefits<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 0pt 0.5in\" class=\"MsoListParagraphCxSpLast\">\n<span><span><font face=\"Symbol\"><font style=\"font-size: 11pt\">&middot;<\/font><\/font><span style=\"line-height: normal\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/font><\/span><\/span><\/span><font face=\"Calibri\"><font style=\"font-size: 11pt\">When I capped parallelism, I didn&rsquo;t see batch processing &ndash; so check your execution plan and be aware that there are other factors that impact whether batch processing vs. row processing as well<\/font><\/font><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post covers examples from Denali&nbsp; SQL Server 2012 CTP3, version 11.0.1440. In my last post I hinted towards some interesting findings regarding parallelism and columnstore indexes.&nbsp; I&rsquo;ll talk about what I observed in this post. Just as a quick level-set, columnstore indexing provides two new areas of functionality within SQL Server 2012&nbsp;that can potentially [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[],"class_list":["post-524","post","type-post","status-publish","format-standard","hentry","category-columnstore-indexes"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.9.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Row and batch execution modes and columnstore indexes - Joe Sack<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/row-and-batch-execution-modes-and-columnstore-indexes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Row and batch execution modes and columnstore indexes - Joe Sack\" \/>\n<meta property=\"og:description\" content=\"This post covers examples from Denali&nbsp; SQL Server 2012 CTP3, version 11.0.1440. In my last post I hinted towards some interesting findings regarding parallelism and columnstore indexes.&nbsp; I&rsquo;ll talk about what I observed in this post. Just as a quick level-set, columnstore indexing provides two new areas of functionality within SQL Server 2012&nbsp;that can potentially [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/joe\/row-and-batch-execution-modes-and-columnstore-indexes\/\" \/>\n<meta property=\"og:site_name\" content=\"Joe Sack\" \/>\n<meta property=\"article:published_time\" content=\"2011-10-12T03:48:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-01-03T04:32:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/parallelism-and-batch-execution-mode-wit\/1dbfacf7\/clip_image0024_thumb.png\" \/>\n<meta name=\"author\" content=\"Joseph Sack\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joseph Sack\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/row-and-batch-execution-modes-and-columnstore-indexes\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/row-and-batch-execution-modes-and-columnstore-indexes\/\",\"name\":\"Row and batch execution modes and columnstore indexes - Joe Sack\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#website\"},\"datePublished\":\"2011-10-12T03:48:00+00:00\",\"dateModified\":\"2013-01-03T04:32:36+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/row-and-batch-execution-modes-and-columnstore-indexes\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/joe\/row-and-batch-execution-modes-and-columnstore-indexes\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/row-and-batch-execution-modes-and-columnstore-indexes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Columnstore indexes\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/category\/columnstore-indexes\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Row and batch execution modes and columnstore indexes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/\",\"name\":\"Joe Sack\",\"description\":\"SQL Server Performance Tuning, High Availability and Disaster Recovery Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648\",\"name\":\"Joseph Sack\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g\",\"caption\":\"Joseph Sack\"},\"description\":\"Joe Sack is a Principal Consultant with SQLskills. He has worked as a SQL Server professional since 1997 and has supported and developed for SQL Server environments in financial services, IT consulting, manufacturing, retail and the real estate industry. Prior to joining SQLskills he worked at Microsoft as a Premier Field Engineer supporting very large enterprise customer environments. He was responsible for providing deep SQL Server advisory services, training, troubleshooting and ongoing solutions guidance. His areas of expertise include performance tuning, scalability, T-SQL development and high-availability. In 2006 Joe earned the \u201cMicrosoft Certified Master: SQL Server 2005\u201d certification and in 2008 he earned the \u201cMicrosoft Certified Master: SQL Server 2008\u201d certification. In 2009 he took over responsibility for the entire SQL Server Microsoft Certified Master program and held that post until 2011. He was given the SQL Server MVP award in 2013.\",\"sameAs\":[\"http:\/\/3.209.169.194\/blogs\/joe\",\"https:\/\/twitter.com\/https:\/\/twitter.com\/josephsack\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/author\/joe\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Row and batch execution modes and columnstore indexes - Joe Sack","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sqlskills.com\/blogs\/joe\/row-and-batch-execution-modes-and-columnstore-indexes\/","og_locale":"en_US","og_type":"article","og_title":"Row and batch execution modes and columnstore indexes - Joe Sack","og_description":"This post covers examples from Denali&nbsp; SQL Server 2012 CTP3, version 11.0.1440. In my last post I hinted towards some interesting findings regarding parallelism and columnstore indexes.&nbsp; I&rsquo;ll talk about what I observed in this post. Just as a quick level-set, columnstore indexing provides two new areas of functionality within SQL Server 2012&nbsp;that can potentially [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/joe\/row-and-batch-execution-modes-and-columnstore-indexes\/","og_site_name":"Joe Sack","article_published_time":"2011-10-12T03:48:00+00:00","article_modified_time":"2013-01-03T04:32:36+00:00","og_image":[{"url":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/parallelism-and-batch-execution-mode-wit\/1dbfacf7\/clip_image0024_thumb.png"}],"author":"Joseph Sack","twitter_misc":{"Written by":"Joseph Sack","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/row-and-batch-execution-modes-and-columnstore-indexes\/","url":"https:\/\/www.sqlskills.com\/blogs\/joe\/row-and-batch-execution-modes-and-columnstore-indexes\/","name":"Row and batch execution modes and columnstore indexes - Joe Sack","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#website"},"datePublished":"2011-10-12T03:48:00+00:00","dateModified":"2013-01-03T04:32:36+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/row-and-batch-execution-modes-and-columnstore-indexes\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/joe\/row-and-batch-execution-modes-and-columnstore-indexes\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/row-and-batch-execution-modes-and-columnstore-indexes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/joe\/"},{"@type":"ListItem","position":2,"name":"Columnstore indexes","item":"https:\/\/www.sqlskills.com\/blogs\/joe\/category\/columnstore-indexes\/"},{"@type":"ListItem","position":3,"name":"Row and batch execution modes and columnstore indexes"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/joe\/","name":"Joe Sack","description":"SQL Server Performance Tuning, High Availability and Disaster Recovery Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/joe\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648","name":"Joseph Sack","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g","caption":"Joseph Sack"},"description":"Joe Sack is a Principal Consultant with SQLskills. He has worked as a SQL Server professional since 1997 and has supported and developed for SQL Server environments in financial services, IT consulting, manufacturing, retail and the real estate industry. Prior to joining SQLskills he worked at Microsoft as a Premier Field Engineer supporting very large enterprise customer environments. He was responsible for providing deep SQL Server advisory services, training, troubleshooting and ongoing solutions guidance. His areas of expertise include performance tuning, scalability, T-SQL development and high-availability. In 2006 Joe earned the \u201cMicrosoft Certified Master: SQL Server 2005\u201d certification and in 2008 he earned the \u201cMicrosoft Certified Master: SQL Server 2008\u201d certification. In 2009 he took over responsibility for the entire SQL Server Microsoft Certified Master program and held that post until 2011. He was given the SQL Server MVP award in 2013.","sameAs":["http:\/\/3.209.169.194\/blogs\/joe","https:\/\/twitter.com\/https:\/\/twitter.com\/josephsack"],"url":"https:\/\/www.sqlskills.com\/blogs\/joe\/author\/joe\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts\/524","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/comments?post=524"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts\/524\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/media?parent=524"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/categories?post=524"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/tags?post=524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}