<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.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>Search results matching tags 'SQL Server 2012', 'ssis', 'sql server integration services', and 'sql server'</title><link>http://sqlblog.com/search/SearchResults.aspx?o=DateDescending&amp;tag=SQL+Server+2012,ssis,sql+server+integration+services,sql+server&amp;orTags=0</link><description>Search results matching tags 'SQL Server 2012', 'ssis', 'sql server integration services', and 'sql server'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>SSIS Catalog, Windows updates and deployment failures due to System.Core mismatch</title><link>http://sqlblog.com/blogs/jamie_thomson/archive/2012/07/11/ssis-catalog-windows-updates-and-deployment-failures-due-to-system-core-mismatch.aspx</link><pubDate>Wed, 11 Jul 2012 14:36:23 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:44257</guid><dc:creator>jamiet</dc:creator><description>&lt;p&gt;&lt;em&gt;This is a heads-up for anyone doing development on SSIS. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;On my current project where we are implementing a SQL Server Integration Services (SSIS) 2012 solution we recently encountered a situation where we were unable to deploy any of our projects even though we had successfully deployed in the past. Any attempt to use the deployment wizard resulted in this error dialog:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/clip_image002_1AF90749.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="clip_image002" border="0" alt="clip_image002" src="http://sqlblog.com/blogs/jamie_thomson/clip_image002_thumb_3D6D9604.jpg" width="510" height="257" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The text of the error (for all you search engine crawlers out there) was:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#ff0000"&gt;A .NET Framework error occurred during execution of user-defined routine or aggregate &amp;quot;create_key_information&amp;quot;:        &lt;br /&gt;System.IO.FileLoadException: Could not load file or assembly 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) ---&amp;gt; System.IO.FileLoadException: The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)        &lt;br /&gt;System.IO.FileLoadException:         &lt;br /&gt;System.IO.FileLoadException:&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160; at Microsoft.SqlServer.IntegrationServices.Server.Security.CryptoGraphy.CreateSymmetricKey(String algorithm)        &lt;br /&gt;&amp;#160;&amp;#160; at Microsoft.SqlServer.IntegrationServices.Server.Security.CryptoGraphy.CreateKeyInformation(SqlString algorithmName, SqlBytes&amp;amp; key, SqlBytes&amp;amp; IV)        &lt;br /&gt;. (Microsoft SQL Server, Error: 6522)&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;After some investigation and a bit of back and forth with some very helpful members of the SSIS product team (hey Matt, Wee Hyong) it transpired that this was due to a .Net Framework fix that had been delivered via Windows Update. I took a look at the server update history and indeed there have been some recently applied .Net Framework updates:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_1C0DF068.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_3AE46446.png" width="654" height="235" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This fix had (in the words of &lt;a href="https://twitter.com/mattmasson" target="_blank"&gt;Matt Masson&lt;/a&gt;) “somehow caused a mismatch on System.Core for SQLCLR” and, as you may know, SQLCLR is used heavily within the SSIS Catalog. The fix was pretty simple – restart SQL Server. This causes the assemblies to be upgraded automatically. If you are using Data Quality Services (DQS) you may have experienced similar problems which are documented at &lt;a href="http://http://msdn.microsoft.com/en-us/library/hh479773.aspx" target="_blank"&gt;Upgrade SQLCLR Assemblies After .NET Framework Update&lt;/a&gt;. I am hoping the SSIS team will follow-up with a more thorough explanation on their &lt;a href="http://blogs.msdn.com/b/mattm/" target="_blank"&gt;blog&lt;/a&gt; soon.&lt;/p&gt;  &lt;p&gt;You DBAs out there may be questioning why Windows Update is set to automatically apply updates on our production servers. We’re checking that out with our hosting provider right now &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://sqlblog.com/blogs/jamie_thomson/wlEmoticon-smile_0088EE65.png" /&gt;&lt;/p&gt;  &lt;p&gt;You have been warned!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/jamiet" target="_blank"&gt;@Jamiet&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Variable enhancements in RC0 [SSIS]</title><link>http://sqlblog.com/blogs/jamie_thomson/archive/2012/02/22/variable-enhancements-in-rc0-ssis.aspx</link><pubDate>Wed, 22 Feb 2012 22:56:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:41899</guid><dc:creator>jamiet</dc:creator><description>&lt;p&gt;I have been poking around idly in the RC0 release of SQL Server Integration Services (SSIS) 2012 and noticed a few nice enhancements that hadn’t really hit the newsstands as yet (well, I didn’t know about them anyway). Here is a quick rundown:&lt;/p&gt;  &lt;h3&gt;Expression is viewable in the Variables window&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_5BC5784F.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_281D0BF1.png" width="636" height="136" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Fairly self-explanatory this one. If a variable has an expression applied to it that expression can now be seen in the Variables window; also notice that the variable icon gets an adorner specifying that there is an expression upon it. What is not so obvious is that if you add an expression to a variable then the EvaluateAsExpression property of that variable is automatically set to &lt;strong&gt;True:&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_06BD6655.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_17C19438.png" width="416" height="212" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;That’s a welcome enhancement.&lt;/p&gt;  &lt;h3&gt;New System Variables&lt;/h3&gt;  &lt;p&gt;There are some new System variables available to you, some of which might be useful (one of which is very useful indeed):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_31FA5AD4.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_36FC9883.png" width="279" height="598" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I have not found any documentation on these as yet so I’ll take a guess at what are for:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;IgnoreConfigurationsOnLoad – This is a boolean variable so I can only assume it does what it says on the tin – ignores configurations. The default value is False. I would assume that this doesn’t have any affect if you are using the new project deployment model.&lt;/li&gt;    &lt;li&gt;ProductVersion and LastModifiedProductVersion – In the package I am looking at these are both set to 11.0.1750.32 which is the same build number as in Help-&amp;gt;About&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_03542C25.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_61F48688.png" width="432" height="123" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;The only thing I don’t understand is that if this package was built in a prior version (CTP3) why they are set to the same value?&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;ServerExecutionID – This one is very useful indeed. It provides the ExecutionID that the SSIS Catalog assigned to the current execution.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Hope that helps!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/jamiet"&gt;@jamiet&lt;/a&gt;&lt;/p&gt;</description></item><item><title>SSIS Reporting Pack v0.2 now available</title><link>http://sqlblog.com/blogs/jamie_thomson/archive/2011/09/04/ssis-reporting-pack-v0-2-now-available.aspx</link><pubDate>Sun, 04 Sep 2011 13:57:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:38268</guid><dc:creator>jamiet</dc:creator><description>
&lt;p&gt;In December 2010 I announced in a blog post &lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/12/09/introducing-ssis-reporting-pack-for-sql-server-code-named-denali.aspx" target="_blank"&gt;Introducing SSIS Reporting Pack for SQL Server code-named Denali&lt;/a&gt; that I planned to provide a series of reports that visualised information held in the SSIS Catalog in SQL Server Denali – I called these reports the &lt;b&gt;SSIS Reporting Pack&lt;/b&gt;. At that time SSIS Reporting Pack was a precursor to what I really wanted to provide because the reports were built upon the SSIS Catalog from Denali CTP1; Denali CTP3 brought with it a whole heap of changes to the SSIS Catalog (read more at &lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2011/07/16/ssis-logging-in-denali.aspx" target="_blank"&gt;SSIS Logging in Denali&lt;/a&gt;) and accordingly SSIS Reporting Pack has been enhanced dramatically.&lt;/p&gt;
  &lt;h2&gt;Download and Install&lt;/h2&gt;  
&lt;p&gt;You can always download the latest release of SSIS Reporting Pack from &lt;a href="http://ssisreportingpack.codeplex.com/releases/" title="http://ssisreportingpack.codeplex.com/releases/"&gt;http://ssisreportingpack.codeplex.com/releases/&lt;/a&gt;. In the release that I am announcing today (v0.2) the reports are delivered in an msi installer rather than simply a zip file as they were before, use the installer to easily make the&amp;nbsp; reports available in whatever location you require:&lt;/p&gt;
  
&lt;blockquote&gt;   
&lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_66CCD4F4.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_2552229B.png" style="background-image:none;border:0px none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" border="0" height="443" width="568"&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;/blockquote&gt;
  
&lt;p&gt;After installation you will have a folder containing all the report project artefacts.&lt;/p&gt;
  
&lt;blockquote&gt;   
&lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_43BC6384.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_5B0767F5.png" style="background-image:none;border:0px none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" border="0" height="431" width="566"&gt;&lt;/a&gt;&lt;/p&gt;
 &lt;/blockquote&gt;
  
&lt;p&gt;Open SSISReportingPack.rptproj in Visual Studio just as you would any other Reporting Services project from where you can deploy the reports to your Denali report server of choice. You will need to edit the data source (SSISCatalog.rds) to point to your SSIS Catalog (i.e. the [SSISDB] database). If you do not have your own instance of the SSIS Catalog database ([SSISDB]) but still wish to evaluate SSIS Reporting Pack I have made a copy of [SSISDB] available on SQL Azure that can be accessed using the following credentials:&lt;/p&gt;
  
&lt;table cellpadding="2" cellspacing="0"&gt;     
&lt;tr&gt;       
&lt;td&gt;         
&lt;p align="center"&gt;&lt;b&gt;Server&lt;/b&gt;&lt;/p&gt;
       &lt;/td&gt;
        
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
        
&lt;td&gt;         
&lt;p align="center"&gt;&lt;b&gt;Username&lt;/b&gt;&lt;/p&gt;
       &lt;/td&gt;
        
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
        
&lt;td&gt;         
&lt;p align="center"&gt;&lt;b&gt;Password&lt;/b&gt;&lt;/p&gt;
       &lt;/td&gt;

&lt;td&gt;         
&lt;p align="center"&gt;&lt;b&gt;Database&lt;/b&gt;&lt;/p&gt;
       &lt;/td&gt;
     &lt;/tr&gt;
      
&lt;tr&gt;       
&lt;td&gt;         
&lt;p align="center"&gt;enf3k2ao1m.database.windows.net&lt;/p&gt;
       &lt;/td&gt;
        
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
        
&lt;td&gt;         
&lt;p align="center"&gt;ro&lt;/p&gt;
       &lt;/td&gt;
        
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
        
&lt;td&gt;         
&lt;p align="center"&gt;r3@d0nly&lt;/p&gt;
       &lt;/td&gt;
&lt;td&gt;         
&lt;p align="center"&gt;SSISDB&lt;/p&gt;
       &lt;/td&gt;
     &lt;/tr&gt;
   &lt;/table&gt;
        
&lt;blockquote&gt;   &lt;h2&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_790575E9.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_05932306.png" style="background-image:none;border:0px none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" border="0" height="679" width="566"&gt;&lt;/a&gt;&lt;/h2&gt; &lt;/blockquote&gt;
  &lt;h2&gt;The Reports&lt;/h2&gt;  
&lt;p&gt;As I said above the reports have been changed in order to leverage the new additions to the SSIS Catalog in CTP3. The main enhancement I want to draw your attention to is the rich navigation of log data that is now provided&lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_11B49D2D.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_731AAC83.png" style="background-image:none;border:0px none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" border="0" height="540" width="774"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p&gt;Notice that the log messages are now &lt;i&gt;contextual&lt;/i&gt;, each message is shown against the executable that raised the message which in turn is indented indicating its position in the executable hierarchy. I expect this to be of great benefit when navigating package execution logs which, prior to Denali, was very difficult due to it essentially being a long flat list of messages.&lt;/p&gt;
  
&lt;p&gt;SSIS Reporting Pack also has the ability to visualise the duration of each excutable:&lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_37E6D0B8.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_6F4CE1E6.png" style="background-image:none;border:0px none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" border="0" height="408" width="779"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p&gt;In the simple example highlighted here by the red box we can see that iteration 3 of the For Each Loop “FEL Loop over top performing regions” took considerably longer than the two previous iterations; SSIS Reporting Pack gives us the tools we need to drill in and find out exactly where and why that slow down occurred.&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
                
&lt;p&gt;Those are two of the main new features of SSIS Reporting Pack but there is lots more to discover so if you are evaluating SSIS in Denali I encourage you to &lt;a href="http://ssisreportingpack.codeplex.com/releases/" target="_blank"&gt;download SSIS Reporting Pack&lt;/a&gt; and use it to learn about the plethora of data that is available in the SSIS Catalog. Please do bear in mind that this is still an early release so there are still lots of improvements to be made in the future; you can suggest improvements or report bugs either in the comments section below or (preferably) on the Discussions page at &lt;a href="http://ssisreportingpack.codeplex.com/discussions" title="http://ssisreportingpack.codeplex.com/discussions"&gt;http://ssisreportingpack.codeplex.com/discussions&lt;/a&gt;.&lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://twitter.com/jamiet"&gt;@jamiet&lt;/a&gt;&lt;/p&gt;</description></item><item><title>SSIS Logging in Denali</title><link>http://sqlblog.com/blogs/jamie_thomson/archive/2011/07/16/ssis-logging-in-denali.aspx</link><pubDate>Sat, 16 Jul 2011 15:16:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:36994</guid><dc:creator>jamiet</dc:creator><description>&lt;p&gt;In my blog post &lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/13/ssis-server-catalogs-environments-environment-variables-in-ssis-in-denali.aspx" target="_blank"&gt;SSIS Server, Catalogs, Environments &amp;amp; Environment Variables in SSIS in Denali&lt;/a&gt; from November 2010 I alluded to forthcoming enhancements in the logging infrastructure when I said:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;One final note on logging. The fairly limited information that gets captured in the current CTP is not the same as what will be in the product upon release – there is a lot more to come.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I wasn’t kidding. Those logging enhancements have hit the street in CTP3 and in my opinion they are worth waiting for. SSIS logging has long been an interest of mine primarily because the logging support in SSIS has, up to now, been woeful and that’s what led me to author what has proved to be one of my more popular blog posts &lt;a href="http://consultingblogs.emc.com/jamiethomson/archive/2005/06/11/SSIS_3A00_-Custom-Logging-Using-Event-Handlers.aspx" target="_blank"&gt;Custom Logging Using Event Handlers&lt;/a&gt; way back in June 2005. Most serious SSIS shops I come across these days have implemented their own custom logging solution and I’m happy to be able to tell them that with Denali they are no longer forced to do that. In this blog post I’ll walk you through all of the crucial objects in the SSIS Catalog related to logging and by the end of it you’ll hopefully have a good handle on the new capabilities. I assume at this point that you understand what is meant by the terms catalog, projects, parameters, executions, executables, environments, environment references, environment variables and shared connection managers in the context of SSIS; if not then I have plenty of past material that you can go and read to fill yourself in at &lt;a title="http://sqlblog.com/blogs/jamie_thomson/archive/tags/denali/ssis/default.aspx" href="http://sqlblog.com/blogs/jamie_thomson/archive/tags/denali/ssis/default.aspx"&gt;http://sqlblog.com/blogs/jamie_thomson/archive/tags/denali/ssis/default.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;To demonstrate some of the new abilities I have put together a SSIS project that contains two packages, Master.dtsx &amp;amp; ExportDataForCountry.dtsx:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_3EDE78FE.png"&gt;&lt;img width="295" height="168" title="SSIS Solution Explorer" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="SSIS Solution Explorer" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_327055D5.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Note also that we have a Shared Connection Manager.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The intention is to access the [AdventureWorks2008] database and find the 3 best countries with the highest number of sales for a given year. Then, for each of those 3 countries in the given year, extract the sales data and (a) sort and output to a file and (b) aggregate and insert into a table. Here are my project parameters (note the descriptions):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_194E5EC5.png"&gt;&lt;img width="756" height="132" title="SSIS Project Parameters pane" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="SSIS Project Parameters pane" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_5120A2E8.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Here is Master.dtsx:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_2182845C.png"&gt;&lt;img width="797" height="526" title="SSIS Package Pane in Visual Studio 2010" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="SSIS Package Pane in Visual Studio 2010" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_3EA82C66.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;We use an Execute SQL Task to get the 3 top performing countries for the given year (in the “Year” project parameter) and call ExportDataForCountry.dtsx for each one of them. We also ensure that the folder (given in FolderPath project parameter) into which we are going to output the csv files exists.&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Note also how I was able to take this screenshot of the whole package. This was made easier thanks to the move to Visual Studio 2010 because each open package is a pane in its own right and can be dragged out of the Visual Studio shell , then onto a second screen if you so wish. A really nice new feature.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;ExportDataForCountry.dtsx consists of just one task – a dataflow:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_1CDC53D5.png"&gt;&lt;img width="521" height="656" title="SSIS Package Pane in Visual Studio 2010" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="SSIS Dataflow in Visual Studio 2010" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_140C4B89.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It also has a package parameter (again, note the description):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_454B101C.png"&gt;&lt;img width="760" height="111" title="SSIS Package Parameters in Visual Studio 2010" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="SSIS Package Parameters in Visual Studio 2010" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_564F3DFF.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I am going to use the logging information created by executing Master.dtsx in the rest of the blog post to demonstrate the new logging capabilities in Denali. I have used verbose logging (the highest logging level) and environment variables; here is the resultant code to execute master.dtsx:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=Declare&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;Declare&lt;/a&gt; @execution_id &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=bigint&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;bigint&lt;/a&gt;
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=EXEC&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;EXEC&lt;/a&gt; [SSISDB].[&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].[create_execution] 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;      @package_name    =  N'&lt;span&gt;Master.dtsx&lt;/span&gt;', 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;      @execution_id    =  @execution_id &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=OUTPUT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;OUTPUT&lt;/a&gt;, 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;      @folder_name    =  N'&lt;span&gt;CTP3&lt;/span&gt;', 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;      @project_name    =  N'&lt;span&gt;20110712 Logging Demo&lt;/span&gt;', 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;      @&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=use&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;use&lt;/a&gt;32bitruntime  =  &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=False&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;False&lt;/a&gt;, 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;      @reference_id    =  3
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=Select&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;Select&lt;/a&gt; @execution_id
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=DECLARE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;DECLARE&lt;/a&gt; @var0 &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=smallint&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;smallint&lt;/a&gt; = 3
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=EXEC&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;EXEC&lt;/a&gt; [SSISDB].[&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].[set_execution_parameter_value] 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;      @execution_id,  
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;      @object_type    =  50, 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;      @parameter_name    =  N'&lt;span&gt;LOGGING_LEVEL&lt;/span&gt;', 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;      @parameter_value  =  @var0
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=DECLARE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;DECLARE&lt;/a&gt; @var1 &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=bit&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;bit&lt;/a&gt; = 0
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=EXEC&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;EXEC&lt;/a&gt; [SSISDB].[&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].[set_execution_parameter_value] 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;      @execution_id,  
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;      @object_type    =  50, 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;      @parameter_name    =  N'&lt;span&gt;DUMP_ON_ERROR&lt;/span&gt;', 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;      @parameter_value  =  @var1
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=EXEC&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;EXEC&lt;/a&gt; [SSISDB].[&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].[start_execution] 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;      @execution_id&lt;/pre&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;So then, let’s dive into what actually gets logged! if you want to follow along at home then you can download the project file (i.e. .ispac file) from &lt;a title="https://skydrive.live.com/#!/?cid=550f681dad532637&amp;amp;sc=documents&amp;amp;uc=1&amp;amp;id=550F681DAD532637%2115204" href="https://skydrive.live.com/#!/?cid=550f681dad532637&amp;amp;sc=documents&amp;amp;uc=1&amp;amp;id=550F681DAD532637%2115204"&gt;https://skydrive.live.com/#!/?cid=550f681dad532637&amp;amp;sc=documents&amp;amp;uc=1&amp;amp;id=550F681DAD532637%2115204&lt;/a&gt; (you will need to have an instance of [AdventureWorksDW2008] hanging around somewhere.)&lt;/p&gt;

&lt;p&gt;You might want to go and get yourself a drink before you continue – this one is a biggie!!&lt;/p&gt;

&lt;hr&gt;

&lt;h2&gt;[catalog].[executions]&lt;/h2&gt;

&lt;p&gt;You are going to become very very familiar indeed with &lt;font face="Consolas"&gt;[catalog].[executions]&lt;/font&gt;. It is a view that provides a record of all package executions on the server and, most importantly, it contains &lt;font face="Consolas"&gt;[execution_id]&lt;/font&gt; – the identifier for each execution and the field to which all other objects herein will be related. There are a number of other fields in here some of which are interesting and some which are not; I suspect that you are going to be most interested in:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;start_time &lt;/li&gt;

  &lt;li&gt;end_time &lt;/li&gt;

  &lt;li&gt;status &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;font face="Consolas"&gt;[start_time] &lt;/font&gt;&amp;amp; &lt;font face="Consolas"&gt;[end_time]&lt;/font&gt; are self-explanatory. &lt;font face="Consolas"&gt;[status]&lt;/font&gt; represents the current status of an execution and its possible values are: &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;created (1) &lt;/li&gt;

  &lt;li&gt;running (2) &lt;/li&gt;

  &lt;li&gt;canceled (3), &lt;/li&gt;

  &lt;li&gt;failed (4) &lt;/li&gt;

  &lt;li&gt;pending (5) &lt;/li&gt;

  &lt;li&gt;ended unexpectedly (6) &lt;/li&gt;

  &lt;li&gt;succeeded (7) &lt;/li&gt;

  &lt;li&gt;stopping (8) &lt;/li&gt;

  &lt;li&gt;completed (9) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Putting those together then we get:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt; execution_id,status,
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=CASE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;CASE&lt;/a&gt;  &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHEN&lt;/a&gt; [status] = 1 &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=THEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;THEN&lt;/a&gt; '&lt;span&gt;created&lt;/span&gt;'
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHEN&lt;/a&gt; [status] = 2 &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=THEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;THEN&lt;/a&gt; '&lt;span&gt;running&lt;/span&gt;'
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHEN&lt;/a&gt; [status] = 3 &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=THEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;THEN&lt;/a&gt; '&lt;span&gt;canceled&lt;/span&gt;'
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHEN&lt;/a&gt; [status] = 4 &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=THEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;THEN&lt;/a&gt; '&lt;span&gt;failed&lt;/span&gt;'
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHEN&lt;/a&gt; [status] = 5 &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=THEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;THEN&lt;/a&gt; '&lt;span&gt;pending&lt;/span&gt;'
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHEN&lt;/a&gt; [status] = 6 &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=THEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;THEN&lt;/a&gt; '&lt;span&gt;ended unexpectedly&lt;/span&gt;'
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHEN&lt;/a&gt; [status] = 7 &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=THEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;THEN&lt;/a&gt; '&lt;span&gt;succeeded&lt;/span&gt;'
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHEN&lt;/a&gt; [status] = 8 &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=THEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;THEN&lt;/a&gt; '&lt;span&gt;stopping&lt;/span&gt;'
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHEN&lt;/a&gt; [status] = 9 &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=THEN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;THEN&lt;/a&gt; '&lt;span&gt;completed&lt;/span&gt;'
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=END&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;END&lt;/a&gt; &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=AS&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;AS&lt;/a&gt; [status_text]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;,DATEDIFF(ss,start_time,end_time)DurationInSeconds
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;.executions e&lt;/pre&gt;&lt;/pre&gt;
  &lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_3BE0C60A.png"&gt;&lt;img width="405" height="76" title="catalog.executions sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.executions sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_27A75DE7.png" border="0"&gt;&lt;/a&gt; &lt;/blockquote&gt;

&lt;p&gt;We get some interesting operating system information in the way of total/available physical memory, total/available page file, number of available CPUs and the O/S process ID:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  execution_id,
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    e.total_physical_memory_kb,
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    e.available_physical_memory_kb,
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    e.total_page_file_kb,
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    e.available_page_file_kb,
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    e.process_id
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;.executions e
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHERE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHERE&lt;/a&gt;  e.[execution_id] = 10
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;/pre&gt;&lt;/pre&gt;
  &lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_7516A4D5.png"&gt;&lt;img width="772" height="74" title="catalog.executions available resources sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.executions available resources sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_13ED18B4.png" border="0"&gt;&lt;/a&gt; &lt;/blockquote&gt;

&lt;p&gt;Finally, we also get information about the environment that was used by the execution (if at all) such as the environment name and information pertaining to whether it was an absolute or relative reference (don’t worry too much about the different between an absolute or relative reference for now – its not all that important):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  e.[environment_name],e.reference_id,e.reference_type
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;.executions e
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHERE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHERE&lt;/a&gt;  e.[execution_id] = 10&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_728D7317.png"&gt;&lt;img width="392" height="70" title="catalog.executions environment information sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.executions environment information sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_6A95D0B5.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are other columns in &lt;font face="Consolas"&gt;[catalog].[executions]&lt;/font&gt; but they’re either self-explanatory or not worth talking about here.&lt;/p&gt;

&lt;p&gt;&lt;font color="#c0504d"&gt;[catalog].[executions] is logged to when LOGGING_LEVEL is set to Verbose, Performance, Basic or None.&lt;/font&gt;&lt;/p&gt;

&lt;h2&gt;[catalog].[execution_parameter_values]&lt;/h2&gt;

&lt;p&gt;This view is self-explanatory – it tells us what parameter values were supplied to the package when it executed however there is probably more information in here than you may first imagine there to be. If you look at the code at the top of this blog post that executed our package you will notice that there are two calls to stored procedure &lt;font face="Consolas"&gt;[catalog].[set_execution_parameter_value]&lt;/font&gt; (for LOGGING_LEVEL and DUMP_ON_ERROR) thus you may assume that there would be two rows in &lt;font face="Consolas"&gt;[catalog].[execution_parameter_values]&lt;/font&gt;. Not so, let’s take a look:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  epv.[parameter_name],epv.[parameter_value],epv.[value_set],epv.[runtime_override]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  [&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].[execution_parameter_values] epv
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHERE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHERE&lt;/a&gt;  [execution_id] = 10&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_2A0C807E.png"&gt;&lt;img width="787" height="294" title="catalog.execution_parameter_values  sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.execution_parameter_values  sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_41C3B7E4.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;Fourteen rows, let’s break them down:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;We know that FolderPath &amp;amp; Year are our project parameters yet we didn’t define a value for them when we executed. The reason for their appearance in &lt;font face="Consolas"&gt;[catalog].[execution_parameter_values]&lt;/font&gt; is due to the fact that (as we saw in &lt;font face="Consolas"&gt;[catalog].[executions]&lt;/font&gt;) this execution was executed against an environment called “2003 localhost” The project was pre-configured to get a value for “Year” from the referenced environment (hence [value_set]=1) whereas “FolderPath” was pre-configured to use the server default and hence why we had no need to supply values for them using &lt;font face="Consolas"&gt;[catalog].[set_execution_parameter_value] ([value_set]=0)&lt;/font&gt;. &lt;/li&gt;

    &lt;li&gt;DUMP_ON_ERROR &amp;amp; LOGGING_LEVEL are system parameters that we supplied values for using &lt;font face="Consolas"&gt;[catalog].[set_execution_parameter_value]&lt;/font&gt; (hence [runtime_override]=1) &lt;/li&gt;

    &lt;li&gt;CALLER_INFO, DUMP_EVENT_CODE, DUMP_ON_EVENT &amp;amp; SYNCHRONIZED are further system parameters that we could have supplied values for. &lt;/li&gt;

    &lt;li&gt;The six parameters whose name begin with “CM.AdventureWorksDW2008.” are actually properties of the project’s Shared Connection Manager and by default they get logged in &lt;font face="Consolas"&gt;[catalog].[execution_parameter_values]&lt;/font&gt;. Notice that CM.AdventureWorksDW2008.ServerName has [value_set]=1, that is because our environment reference specified a value for that property too. &lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;font color="#c0504d"&gt;[catalog].[execution_parameter_values] is logged to when LOGGING_LEVEL is set to Verbose, Performance, Basic or None.&lt;/font&gt;&lt;/p&gt;

&lt;h2&gt;[catalog].[executables]&lt;/h2&gt;

&lt;p&gt;&lt;font face="Consolas"&gt;[catalog].[executables]&lt;/font&gt; contains a record for every single executable that gets executed in an execution. What’s an executable? It is every task, container or package in both the package that you execute and any child packages that also get executed using the Execute Package Task. Here’s what we get:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  executable_id,executable_name,package_name,package_path
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  [&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].executables&lt;/pre&gt;&lt;/pre&gt;
  &lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_33CD524E.png"&gt;&lt;img width="886" height="165" title="catalog.executables sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.executables sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_120179BD.png" border="0"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;We can see that all our tasks and our For Each Loop (“FEL Loop over top performing regions”) appear in here along with the containing package. Interestingly we also get package_path which provides the name of the task in the context of its location in the package.&lt;/p&gt;

&lt;p&gt;It is worth noting that we only get a record in &lt;font face="Consolas"&gt;[catalog].[executables]&lt;/font&gt; if an executable actually gets executed. If that doesn’t happen (because of an earlier error or conditional control-flow) then there won’t be a record in here.&lt;/p&gt;

&lt;p&gt;Also note that executables “ExportDataForCountry” and “DFT Export Sales for named country” have an &lt;font face="Consolas"&gt;[executable_id]&lt;/font&gt; that is unique across the whole execution, not just across &lt;font face="Consolas"&gt;[package_name]&lt;/font&gt;. In other words SSIS doesn’t care which physical .dtsx file an executable is in, it treats them all as executables in a single execution; I happen to think that is a massive step forward in Denali and you’ll see even more benefits of that in later views.&lt;/p&gt;

&lt;p&gt;&lt;font color="#c0504d"&gt;[catalog].[executables] is logged to when LOGGING_LEVEL is set to Verbose, Performance, Basic or None.&lt;/font&gt;&lt;/p&gt;

&lt;h2&gt;[catalog].[executable_statistics]&lt;/h2&gt;

&lt;p&gt;This is where the new logging infrastructure in Denali really starts to show benefit. For every executable in &lt;font face="Consolas"&gt;[catalog].[executables]&lt;/font&gt; we get information about it being executed such as whether it succeeded or not and how long it took. You might ask “Why not just put that information in &lt;font face="Consolas"&gt;[catalog].[executables]&lt;/font&gt;?” and actually the answer is simple when you think about it; an executable can, if it exists inside a For Loop or For Each Loop container, be executed more than once during a single execution. SSIS will capture information about each instance of an execution being executed and moreover will differentiate between each one of them. let’s take a look:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  executable_id,execution_path,execution_duration,execution_result
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  [&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].[executable_statistics]&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_306BBAA6.png"&gt;&lt;img width="1009" height="264" title="catalog.executable_statistics sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.executable_statistics sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_55890512.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;We don’t just get the name of the executable, we get its position in the container hierarchy (aka call stack). Best of all that call stack &lt;strong&gt;extends across different packages&lt;/strong&gt; (remember that “Master” and “ExportDataForCountry” are the names of our two packages). We can also differentiate between different instances of an executable via the [1], [2], [3], ... suffix on our For Loop and For Each Loop iterations. &lt;/p&gt;

  &lt;p&gt;Think back to the &lt;a href="http://msdn.microsoft.com/en-us/library/ms186984.aspx" target="_blank"&gt;&lt;font face="Consolas"&gt;[msdb]..[sysssislog]&lt;/font&gt;&lt;/a&gt; table prior to Denali which is just a long flat list of intermingled records and how difficult it is to find the information in there that you are after and I think you will realise the benefit of having &lt;font face="Consolas"&gt;[execution_path]&lt;/font&gt;. This contextual information is something &lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/09/10/newly-closed-connect-items-auger-well-for-ssis-in-denali.aspx" target="_blank"&gt;I have been asking for&lt;/a&gt; for a long time and I am delighted that it is now available. In fact, I’ll go on record as saying that I think &lt;font face="Consolas"&gt;[execution_path]&lt;/font&gt; is the best new feature in SSIS in Denali, I really do. Note that &lt;font face="Consolas"&gt;[execution_path]&lt;/font&gt; is different to &lt;font face="Consolas"&gt;[catalog].[executables].[package_path]&lt;/font&gt; that we saw earlier because &lt;font face="Consolas"&gt;[package_path]&lt;/font&gt; only tells us the location of an executable in a package; it does not provide information in the context of an execution therefore it doesn’t extend across packages either like &lt;font face="Consolas"&gt;[execution_path]&lt;/font&gt; does.&lt;/p&gt;

  &lt;p&gt;We get an execution duration for every single executable (we also get start time and end time which I haven’t shown on this screenshot). Lastly we also get &lt;font face="Consolas"&gt;[execution_result]&lt;/font&gt; which tells us whether an executable succeeded or not – the value in &lt;font face="Consolas"&gt;[execution_result]&lt;/font&gt; comes from the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dts.runtime.dtsexecresult.aspx" target="_blank"&gt;DTSExecResult&lt;/a&gt; enumeration.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There is a lot of information wrapped up in just these three columns and I make heavy use of it in &lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/12/09/introducing-ssis-reporting-pack-for-sql-server-code-named-denali.aspx" target="_blank"&gt;SSIS Reporting Pack&lt;/a&gt;, a suite of reports that I am putting together which provide value on top of the logged information. Here is a screenshot of a new report that leans heavily on &lt;font face="Consolas"&gt;[catalog].[executable_statistics]&lt;/font&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_61AA7F39.png"&gt;&lt;img width="1186" height="379" title="SSIS Reporting Pack Execution Report sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="SSIS Reporting Pack Execution Report sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_0014C023.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;More to come on SSIS Reporting Pack in a later blog post.&lt;/p&gt;

&lt;p&gt;&lt;font color="#c0504d"&gt;[catalog].[executable_statistics] is logged to when LOGGING_LEVEL is set to Verbose, Performance, Basic or None.&lt;/font&gt;&lt;/p&gt;

&lt;h2&gt;[catalog].[event_messages]&lt;/h2&gt;

&lt;p&gt;&lt;font face="Consolas"&gt;[catalog].[event_messages]&lt;/font&gt; is the real meat of the new logging infrastructure and is where I suspect folks investigating SSIS issues will spend most of their time. It performs a very similar role to &lt;a href="http://msdn.microsoft.com/en-us/library/ms186984.aspx" target="_blank"&gt;&lt;font face="Consolas"&gt;[msdb]..[sysssislog]&lt;/font&gt;&lt;/a&gt; however the information herein is much more enhanced as we shall see. It is also the table for which your choice of LOGGING_LEVEL can have the biggest affect.&lt;/p&gt;

&lt;p&gt;The first point to make about &lt;font face="Consolas"&gt;[catalog].[event_messages]&lt;/font&gt; is that it does not contain &lt;font face="Consolas"&gt;[execution_id]&lt;/font&gt;, instead it has &lt;font face="Consolas"&gt;[operation_id]&lt;/font&gt; which actually &lt;em&gt;is&lt;/em&gt; an &lt;font face="Consolas"&gt;[execution_id]&lt;/font&gt;. The reason for the different name is that various different types of operations can occur on the SSIS Server, only one of which is package execution. Each operation will log into &lt;font face="Consolas"&gt;[catalog].[event_messages]&lt;/font&gt; and hence we have &lt;font face="Consolas"&gt;[operation_id]&lt;/font&gt; instead of &lt;font face="Consolas"&gt;[execution_id]&lt;/font&gt;. In this blog post the only operation type that I am covering is package execution.&lt;/p&gt;

&lt;p&gt;The data in &lt;font face="Consolas"&gt;[msdb]..[sysssislog]&lt;/font&gt; was based around the notion of events, all tasks were capable of raising those events and we had the choice of capturing those events and logging them; from that perspective things are no different in Denali. We get all of the columns that we used to get in &lt;font face="Consolas"&gt;[msdb]..[sysssislog]&lt;/font&gt;, the important ones being:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;time of message &lt;/li&gt;

  &lt;li&gt;message &lt;/li&gt;

  &lt;li&gt;message source &lt;/li&gt;

  &lt;li&gt;event name &lt;/li&gt;

  &lt;li&gt;package name &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=cast&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;cast&lt;/a&gt;(message_time &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=as&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;as&lt;/a&gt; &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=datetime&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;datetime&lt;/a&gt;)message_time,message,package_name,event_name,message_source_name
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  [&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].[event_messages]&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_60059EDD.png"&gt;&lt;img width="1073" height="396" title="catalog.event_messages sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.event_messages sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_67CD917F.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In addition we also get the aforementioned [package_path] and [execution_path] which, as I already have said, are great additions:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  [message_source_name],[package_path],[execution_path]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  [&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].[event_messages]&lt;/pre&gt;&lt;/pre&gt;
  &lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_39FFC8BA.png"&gt;&lt;img width="1020" height="76" title="catalog.event_messages execution_path sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.event_messages execution_path sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_319BF363.png" border="0"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Another new field is &lt;font face="Consolas"&gt;[subcomponent_name] &lt;/font&gt;which, as far as I can discern, contains the name of a dataflow component or the internal pipeline that is throwing the event. This is really useful information, previously we only got the name of the dataflow.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  subcomponent_name,message
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  [&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].[event_messages]&lt;/pre&gt;&lt;/pre&gt;
  &lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_29381E0C.png"&gt;&lt;img width="1206" height="244" title="catalog.event_messages subcomponent_name sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.event_messages subcomponent_name sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_675138BD.png" border="0"&gt;&lt;/a&gt; 

  &lt;p&gt;Notice some of the information that we get here regarding rows cached and bytes of memory used, this is all really useful information to have access to.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Two other new columns are [message_type] and [message_source_type] which allow you to further drill down on the information that you are after. They appear in the view as numeric values and whilst there is no documentation publicly available yet on what these values mean I can fill you in on them right here:&lt;/p&gt;

&lt;p&gt;First [message_type]&lt;/p&gt;

&lt;table cellspacing="5" cellpadding="2"&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;message_type&lt;/strong&gt; &lt;/td&gt;

      &lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt; &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;10 &lt;/td&gt;

      &lt;td&gt;OnPreValidate &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;20 &lt;/td&gt;

      &lt;td&gt;OnPostValidate &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;30 &lt;/td&gt;

      &lt;td&gt;OnPreExecute &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;40 &lt;/td&gt;

      &lt;td&gt;OnPostExecute &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;60 &lt;/td&gt;

      &lt;td&gt;OnProgress &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;70 &lt;/td&gt;

      &lt;td&gt;OnInformation &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;90 &lt;/td&gt;

      &lt;td&gt;Diagnostic &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;110 &lt;/td&gt;

      &lt;td&gt;OnWarning &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;140 &lt;/td&gt;

      &lt;td&gt;DiagnosticEx &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;200 &lt;/td&gt;

      &lt;td&gt;Custom events &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;400 &lt;/td&gt;

      &lt;td&gt;OnPipeline* &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;

&lt;p&gt;and [message_source_type]&lt;/p&gt;

&lt;table cellspacing="5" cellpadding="2"&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;message_source_type&lt;/strong&gt; &lt;/td&gt;

      &lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt; &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;10 &lt;/td&gt;

      &lt;td&gt;Messages logged by the entry APIs (e.g. T-SQL, CLR Stored procedures) &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;20 &lt;/td&gt;

      &lt;td&gt;Messages logged by the external process used to run package (ISServerExec) &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;30 &lt;/td&gt;

      &lt;td&gt;Messages logged by the package-level objects &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;40 &lt;/td&gt;

      &lt;td&gt;Messages logged by tasks in the control flow &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;50 &lt;/td&gt;

      &lt;td&gt;Messages logged by containers (For, ForEach, Sequence) in the control flow &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;60 &lt;/td&gt;

      &lt;td&gt;Messages logged by the Data Flow Task &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;

&lt;p&gt;As I alluded to above your choice of LOGGING_LEVEL greatly influences the amount of information that gets logged. I ran this package against each of the four logging levels and here are the number of rows in &lt;font face="Consolas"&gt;[catalog].[event_messages]&lt;/font&gt;:&lt;/p&gt;

&lt;table cellspacing="5" cellpadding="2"&gt;
    &lt;tr&gt;
      &lt;td align="center"&gt;&lt;strong&gt;LOGGING_LEVEL&lt;/strong&gt;&lt;/td&gt;

      &lt;td align="center"&gt;&lt;strong&gt;Rows&lt;/strong&gt;&lt;/td&gt;

      &lt;td align="center"&gt;&lt;strong&gt;Time to Execute (seconds)&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td align="center"&gt;None&lt;/td&gt;

      &lt;td align="center"&gt;0&lt;/td&gt;

      &lt;td align="center"&gt;4&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td align="center"&gt;Basic&lt;/td&gt;

      &lt;td align="center"&gt;128&lt;/td&gt;

      &lt;td align="center"&gt;3&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td align="center"&gt;Performance&lt;/td&gt;

      &lt;td align="center"&gt;1&lt;/td&gt;

      &lt;td align="center"&gt;10&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td align="center"&gt;Verbose&lt;/td&gt;

      &lt;td align="center"&gt;2726&lt;/td&gt;

      &lt;td align="center"&gt;12&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;

&lt;p&gt;Given that this execution only contains 5 task executions and one For Each Loop, 2726 records for LOGGING_LEVEL=Verbose strikes me as being extravagant and indeed this is reflected in the much higher execution time. These numbers are not representative of your environment and of course you should do your own testing accordingly but it does seem as though LOGGING_LEVEL=Verbose can have a detrimental affect on execution duration. If you take a look at the messages that get logged from Verbose logging it is clear that this is intended to be used for diagnostic purposes; messages such as the following aren’t the sort that you want to be wading through on a regular basis:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_653439F4.png"&gt;&lt;img width="1002" height="503" title="catalog.event_messages diagnostics sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.event_messages diagnostics sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_4FF60E7F.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Interestingly [message_source_name] for all these messages is ‘AdventureWorksDW2008’ which is the name of our Connection Manager so it seems as though LOGGING_LEVEL=Verbose may be a shorthand way of telling SSIS to log all information pertaining to resources external to the package.&lt;/p&gt;

&lt;p&gt;I have noticed some interesting new messages when LOGGING_LEVEL=Verbose too that I don’t remember ever seeing before:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_45E16D54.png"&gt;&lt;img width="1317" height="185" title="catalog.event_messages samples" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.event_messages samples" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_4430A180.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;Lots of useful information in there, I particularly like that we get a message for each executable telling us its execution duration. Yes, this information is in &lt;font face="Consolas"&gt;[catalog].[executable_statistics]&lt;/font&gt; as we have already discussed but its useful to have that information in our main log table too.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As you can see &lt;font face="Consolas"&gt;[catalog].[event_messages]&lt;/font&gt; is the workhorse of the new logging infrastructure so its worth spending time getting to know it. Similar to &lt;font face="Consolas"&gt;[catalog].[executable_statistics]&lt;/font&gt; I make heavy use of this table in &lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/12/09/introducing-ssis-reporting-pack-for-sql-server-code-named-denali.aspx" target="_blank"&gt;SSIS Reporting Pack&lt;/a&gt; and the existence of &lt;font face="Consolas"&gt;[execution_path]&lt;/font&gt; makes it easy to browse to the messages that you want to see:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_50521BA7.png"&gt;&lt;img width="1143" height="512" title="SSIS Reporting Pack Execution Report sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="SSIS Reporting Pack Execution Report sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_0DFF0364.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We can highlight errors and warnings much more clearly too:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_0CD1781C.png"&gt;&lt;img width="1146" height="561" title="SSIS Reporting Pack Execution Report sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="SSIS Reporting Pack Execution Report sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_1F39C8D1.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;font color="#c0504d"&gt;[catalog].[executable_statistics] is logged to when LOGGING_LEVEL is set to Verbose, Performance or Basic. For LOGGING_LEVEL=Performance only OnError and OnWarning events get logged. For LOGGING_LEVEL=Basic OnError, OnInformation, OnPreExecute, OnPostExecute, OnPreValidate, OnPostValidate and OnWarning events are logged however as I demonstrated above less OnInformation events are logged than for LOGGING_LEVEL=Verbose.&lt;/font&gt;&lt;/p&gt;

&lt;h2&gt;[catalog].[event_message_context]&lt;/h2&gt;

&lt;p&gt;Have you ever wanted to know what the properties of an executing package were after the event? That is exactly what &lt;font face="Consolas"&gt;[catalog].[event_message_context]&lt;/font&gt; is provided for. For a very small subset of the messages in &lt;font face="Consolas"&gt;[catalog].[event_messages]&lt;/font&gt; it logs properties of the package and its connection managers at the point-in-time that the message is logged. The properties are logged as name:value pairs. This is all better illustrated with a screenshot:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  em.[message],emc.[package_path],emc.[property_name],emc.[property_value]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  [&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].[event_message_context] emc
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=inner&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;inner&lt;/a&gt; &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=join&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;join&lt;/a&gt; [&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].[event_messages] em &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=on&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;on&lt;/a&gt; emc.[event_message_id] = em.[event_message_id]&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_388908F4.png"&gt;&lt;img width="1092" height="417" title="catalog.event_message_context sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.event_message_context sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_6A7083B1.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;font face="Consolas"&gt;[catalog].[event_message_context]&lt;/font&gt; is logged to at the start of a package execution at which point it tells you all the properties of the package. This is useful (I guess) but more useful than that is the logging of properties when an OnError event occurs; more accurately, &lt;font face="Consolas"&gt;[catalog].[event_message_context]&lt;/font&gt; will record all the properties of a failed task. To demonstrate I shutdown the server hosting the [AdventureWorks2008DW] database prior to executing our package and here is a subset of what gets logged in &lt;font face="Consolas"&gt;[catalog].[event_message_context]&lt;/font&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  emc.[context_source_name],emc.[property_name],emc.[property_value]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  [&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].[event_message_context] emc 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=INNER&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;INNER&lt;/a&gt; &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=JOIN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;JOIN&lt;/a&gt; [&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].[event_messages] em 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;  &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=on&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;on&lt;/a&gt; emc.event_message_id = em.event_message_id 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHERE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHERE&lt;/a&gt;  em.operation_id = 19 
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=AND&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;AND&lt;/a&gt;    em.event_name = '&lt;span&gt;OnError&lt;/span&gt;'
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=AND&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;AND&lt;/a&gt;    [property_name] &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=IN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;IN&lt;/a&gt; ('&lt;span&gt;Connection&lt;/span&gt;','&lt;span&gt;StartTime&lt;/span&gt;','&lt;span&gt;StopTime&lt;/span&gt;','&lt;span&gt;SqlStatementSource&lt;/span&gt;')&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_26E474E2.png"&gt;&lt;img width="1142" height="137" title="image" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="image" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_6C1CCC0B.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;As you can see we get the actual SQL statement that was being executed which is invaluable information if the SQL statement is being built dynamically using an expression or a Script Task. Prior to Denali we simply did not have access to this sort of information and is a great example of how logging has been massively enhanced. Moreover we also get StartTime and StopTime so it is easy to see, at a glance, how long it took the task to fail. I find it interesting to note that StartTime and StopTime are execution-time-only properties, but they still get logged. I wonder what other execution-time-only properties exist? If you find any do let me know!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One final thing to note is that when an error occurs &lt;font face="Consolas"&gt;[catalog].[event_message_context]&lt;/font&gt; will contain information about every object in the call stack so if, for example, an Execute SQL Task that is inside a For Each loop fails you will get information about the For Each loop too. Very cool!&lt;/p&gt;

&lt;p&gt;&lt;font color="#c0504d"&gt;[catalog].[event_message_context] is logged to when LOGGING_LEVEL is set to Verbose, Performance and Basic.&lt;/font&gt;&lt;/p&gt;

&lt;h2&gt;[catalog].[execution_component_phases]&lt;/h2&gt;

&lt;p&gt;If you have ever wanted to know which parts of a dataflow are running slowly then &lt;font face="Consolas"&gt;[catalog].[execution_component_phases]&lt;/font&gt; is for you. It records how long each data flow component spends in each phase of execution, those phases are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Validate &lt;/li&gt;

  &lt;li&gt;PrepareForExecute &lt;/li&gt;

  &lt;li&gt;PreExecute &lt;/li&gt;

  &lt;li&gt;ProcessInput &lt;/li&gt;

  &lt;li&gt;PrimeOutput &lt;/li&gt;

  &lt;li&gt;PostExecute &lt;/li&gt;

  &lt;li&gt;Cleanup &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most obvious use of this view is simply to discover where the bottlenecks are in your dataflows by discovering which components take the longest time to complete. Before we look at the information in &lt;font face="Consolas"&gt;[catalog].[execution_component_phases]&lt;/font&gt; let’s remind ourselves of the dataflow that we’re going to examine here:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_140C4B89.png"&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are nine components, let’s look at how long each of them is “alive” for during the execution of this dataflow:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  q2.[subcomponent_name],q2.[phase_time_milliseconds]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  (
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  q.[subcomponent_name],DATEDIFF(ms,q.[min_start_time],q.[max_end_time])[phase_time_milliseconds]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  (
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  [subcomponent_name],&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=MIN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;MIN&lt;/a&gt;([start_time])[min_start_time],&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=MAX&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;MAX&lt;/a&gt;([end_time])[max_end_time]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  [&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].execution_component_phases
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=where&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;where&lt;/a&gt;  [execution_path] = @execution_path
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=group&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;group&lt;/a&gt;  &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=by&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;by&lt;/a&gt; [subcomponent_name]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        )q
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    )q2
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=ORDER&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;ORDER&lt;/a&gt; &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=BY&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;BY&lt;/a&gt; q2.[phase_time_milliseconds] &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=DESC&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;DESC&lt;/a&gt;&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_3221E6CC.png"&gt;&lt;img width="512" height="281" title="catalog.execution-component_phases subcomponent_name summary sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.execution-component_phases subcomponent_name summary sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_10C24130.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;Here we see that LKP Get Customer details has spent the most time executing. To be honest though this query does not give us the best indication of where the bottlenecks are because it includes all phases; the Validate phase will begin at roughly the same time for all components whereas the Cleanup phase for each will end at roughly the same time as well. A better indicator would be to look at the ProcessInput and PrimeOutput phases because this is generally where most of the work is done:&lt;/p&gt;

  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  q2.[subcomponent_name],q2.[phase_time_milliseconds]&lt;span&gt;--,q2.[min_start_time],q2.[max_end_time]&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  (
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  q.[subcomponent_name],q.[min_start_time],q.[max_end_time],DATEDIFF(ms,q.[min_start_time],q.[max_end_time])[phase_time_milliseconds]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  (
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  [subcomponent_name],&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=MIN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;MIN&lt;/a&gt;([start_time])[min_start_time],&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=MAX&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;MAX&lt;/a&gt;([end_time])[max_end_time]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  [&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].execution_component_phases
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=where&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;where&lt;/a&gt;  [execution_id] = @verbose
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=and&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;and&lt;/a&gt;    [execution_path] = @execution_path
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=and&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;and&lt;/a&gt;    phase &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=in&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;in&lt;/a&gt; ('&lt;span&gt;ProcessInput&lt;/span&gt;','&lt;span&gt;PrimeOutput&lt;/span&gt;')
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=group&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;group&lt;/a&gt;  &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=by&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;by&lt;/a&gt; [subcomponent_name]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        )q
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    )q2
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=ORDER&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;ORDER&lt;/a&gt; &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=BY&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;BY&lt;/a&gt; q2.[phase_time_milliseconds] &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=DESC&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;DESC&lt;/a&gt;&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_188A33D2.png"&gt;&lt;img width="503" height="266" title="catalog.execution_component_phases subcomponent_name work summary sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.execution_component_phases subcomponent_name work summary sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_10265E7B.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;Here we get a much better indicator of where time is spent and where the bottlenecks are in our dataflow. Unsurprisingly the destination component that inserts data into the database takes the longest time to complete its work however look at the next three, the Sort component, the Aggregate component and the OLE DB Source component; these three components are all asynchronous so the information that we are seeing here supports the common held belief that asynchronous components are generally slower.&lt;/p&gt;

  &lt;p&gt;Also notice that Multicast is the shortest to execute. Again not surprising given that Multicast components don’t actually do any work.&lt;/p&gt;

  &lt;p&gt;We have two derived column components (“DER Concat Full Name” &amp;amp; “DER Calculate TotalPrice”) yet one of them takes a lot less time than the other. Again this makes sense if we look at our dataflow; “DER Concat Full Name” occurs after the Aggregate component thus it will almost certainly be operating on less rows. Less rows means less work to do means less time to execute.&lt;/p&gt;

  &lt;p&gt;As an aside, &lt;font face="Consolas"&gt;[catalog].[execution_component_phases] &lt;/font&gt;makes it easy to determine exactly which components are asynchronous because they are the ones that have a PrimeOutput phase:&lt;/p&gt;

  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  q2.[subcomponent_name],q2.[phase_time_milliseconds]&lt;span&gt;--,q2.[min_start_time],q2.[max_end_time]&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  (
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  q.[subcomponent_name],q.[min_start_time],q.[max_end_time],DATEDIFF(ms,q.[min_start_time],q.[max_end_time])[phase_time_milliseconds]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  (
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  [subcomponent_name],&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=MIN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;MIN&lt;/a&gt;([start_time])[min_start_time],&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=MAX&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;MAX&lt;/a&gt;([end_time])[max_end_time]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  [&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].execution_component_phases
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=where&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;where&lt;/a&gt;  [execution_id] = @verbose
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=and&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;and&lt;/a&gt;    [execution_path] = @execution_path
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=and&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;and&lt;/a&gt;    phase &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=in&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;in&lt;/a&gt; ('&lt;span&gt;PrimeOutput&lt;/span&gt;')
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=group&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;group&lt;/a&gt;  &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=by&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;by&lt;/a&gt; [subcomponent_name]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        )q
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    )q2
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=ORDER&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;ORDER&lt;/a&gt; &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=BY&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;BY&lt;/a&gt; q2.[phase_time_milliseconds] &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=DESC&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;DESC&lt;/a&gt;&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_735CC398.png"&gt;&lt;img width="504" height="146" title="catalog.execution_component_phases primeoutput asynchronous sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.execution_component_phases primeoutput asynchronous sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_591C5A74.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;

  &lt;p align="left"&gt;OK, so we have seen that the asynchronous components and the destination component that inserts into a database generally take the longest in the “work” phases however there are other insights to be had here. If we take a look at the PreExecute phase:&lt;/p&gt;

  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  q2.[subcomponent_name],q2.[phase_time_milliseconds]&lt;span&gt;--,q2.[min_start_time],q2.[max_end_time]&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  (
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  q.[subcomponent_name],q.[min_start_time],q.[max_end_time],DATEDIFF(ms,q.[min_start_time],q.[max_end_time])[phase_time_milliseconds]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  (
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  [subcomponent_name],&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=MIN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;MIN&lt;/a&gt;([start_time])[min_start_time],&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=MAX&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;MAX&lt;/a&gt;([end_time])[max_end_time]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  [&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].execution_component_phases
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=where&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;where&lt;/a&gt;  [execution_id] = @verbose
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=and&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;and&lt;/a&gt;    [execution_path] = @execution_path
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=and&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;and&lt;/a&gt;    phase &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=in&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;in&lt;/a&gt; ('&lt;span&gt;PreExecute&lt;/span&gt;')
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=group&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;group&lt;/a&gt;  &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=by&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;by&lt;/a&gt; [subcomponent_name]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;        )q
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;    )q2
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=ORDER&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;ORDER&lt;/a&gt; &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=BY&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;BY&lt;/a&gt; q2.[phase_time_milliseconds] &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=DESC&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;DESC&lt;/a&gt;&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_653DD49B.png"&gt;&lt;img width="484" height="242" title="catalog.execution_component_phases subcomponent_name preexecute summary sample" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.execution_component_phases subcomponent_name preexecute summary sample" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_3CBEF287.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;we notice that our lookup component (“LKP Get customer details”) appears much higher in the list than it did previously. This is not surprising given that this is a fully cached lookup component and the PreExecute phase is when that cache gets populated.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Clearly there are many many insights to be gleaned from &lt;font face="Consolas"&gt;[catalog].[execution_component_phases]&lt;/font&gt; and it should prove to be an invaluable tool when performance tuning dataflows.&lt;/p&gt;

&lt;p&gt;&lt;font color="#c0504d"&gt;[catalog].[execution_component_phases] is logged to when LOGGING_LEVEL is set to Verbose and Performance.&lt;/font&gt;&lt;/p&gt;

&lt;h2&gt;[catalog].[execution_data_statistics]&lt;/h2&gt;

&lt;p&gt;Where &lt;font face="Consolas"&gt;[catalog].[execution_component_phases]&lt;/font&gt; tells us how long each component executed for, &lt;font face="Consolas"&gt;[catalog].[execution_data_statistics]&lt;/font&gt; tells us how much data they processed. I’m sure that if you have ever executed packages in BIDS and made use of the real-time rowcounts that appear in the GUI:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_0ABC6291.png"&gt;&lt;img width="479" height="586" title="SSIS dataflow denali rowcounts" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="SSIS dataflow denali rowcounts" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_16DDDCB8.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;then at some point you will have wished that you had the same outside of BIDS too; well, that is exactly what &lt;font face="Consolas"&gt;[catalog].[execution_data_statistics]&lt;/font&gt; provides. Every time a dataflow component passes a buffer on to the next component then you will get a record in &lt;font face="Consolas"&gt;[catalog].[execution_data_statistics]&lt;/font&gt;. Specifically you will get the following information:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;execution_path of the containing dataflow (we’ve covered this quite a bit already) &lt;/li&gt;

  &lt;li&gt;dataflow path id (a meaningful unique identifier for each data path in the dataflow) &lt;/li&gt;

  &lt;li&gt;source component (the component passing the buffer on) &lt;/li&gt;

  &lt;li&gt;destination component (the component receiving the buffer) &lt;/li&gt;

  &lt;li&gt;time that the buffer was passed on &lt;/li&gt;

  &lt;li&gt;number of rows in the buffer &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s what that looks like for our dataflow:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  eds.[dataflow_path_id_string],eds.[rows_sent],eds.[created_time]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  [&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].[execution_data_statistics] eds
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHERE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHERE&lt;/a&gt;  eds.[execution_path] = @execution_path
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=ORDER&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;ORDER&lt;/a&gt;  &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=BY&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;BY&lt;/a&gt; [dataflow_path_id_string]&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_1EA5CF5A.png"&gt;&lt;img width="604" height="356" title="catalog.execution_data_statistics raw data" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.execution_data_statistics raw data" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_35F0D3CB.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Of course once you have the raw data then you can party on it as much as you want. Remember that &lt;font face="Consolas"&gt;[catalog].[execution_data_statistics]&lt;/font&gt; has a record for each &lt;em&gt;buffer&lt;/em&gt;, not for each datapath and hence to get a total per datapath you’re going to need to SUM:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre style="padding:5px;width:650px;overflow:auto;min-height:40px;"&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  eds.[dataflow_path_id_string],&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SUM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SUM&lt;/a&gt;(eds.[rows_sent])[total_rows_sent],&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=MIN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;MIN&lt;/a&gt;(eds.[created_time])[first_buffer_sent],&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=MAX&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;MAX&lt;/a&gt;(eds.[created_time])[last_buffer_sent]
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;  [&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=catalog&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;catalog&lt;/a&gt;].[execution_data_statistics] eds
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHERE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHERE&lt;/a&gt;  eds.[execution_path] = @execution_path
&lt;/pre&gt;&lt;pre style="width:100%;font-size:12px;"&gt;&lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=GROUP&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;GROUP&lt;/a&gt;  &lt;a href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=BY&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;BY&lt;/a&gt; [dataflow_path_id_string]&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_4DC79524.png"&gt;&lt;img width="836" height="185" title="catalog.execution_data_statistics rows summary" style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" alt="catalog.execution_data_statistics rows summary" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_426E5B1A.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;font face="Consolas"&gt;[catalog].[execution_data_statistics],&lt;/font&gt; along with &lt;font face="Consolas"&gt;[catalog].[execution_component_phases],&lt;/font&gt; seems set to be an integral part of your dataflow performance tuning armoury.&lt;/p&gt;

&lt;p&gt;&lt;font color="#c0504d"&gt;[catalog].[execution_data_statistics] is logged to when LOGGING_LEVEL is set to Verbose.&lt;/font&gt;&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That concludes this run through of the new logging capabilities in SQL Server Denali CTP3. I personally am very happy indeed with these enhancements and am looking forward to building new solutions on this infrastructure as soon as possible. How about you? Are these new capabilities what you have been waiting for or are they superfluous to your needs? Let me know in the comments.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://twitter.com/jamiet"&gt;@Jamiet&lt;/a&gt;&lt;/p&gt;</description></item><item><title>SSIS enhancements in Denali CTP3</title><link>http://sqlblog.com/blogs/jamie_thomson/archive/2011/07/12/ssis-enhancements-in-denali-ctp3.aspx</link><pubDate>Tue, 12 Jul 2011 20:32:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:36840</guid><dc:creator>jamiet</dc:creator><description>&lt;p&gt;The third Community Technology Preview (CTP3) of SQL Server code-named Denali is upon us and, although you would never guess from the &lt;a href="http://blogs.technet.com/b/dataplatforminsider/archive/2011/07/11/sql-server-code-name-denali-ctp3-is-here.aspx" target="_blank"&gt;official announcement&lt;/a&gt;, there is a whole raft of enhancements to SQL Server Integration Services (SSIS) and in this blog post I will take you on a tour of some of them. I must stress that nothing here is finalised and anything is liable to be changed prior to the full release of Denali. Wanna know what’s new? Read on…&lt;/p&gt;  &lt;h2&gt;Parameterize a Task&lt;/h2&gt;  &lt;p&gt;If you have experienced CTP1 then you will know that one of the big new features in Denali is Parameters (if you know nothing of Parameters then you may want to take a read of my earlier post &lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/11/parameters-in-ssis-in-denali.aspx" target="_blank"&gt;Parameters in SSIS in Denali&lt;/a&gt; from November 2010). In CTP3 there is a new designer enhancement that makes it a lot easier to work with parameters – right-clicking on a task shows a “Parameterize…” option:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_2A7C8D0D.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_7DF35D26.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="191" border="0" height="359"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Clicking that launches the Parameterize dialog:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_237CDA88.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_5B4F1EAB.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="354" border="0" height="412"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In the screenshot above I am parameterizing the WorkingDirectory property of an Execute Process Task. From this dialog we have the option to:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Create a new parameter &lt;/li&gt;    &lt;li&gt;Use an existing parameter &lt;/li&gt;    &lt;li&gt;Initialise a newly created parameter with some value &lt;/li&gt;    &lt;li&gt;Define a newly created parameter as package or project scoped &lt;/li&gt;    &lt;li&gt;Define a newly created parameter as required or not &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Once the parameter has been specified an expression will be placed onto the selected property setting it to the value of the parameter:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_32D03C97.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_117096FB.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="803" border="0" height="360"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h2&gt;Package Parameters Tab&lt;/h2&gt;  &lt;p&gt;Package-scoped Parameters now have their own tab within the designer whereas in CTP1 they were shoehorned into the Variables pane:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_76C3FAE1.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_5CEFC4B2.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="505" border="0" height="48"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h2&gt;Shared Connection Managers&lt;/h2&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_14C208D6.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_3AB7B92C.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="360" border="0" height="244"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This is one of the big-ticket features in CTP3. Connection Managers are no longer confined to a package, they can live as part of the project and be used by multiple packages. They will appear alongside package-scoped Connection Managers in the familiar Connection Manager tray in *all* packages within that project. Currently the visual differentiation between a package-scoped and a project-scoped Connection Manager is that the project-scoped Connection Manager appears in bold text:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_6B6AC0D7.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_43C444AD.png" style="background-image:none;border-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="195" border="0" height="83"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;A project-scoped Connection Manager can be used wherever you you can use a package-scoped Connection Manager.&lt;/p&gt;  &lt;p&gt;When a project containing a Shared Connection Manager is deployed to the server then any property of that Shared Connection Manager can be changed just like a Project Parameter can be. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_69B9F503.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_3D30C51D.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="721" border="0" height="416"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In the screenshot immediately above you can see that I am setting the ConnectionString property of a Shared Connection Manager to the value of an environment variable called ConnStr (for more on environments and environment variables go take a read of &lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/13/ssis-server-catalogs-environments-environment-variables-in-ssis-in-denali.aspx" target="_blank"&gt;SSIS Server, Catalogs, Environments, Environment Variables in SSIS in Denali&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;The last related point here is to note that the Data Sources and Data Source Views folders that appeared in Solution Explorer in SSIS2008R2:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_5B9B0606.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_6C9F33E9.png" style="background-image:none;border-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="244" border="0" height="189"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;have disappeared, and I am sure they will not be missed.&lt;/p&gt;  &lt;h2&gt;Project Parameters node in Solution Explorer&lt;/h2&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_3243BE08.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_4347EBEB.png" style="background-image:none;border-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="244" border="0" height="171"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Project Parameters now have their own node in Solution Explorer rather than being hidden underneath a right-click menu like they were in CTP1.&lt;/p&gt;  &lt;h2&gt;Expression Indicator&lt;/h2&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_21E8464F.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_59BA8A72.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="505" border="0" height="186"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Variables, Connection Managers and Tasks now have an &lt;i&gt;fx&lt;/i&gt; adorner applied to them indicating that there is at least one expression on that object (yes, just like what &lt;a href="http://bidshelper.codeplex.com" target="_blank"&gt;BIDS Helper&lt;/a&gt; does for earlier versions).&lt;/p&gt;  &lt;h2&gt;Change variable scope&lt;/h2&gt;  &lt;p&gt;One of the biggest annoyances in the previous SSIS Designer was that the scope of a variable could not be changed. Not anymore, in Denali it is possible to change the scope of a variable:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_6648378E.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_4C07CE6A.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="552" border="0" height="255"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h2&gt;Double-click to add a task&lt;/h2&gt;  &lt;p&gt;Its not really possible to demo this one with a screenshot but its pretty easy to explain. Double-clicking on a task in the toolbox will add it to the container that currently has the focus (which may of course be the package). This works for components in the data flow too.&lt;/p&gt;  &lt;h2&gt;Sort by name&lt;/h2&gt;  &lt;p&gt;It is now possible to sort packages alphabetically in Solution Explorer:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_2388EC56.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_704CB2EC.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="361" border="0" height="281"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_39FB8ADD.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_46F56AEE.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="237" border="0" height="188"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Note how the position of “Package.dtsx” &amp;amp; “Another Package.dtsx” has been reversed.&lt;/p&gt;  &lt;h2&gt;Simplified Data Viewers&lt;/h2&gt;  &lt;p&gt;Have you ever got annoyed that adding a data viewer takes far too many clicks given that you do the same thing (Add-&amp;gt;Grid-&amp;gt;Grid Tab-&amp;gt;OK) every time? In Denali its a lot easier; there is only one option – Grid (did you every use anything else anyway?) and all columns are automatically selected:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_10A442DF.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_04361FB6.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="482" border="0" height="460"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h2&gt;4000 character limit on expressions has gone way&lt;/h2&gt;  &lt;p&gt;This one is pretty significant. In SSIS2008 an expression of REPLICATE(“a”,4001) times &lt;a href="http://consultingblogs.emc.com/jamiethomson/archive/2009/05/27/4000-character-limit-in-ssis.aspx" target="_blank"&gt;would result in design-time warnings and execution-time errors&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_0DAEDE2C.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_26CA3864.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="657" border="0" height="608"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In Denali the 4000 character limit has gone away.&lt;/p&gt;  &lt;h2&gt;New expression language functions&lt;/h2&gt;  &lt;p&gt;We have three new functions in the expression language:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_3689CD68.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_5C7F7DBE.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="734" border="0" height="165"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;LEFT(&amp;lt;string&amp;gt;, &amp;lt;number-of-chars&amp;gt;) – A shorthand way of writing SUBSTRING(&amp;lt;string&amp;gt;, 1, &amp;lt;number-of-chars&amp;gt;) &lt;/li&gt;    &lt;li&gt;TOKEN(&amp;lt;string&amp;gt;, &amp;lt;delimiter&amp;gt;, N) – Returns the Nth token in &amp;lt;string&amp;gt; when it is split by &amp;lt;delimiter&amp;gt; &lt;/li&gt;    &lt;li&gt;TOKENCOUNT(&amp;lt;string&amp;gt;, &amp;lt;delimiter&amp;gt;) – Returns the total number of tokens in &amp;lt;string&amp;gt; as determined by &amp;lt;delimiter&amp;gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;TOKEN(,,) will be particularly useful when manually parsing columns from a flat file. When used in conjunction with TOKENCOUNT it can be used to return the last token in a string like so:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;TOKEN( [SomeTextColumn], “,”, TOKENCOUNT([SomeTextColumn], “,”) ) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I guess &lt;a href="https://connect.microsoft.com/SQLServer/feedback/details/543945" target="_blank"&gt;they do sometimes&lt;/a&gt; &lt;a href="http://connect.microsoft.com/SQLServer/feedback/details/635968/ssis-tokencount-string-delimiter-or-occurrences-string-delimiter#details" target="_blank"&gt;read Connect&lt;/a&gt; &lt;img src="http://sqlblog.com/blogs/jamie_thomson/wlEmoticon-smile_4CFC6BEF.png" style="border-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile"&gt;&lt;/p&gt;  &lt;h2&gt;Different style of Success/Failure Indicator&lt;/h2&gt;  &lt;p&gt;In SSIS2008R2:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_658C093F.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_52D70F88.png" style="background-image:none;border-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="200" border="0" height="50"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_51FEA99E.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_382A736F.png" style="background-image:none;border-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="199" border="0" height="49"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;And now in Denali:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_504DDDCA.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_6466FA53.png" style="background-image:none;border-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="197" border="0" height="72"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_5C6F57F1.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_2DA99F4F.png" style="background-image:none;border-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="205" border="0" height="78"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;A little more understated in Denali I think you’ll agree although I suspect some people will prefer the old way! I am undecided. Arguably an icon is better than a change in colour for those that suffer from colour-blindness.&lt;/p&gt;  &lt;h2&gt;Load files with multiple row formats&lt;/h2&gt;  &lt;p&gt;One of the big complaints about SSIS over the past six years is that it has poor support for loading files where rows can have variable numbers of columns. The typical way of dealing with this was to use the Ragged Right feature and parse out the columns in a Derived Column component however that is no longer necessary – SSIS can now parse all of the columns from such files in the Flat File Source Adapter. Here is one such file that has differing row formats:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_018CA25E.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_64A37D88.png" style="background-image:none;border-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="223" border="0" height="185"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It is a simplistic example of a file that contains both OrderHeader and OrderDetails records. The OrderHeader records consist of an OrderId and a Name, the OrderDetails records consist of an OrderId, an OrderLineNumber, a ProductName and a Quantity. In the Preview screen of the Flat File Connection Manager we can see that SSIS is able to parse both of these row formats:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_1F1E7D5D.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_7DBED7C0.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="469" border="0" height="465"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Typically you could then use a Conditional Split component to split the dataset into Header and Detail records:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_1C2918AA.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_53FB5CCD.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="408" border="0" height="361"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h2&gt;Script out from the GUI now wired up&lt;/h2&gt;  &lt;p&gt;In earlier CTPs the Script button on the various GUIs in the SSIS Catalog didn’t do anything&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_329BB731.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_113C1195.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="644" border="0" height="420"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In CTP3 however these are now wired up correctly so hitting CTRL+Shift+N will (in this example) produce a script containing the code required to execute a package:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_01B8FFC6.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_398B43E9.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="508" border="0" height="455"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h2&gt;Logging Level&lt;/h2&gt;  &lt;p&gt;In Denali logging is no longer configured within a package, it is done on the SSIS Server (much more on this in an upcoming blog post). This much we already knew (learn more at &lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/13/ssis-server-catalogs-environments-environment-variables-in-ssis-in-denali.aspx" target="_blank"&gt;SSIS Server, Catalogs, Environments &amp;amp; Environment Variables in SSIS in Denali&lt;/a&gt;) however in CTP3 we now have the option to choose what data gets logged. There are four options here; None, Basic, Performance &amp;amp; Verbose&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_739A10C8.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_6416FEF9.png" style="background-image:none;border:0px none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="567" border="0" height="450"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I won’t cover each choice here as there will be plenty of documentation available around this, for now just know that the option is available.&lt;/p&gt;  &lt;h2&gt;Data Taps&lt;/h2&gt;  &lt;p&gt;Data Taps are an exciting new feature coming in Denali and have taken me completely by surprise. Ever wanted to to view the data in an executing package like you can using a data viewer in BIDS? That is what data taps provide. You don’t have to build them into your package either, they are added on the server when the package is executed.&lt;/p&gt;  &lt;p&gt;Data taps are worthy of a post of their own so I’ll cover them separately if no-one else does so first.&lt;/p&gt;  &lt;h2&gt;Expression Task&lt;/h2&gt;  &lt;p&gt;I once wrote a blog post entitled &lt;a href="http://consultingblogs.emc.com/jamiethomson/archive/2008/10/24/ssis-nesting-variables-to-calculate-values.aspx" target="_blank"&gt;Nesting variables to calculate values&lt;/a&gt; where I opined that (where possible) it was better to build variable values dynamically using expressions rather than assign a value using a Script Task because this resulted in less executables in your package. Some people in the comments disagreed with me partly because they liked the explicitness of a task to do this job and for those people there is a new task in Denali that is right up their street – the Expression Task. Put simply the Expression task will assign the result of an expression to a variable, in the example below I am assigning a value to a variable called “Sum”&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_7B62036A.png"&gt;&lt;img src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_06AB17A8.png" style="background-image:none;border:0px none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="556" border="0" height="538"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I have to be honest and say I despise this task. The variable being assigned to should be available in a dropdown box, you shouldn’t have to type it. Furthermore if they are &lt;i&gt;not&lt;/i&gt; going to provide the variable in a dropdown then the box in which you type should not be labelled “Expression”, it should be labelled “Assignment” – because that is what it is. I will not be going anywhere near this thing, will you?&lt;/p&gt;  &lt;p&gt;On the plus side they have moved the system variables into a “System variables” node in the “Variables and Parameters” tree which is a most welcome change.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h2&gt;Wrap-up&lt;/h2&gt;  &lt;p&gt;I haven’t covered everything that’s new in CTP3 but this is the bulk of it from a pure development perspective. What out of that little lot most excites you? Let me know in the comments.&lt;/p&gt;  &lt;p&gt;I’ll touch on some other things in upcoming blog posts including an enhancement which is seemingly very insignificant but which actually excites me more than anything I’ve talked about here. Watch this space.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/jamiet"&gt;@jamiet&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Other blog posts related to SSIS in Denali CTP3:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://microsoft-ssis.blogspot.com/2011/07/microsoft-sql-server-code-named-denali.html" target="_blank"&gt;&amp;nbsp;Microsoft SQL Server code-named 'Denali' - Community Technology Preview 3&lt;/a&gt; by Joost van Rossum&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/mattm/archive/2011/07/12/ssis-what-s-new-in-sql-server-denali.aspx" target="_blank"&gt;SSIS - What’s New in SQL Server Denali&lt;/a&gt; by Matt Masson&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>New SSIS features and enhancements in Denali – a webinar on 28th June in association with Pragmatic Works</title><link>http://sqlblog.com/blogs/jamie_thomson/archive/2011/06/27/new-ssis-features-and-enhancements-in-denali-a-webinar-on-28th-june-in-association-with-pragmatic-works.aspx</link><pubDate>Mon, 27 Jun 2011 21:39:45 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:36497</guid><dc:creator>jamiet</dc:creator><description>&lt;p&gt;Tomorrow I shall be presenting a webinar entitled “New SSIS features and enhancements in Denali”. The webinar is being hosted by Pragmatic Works and you can sign up for it at &lt;a href="http://pragmaticworks.com/Resources/webinars/Default.aspx"&gt;Pragmatic Works webinars&lt;/a&gt;. The webinar will start at 1930BST and you can view the time for your timezone at this link: &lt;a title="http://www.timeanddate.com/worldclock/fixedtime.html?msg=New+SSIS+features+and+enhancements+in+Denali&amp;amp;iso=20110628T1830" href="http://www.timeanddate.com/worldclock/fixedtime.html?msg=New+SSIS+features+and+enhancements+in+Denali&amp;amp;iso=20110628T1830"&gt;http://www.timeanddate.com/worldclock/fixedtime.html?msg=New+SSIS+features+and+enhancements+in+Denali&amp;amp;iso=20110628T1830&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The webinar was arranged a few months ago and at that time we were hoping that the next Community Technology Preview (CTP) of SQL Server Denali would be available for public consumption; unfortunately it transpires that that is not yet the case and hence I will be presenting new features of CTP1 that was released at the start of this year. If you’re not yet familiar with the new features of SSIS that are coming in the next release of SQL Server then please do come and join the webinar.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/jamiet"&gt;@Jamiet&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Required Parameters [SSIS Denali]</title><link>http://sqlblog.com/blogs/jamie_thomson/archive/2010/12/20/required-parameters-ssis-denali.aspx</link><pubDate>Mon, 20 Dec 2010 17:35:10 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:31795</guid><dc:creator>jamiet</dc:creator><description>&lt;p&gt;SQL Server Integration Services (SSIS) in its 2005 and 2008 incarnations expects you to set a property values within your package at runtime using Configurations. SSIS developers tend to have rather a lot of issues with SSIS configurations; in this blog post I am going to highlight one of those problems and how it has been alleviated in SQL Server code-named Denali.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;A configuration is a property path/value pair that exists outside of a package, typically within SQL Server or in a collection of one or more configurations in a file called a .dtsConfig file. Within the package one defines a pointer to a configuration that says to the package “When you execute, go and get a configuration value from this location” and if all goes well the package will fetch that configuration value as it starts to execute and you will see something like the following in your output log:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;Information: 0x40016041 at Package: The package is attempting to configure from the XML file &amp;quot;C:\Configs\MyConfig.dtsConfig&amp;quot;.&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Unfortunately things DON’T always go well, perhaps the .dtsConfig file is unreachable or the name of the SQL Sever holding the configuration value has been defined incorrectly – any one of a number of things can go wrong. In this circumstance you might see something like the following in your log output instead:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;Warning: 0x80012014 at Package: The configuration file &amp;quot;C:\Configs\MyConfig.dtsConfig&amp;quot; cannot be found. Check the directory and file name.&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The problem that I want to draw attention to here though is that &lt;em&gt;&lt;strong&gt;your package will ignore the fact it can’t find the configuration and executes anyway&lt;/strong&gt;&lt;/em&gt;. This is really really bad because the package will not be doing what it is supposed to do and worse, if you have not isolated your environments you might not even know about it. Can you imagine a package executing for months and all the while inserting data into the wrong server? Sounds ridiculous but I have absolutely seen this happen and the root cause was that no-one picked up on configuration warnings like the one above.&lt;/p&gt;  &lt;p&gt;Happily in SSIS code-named Denali this problem has gone away as configurations have been replaced with &lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/11/parameters-in-ssis-in-denali.aspx"&gt;parameters&lt;/a&gt;. Each parameter has a property called ‘Required’:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_1E13F054.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_2D675263.png" width="543" height="107" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Any parameter with Required=True must have a value passed to it when the package executes. Any attempt to execute the package will result in an error. Here we see that error when attempting to execute using the SSMS UI:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_65399686.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_6AA8072A.png" width="685" height="464" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;and similarly when executing using T-SQL:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_5AB8C266.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_59742987.png" width="754" height="335" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Error is:&lt;/p&gt;    &lt;p&gt;&lt;font color="#ff0000"&gt;Msg 27184, Level 16, State 1, Procedure prepare_execution, Line 112       &lt;br /&gt;In order to execute this package, you need to specify values for the required parameters.        &lt;br /&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;        &lt;p&gt;As you can see, SSIS code-named Denali has mechanisms built-in to prevent the problem I described at the top of this blog post. Specifying a Parameter required means that any packages in that project &lt;strong&gt;&lt;em&gt;cannot execute until a value for the parameter has been supplied&lt;/em&gt;&lt;/strong&gt;. This is a very good thing.&lt;/p&gt;  &lt;p&gt;I am loathe to make recommendations so early in the development cycle but right now I’m thinking that all Project Parameters should have Required=True, certainly any that are used to define external locations should be anyway.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/jamiet"&gt;@Jamiet&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Introducing SSIS Reporting Pack for SQL Server code-named Denali</title><link>http://sqlblog.com/blogs/jamie_thomson/archive/2010/12/08/introducing-ssis-reporting-pack-for-sql-server-code-named-denali.aspx</link><pubDate>Wed, 08 Dec 2010 23:25:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:31456</guid><dc:creator>jamiet</dc:creator><description>&lt;p&gt;In recent blog posts I have introduced the new SSIS Catalog that is forthcoming in SQL Server Code-named Denali:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/10/what-s-new-in-ssis-in-denali.aspx" target="_blank"&gt;What's new in SSIS in Denali&lt;/a&gt; &lt;/li&gt;

&lt;li&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/10/introduction-to-ssis-projects-in-denali.aspx" target="_blank"&gt;Introduction to SSIS Projects in Denali&lt;/a&gt; &lt;/li&gt;

&lt;li&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/11/parameters-in-ssis-in-denali.aspx" target="_blank"&gt;Parameters in SSIS In Denali&lt;/a&gt; &lt;/li&gt;

&lt;li&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/13/ssis-server-catalogs-environments-environment-variables-in-ssis-in-denali.aspx" target="_blank"&gt;SSIS Server, Catalogs, Environments and Environment Variables in SSIS in Denali&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The SSIS Catalog is responsible for executing SSIS packages and also for capturing the metadata from those executions. However, at the time of writing there is no mechanism provided to view analyse and drill into that metadata and that is the reason that I am, in this blog post, introducing a suite of SSIS Catalog reports called the &lt;strong&gt;SSIS Reporting Pack&lt;/strong&gt; &lt;strike&gt;which you can download from my SkyDrive at &lt;a title="http://cid-550f681dad532637.office.live.com/self.aspx/Public/SSIS%20Reporting%20Pack/SSISReportingPack%20v0.1.zip" href="http://bit.ly/ez55g4"&gt;http://bit.ly/ez55g4&lt;/a&gt;.&amp;nbsp;&lt;/strike&gt; The
latest version of the reports can be gotten from &lt;a href="http://ssisreportingpack.codeplex.com/releases/"&gt;http://ssisreportingpack.codeplex.com/releases/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this first release the SSIS Reporting Pack includes five reports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Catalog – A high-level summary of all activity in the Catalog &lt;/li&gt;

&lt;li&gt;Folders – A summary of activity in each Catalog Folder &lt;/li&gt;

&lt;li&gt;Folder – Project-level activity per single Folder &lt;/li&gt;

&lt;li&gt;Executions – A visualisation of all executions per Folder/Project/Package/Environment or subset thereof &lt;/li&gt;

&lt;li&gt;Execution – Information about an individual execution &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is a screenshot of the Executions report:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_5DA473E3.png"&gt;&lt;img style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_3D0D0E64.png" width="738" height="515"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Notice that the SSIS Reporting Pack provides a visual overview of all executions in the Catalog. Each execution is represented as a bar on the bar chart, the success or otherwise of each execution is indicated by the colour of the bar and the execution time is indicated by the bar height.&lt;/p&gt;

&lt;p&gt;I have recorded a video that gives an overview of the SSIS Reporting which I have embedded below. If you are having any trouble viewing the video go see it at &lt;a title="http://vimeo.com/17617974" href="http://vimeo.com/17617974"&gt;http://vimeo.com/17617974&lt;/a&gt;&lt;/p&gt;

&lt;object&gt;



    
&lt;embed style="width:600px;height:450px;" src="http://vimeo.com/moogaloop.swf?clip_id=17617974&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" allowfullscreen="true"&gt;&lt;/object&gt;

&lt;p&gt;I must stress that this is a very early version of the SSIS Reporting Pack and I am expecting it to change a lot over the coming year. I am very keen to get some feedback about this, specifically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;let me know if anything does not work as you expect &lt;/li&gt;

&lt;li&gt;give me your feature requests &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The easiest way to get hold of of me for now is within the comments section of this blog post.&lt;/p&gt;

&lt;p&gt;That’s all for now. I hope the SSIS Reporting Pack proves useful and I look forward to hearing your feedback. Lastly, that download link again: &lt;strike&gt;&lt;a title="http://cid-550f681dad532637.office.live.com/self.aspx/Public/SSIS%20Reporting%20Pack/SSISReportingPack%20v0.1.zip" href="http://bit.ly/ez55g4"&gt;http://bit.ly/ez55g4&lt;/a&gt;&lt;/strike&gt;. &lt;a href="http://ssisreportingpack.codeplex.com/releases/"&gt;http://ssisreportingpack.codeplex.com/releases/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://twitter.com/jamiet"&gt;@jamiet&lt;/a&gt;&lt;/p&gt;</description></item><item><title>SSIS Server, Catalogs, Environments &amp;amp;amp; Environment Variables in SSIS in Denali</title><link>http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/13/ssis-server-catalogs-environments-environment-variables-in-ssis-in-denali.aspx</link><pubDate>Sat, 13 Nov 2010 18:50:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:30518</guid><dc:creator>jamiet</dc:creator><description>&lt;p&gt;In the last few days I have written 3 blog posts covering some new features in SQL Server Integration Services (SSIS) in the next version of SQL Server, code-named Denali:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a target="_blank" href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/10/introduction-to-ssis-projects-in-denali.aspx"&gt;Introduction to SSIS Project in Denali&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a target="_blank" href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/11/parameters-in-ssis-in-denali.aspx"&gt;Parameters in SSIS in Denali&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a target="_blank" href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/12/the-new-execute-package-task-in-ssis-in-denali.aspx"&gt;The new Execute Package Task in Denali&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In this blog post I’m moving onto talking about the new SSIS server and some new terminology associated with it.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;In SSIS 2005 and 2008 there was the notion of an SSIS server but it didn’t particularly do very much:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_04D60784.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" width="382" height="165" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_002FD6FD.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Not much in there except for the ability to view running packages and also see what you have stored. Not particularly useful in my opinion and certainly not something I have ever used.&lt;/p&gt;  &lt;p&gt;That all changes in SSIS code-named Denali. The SSIS server is now an integral part of the new way of doing things that involves the new deployment model that I explained in the posts linked to above. For starters the SSIS server is no longer a separate service that you connect to, it now appears as a node in Object Explorer when connecting to a SQL Server database instance:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_57B0F4E8.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" width="333" height="227" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_6B5DDE7C.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;When you first try and expand that node you’ll discover that there is nothing underneath it so you need to create yourself a Catalog which requires you to specify a database master key:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_3BBFBFF0.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" width="305" height="305" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_5376F756.png"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_58793505.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" width="595" height="406" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_649AAF2C.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;You don’t get to choose the name of the Catalog (not in this CTP anyway), it is called [SSISDB] and you can only have one of them per SQL Server instance. Under the covers a database with the same name as the Catalog is created:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_4CB3C806.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" width="382" height="379" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_190B5BA8.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Note that in order to create the Catalog you must enable SQLCLR which (for easy reference) is done using:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:darkred;"&gt;sp_configure &lt;/span&gt;&lt;span style="color:red;"&gt;'clr enabled'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:black;"&gt;1&lt;/span&gt;&lt;span style="color:gray;"&gt;;         &lt;br&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;GO         &lt;br&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;RECONFIGURE         &lt;br&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;GO&lt;/span&gt;&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;A Catalog stores (amongst other things):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Deployed Projects&lt;/li&gt;    &lt;li&gt;Environments&lt;/li&gt;    &lt;li&gt;Package execution logs&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This last item, Package execution logs, is important. In previous SSIS versions you the developer were responsible for configuring all of your logging options such as what events you were going to log, which containers you were going to collect logs for, and where you were going to store those logs. Back in 2003 I used a competitor tool called Informatica and in the intervening period I have became incredibly frustrated that SSIS did not include any built-in logging infrastructure because Informatica &lt;i&gt;did&lt;/i&gt; include it and I hated having to go through the rigmarole of setting up a logging infrastructure and all the associated paraphernalia on every single new SSIS project that I went onto, especially as it is so time consuming. I, like I know many others have done, came up with my own method of doing it (read &lt;a target="_blank" href="http://consultingblogs.emc.com/jamiethomson/archive/2005/06/11/SSIS_3A00_-Custom-Logging-Using-Event-Handlers.aspx"&gt;Custom Logging Using Event Handlers&lt;/a&gt; – my &lt;a target="_blank" href="http://consultingblogs.emc.com/jamiethomson/archive/2007/06/26/Blog-stats.aspx"&gt;2nd most popular ever SSIS-related blog post&lt;/a&gt;) as did Davide Mauri (read &lt;a target="_blank" href="http://dtloggedexec.davidemauri.it/default.aspx"&gt;DTLoggedExec&lt;/a&gt;) because the logging mechanisms in SSIS have been so woefully inadequate.&lt;/p&gt;  &lt;p&gt;In SSIS code-named Denali that all goes away; the SSIS server is responsible for managing all of your deployed projects/packages and in turn manages both the execution of them and the collection of log information. It is this fundamental shift that has me most excited about SSIS code-named Denali; instead of having lots of options for logging we now have a definitive one and over time it is the one that everyone will use. That consistency has to be a good thing because we as developers can get on with the serious business of implementing business logic rather than worrying about dull matters like deployment and logging.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Within the Catalog you create a one-level folder hierarchy (you must create at least one folder) and under each folder is a collection of Projects and a collection of Environments.The Projects folder is the place into which you deploy your &lt;a target="_blank" href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/10/introduction-to-ssis-projects-in-denali.aspx"&gt;SSIS Projects&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_1DA16662.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" width="370" height="340" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_4E546E0D.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;i&gt;N.B. My naming convention here which categorises Projects into business units (HR, Marketing) within an organisation is for demonstration only – it is not a recommendation.&lt;/i&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Notice also in this screenshot that each folder in the Catalog has a node called “Environments”. In SSIS code-named Denali an Environment is an object type that you can create multiple instances of – in this case I have created Development, Test &amp;amp; Production. Environments are fairly self-explanatory – they are a wrapper for all environment-specific information (e.g. Connection Strings) that you want to maintain outside of a package and when you execute a package you have to choose which Environment to execute it against. In short Environments are the replacement for SSIS configurations and they work hand-in-hand with &lt;a target="_blank" href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/11/parameters-in-ssis-in-denali.aspx"&gt;Parameters&lt;/a&gt; that are also getting introduced in SSIS code-named Denali. Let’s take a closer look:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_25695904.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" width="749" height="510" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_7154B9B0.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;There’s nothing of interest on the General tab, the interesting stuff is in the Variables tab. Here I have defined one Environment Variable called CustomerName and given it a value which in this case is a string “Beatrice”. Just as with &lt;a target="_blank" href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/11/parameters-in-ssis-in-denali.aspx"&gt;Parameters&lt;/a&gt; they can be set to Sensitive which means that they will be encrypted on the server. When we execute a package from the same folder we can replace a Parameter value (either a Project or a Package Parameter) with a value from an Environment Variable.&lt;/p&gt;  &lt;p&gt;The properties page of a SSIS Project that has been deployed to a Catalog has a References tab where we can associate a Project with one or more Environment objects in the Catalog – this is called an Environment Reference:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_35B4AAF0.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" width="750" height="511" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_32531348.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;There are two types of Environment References:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Relative – &lt;/b&gt;The referenced Environment must be in the same folder as the Project&lt;/li&gt;    &lt;li&gt;&lt;b&gt;Absolute – &lt;/b&gt;The referenced Environment can be anywhere in the Catalog&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;the difference between the two is that any Project using absolute references can be moved to other folders in the Catalog without fear of them breaking – it is up to you to decide which type of reference suits you best. Notice that Environments {Development, Test, Production} appear twice in the screenshot above which is because an Environment that is available for a Relative Environment Reference can also be referenced as an Absolute Environment Reference.&lt;/p&gt;  &lt;p&gt;Once we have added the required Environment References to our Project they appear like so:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_4061DC78.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" width="747" height="502" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_7E0EC434.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;We now have our environments, each of which contain a Variable called CustomerName (not shown here so you’ll have to trust me on that), associated with our Project. If we wish the project to make use of that Environment Variable when one of its packages is executed then we must associate that Environment Variable with a Project Parameter which we also do in the Project Properties dialog:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_2FB9BBBD.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" width="809" height="477" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_3377608D.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Note that we can also associate an Environment Variable with a Package Parameter in the same way.&lt;/p&gt;            &lt;p&gt;This bit might take a bit of explaining. Observe the following:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A Project Parameter (of a project called ProjectParametersDemo) called CustomerName that has a Server Default value of “Harry”&lt;/li&gt;    &lt;li&gt;A Package Parameter (of a package called Child.dtsx) called CustomerName that has a Server Default of “William”&lt;/li&gt;    &lt;li&gt;I have clicked on the ellipsis next to the Project Parameter and am assigning it the value of an Environment Variable, also called CustomerName&amp;nbsp; (there is no requirement for Environment Variables to have the same name as a Parameter by the way – I just happened to have named them identically here)&lt;/li&gt;    &lt;li&gt;At this point I have not told it &lt;i&gt;which&lt;/i&gt; Environment it should take the value from, only that it &lt;i&gt;should &lt;/i&gt;be taken from an Environment.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;We are now ready to execute a package from our Project which we do by right-clicking on it and selecting “Run…”:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_1AB8137D.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" width="324" height="255" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_78EC3AEB.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This brings up the Run Package dialog and it is in here that we tell the execution engine &lt;i&gt;which &lt;/i&gt;of our three environments should be used to override our CustomerName parameter:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_2B036569.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" width="679" height="420" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_1A3BBABB.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;We select one of them, click OK, and our package executes. The logging output from our execution is displayed in a new Package Running Information dialog:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_44C775CB.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" width="654" height="492" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_45702BF5.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;One final note on logging. The fairly limited information that gets captured in the current CTP (depicted above) is not the same as what will be in the product upon release – there is a lot more to come. For example, the name of the container that raised the event is currently embedded at the start of the log message – at the very least I am expecting that to become a field of its own.&lt;/p&gt;  &lt;p&gt;That’s it, that’s how you execute a package. Let’s review the steps:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Design your packages in BIDS as a SSIS Project, including Project and Package Parameters as appropriate&lt;/li&gt;    &lt;li&gt;Set up Environment objects on your SSIS server containing relevant Environment Variables&lt;/li&gt;    &lt;li&gt;Deploy your SSIS Project to the SSIS server by using the SSIS Deployment Wizard (not something I have covered here or in previous blog posts)&lt;/li&gt;    &lt;li&gt;Associate your Project with a set of Environments&lt;/li&gt;    &lt;li&gt;Specify Project and Package Parameters overrides using Environment Variables (this step can actually be done within the Deployment Wizard)&lt;/li&gt;    &lt;li&gt;Choose which Environment to use for a particular execution instance and start the execution&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;There are quite a few steps here though I feel the whole process will become fairly intuitive once someone gets introduced to it. It is certainly very flexible as Parameters can either maintain their Server Default values or get overridden using an Environment Variable. I like the fact that multiple execution environments can be maintained from a single SSIS instance although time will tell whether people choose to use this setup or instead have a SSIS server for each environment – the infrastructure that I have covered in this blog post fully supports both.&lt;/p&gt;  &lt;p&gt;One other thing to note is that these UI screens are merely front-ends to some stored procedures, views and functions so everything that I’ve shown here can also be done with T-SQL scripts which I think is great news because we can now call SSIS packages from within our T-SQL scripts. This gives us great flexibility over how we build our solutions.&lt;/p&gt;            &lt;p&gt;&lt;a href="http://twitter.com/jamiet"&gt;@Jamiet&lt;/a&gt;&lt;/p&gt;</description></item><item><title>The new Execute Package Task in SSIS in Denali</title><link>http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/12/the-new-execute-package-task-in-ssis-in-denali.aspx</link><pubDate>Fri, 12 Nov 2010 18:41:51 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:30477</guid><dc:creator>jamiet</dc:creator><description>&lt;p&gt;In my blog post of 10th November &lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/10/introduction-to-ssis-projects-in-denali.aspx" target="_blank"&gt;Introduction to SSIS projects in Denali&lt;/a&gt; I spoke of how, in Denali, SSIS packages can collectively be distributed as a single unit called a Project. I want to start digging into the advantages that Projects bring and the first such example is the new Execute Package Task. If we compare the old and new then the change should be apparent. First the old (from SSIS2008):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_79B1BFCC.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_4CF8E026.png" width="627" height="131" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;and now the new:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_408ABCFD.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_7F7C3D98.png" width="632" height="111" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;We have a new property called ReferenceType. Selecting “External Reference” for that property will switch you back into the old SSIS2008 style of working so let’s ignore that, “Project Reference” is where the new stuff lies. Selecting “Project Reference” allows us to choose another package from the same project:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_01D5BF97.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_470E16C0.png" width="682" height="137" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Notice how the dropdown list of available packages is the same as the list of packages in the project. The is a tangible benefit of the move to the Project deployment model; I don’t have to concern myself with setting up a connection string for the package that I want to execute because its distributed in the same Project and I can trust that it will be there. Anyone that is used to fiddling with configurations and connection strings in SSIS today should immediately recognise this benefit that Projects bring. It does raise a question though – how do I execute a package that is in &lt;em&gt;another&lt;/em&gt; project? Right now I don’t think there’s a good answer to that and it does raise a question mark over reusability – how do I reuse a package in multiple places should I need to? I guess with one hand they give us much, with the other they take a little away – it remains to be seen whether this actually becomes problematic or not!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For those reading this and my previous two posts you could be forgiven for thinking that moving to Denali means you’re going to have to change all of your packages to use this new-fangled Project deployment model. Fear not, the old model of deploying packages on a file by file basis (its called the Legacy Deployment Model) is still totally supported and you can still develop this way too. For folks that wish to do that the new Execute Package Task has something for you too and it involves using the new &lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/11/parameters-in-ssis-in-denali.aspx" target="_blank"&gt;Package Parameters&lt;/a&gt; feature; in a nutshell you can now push values &lt;em&gt;into&lt;/em&gt; a package when you execute it rather than rather than having the executed package &lt;em&gt;reach out&lt;/em&gt; into the calling package using Parent Package Configurations. This is immeasurably better than the stupid old method where the called package had to know about the Variables in the package that was calling it. Here’s the Parameter bindings tab that enables this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jamie_thomson/image_650C24B4.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jamie_thomson/image_thumb_1CDE68D8.png" width="580" height="157" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The task has interrogated the package that was selected in the Package tab to find that package’s list of parameters {ChildPackageCustomerId,NewParameterName} and it lists them in the Child package parameter dropdown; thereafter you can assign any value to it from any variable or parameter in the calling package and as you’d expect a dropdown list is available for you to pick from. To reiterate what’s going on here, we’re pushing a value &lt;em&gt;into &lt;/em&gt;the package – true parameterization.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Other than those two features everything is pretty much the same as it was before and I say that to make the point that the core features of SSIS (tasks, dataflows, components) haven’t really changed other than leveraging these new projects and parameters. I think that’s important because if you’re already familiar with SSIS there isn’t much to learn here – its just new ways of managing a SSIS implementation rather than new ways of building packages.&lt;/p&gt;  &lt;p&gt;More to come soon!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/jamiet"&gt;@Jamiet&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>