<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>Klaus Aschenbrenner</title>
    <link>http://www.sqlpassion.at/blog/</link>
    <description>A life between bits &amp; bytes</description>
    <language>en-us</language>
    <copyright>Klaus Aschenbrenner</copyright>
    <lastBuildDate>Sun, 13 May 2012 07:53:58 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6315.0</generator>
    <managingEditor>Klaus.Aschenbrenner@csharp.at</managingEditor>
    <webMaster>Klaus.Aschenbrenner@csharp.at</webMaster>
    <item>
      <trackback:ping>http://www.sqlpassion.at/blog/Trackback.aspx?guid=b3a98726-18de-49a1-9cfe-137fa7ab4e9b</trackback:ping>
      <pingback:server>http://www.sqlpassion.at/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sqlpassion.at/blog/PermaLink,guid,b3a98726-18de-49a1-9cfe-137fa7ab4e9b.aspx</pingback:target>
      <dc:creator>Klaus Aschenbrenner</dc:creator>
      <wfw:comment>http://www.sqlpassion.at/blog/CommentView,guid,b3a98726-18de-49a1-9cfe-137fa7ab4e9b.aspx</wfw:comment>
      <wfw:commentRss>http://www.sqlpassion.at/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b3a98726-18de-49a1-9cfe-137fa7ab4e9b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p style="background: white">
          <span style="color:black; font-family:Verdana; font-size:8pt">As you might know, I'm
running my "<strong>SQL Server 2012 Deep Dive Days Workshop</strong>" from May 28
– 30 in Central London. You can find out further information about the detailed agenda
here: <a href="http://www.SQLpassion.at/SQL2012_UK.pdf">http://www.SQLpassion.at/SQL2012_UK.pdf</a></span>
        </p>
        <p style="background: white">
          <span style="color:black; font-family:Verdana; font-size:8pt">Next week you have the
amazing possibility to win a free seat in that workshop! It's very easy: Just register
as the first person throughout next week (May 13 – May 18) for the workshop and get
an additional seat for one of your colleagues for free! </span>
        </p>
        <p style="background: white">
          <span style="color:black; font-family:Verdana; font-size:8pt">Here are the exact eligibility
requirements to get the free seat: </span>
        </p>
        <ul>
          <li>
            <div style="background: white">
              <span style="color:black; font-family:Verdana; font-size:8pt">You
have to be the <strong>FIRST </strong>person who registers for my SQL Server 2012
Workshop in London, during the week from May 13 – May 18. </span>
            </div>
          </li>
          <li>
            <div style="background: white">
              <span style="color:black; font-family:Verdana; font-size:8pt">You
have to use the discount code <strong>TWO4ONE</strong> during the registration. </span>
            </div>
          </li>
          <li>
            <div style="background: white">
              <span style="color:black; font-family:Verdana; font-size:8pt">You
have to register the second person also through the discount code <strong>TWO4ONE</strong>. </span>
            </div>
          </li>
          <li>
            <div style="background: white">
              <span style="color:black; font-family:Verdana; font-size:8pt">Both
registrations must have the same invoice address. </span>
            </div>
          </li>
          <li>
            <div style="background: white">
              <span style="color:black; font-family:Verdana; font-size:8pt">This
offer is only available for persons/companies who haven't yet registered an attendee
for the workshop. </span>
            </div>
          </li>
          <li>
            <div style="background: white">
              <span style="color:black; font-family:Verdana; font-size:8pt">Everyone
else who registers throughout the week from May 13 – May 18 with the discount code <strong>TWO4ONE</strong>,
and has not won the free seat, receives a 10% discount of the original price of GBP
1,290. </span>
            </div>
          </li>
          <li>
            <div style="background: white">
              <span style="color:black; font-family:Verdana; font-size:8pt">The
10% discount does not apply to the first person who wins the additional seat for the
workshop. </span>
            </div>
          </li>
          <li>
            <div style="background: white">
              <span style="color:black; font-family:Verdana; font-size:8pt">The
registrations have to be done through the registration site available on <a href="http://www.SQLpassion.at/events.html">http://www.SQLpassion.at/events.html</a></span>
            </div>
          </li>
        </ul>
        <p style="background: white">
          <span style="color:black; font-family:Verdana; font-size:8pt">So let's be very fast,
and register for my upcoming workshop in London, and if you are the first one, you
will get an additional seat for free! </span>
        </p>
        <p style="background: white">
          <span style="color:black; font-size:8pt">
            <span style="font-family:Verdana">See you
soon in London </span>
            <span style="font-family:Wingdings"></span>
            <span style="font-family:Verdana">
            </span>
          </span>
        </p>
        <p style="background: white">
          <span style="color:black; font-family:Verdana; font-size:8pt">-Klaus</span>
        </p>
        <img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=b3a98726-18de-49a1-9cfe-137fa7ab4e9b" />
      </body>
      <title>Chance to win a free seat in my SQL Server 2012 Deep Dive Days workshop in London!</title>
      <guid isPermaLink="false">http://www.sqlpassion.at/blog/PermaLink,guid,b3a98726-18de-49a1-9cfe-137fa7ab4e9b.aspx</guid>
      <link>http://www.sqlpassion.at/blog/PermaLink,guid,b3a98726-18de-49a1-9cfe-137fa7ab4e9b.aspx</link>
      <pubDate>Sun, 13 May 2012 07:53:58 GMT</pubDate>
      <description>&lt;p style="background: white"&gt;
&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;As you might know, I'm
running my "&lt;strong&gt;SQL Server 2012 Deep Dive Days Workshop&lt;/strong&gt;" from May 28
– 30 in Central London. You can find out further information about the detailed agenda
here: &lt;a href="http://www.SQLpassion.at/SQL2012_UK.pdf"&gt;http://www.SQLpassion.at/SQL2012_UK.pdf&lt;/a&gt; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="background: white"&gt;
&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;Next week you have the
amazing possibility to win a free seat in that workshop! It's very easy: Just register
as the first person throughout next week (May 13 – May 18) for the workshop and get
an additional seat for one of your colleagues for free! &lt;/span&gt;
&lt;/p&gt;
&lt;p style="background: white"&gt;
&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;Here are the exact eligibility
requirements to get the free seat: &lt;/span&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="background: white"&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;You
have to be the &lt;strong&gt;FIRST &lt;/strong&gt;person who registers for my SQL Server 2012
Workshop in London, during the week from May 13 – May 18. &lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="background: white"&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;You
have to use the discount code &lt;strong&gt;TWO4ONE&lt;/strong&gt; during the registration. &lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="background: white"&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;You
have to register the second person also through the discount code &lt;strong&gt;TWO4ONE&lt;/strong&gt;. &lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="background: white"&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;Both
registrations must have the same invoice address. &lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="background: white"&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;This
offer is only available for persons/companies who haven't yet registered an attendee
for the workshop. &lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="background: white"&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;Everyone
else who registers throughout the week from May 13 – May 18 with the discount code &lt;strong&gt;TWO4ONE&lt;/strong&gt;,
and has not won the free seat, receives a 10% discount of the original price of GBP
1,290. &lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="background: white"&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;The
10% discount does not apply to the first person who wins the additional seat for the
workshop. &lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="background: white"&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;The
registrations have to be done through the registration site available on &lt;a href="http://www.SQLpassion.at/events.html"&gt;http://www.SQLpassion.at/events.html&lt;/a&gt; &lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="background: white"&gt;
&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;So let's be very fast,
and register for my upcoming workshop in London, and if you are the first one, you
will get an additional seat for free! &lt;/span&gt;
&lt;/p&gt;
&lt;p style="background: white"&gt;
&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:Verdana"&gt;See you
soon in London &lt;/span&gt;&lt;span style="font-family:Wingdings"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="background: white"&gt;
&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;-Klaus&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=b3a98726-18de-49a1-9cfe-137fa7ab4e9b" /&gt;</description>
      <comments>http://www.sqlpassion.at/blog/CommentView,guid,b3a98726-18de-49a1-9cfe-137fa7ab4e9b.aspx</comments>
      <category>.NET German</category>
      <category>SQLServer</category>
      <category>SQLServerPedia</category>
    </item>
    <item>
      <trackback:ping>http://www.sqlpassion.at/blog/Trackback.aspx?guid=4df27582-2bad-4a6a-9a40-d7dee0c1d100</trackback:ping>
      <pingback:server>http://www.sqlpassion.at/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sqlpassion.at/blog/PermaLink,guid,4df27582-2bad-4a6a-9a40-d7dee0c1d100.aspx</pingback:target>
      <dc:creator>Klaus Aschenbrenner</dc:creator>
      <wfw:comment>http://www.sqlpassion.at/blog/CommentView,guid,4df27582-2bad-4a6a-9a40-d7dee0c1d100.aspx</wfw:comment>
      <wfw:commentRss>http://www.sqlpassion.at/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4df27582-2bad-4a6a-9a40-d7dee0c1d100</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
As I have announced announced in my sessions at the SQLConnections conferences in
Berchtesgaden/Germany, you can find my session materials (slides &amp; samples) here
for download 
</p>
        <ul>
          <li>
            <a href="http://www.sqlpassion.at/downloads/SQLConnection2012.zip">SQL Server Query
Tuning</a>
          </li>
          <li>
            <a href="http://www.sqlpassion.at/downloads/SQLConnection2012.zip">SQL Server Memory
Management</a>
          </li>
          <li>
            <a href="http://www.sqlpassion.at/downloads/SQLConnection2012.zip">SQL Server 2012
Distributed Replay</a>
          </li>
        </ul>
        <p>
Thanks for attending my sessions <span style="font-family:Wingdings">J</span></p>
        <p>
-Klaus
</p>
        <img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=4df27582-2bad-4a6a-9a40-d7dee0c1d100" />
      </body>
      <title>Slides &amp; Samples for my SQLConnections sessions</title>
      <guid isPermaLink="false">http://www.sqlpassion.at/blog/PermaLink,guid,4df27582-2bad-4a6a-9a40-d7dee0c1d100.aspx</guid>
      <link>http://www.sqlpassion.at/blog/PermaLink,guid,4df27582-2bad-4a6a-9a40-d7dee0c1d100.aspx</link>
      <pubDate>Sat, 12 May 2012 17:48:11 GMT</pubDate>
      <description>&lt;p&gt;
As I have announced announced in my sessions at the SQLConnections conferences in
Berchtesgaden/Germany, you can find my session materials (slides &amp;amp; samples) here
for download 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.sqlpassion.at/downloads/SQLConnection2012.zip"&gt;SQL Server Query
Tuning&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.sqlpassion.at/downloads/SQLConnection2012.zip"&gt;SQL Server Memory
Management&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.sqlpassion.at/downloads/SQLConnection2012.zip"&gt;SQL Server 2012
Distributed Replay&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Thanks for attending my sessions &lt;span style="font-family:Wingdings"&gt;J&lt;/span&gt; 
&lt;/p&gt;
&lt;p&gt;
-Klaus
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=4df27582-2bad-4a6a-9a40-d7dee0c1d100" /&gt;</description>
      <comments>http://www.sqlpassion.at/blog/CommentView,guid,4df27582-2bad-4a6a-9a40-d7dee0c1d100.aspx</comments>
      <category>.NET German</category>
      <category>Conferences</category>
      <category>SQLServer</category>
      <category>SQLServerPedia</category>
    </item>
    <item>
      <trackback:ping>http://www.sqlpassion.at/blog/Trackback.aspx?guid=1a56f2bf-8174-4271-a71b-0f3424160e8a</trackback:ping>
      <pingback:server>http://www.sqlpassion.at/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sqlpassion.at/blog/PermaLink,guid,1a56f2bf-8174-4271-a71b-0f3424160e8a.aspx</pingback:target>
      <dc:creator>Klaus Aschenbrenner</dc:creator>
      <wfw:comment>http://www.sqlpassion.at/blog/CommentView,guid,1a56f2bf-8174-4271-a71b-0f3424160e8a.aspx</wfw:comment>
      <wfw:commentRss>http://www.sqlpassion.at/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1a56f2bf-8174-4271-a71b-0f3424160e8a</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <span style="color:black; font-family:Verdana; font-size:8pt">As I have announced
in my DevWeek and SQLbits sessions, you can find my session materials (slides &amp;
samples) here for download: </span>
        </p>
        <ul>
          <li>
            <a href="http://www.sqlpassion.at/downloads/DevWeek2012_ExecutionPlans.zip">
              <span style="color:#000099; font-family:Verdana; font-size:8pt">Understanding
SQL Server Execution Plans</span>
            </a>
            <span style="color:black; font-family:Verdana; font-size:8pt">
            </span>
          </li>
          <li>
            <a href="http://www.sqlpassion.at/downloads/DevWeek2012_QueryTuning.zip">
              <span style="color:#000099; font-family:Verdana; font-size:8pt">SQL
Server Query Tuning</span>
            </a>
            <span style="color:black; font-family:Verdana; font-size:8pt">
            </span>
          </li>
          <li>
            <a href="http://www.sqlpassion.at/downloads/SQLbits2012_TempDb.zip">
              <span style="color:#000099; font-family:Verdana; font-size:8pt">Troubleshooting
TempDb</span>
            </a>
            <span style="color:black; font-family:Verdana; font-size:8pt">
            </span>
          </li>
        </ul>
        <p>
          <span style="color:black; font-size:8pt">
            <span style="font-family:Verdana">Thanks
for attending my sessions, it was really awesome speaking for such a large crowd of
people, and I'm looking forward to come back very soon to London </span>
            <span style="font-family:Wingdings"></span>
            <span style="font-family:Verdana">
            </span>
          </span>
        </p>
        <p>
          <span style="color:black; font-family:Verdana; font-size:8pt">-Klaus</span>
        </p>
        <img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=1a56f2bf-8174-4271-a71b-0f3424160e8a" />
      </body>
      <title>Slides &amp; Samples for my DevWeek and SQLbits sessions</title>
      <guid isPermaLink="false">http://www.sqlpassion.at/blog/PermaLink,guid,1a56f2bf-8174-4271-a71b-0f3424160e8a.aspx</guid>
      <link>http://www.sqlpassion.at/blog/PermaLink,guid,1a56f2bf-8174-4271-a71b-0f3424160e8a.aspx</link>
      <pubDate>Thu, 05 Apr 2012 14:28:17 GMT</pubDate>
      <description>&lt;p&gt;
&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;As I have announced
in my DevWeek and SQLbits sessions, you can find my session materials (slides &amp;amp;
samples) here for download: &lt;/span&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.sqlpassion.at/downloads/DevWeek2012_ExecutionPlans.zip"&gt;&lt;span style="color:#000099; font-family:Verdana; font-size:8pt"&gt;Understanding
SQL Server Execution Plans&lt;/span&gt;&lt;/a&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt; &lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.sqlpassion.at/downloads/DevWeek2012_QueryTuning.zip"&gt;&lt;span style="color:#000099; font-family:Verdana; font-size:8pt"&gt;SQL
Server Query Tuning&lt;/span&gt;&lt;/a&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt; &lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.sqlpassion.at/downloads/SQLbits2012_TempDb.zip"&gt;&lt;span style="color:#000099; font-family:Verdana; font-size:8pt"&gt;Troubleshooting
TempDb&lt;/span&gt;&lt;/a&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt; &lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;span style="color:black; font-size:8pt"&gt;&lt;span style="font-family:Verdana"&gt;Thanks
for attending my sessions, it was really awesome speaking for such a large crowd of
people, and I'm looking forward to come back very soon to London &lt;/span&gt;&lt;span style="font-family:Wingdings"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana"&gt; &lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;-Klaus&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=1a56f2bf-8174-4271-a71b-0f3424160e8a" /&gt;</description>
      <comments>http://www.sqlpassion.at/blog/CommentView,guid,1a56f2bf-8174-4271-a71b-0f3424160e8a.aspx</comments>
      <category>.NET German</category>
      <category>Conferences</category>
      <category>SQLServer</category>
      <category>SQLServerPedia</category>
    </item>
    <item>
      <trackback:ping>http://www.sqlpassion.at/blog/Trackback.aspx?guid=cb7abac4-8b2d-4a24-b67f-e89c4600e26f</trackback:ping>
      <pingback:server>http://www.sqlpassion.at/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sqlpassion.at/blog/PermaLink,guid,cb7abac4-8b2d-4a24-b67f-e89c4600e26f.aspx</pingback:target>
      <dc:creator>Klaus Aschenbrenner</dc:creator>
      <wfw:comment>http://www.sqlpassion.at/blog/CommentView,guid,cb7abac4-8b2d-4a24-b67f-e89c4600e26f.aspx</wfw:comment>
      <wfw:commentRss>http://www.sqlpassion.at/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=cb7abac4-8b2d-4a24-b67f-e89c4600e26f</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
As I have announced in my session last Saturday in Dublin, you can find <a href="http://www.sqlpassion.at/downloads/SQL2008Troubleshooting.zip">here</a> the
slides &amp; samples for download. 
</p>
        <p>
Thanks for attending my session and enjoy the download <span style="font-family:Wingdings">J</span></p>
        <p>
-Klaus
</p>
        <img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=cb7abac4-8b2d-4a24-b67f-e89c4600e26f" />
      </body>
      <title>Slides &amp; Samples from my SQLSaturday #105 presentation about Advanced SQL Server Troubleshooting</title>
      <guid isPermaLink="false">http://www.sqlpassion.at/blog/PermaLink,guid,cb7abac4-8b2d-4a24-b67f-e89c4600e26f.aspx</guid>
      <link>http://www.sqlpassion.at/blog/PermaLink,guid,cb7abac4-8b2d-4a24-b67f-e89c4600e26f.aspx</link>
      <pubDate>Mon, 26 Mar 2012 09:08:56 GMT</pubDate>
      <description>&lt;p&gt;
As I have announced in my session last Saturday in Dublin, you can find &lt;a href="http://www.sqlpassion.at/downloads/SQL2008Troubleshooting.zip"&gt;here&lt;/a&gt; the
slides &amp;amp; samples for download. 
&lt;/p&gt;
&lt;p&gt;
Thanks for attending my session and enjoy the download &lt;span style="font-family:Wingdings"&gt;J&lt;/span&gt; 
&lt;/p&gt;
&lt;p&gt;
-Klaus
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=cb7abac4-8b2d-4a24-b67f-e89c4600e26f" /&gt;</description>
      <comments>http://www.sqlpassion.at/blog/CommentView,guid,cb7abac4-8b2d-4a24-b67f-e89c4600e26f.aspx</comments>
      <category>.NET German</category>
      <category>Conferences</category>
      <category>SQLServer</category>
      <category>SQLServerPedia</category>
    </item>
    <item>
      <trackback:ping>http://www.sqlpassion.at/blog/Trackback.aspx?guid=cd97cc61-cce4-480d-99c2-0b62218c7cdf</trackback:ping>
      <pingback:server>http://www.sqlpassion.at/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sqlpassion.at/blog/PermaLink,guid,cd97cc61-cce4-480d-99c2-0b62218c7cdf.aspx</pingback:target>
      <dc:creator>Klaus Aschenbrenner</dc:creator>
      <wfw:comment>http://www.sqlpassion.at/blog/CommentView,guid,cd97cc61-cce4-480d-99c2-0b62218c7cdf.aspx</wfw:comment>
      <wfw:commentRss>http://www.sqlpassion.at/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=cd97cc61-cce4-480d-99c2-0b62218c7cdf</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In the last weeks and months I have prepared tons of SQL Server 2012 content for my
own <strong>SQL Server 2012 Deep Dive Days</strong> workshop that I'm currently running
across Europe. Because this content shows in a very good way how you can use all the
various new features of SQL Server 2012, I have decided to share over the year some
of that content through my weblog. Today I want to start with SQL Server 2012 AlwaysOn
Availability Groups, because that's one of the hottest features in SQL Server 2012! 
</p>
        <p>
I want to take you from a zero knowledge level and show you step by step how you can
configure, deploy, and manage a SQL Server 2012 AlwaysOn High Availability solution.
In today's first part I want to talk about the basic architecture of AlwaysOn and
how you can prepare SQL Server for running an AlwaysOn solution. 
</p>
        <p>
          <span style="text-decoration:underline">
            <strong>Overview </strong>
          </span>
        </p>
        <p>
AlwaysOn Availability Groups is the big new feature in the High Availability stack
of SQL Server 2012. Simply said it is the successor of Database Mirroring that was
introduced with SQL Server 2005 SP1. Database Mirroring is a great technology for
achieving HA (High Availability) and DR (Disaster Recovery), but has some weaknesses
and limitations: 
</p>
        <ul>
          <li>
You can only mirror 1 database through a Database Mirroring session. When you have
an application that consists of several database (just think of SharePoint Server),
then you need to have several distinct Mirroring sessions. 
</li>
          <li>
The Failover is done on the Mirroring session level, which means you can only failover
1 database at a given time. Again – if you have more than 1 database, you need different
Mirroring sessions and you have to coordinate a multi-database failover at your own. 
</li>
          <li>
There is only 1 Mirroring partner possible. You can't mirror to different partners.
The Mirroring partner can be run with Synchronous Commit for achieving High Availability
or with Asynchronous Commit for achieving Disaster Recovery. If you are using Synchronous
Commit you can get an Automatic Failover if you deploy a Witness instance. This witness
instance is used for acquiring a quorum and avoiding a so-called Split-Brain scenario. 
</li>
          <li>
The Mirroring database is always replaying Transaction Log records, which means that
you are not able to access the database for read-only access (the undo part of Recovery
has not yet run). The only possibility is to use Database Snapshots to get a consistent
view of your database at a given point in time and refresh the Database Snapshot on
a regularly basis, but again – you have to do this at your own. 
</li>
        </ul>
        <p>
Beginning with SQL Server 2012 Microsoft provides us now AlwaysOn Availability Groups
which are the successor of Database Mirroring. 
</p>
        <p>
          <strong>
            <em>Side Note: Database Mirroring is still available in its original feature
set, but it is marked as a Deprecated Feature, which means, that it will be removed
in a future release of SQL Server. </em>
          </strong>
        </p>
        <p>
AlwaysOn Availability Groups offers you the following advantages over traditional
Database Mirroring: 
</p>
        <ul>
          <li>
Multi-Database Failovers 
</li>
          <li>
Multiple Secondaries 
</li>
          <li>
Active Secondaries 
</li>
          <li>
Integrated HA Management 
</li>
        </ul>
        <p>
The following figure gives you a basic overview about AlwaysOn Availability Groups. 
</p>
        <p>
          <img src="http://www.sqlpassion.at/blog/content/binary/032112_1941_SQLServer201.png" alt="" />
        </p>
        <p>
As you can see from the previous figure, an AlwaysOn Availability Group is created
between several standalone SQL Server instances. At least you need 2 different SQL
Server instances. All instances that participating in an AlwaysOn Availability Group
don't need any Shared Storage – each SQL Server instance has its own local storage.
It's the same concept as with Database Mirroring. The only requirement is the fact
that each participating SQL Server instance must be in the same Windows Domain, because
you must create a Windows Server Failover Cluster (WSFC) that contains all participating
SQL Server Instances. SQL Server uses underneath several WSFC features like the Quorum
Model. Database Mirroring uses its own Quorum Model by using a dedicated Witness instance. 
</p>
        <p>
          <strong>
            <em>Side Note: In my opinion this one of the biggest disadvantages of AlwaysOn
Availability Groups. I have a few customers which wanted to migrate from Database
Mirroring to Availability Groups, but they can't go that direction at this time, because
their SQL Server instances are not in the same domain. Some even have deployed SQL
Server instances in separate workgroups… But that's the way how AlwaysOn Availability
Groups are working, and that's the price that you have to pay for that new feature. </em>
          </strong>
        </p>
        <p>
An Availability Group itself can contain several databases, which can failover in
a whole set – that's a huge difference and improvement compared to Database Mirroring.
Each participating SQL Server instance hosts a so-called Replica. There is always
one Primary Replica and up to four Secondary Replicas. Up to 2 of these Secondary
Replicas can use Synchronous Commit, and the other 2 Secondary Replicas can use Asynchronous
Commit. When you run 2 Replicas with Synchronous Commit you can also configure an
Automatic Failover between them. They are forming a so-called "Automatic Failover
Pair". 
</p>
        <p>
Another big advantage of the Secondaries is that they are readable. You don't need
a Database Snapshot anymore, as you would have done it with Database Mirroring. But
you must be aware that there is an overhead when you are using Active Secondaries
– but we will look into that topic in more detail at a later stage of this weblog
series. You can also use Active Secondaries for doing backup jobs, which will be also
a very nice way to move backup workload away from your Primary Replica. 
</p>
        <p>
As with Database Mirroring, Transaction Log records are transferred from one Replica
to the others. To minimize network latency, SQL Server 2012 uses Build in Log Compression
to transfer Transaction Log records as fast as possible. 
</p>
        <p>
          <span style="text-decoration:underline">
            <strong>Preparing your SQL Server for AlwaysOn </strong>
          </span>
        </p>
        <p>
If you want to deploy an Availability Group solution you have to prepare your SQL
Server instances in the first step. For this weblog posting I'm assuming that you
have setup 5 different SQL Server installations across 5 physical servers/Virtual
Machines. As an Operating System I'm assuming Windows Server 2008 R2 SP1 x64. My current
Hyper-V based deployment looks like the following: 
</p>
        <ul>
          <li>
            <div>
              <strong>Node1 </strong>
            </div>
            <ul>
              <li>
DNS Name: ag-node1.sqlpassion.com 
</li>
              <li>
IP Address: 192.168.1.211 
</li>
              <li>
SQL Service Account: ag_node1_sqlsvc@sqlpassion.com 
</li>
            </ul>
          </li>
          <li>
            <div>
              <strong>Node 2 </strong>
            </div>
            <ul>
              <li>
DNS Name: ag-node2.sqlpassion.com 
</li>
              <li>
IP Address: 192.168.1.212 
</li>
              <li>
SQL Service Account: ag_node2_sqlsvc@sqlpassion.com 
</li>
            </ul>
          </li>
          <li>
            <div>
              <strong>Node 3 </strong>
            </div>
            <ul>
              <li>
DNS Name: ag-node3.sqlpassion.com 
</li>
              <li>
IP Address: 192.168.1.213 
</li>
              <li>
SQL Service Account: ag_node3_sqlsvc@sqlpassion.com 
</li>
            </ul>
          </li>
          <li>
            <div>
              <strong>Node 4 </strong>
            </div>
            <ul>
              <li>
DNS Name: ag-node4.sqlpassion.com 
</li>
              <li>
IP Address: 192.168.1.214 
</li>
              <li>
SQL Service Account: ag_node4_sqlsvc@sqlpassion.com 
</li>
            </ul>
          </li>
          <li>
            <div>
              <strong>Node 5 </strong>
            </div>
            <ul>
              <li>
DNS Name: ag-node5.sqlpassion.com 
</li>
              <li>
IP Address: 192.168.1.215 
</li>
              <li>
SQL Service Account: ag_node5_sqlsvc@sqlpassion.com 
</li>
            </ul>
          </li>
        </ul>
        <p>
Each VM node is also part of my <strong>sqlpassion.com</strong> Windows domain, and
I have performed a default SQL Server 2012 installation with a default instance of
SQL Server 2012. Furthermore each SQL Server default instance uses a Windows Domain
account for the SQL Server Service Account. You must also make sure during the installation
that you place your MDF/LDF files on the same physical location on each VM node, otherwise
you will run into troubles with the wizards provided by AlwaysOn Availability Groups. 
</p>
        <p>
The first step that you have to perform is the creation of a new Windows Server Failover
Cluster (WSFC). In the first step this sounds like a huge step, but it is very easy
to do because you don't need any shared storage. One prerequisite of WSFC is the fact
that you have to install the Failover Cluster Feature on each node. You can perform
this task through the Server Manager of Windows Server 2008 R2. 
</p>
        <p>
          <img src="http://www.sqlpassion.at/blog/content/binary/032112_1941_SQLServer202.png" alt="" />
        </p>
        <p>
After you have installed the Failover Clustering on EACH node, you have to log into
one of these nodes through a Windows Domain user account. Otherwise you are not able
to create the Windows Server Failover Cluster itself. To create the cluster itself
you can use the <strong>Failover Cluster Manager</strong>, which can be found in the <strong>Administrative
Tools</strong> of your Control Panel. On the right hand side you can see all available
Actions, and here you choose the option "<strong>Create a Cluster…</strong>". In the
first step the wizard asks you which nodes should be part of the new WSFC Cluster.
In my case I have selected all 5 VM nodes: 
</p>
        <p>
          <img src="http://www.sqlpassion.at/blog/content/binary/032112_1941_SQLServer203.png" alt="" />
        </p>
        <p>
On the next wizard page you have to choose to run the <strong>Cluster Configuration
Validation Tests</strong>. If you want to get support from Microsoft, you have to
run them. For AlwaysOn Availability Groups you don't have to include the tests regarding
shared storage, because you are not using any form of shared storage for an Availability
Group. After you have run your Cluster Configuration Validation Tests, you have to
give your WSFC Cluster a name and an IP address: 
</p>
        <p>
          <img src="http://www.sqlpassion.at/blog/content/binary/032112_1941_SQLServer204.png" alt="" />
        </p>
        <p>
With all these information in the hand, the wizard will finally create your WSFC cluster.
After the successful creation you can see your new WSFC cluster in the Failover Cluster
Manager: 
</p>
        <p>
          <img src="http://www.sqlpassion.at/blog/content/binary/032112_1941_SQLServer205.png" alt="" />
        </p>
        <p>
As you can see from the previous figure, the Cluster is currently not hosting any
Service or an Application yet. We just have created the skeleton so that an AlwaysOn
Availability Group can be created and deployed. In the final step you have now to
enable AlwaysOn Availability Groups on each SQL Server instance. This can be done
through <strong>the SQL Server Configuration Manager</strong> and the tab <strong>AlwaysOn
High Availability</strong>. You have to enable the checkbox "<strong>Enable AlwaysOn
Availability Groups</strong>". This option is only available when the computer where
the SQL Server instance is running on, is part of a WSFC cluster: 
</p>
        <p>
          <img src="http://www.sqlpassion.at/blog/content/binary/032112_1941_SQLServer206.png" alt="" />
        </p>
        <p>
After you have enabled that option, you must restart your SQL Server instance. Please
make sure to do this configuration change on EACH node that is part of your WSFC cluster. 
</p>
        <p>
By now we have created the whole infrastructure that is necessary to run a SQL Server
2012 AlwaysOn Availability Group solution. In the next weblog posting you will then
see, how you can deploy your first Availability Group with SQL Server 2012. 
</p>
        <p>
If you are interested in SQL Server 2012, I suggest looking on my "SQL Server 2012
Deep Dive Days Workshop", which I run from May 28 – 30 in London/United Kingdom (see <a href="http://www.SQLpassion.at/events.html">http://www.SQLpassion.at/events.html</a>,
Early Bird price ends on March 31). This workshop was already running in Vienna/Austria
and Munich/Germany with a huge success. 
</p>
        <p>
Stay tuned <span style="font-family:Wingdings">J</span></p>
        <p>
-Klaus
</p>
        <img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=cd97cc61-cce4-480d-99c2-0b62218c7cdf" />
      </body>
      <title>SQL Server 2012 AlwaysOn Availability Groups – Part 1</title>
      <guid isPermaLink="false">http://www.sqlpassion.at/blog/PermaLink,guid,cd97cc61-cce4-480d-99c2-0b62218c7cdf.aspx</guid>
      <link>http://www.sqlpassion.at/blog/PermaLink,guid,cd97cc61-cce4-480d-99c2-0b62218c7cdf.aspx</link>
      <pubDate>Wed, 21 Mar 2012 19:42:16 GMT</pubDate>
      <description>&lt;p&gt;
In the last weeks and months I have prepared tons of SQL Server 2012 content for my
own &lt;strong&gt;SQL Server 2012 Deep Dive Days&lt;/strong&gt; workshop that I'm currently running
across Europe. Because this content shows in a very good way how you can use all the
various new features of SQL Server 2012, I have decided to share over the year some
of that content through my weblog. Today I want to start with SQL Server 2012 AlwaysOn
Availability Groups, because that's one of the hottest features in SQL Server 2012! 
&lt;/p&gt;
&lt;p&gt;
I want to take you from a zero knowledge level and show you step by step how you can
configure, deploy, and manage a SQL Server 2012 AlwaysOn High Availability solution.
In today's first part I want to talk about the basic architecture of AlwaysOn and
how you can prepare SQL Server for running an AlwaysOn solution. 
&lt;/p&gt;
&lt;p&gt;
&lt;span style="text-decoration:underline"&gt;&lt;strong&gt;Overview &lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
AlwaysOn Availability Groups is the big new feature in the High Availability stack
of SQL Server 2012. Simply said it is the successor of Database Mirroring that was
introduced with SQL Server 2005 SP1. Database Mirroring is a great technology for
achieving HA (High Availability) and DR (Disaster Recovery), but has some weaknesses
and limitations: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
You can only mirror 1 database through a Database Mirroring session. When you have
an application that consists of several database (just think of SharePoint Server),
then you need to have several distinct Mirroring sessions. 
&lt;/li&gt;
&lt;li&gt;
The Failover is done on the Mirroring session level, which means you can only failover
1 database at a given time. Again – if you have more than 1 database, you need different
Mirroring sessions and you have to coordinate a multi-database failover at your own. 
&lt;/li&gt;
&lt;li&gt;
There is only 1 Mirroring partner possible. You can't mirror to different partners.
The Mirroring partner can be run with Synchronous Commit for achieving High Availability
or with Asynchronous Commit for achieving Disaster Recovery. If you are using Synchronous
Commit you can get an Automatic Failover if you deploy a Witness instance. This witness
instance is used for acquiring a quorum and avoiding a so-called Split-Brain scenario. 
&lt;/li&gt;
&lt;li&gt;
The Mirroring database is always replaying Transaction Log records, which means that
you are not able to access the database for read-only access (the undo part of Recovery
has not yet run). The only possibility is to use Database Snapshots to get a consistent
view of your database at a given point in time and refresh the Database Snapshot on
a regularly basis, but again – you have to do this at your own. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Beginning with SQL Server 2012 Microsoft provides us now AlwaysOn Availability Groups
which are the successor of Database Mirroring. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;em&gt;Side Note: Database Mirroring is still available in its original feature
set, but it is marked as a Deprecated Feature, which means, that it will be removed
in a future release of SQL Server. &lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
AlwaysOn Availability Groups offers you the following advantages over traditional
Database Mirroring: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Multi-Database Failovers 
&lt;/li&gt;
&lt;li&gt;
Multiple Secondaries 
&lt;/li&gt;
&lt;li&gt;
Active Secondaries 
&lt;/li&gt;
&lt;li&gt;
Integrated HA Management 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The following figure gives you a basic overview about AlwaysOn Availability Groups. 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.sqlpassion.at/blog/content/binary/032112_1941_SQLServer201.png" alt="" /&gt; 
&lt;/p&gt;
&lt;p&gt;
As you can see from the previous figure, an AlwaysOn Availability Group is created
between several standalone SQL Server instances. At least you need 2 different SQL
Server instances. All instances that participating in an AlwaysOn Availability Group
don't need any Shared Storage – each SQL Server instance has its own local storage.
It's the same concept as with Database Mirroring. The only requirement is the fact
that each participating SQL Server instance must be in the same Windows Domain, because
you must create a Windows Server Failover Cluster (WSFC) that contains all participating
SQL Server Instances. SQL Server uses underneath several WSFC features like the Quorum
Model. Database Mirroring uses its own Quorum Model by using a dedicated Witness instance. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;em&gt;Side Note: In my opinion this one of the biggest disadvantages of AlwaysOn
Availability Groups. I have a few customers which wanted to migrate from Database
Mirroring to Availability Groups, but they can't go that direction at this time, because
their SQL Server instances are not in the same domain. Some even have deployed SQL
Server instances in separate workgroups… But that's the way how AlwaysOn Availability
Groups are working, and that's the price that you have to pay for that new feature. &lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
An Availability Group itself can contain several databases, which can failover in
a whole set – that's a huge difference and improvement compared to Database Mirroring.
Each participating SQL Server instance hosts a so-called Replica. There is always
one Primary Replica and up to four Secondary Replicas. Up to 2 of these Secondary
Replicas can use Synchronous Commit, and the other 2 Secondary Replicas can use Asynchronous
Commit. When you run 2 Replicas with Synchronous Commit you can also configure an
Automatic Failover between them. They are forming a so-called "Automatic Failover
Pair". 
&lt;/p&gt;
&lt;p&gt;
Another big advantage of the Secondaries is that they are readable. You don't need
a Database Snapshot anymore, as you would have done it with Database Mirroring. But
you must be aware that there is an overhead when you are using Active Secondaries
– but we will look into that topic in more detail at a later stage of this weblog
series. You can also use Active Secondaries for doing backup jobs, which will be also
a very nice way to move backup workload away from your Primary Replica. 
&lt;/p&gt;
&lt;p&gt;
As with Database Mirroring, Transaction Log records are transferred from one Replica
to the others. To minimize network latency, SQL Server 2012 uses Build in Log Compression
to transfer Transaction Log records as fast as possible. 
&lt;/p&gt;
&lt;p&gt;
&lt;span style="text-decoration:underline"&gt;&lt;strong&gt;Preparing your SQL Server for AlwaysOn &lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
If you want to deploy an Availability Group solution you have to prepare your SQL
Server instances in the first step. For this weblog posting I'm assuming that you
have setup 5 different SQL Server installations across 5 physical servers/Virtual
Machines. As an Operating System I'm assuming Windows Server 2008 R2 SP1 x64. My current
Hyper-V based deployment looks like the following: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;&lt;strong&gt;Node1 &lt;/strong&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
DNS Name: ag-node1.sqlpassion.com 
&lt;/li&gt;
&lt;li&gt;
IP Address: 192.168.1.211 
&lt;/li&gt;
&lt;li&gt;
SQL Service Account: ag_node1_sqlsvc@sqlpassion.com 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;strong&gt;Node 2 &lt;/strong&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
DNS Name: ag-node2.sqlpassion.com 
&lt;/li&gt;
&lt;li&gt;
IP Address: 192.168.1.212 
&lt;/li&gt;
&lt;li&gt;
SQL Service Account: ag_node2_sqlsvc@sqlpassion.com 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;strong&gt;Node 3 &lt;/strong&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
DNS Name: ag-node3.sqlpassion.com 
&lt;/li&gt;
&lt;li&gt;
IP Address: 192.168.1.213 
&lt;/li&gt;
&lt;li&gt;
SQL Service Account: ag_node3_sqlsvc@sqlpassion.com 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;strong&gt;Node 4 &lt;/strong&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
DNS Name: ag-node4.sqlpassion.com 
&lt;/li&gt;
&lt;li&gt;
IP Address: 192.168.1.214 
&lt;/li&gt;
&lt;li&gt;
SQL Service Account: ag_node4_sqlsvc@sqlpassion.com 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;strong&gt;Node 5 &lt;/strong&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
DNS Name: ag-node5.sqlpassion.com 
&lt;/li&gt;
&lt;li&gt;
IP Address: 192.168.1.215 
&lt;/li&gt;
&lt;li&gt;
SQL Service Account: ag_node5_sqlsvc@sqlpassion.com 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Each VM node is also part of my &lt;strong&gt;sqlpassion.com&lt;/strong&gt; Windows domain, and
I have performed a default SQL Server 2012 installation with a default instance of
SQL Server 2012. Furthermore each SQL Server default instance uses a Windows Domain
account for the SQL Server Service Account. You must also make sure during the installation
that you place your MDF/LDF files on the same physical location on each VM node, otherwise
you will run into troubles with the wizards provided by AlwaysOn Availability Groups. 
&lt;/p&gt;
&lt;p&gt;
The first step that you have to perform is the creation of a new Windows Server Failover
Cluster (WSFC). In the first step this sounds like a huge step, but it is very easy
to do because you don't need any shared storage. One prerequisite of WSFC is the fact
that you have to install the Failover Cluster Feature on each node. You can perform
this task through the Server Manager of Windows Server 2008 R2. 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.sqlpassion.at/blog/content/binary/032112_1941_SQLServer202.png" alt="" /&gt; 
&lt;/p&gt;
&lt;p&gt;
After you have installed the Failover Clustering on EACH node, you have to log into
one of these nodes through a Windows Domain user account. Otherwise you are not able
to create the Windows Server Failover Cluster itself. To create the cluster itself
you can use the &lt;strong&gt;Failover Cluster Manager&lt;/strong&gt;, which can be found in the &lt;strong&gt;Administrative
Tools&lt;/strong&gt; of your Control Panel. On the right hand side you can see all available
Actions, and here you choose the option "&lt;strong&gt;Create a Cluster…&lt;/strong&gt;". In the
first step the wizard asks you which nodes should be part of the new WSFC Cluster.
In my case I have selected all 5 VM nodes: 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.sqlpassion.at/blog/content/binary/032112_1941_SQLServer203.png" alt="" /&gt; 
&lt;/p&gt;
&lt;p&gt;
On the next wizard page you have to choose to run the &lt;strong&gt;Cluster Configuration
Validation Tests&lt;/strong&gt;. If you want to get support from Microsoft, you have to
run them. For AlwaysOn Availability Groups you don't have to include the tests regarding
shared storage, because you are not using any form of shared storage for an Availability
Group. After you have run your Cluster Configuration Validation Tests, you have to
give your WSFC Cluster a name and an IP address: 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.sqlpassion.at/blog/content/binary/032112_1941_SQLServer204.png" alt="" /&gt; 
&lt;/p&gt;
&lt;p&gt;
With all these information in the hand, the wizard will finally create your WSFC cluster.
After the successful creation you can see your new WSFC cluster in the Failover Cluster
Manager: 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.sqlpassion.at/blog/content/binary/032112_1941_SQLServer205.png" alt="" /&gt; 
&lt;/p&gt;
&lt;p&gt;
As you can see from the previous figure, the Cluster is currently not hosting any
Service or an Application yet. We just have created the skeleton so that an AlwaysOn
Availability Group can be created and deployed. In the final step you have now to
enable AlwaysOn Availability Groups on each SQL Server instance. This can be done
through &lt;strong&gt;the SQL Server Configuration Manager&lt;/strong&gt; and the tab &lt;strong&gt;AlwaysOn
High Availability&lt;/strong&gt;. You have to enable the checkbox "&lt;strong&gt;Enable AlwaysOn
Availability Groups&lt;/strong&gt;". This option is only available when the computer where
the SQL Server instance is running on, is part of a WSFC cluster: 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.sqlpassion.at/blog/content/binary/032112_1941_SQLServer206.png" alt="" /&gt; 
&lt;/p&gt;
&lt;p&gt;
After you have enabled that option, you must restart your SQL Server instance. Please
make sure to do this configuration change on EACH node that is part of your WSFC cluster. 
&lt;/p&gt;
&lt;p&gt;
By now we have created the whole infrastructure that is necessary to run a SQL Server
2012 AlwaysOn Availability Group solution. In the next weblog posting you will then
see, how you can deploy your first Availability Group with SQL Server 2012. 
&lt;/p&gt;
&lt;p&gt;
If you are interested in SQL Server 2012, I suggest looking on my "SQL Server 2012
Deep Dive Days Workshop", which I run from May 28 – 30 in London/United Kingdom (see &lt;a href="http://www.SQLpassion.at/events.html"&gt;http://www.SQLpassion.at/events.html&lt;/a&gt;,
Early Bird price ends on March 31). This workshop was already running in Vienna/Austria
and Munich/Germany with a huge success. 
&lt;/p&gt;
&lt;p&gt;
Stay tuned &lt;span style="font-family:Wingdings"&gt;J&lt;/span&gt; 
&lt;/p&gt;
&lt;p&gt;
-Klaus
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=cd97cc61-cce4-480d-99c2-0b62218c7cdf" /&gt;</description>
      <comments>http://www.sqlpassion.at/blog/CommentView,guid,cd97cc61-cce4-480d-99c2-0b62218c7cdf.aspx</comments>
      <category>.NET German</category>
      <category>SQLServer</category>
      <category>SQLServerPedia</category>
    </item>
    <item>
      <trackback:ping>http://www.sqlpassion.at/blog/Trackback.aspx?guid=1ff3acdf-0064-4449-ad96-049f0cd11029</trackback:ping>
      <pingback:server>http://www.sqlpassion.at/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sqlpassion.at/blog/PermaLink,guid,1ff3acdf-0064-4449-ad96-049f0cd11029.aspx</pingback:target>
      <dc:creator>Klaus Aschenbrenner</dc:creator>
      <wfw:comment>http://www.sqlpassion.at/blog/CommentView,guid,1ff3acdf-0064-4449-ad96-049f0cd11029.aspx</wfw:comment>
      <wfw:commentRss>http://www.sqlpassion.at/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1ff3acdf-0064-4449-ad96-049f0cd11029</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
As I have announced in my ColumnStore presentation last Saturday in Lisbon, you can
find <a href="http://www.sqlpassion.at/downloads/ColumnStore.zip">here</a> the slides
&amp; samples for download. 
</p>
        <p>
Thanks for attending my session and enjoy the download <span style="font-family:Wingdings">J</span>. 
</p>
        <p>
-Klaus
</p>
        <img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=1ff3acdf-0064-4449-ad96-049f0cd11029" />
      </body>
      <title>Slides &amp; Samples from my SQLSaturday #115 presentation about ColumnStore Indexes</title>
      <guid isPermaLink="false">http://www.sqlpassion.at/blog/PermaLink,guid,1ff3acdf-0064-4449-ad96-049f0cd11029.aspx</guid>
      <link>http://www.sqlpassion.at/blog/PermaLink,guid,1ff3acdf-0064-4449-ad96-049f0cd11029.aspx</link>
      <pubDate>Mon, 19 Mar 2012 15:11:27 GMT</pubDate>
      <description>&lt;p&gt;
As I have announced in my ColumnStore presentation last Saturday in Lisbon, you can
find &lt;a href="http://www.sqlpassion.at/downloads/ColumnStore.zip"&gt;here&lt;/a&gt; the slides
&amp;amp; samples for download. 
&lt;/p&gt;
&lt;p&gt;
Thanks for attending my session and enjoy the download &lt;span style="font-family:Wingdings"&gt;J&lt;/span&gt;. 
&lt;/p&gt;
&lt;p&gt;
-Klaus
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=1ff3acdf-0064-4449-ad96-049f0cd11029" /&gt;</description>
      <comments>http://www.sqlpassion.at/blog/CommentView,guid,1ff3acdf-0064-4449-ad96-049f0cd11029.aspx</comments>
      <category>.NET German</category>
      <category>Conferences</category>
      <category>SQLServer</category>
      <category>SQLServerPedia</category>
    </item>
    <item>
      <trackback:ping>http://www.sqlpassion.at/blog/Trackback.aspx?guid=2bc9c47f-97c2-4917-9d34-4bf7cd240031</trackback:ping>
      <pingback:server>http://www.sqlpassion.at/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sqlpassion.at/blog/PermaLink,guid,2bc9c47f-97c2-4917-9d34-4bf7cd240031.aspx</pingback:target>
      <dc:creator>Klaus Aschenbrenner</dc:creator>
      <wfw:comment>http://www.sqlpassion.at/blog/CommentView,guid,2bc9c47f-97c2-4917-9d34-4bf7cd240031.aspx</wfw:comment>
      <wfw:commentRss>http://www.sqlpassion.at/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2bc9c47f-97c2-4917-9d34-4bf7cd240031</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
As you might know, Microsoft has released on March 7 the RTM version of SQL Server
2012. If you are an MSDN or TechNet Subscriber, you can already download it and play
with it. As with every SQL Server release, SQL Server has also marked several features
as deprecated, which means they are removed in a future version of SQL Server. 
</p>
        <p>
        </p>
        <p>
So if you are starting a new deployment or an application based on SQL Server 2012,
you should check the following link which describes all the deprecated features and
their replacement: <a href="http://msdn.microsoft.com/en-us/library/ms143729%28v=sql.110%29.aspx">http://msdn.microsoft.com/en-us/library/ms143729%28v=sql.110%29.aspx</a>.
In this blog posting I want to mention 2 deprecated features, because there are some
big changes in SQL Server 2012. 
</p>
        <p>
        </p>
        <p>
          <span style="text-decoration:underline">
            <strong>Database Mirroring: </strong>
          </span>
        </p>
        <p>
With the release of SQL Server 2012 and AlwaysOn Availability Groups, Database Mirroring
is deprecated. Database Mirroring was introduced with SQL Server 2005 SP1 and allowed
you to mirror a database synchronous and asynchronous, and optionally you had also
an automatic failover if you used a witness instance (in combination with synchronous
mirroring). 
</p>
        <p>
        </p>
        <p>
AlwaysOn Availability Groups is an enhanced version of Database Mirroring where you
can mirror a group of databases, and where your secondary databases are readable.
AlwaysOn also provides you synchronous mirroring for HA, and asynchronous mirroring
for DR. One requirement of AlwaysOn Availability Groups is that you need to have a
Windows Server Failover Cluster (without any Shared Storage!). The Windows Server
Failover Clustering functionality is used to provide several clustering infrastructure
features like Quorum settings, Intra Node Health Checking, etc. 
</p>
        <p>
        </p>
        <p>
I already talked with some of my customers, and for a few of them this is currently
a big no-go, because they are currently using Database Mirroring where each partner
database is not in an AD domain. So they can't just migrate to AlwaysOn, because they
are not able to create a Windows Server Failover Cluster. But that is just the way
how it works now. Another drawback is that AlwaysOn Availability Groups is currently
only an Enterprise Edition feature of SQL Server. Parts of Database Mirroring are
also available in the Standard Edition. Microsoft suggests to use Log Shipping of
your SQL Server Edition doesn't support AlwaysOn Availability Groups. 
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <span style="text-decoration:underline">
            <strong>SQL Server Profiler for Trace Capture
and Trace Replay </strong>
          </span>
        </p>
        <p>
Microsoft introduced with SQL Server 2008 Extended Events. With SQL Server 2012 Microsoft
has done a lot of improvements in the area of Extended Events, for example you are
now getting a very cool UI where you can define your Event Sessions in a wizard based
way. On the long term Extended Events is the replacement for SQL Trace and SQL Server
Profiler. Therefore those features are marked as deprecated. If you are using SQL
Trace/SQL Profiler for Trace Capture and Trace Replay, SQL Server 2012 provides you
a new feature called Distributed Replay, which is a high scalable distributed replaying
technology. 
</p>
        <p>
        </p>
        <p>
So, if you have existing applications based on SQL Server, or you are starting a new
deployment on SQL Server 2012, please review the deprecated features so that you have
fewer problems in the futures. 
</p>
        <p>
        </p>
        <p>
If you are interested in SQL Server 2012, I suggest looking on my "SQL Server 2012
Deep Dive Days Workshop", which I run from May 28 – 30 in London/United Kingdom (see <a href="http://www.SQLpassion.at/events.html">http://www.SQLpassion.at/events.html</a>,
Early Bird price ends on March 31). This workshop was running this week in Vienna/Austria
with a huge success and next week I'm presenting this workshop in Munich/Germany. 
</p>
        <p>
        </p>
        <p>
Thanks for reading! 
</p>
        <p>
        </p>
        <p>
-Klaus
</p>
        <img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=2bc9c47f-97c2-4917-9d34-4bf7cd240031" />
      </body>
      <title>Deprecated Features in the SQL Server 2012 Database Engine</title>
      <guid isPermaLink="false">http://www.sqlpassion.at/blog/PermaLink,guid,2bc9c47f-97c2-4917-9d34-4bf7cd240031.aspx</guid>
      <link>http://www.sqlpassion.at/blog/PermaLink,guid,2bc9c47f-97c2-4917-9d34-4bf7cd240031.aspx</link>
      <pubDate>Fri, 09 Mar 2012 10:19:54 GMT</pubDate>
      <description>&lt;p&gt;
As you might know, Microsoft has released on March 7 the RTM version of SQL Server
2012. If you are an MSDN or TechNet Subscriber, you can already download it and play
with it. As with every SQL Server release, SQL Server has also marked several features
as deprecated, which means they are removed in a future version of SQL Server. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
So if you are starting a new deployment or an application based on SQL Server 2012,
you should check the following link which describes all the deprecated features and
their replacement: &lt;a href="http://msdn.microsoft.com/en-us/library/ms143729%28v=sql.110%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms143729%28v=sql.110%29.aspx&lt;/a&gt;.
In this blog posting I want to mention 2 deprecated features, because there are some
big changes in SQL Server 2012. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="text-decoration:underline"&gt;&lt;strong&gt;Database Mirroring: &lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
With the release of SQL Server 2012 and AlwaysOn Availability Groups, Database Mirroring
is deprecated. Database Mirroring was introduced with SQL Server 2005 SP1 and allowed
you to mirror a database synchronous and asynchronous, and optionally you had also
an automatic failover if you used a witness instance (in combination with synchronous
mirroring). 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
AlwaysOn Availability Groups is an enhanced version of Database Mirroring where you
can mirror a group of databases, and where your secondary databases are readable.
AlwaysOn also provides you synchronous mirroring for HA, and asynchronous mirroring
for DR. One requirement of AlwaysOn Availability Groups is that you need to have a
Windows Server Failover Cluster (without any Shared Storage!). The Windows Server
Failover Clustering functionality is used to provide several clustering infrastructure
features like Quorum settings, Intra Node Health Checking, etc. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
I already talked with some of my customers, and for a few of them this is currently
a big no-go, because they are currently using Database Mirroring where each partner
database is not in an AD domain. So they can't just migrate to AlwaysOn, because they
are not able to create a Windows Server Failover Cluster. But that is just the way
how it works now. Another drawback is that AlwaysOn Availability Groups is currently
only an Enterprise Edition feature of SQL Server. Parts of Database Mirroring are
also available in the Standard Edition. Microsoft suggests to use Log Shipping of
your SQL Server Edition doesn't support AlwaysOn Availability Groups. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="text-decoration:underline"&gt;&lt;strong&gt;SQL Server Profiler for Trace Capture
and Trace Replay &lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Microsoft introduced with SQL Server 2008 Extended Events. With SQL Server 2012 Microsoft
has done a lot of improvements in the area of Extended Events, for example you are
now getting a very cool UI where you can define your Event Sessions in a wizard based
way. On the long term Extended Events is the replacement for SQL Trace and SQL Server
Profiler. Therefore those features are marked as deprecated. If you are using SQL
Trace/SQL Profiler for Trace Capture and Trace Replay, SQL Server 2012 provides you
a new feature called Distributed Replay, which is a high scalable distributed replaying
technology. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
So, if you have existing applications based on SQL Server, or you are starting a new
deployment on SQL Server 2012, please review the deprecated features so that you have
fewer problems in the futures. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
If you are interested in SQL Server 2012, I suggest looking on my "SQL Server 2012
Deep Dive Days Workshop", which I run from May 28 – 30 in London/United Kingdom (see &lt;a href="http://www.SQLpassion.at/events.html"&gt;http://www.SQLpassion.at/events.html&lt;/a&gt;,
Early Bird price ends on March 31). This workshop was running this week in Vienna/Austria
with a huge success and next week I'm presenting this workshop in Munich/Germany. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Thanks for reading! 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
-Klaus
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=2bc9c47f-97c2-4917-9d34-4bf7cd240031" /&gt;</description>
      <comments>http://www.sqlpassion.at/blog/CommentView,guid,2bc9c47f-97c2-4917-9d34-4bf7cd240031.aspx</comments>
      <category>.NET German</category>
      <category>SQLServer</category>
      <category>SQLServerPedia</category>
    </item>
    <item>
      <trackback:ping>http://www.sqlpassion.at/blog/Trackback.aspx?guid=eb263ca7-fbdb-4cf2-b239-f3a557b689b0</trackback:ping>
      <pingback:server>http://www.sqlpassion.at/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sqlpassion.at/blog/PermaLink,guid,eb263ca7-fbdb-4cf2-b239-f3a557b689b0.aspx</pingback:target>
      <dc:creator>Klaus Aschenbrenner</dc:creator>
      <wfw:comment>http://www.sqlpassion.at/blog/CommentView,guid,eb263ca7-fbdb-4cf2-b239-f3a557b689b0.aspx</wfw:comment>
      <wfw:commentRss>http://www.sqlpassion.at/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=eb263ca7-fbdb-4cf2-b239-f3a557b689b0</wfw:commentRss>
      <title>New upcoming events across Europe</title>
      <guid isPermaLink="false">http://www.sqlpassion.at/blog/PermaLink,guid,eb263ca7-fbdb-4cf2-b239-f3a557b689b0.aspx</guid>
      <link>http://www.sqlpassion.at/blog/PermaLink,guid,eb263ca7-fbdb-4cf2-b239-f3a557b689b0.aspx</link>
      <pubDate>Sun, 04 Mar 2012 09:05:36 GMT</pubDate>
      <description>&lt;p&gt;
I'm very happy today to announce 4 new upcoming SQL Server workshops across Europe
within the next months: 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="text-decoration:underline"&gt;&lt;strong&gt;SQL Server Configuration Day &lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Date/Location 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
April 26 in Zurich/Switzerland 
&lt;/li&gt;
&lt;li&gt;
May 16 in Vienna/Austria 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Agenda 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Storage Configuration 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
IO Subsystem Tests 
&lt;/li&gt;
&lt;li&gt;
Disk Partition Alignment 
&lt;/li&gt;
&lt;li&gt;
RAID Configuration 
&lt;/li&gt;
&lt;li&gt;
Data-/Log-File Configuration 
&lt;/li&gt;
&lt;li&gt;
TempDb Configuration 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;CPU/Memory Configuration 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
Resource Governor 
&lt;/li&gt;
&lt;li&gt;
CPU Affinity Settings 
&lt;/li&gt;
&lt;li&gt;
Parallelism 
&lt;/li&gt;
&lt;li&gt;
NUMA Systems 
&lt;/li&gt;
&lt;li&gt;
Buffer Pool Management 
&lt;/li&gt;
&lt;li&gt;
Query Memory Configuration 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Baselining &amp; Monitoring 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
Performance Monitoring 
&lt;/li&gt;
&lt;li&gt;
Wait Statistics 
&lt;/li&gt;
&lt;li&gt;
PAL Tools 
&lt;/li&gt;
&lt;li&gt;
Baselining 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Virtualization 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
Microsoft Hyper-V 
&lt;/li&gt;
&lt;li&gt;
VMware ESXi 
&lt;/li&gt;
&lt;li&gt;
Dynamic Memory 
&lt;/li&gt;
&lt;li&gt;
Memory Ballooning 
&lt;/li&gt;
&lt;li&gt;
CPU Co-Scheduling 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
You can find further information and registration details about the SQL Configuration
Day at &lt;a href="http://www.SQLpassion.at/events.html"&gt;http://www.SQLpassion.at/events.html&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="text-decoration:underline"&gt;&lt;strong&gt;SQL Server 2012 Deep Dive Days &lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Date/Location 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
May 28 – 30 in London/United Kingdom 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Agenda 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;SQL Server 2012 Development 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
SQL Server Data Tools 
&lt;/li&gt;
&lt;li&gt;
T-SQL Enhancements 
&lt;/li&gt;
&lt;li&gt;
Windowing Functions 
&lt;/li&gt;
&lt;li&gt;
File Table 
&lt;/li&gt;
&lt;li&gt;
Fulltext Indexes 
&lt;/li&gt;
&lt;li&gt;
Semantic Search 
&lt;/li&gt;
&lt;li&gt;
Contained Databases 
&lt;/li&gt;
&lt;li&gt;
SQL Server Integration Services 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;SQL Server 2012 Administration 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
Extended Events 
&lt;/li&gt;
&lt;li&gt;
Columnstore Indexes 
&lt;/li&gt;
&lt;li&gt;
LOB Online Index Rebuilds 
&lt;/li&gt;
&lt;li&gt;
Adding Online Non-NULL Values 
&lt;/li&gt;
&lt;li&gt;
Database Recovery Advisor 
&lt;/li&gt;
&lt;li&gt;
Distributed Replay 
&lt;/li&gt;
&lt;li&gt;
Memory Management 
&lt;/li&gt;
&lt;li&gt;
Troubleshooting Enhancements 
&lt;/li&gt;
&lt;li&gt;
Windows Server Core Support 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;SQL Server 2012 High Availability 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
Failover Clustering Enhancements 
&lt;/li&gt;
&lt;li&gt;
Local TempDb 
&lt;/li&gt;
&lt;li&gt;
Health Check Policies 
&lt;/li&gt;
&lt;li&gt;
Failover Policy Levels 
&lt;/li&gt;
&lt;li&gt;
Indirect Checkpoints 
&lt;/li&gt;
&lt;li&gt;
Availability Groups 
&lt;/li&gt;
&lt;li&gt;
Availability Group Listeners 
&lt;/li&gt;
&lt;li&gt;
Monitoring &amp; Troubleshooting 
&lt;/li&gt;
&lt;li&gt;
Multiple Secondaries 
&lt;/li&gt;
&lt;li&gt;
Automatic Failovers 
&lt;/li&gt;
&lt;li&gt;
Read-Only Connections 
&lt;/li&gt;
&lt;li&gt;
Backups 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
You can find further information and registration details about the SQL Server 2012
Deep Dive Days in London at &lt;a href="http://www.SQLpassion.at/events.html"&gt;http://www.SQLpassion.at/events.html&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="text-decoration:underline"&gt;&lt;strong&gt;SQL Server Performance Tuning &amp; Troubleshooting
Workshop &lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Date/Location 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
June 13 – 15 in Munich/Germany 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Agenda 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Performance Tuning with Indexing 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Database Internals 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
Structures 
&lt;/li&gt;
&lt;li&gt;
Fixed Data Types 
&lt;/li&gt;
&lt;li&gt;
Variable Length Data Types 
&lt;/li&gt;
&lt;li&gt;
Data Modification Internals 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Execution Plans 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
Understanding Execution Plans 
&lt;/li&gt;
&lt;li&gt;
Plan Generation &amp; Caching 
&lt;/li&gt;
&lt;li&gt;
Plan Reuse &amp; Recompilations 
&lt;/li&gt;
&lt;li&gt;
Physical Join Operators 
&lt;/li&gt;
&lt;li&gt;
Plan Cache Pollution 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Indexing 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
Table Scan/Index Scan/Index Seek 
&lt;/li&gt;
&lt;li&gt;
Clustered/Non-Clustered Index 
&lt;/li&gt;
&lt;li&gt;
Bookmark Lookups 
&lt;/li&gt;
&lt;li&gt;
Index Intersection 
&lt;/li&gt;
&lt;li&gt;
Filtered Indexes 
&lt;/li&gt;
&lt;li&gt;
Indexed Views 
&lt;/li&gt;
&lt;li&gt;
Page Fragmentation/Page Splits 
&lt;/li&gt;
&lt;li&gt;
Fill Factor 
&lt;/li&gt;
&lt;li&gt;
Searchable Arguments 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Index Maintenance 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
Statistics 
&lt;/li&gt;
&lt;li&gt;
Overview 
&lt;/li&gt;
&lt;li&gt;
Working with Statistics 
&lt;/li&gt;
&lt;li&gt;
Statistics Maintenance 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Troubleshooting Looking &amp; Blocking 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Concurrency 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
Pessimistic 
&lt;/li&gt;
&lt;li&gt;
Optimistic 
&lt;/li&gt;
&lt;li&gt;
Isolation Levels 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Troubleshooting Locking 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
Viewing Locks 
&lt;/li&gt;
&lt;li&gt;
Lock Granularity 
&lt;/li&gt;
&lt;li&gt;
Lock Hierarchy 
&lt;/li&gt;
&lt;li&gt;
Lock Escalation 
&lt;/li&gt;
&lt;li&gt;
Lock Compatibility 
&lt;/li&gt;
&lt;li&gt;
Lock Manager Internals 
&lt;/li&gt;
&lt;li&gt;
Dynamic Management Views 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Dead Locking 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
Detection 
&lt;/li&gt;
&lt;li&gt;
Avoidance 
&lt;/li&gt;
&lt;li&gt;
Troubleshooting 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Latches 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
Latch Architecture 
&lt;/li&gt;
&lt;li&gt;
Latch Types 
&lt;/li&gt;
&lt;li&gt;
Latch Modes 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Performance Monitoring &amp; Troubleshooting 
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
Performance Monitoring Methodology 
&lt;/li&gt;
&lt;li&gt;
Wait Stats 
&lt;/li&gt;
&lt;li&gt;
SQL Server Profiler 
&lt;/li&gt;
&lt;li&gt;
Perfmon 
&lt;/li&gt;
&lt;li&gt;
Dynamic Management Views/Functions 
&lt;/li&gt;
&lt;li&gt;
Memory Management 
&lt;/li&gt;
&lt;li&gt;
TempDb 
&lt;/li&gt;
&lt;li&gt;
PAL/RML Utilities 
&lt;/li&gt;
&lt;li&gt;
SQLDiag/SQLNexus 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
You can find further information and registration details about the SQL Server Performance
Tuning &amp; Troubleshooting at &lt;a href="http://www.SQLpassion.at/events.html"&gt;http://www.SQLpassion.at/events.html&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Thanks 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
-Klaus
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=eb263ca7-fbdb-4cf2-b239-f3a557b689b0" /&gt;</description>
      <comments>http://www.sqlpassion.at/blog/CommentView,guid,eb263ca7-fbdb-4cf2-b239-f3a557b689b0.aspx</comments>
      <category>.NET German</category>
      <category>Conferences</category>
      <category>SQLServer</category>
      <category>SQLServerPedia</category>
    </item>
    <item>
      <trackback:ping>http://www.sqlpassion.at/blog/Trackback.aspx?guid=7e731801-151f-492a-bd1e-f421c9911729</trackback:ping>
      <pingback:server>http://www.sqlpassion.at/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sqlpassion.at/blog/PermaLink,guid,7e731801-151f-492a-bd1e-f421c9911729.aspx</pingback:target>
      <dc:creator>Klaus Aschenbrenner</dc:creator>
      <wfw:comment>http://www.sqlpassion.at/blog/CommentView,guid,7e731801-151f-492a-bd1e-f421c9911729.aspx</wfw:comment>
      <wfw:commentRss>http://www.sqlpassion.at/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7e731801-151f-492a-bd1e-f421c9911729</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today I want to talk about Statistics Enhancements in SQL Server 2012. As you already
know SQL Server uses Statistic Objects in a database to estimate the cardinality of
queries. The cardinality estimation is the input for the generation of the physical
Execution Plan of a given T-SQL query. Data changes over time, data distribution changes
over time, so SQL Server is also able to change Statistics Objects in the background
automatically for us. This feature is called <strong>Auto Update Statistics</strong>.
SQL Server updates Statistics automatically under the following conditions (when the
table is not a temp table): 
</p>
        <ul>
          <li>
A table with no rows gets a row 
</li>
          <li>
A table has fewer than 500 rows and is increased by 500 or more rows 
</li>
          <li>
A table has more than 500 rows and is increased by 500 rows + 20 percent of the number
of rows 
</li>
        </ul>
        <p>
Whenever SQL Server is updating the statistics automatically, SQL Server Profiler
reports the <strong>Auto Stats</strong> event. On the other hand, SQL Server is also
able to create Statistic Objects on the fly, when SQL Server needs to estimate the
cardinality for a given query and no index (and therefore no Statistics Object) is
available, like in the following one: 
</p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">SELECT</span>
            <span style="color:gray">*</span>
            <span style="color:blue">FROM</span> Table1 </span>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">WHERE</span> Column1 <span style="color:gray">&gt;</span> 1 </span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">GO</span>
        </p>
        <p>
When <strong>Column1</strong> is not indexed, SQL Server will create a new Statistics
Object for you. 
</p>
        <p>
All these things are great to improve performance for queries, but what happens when
SQL Server can't change the underlying Statistics Object or isn't able to create a
new one for you? Just think of databases that are marked as read only, or when you
are using Database Snapshots. Data in Database Snapshots can't change, but you can
issue completely new queries that leads to the demand of creating new Statistics Objects. 
</p>
        <p>
In that case, SQL Server can't create/update the Statistics Object, which means SQL
Server can't re-evaluate the cardinality estimation and proceeds with the cached execution
plan, which can have a huge performance drawback for your read only workload. Let's
demonstrate this problem with a simple example. I'm creating a new database with a
simple table in it: 
</p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">USE</span>
            <span style="color:blue">master </span>
          </span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">GO </span>
        </p>
        <p>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">CREATE</span>
            <span style="color:blue">DATABASE</span> StatisticsDatabase </span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">GO </span>
        </p>
        <p>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">USE</span> StatisticsDatabase </span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">GO </span>
        </p>
        <p>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">CREATE</span>
            <span style="color:blue">TABLE</span> Table1 </span>
        </p>
        <p>
          <span style="color:gray; font-family:Courier New; font-size:9pt">( </span>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt"> Column1 <span style="color:blue">INT</span><span style="color:blue">IDENTITY<span style="color:gray">, </span></span></span>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt"> Column2 <span style="color:blue">INT </span></span>
        </p>
        <p>
          <span style="color:gray; font-family:Courier New; font-size:9pt">) </span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">GO </span>
        </p>
        <p>
        </p>
        <p>
In the next step I'm populating the table with 1500 records: 
</p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">SELECT</span>
            <span style="color:blue">TOP</span> 1500 <span style="color:blue">IDENTITY<span style="color:gray">(<span style="color:blue">INT<span style="color:gray">,</span> 1<span style="color:gray">,</span> 1<span style="color:gray">)</span> AS</span> n <span style="color:blue">INTO</span> #Nums </span></span></span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">FROM </span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">master<span style="color:gray">.</span>dbo<span style="color:gray">.<span style="color:green">syscolumns</span> sc1 </span></span>
        </p>
        <p>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">INSERT</span>
            <span style="color:blue">INTO</span> Table1<span style="color:blue"><span style="color:gray">(</span>Column2<span style="color:gray">) </span></span></span>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">SELECT</span> n <span style="color:blue">FROM</span> #nums </span>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">DROP</span>
            <span style="color:blue">TABLE</span> #nums </span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">GO</span>
        </p>
        <p>
When we select everything from the table, SQL Server uses the Table Scan operator,
because we have not defined a Clustered Index on our table: 
</p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">SELECT</span>
            <span style="color:gray">*</span>
            <span style="color:blue">FROM</span> Table1 </span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">GO</span>
        </p>
        <p>
To demonstrate the problem with errors in the cardinality estimation I'm creating
a Non-Clustered Index on <strong>Column2</strong>. 
</p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">CREATE</span>
            <span style="color:blue">NONCLUSTERED</span>
            <span style="color:blue">INDEX</span> idxTable1_Column2 <span style="color:blue">ON</span> Table1<span style="color:gray">(</span>Column2<span style="color:gray">) </span></span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">GO</span>
        </p>
        <p>
The following query uses the previous created Non-Clustered Index: 
</p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">SELECT</span>
            <span style="color:gray">*</span>
            <span style="color:blue">FROM</span> Table1 </span>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">WHERE</span> Column2 <span style="color:gray">=</span> 2 </span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">GO</span>
        </p>
        <p>
SQL Server creates an Execution Plan with a Non-Clustered Index Seek and RID Lookup
(Heap) operator – the traditional Bookmark Lookup operator. By now we have a table
with 1500 records, which means we need 20 percent + 500 rows of data changes, until
SQL Server will update the underlying Statistics Object of the Non-Clustered Index.
In our case these are 800 data changes in our table (300 + 500). So let's insert 800
additional records into the table: 
</p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">SELECT</span>
            <span style="color:blue">TOP</span> 800 <span style="color:blue">IDENTITY<span style="color:gray">(<span style="color:blue">INT<span style="color:gray">,</span> 1<span style="color:gray">,</span> 1<span style="color:gray">)</span> AS</span> n <span style="color:blue">INTO</span> #Nums </span></span></span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">FROM </span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">master<span style="color:gray">.</span>dbo<span style="color:gray">.<span style="color:green">syscolumns</span> sc1 </span></span>
        </p>
        <p>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">INSERT</span>
            <span style="color:blue">INTO</span> Table1<span style="color:blue"><span style="color:gray">(</span>Column2<span style="color:gray">) </span></span></span>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">SELECT</span> 2 <span style="color:blue">FROM</span> #nums </span>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">DROP</span>
            <span style="color:blue">TABLE</span> #nums </span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">GO</span>
        </p>
        <p>
SQL Server will update the Statistics Object as soon as a new SELECT query will reference
it. Prior to that we will now mark our database as read only, so that SQL Server can't
change anything anymore: 
</p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">USE</span>
            <span style="color:blue">master </span>
          </span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">GO </span>
        </p>
        <p>
        </p>
        <p>
          <span style="color:green; font-family:Courier New; font-size:9pt">-- Mark the database
as readonly </span>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">ALTER</span>
            <span style="color:blue">DATABASE</span> StatisticsDatabase </span>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">SET</span>
            <span style="color:blue">READ_ONLY</span>
            <span style="color:blue">WITH</span> NO_WAIT </span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">GO </span>
        </p>
        <p>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">USE</span> StatisticsDatabase </span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">GO</span>
        </p>
        <p>
Let's now run the query which will trigger an update of the Statistics Object: 
</p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">SELECT</span>
            <span style="color:gray">*</span>
            <span style="color:blue">FROM</span> Table1 </span>
        </p>
        <p>
          <span style="font-family:Courier New; font-size:9pt">
            <span style="color:blue">WHERE</span> Column2 <span style="color:gray">=</span> 2 </span>
        </p>
        <p>
          <span style="color:blue; font-family:Courier New; font-size:9pt">GO </span>
        </p>
        <p>
Under normal conditions, SQL Server will now re-evaluate the cardinality estimation
and create an Execution Plan with a Table Scan operator. But in our case SQL Server
can't change anything in the database, therefore SQL Server will reuse the inefficient
cached Execution Plan with the Bookmark Lookup! When you look at the Execution Plan
you will also see a huge difference between the Estimated and Actual Number of Rows: 
</p>
        <p>
          <img src="http://www.sqlpassion.at/blog/content/binary/022912_2051_StatisticsE1.png" alt="" />
        </p>
        <p>
That's the behavior of SQL Server 2005/2008 (R2), and you can't change anything about
it. The same problem will occur when you are using Database Snapshots. 
</p>
        <p>
But with SQL Server 2012 Microsoft has addressed that problem. SQL Server now supports
so-called <strong>Temporary Statistic Objects</strong> which are created in TempDb.
Every time when SQL Server wants to create or update an Statistics Object on a read
only database or on a Database Snapshot, SQL Server will create the necessary Statistics
Object in TempDb. For this functionality SQL Server needs 1 data page per each Statistics
Object in TempDb. 
</p>
        <p>
So when you run the previous code on SQL Server 2012, SQL Server will create a new
temporary Statistics Object in TempDb, and will create an Execution Plan with a Table
Scan operator, which makes much more sense, because our query is not selective enough
anymore. 
</p>
        <p>
Temporary Statistics Objects are also used by Readable Secondaries in AlwaysOn in
SQL Server 2012, because Readable Secondaries also have the same problem: they are
used for read only workloads, and SQL Server can't change anything in the Secondary
Replica, because all Replicas must have the same physical structure in the Availability
Group. So every time when you are working with readable Secondaries in SQL Server
2012, you will also have an overhead in TempDb, because of temporary Statistics. And
Readable Secondaries are also using transparently Snapshot Isolation, which also impacts
the performance of TempDb. But that's a topic for another weblog posting <span style="font-family:Wingdings">J</span>. 
</p>
        <p>
Thanks for reading! 
</p>
        <p>
-Klaus
</p>
        <img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=7e731801-151f-492a-bd1e-f421c9911729" />
      </body>
      <title>Statistics Enhancements in SQL Server 2012</title>
      <guid isPermaLink="false">http://www.sqlpassion.at/blog/PermaLink,guid,7e731801-151f-492a-bd1e-f421c9911729.aspx</guid>
      <link>http://www.sqlpassion.at/blog/PermaLink,guid,7e731801-151f-492a-bd1e-f421c9911729.aspx</link>
      <pubDate>Wed, 29 Feb 2012 20:51:42 GMT</pubDate>
      <description>&lt;p&gt;
Today I want to talk about Statistics Enhancements in SQL Server 2012. As you already
know SQL Server uses Statistic Objects in a database to estimate the cardinality of
queries. The cardinality estimation is the input for the generation of the physical
Execution Plan of a given T-SQL query. Data changes over time, data distribution changes
over time, so SQL Server is also able to change Statistics Objects in the background
automatically for us. This feature is called &lt;strong&gt;Auto Update Statistics&lt;/strong&gt;.
SQL Server updates Statistics automatically under the following conditions (when the
table is not a temp table): 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
A table with no rows gets a row 
&lt;/li&gt;
&lt;li&gt;
A table has fewer than 500 rows and is increased by 500 or more rows 
&lt;/li&gt;
&lt;li&gt;
A table has more than 500 rows and is increased by 500 rows + 20 percent of the number
of rows 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Whenever SQL Server is updating the statistics automatically, SQL Server Profiler
reports the &lt;strong&gt;Auto Stats&lt;/strong&gt; event. On the other hand, SQL Server is also
able to create Statistic Objects on the fly, when SQL Server needs to estimate the
cardinality for a given query and no index (and therefore no Statistics Object) is
available, like in the following one: 
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;SELECT&lt;/span&gt; &lt;span style="color:gray"&gt;*&lt;/span&gt; &lt;span style="color:blue"&gt;FROM&lt;/span&gt; Table1 &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;WHERE&lt;/span&gt; Column1 &lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt; 1 &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;GO&lt;/span&gt; 
&lt;/p&gt;
&lt;p&gt;
When &lt;strong&gt;Column1&lt;/strong&gt; is not indexed, SQL Server will create a new Statistics
Object for you. 
&lt;/p&gt;
&lt;p&gt;
All these things are great to improve performance for queries, but what happens when
SQL Server can't change the underlying Statistics Object or isn't able to create a
new one for you? Just think of databases that are marked as read only, or when you
are using Database Snapshots. Data in Database Snapshots can't change, but you can
issue completely new queries that leads to the demand of creating new Statistics Objects. 
&lt;/p&gt;
&lt;p&gt;
In that case, SQL Server can't create/update the Statistics Object, which means SQL
Server can't re-evaluate the cardinality estimation and proceeds with the cached execution
plan, which can have a huge performance drawback for your read only workload. Let's
demonstrate this problem with a simple example. I'm creating a new database with a
simple table in it: 
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;USE&lt;/span&gt; &lt;span style="color:blue"&gt;master &lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;GO &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;CREATE&lt;/span&gt; &lt;span style="color:blue"&gt;DATABASE&lt;/span&gt; StatisticsDatabase &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;GO &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;USE&lt;/span&gt; StatisticsDatabase &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;GO &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;CREATE&lt;/span&gt; &lt;span style="color:blue"&gt;TABLE&lt;/span&gt; Table1 &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:gray; font-family:Courier New; font-size:9pt"&gt;( &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt; Column1 &lt;span style="color:blue"&gt;INT&lt;/span&gt; &lt;span style="color:blue"&gt;IDENTITY&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt; Column2 &lt;span style="color:blue"&gt;INT &lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:gray; font-family:Courier New; font-size:9pt"&gt;) &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;GO &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
In the next step I'm populating the table with 1500 records: 
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;SELECT&lt;/span&gt; &lt;span style="color:blue"&gt;TOP&lt;/span&gt; 1500 &lt;span style="color:blue"&gt;IDENTITY&lt;span style="color:gray"&gt;(&lt;span style="color:blue"&gt;INT&lt;span style="color:gray"&gt;,&lt;/span&gt; 1&lt;span style="color:gray"&gt;,&lt;/span&gt; 1&lt;span style="color:gray"&gt;)&lt;/span&gt; AS&lt;/span&gt; n &lt;span style="color:blue"&gt;INTO&lt;/span&gt; #Nums &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;FROM &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;master&lt;span style="color:gray"&gt;.&lt;/span&gt;dbo&lt;span style="color:gray"&gt;.&lt;span style="color:green"&gt;syscolumns&lt;/span&gt; sc1 &lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;INSERT&lt;/span&gt; &lt;span style="color:blue"&gt;INTO&lt;/span&gt; Table1&lt;span style="color:blue"&gt; &lt;span style="color:gray"&gt;(&lt;/span&gt;Column2&lt;span style="color:gray"&gt;) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;SELECT&lt;/span&gt; n &lt;span style="color:blue"&gt;FROM&lt;/span&gt; #nums &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;DROP&lt;/span&gt; &lt;span style="color:blue"&gt;TABLE&lt;/span&gt; #nums &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;GO&lt;/span&gt; 
&lt;/p&gt;
&lt;p&gt;
When we select everything from the table, SQL Server uses the Table Scan operator,
because we have not defined a Clustered Index on our table: 
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;SELECT&lt;/span&gt; &lt;span style="color:gray"&gt;*&lt;/span&gt; &lt;span style="color:blue"&gt;FROM&lt;/span&gt; Table1 &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;GO&lt;/span&gt; 
&lt;/p&gt;
&lt;p&gt;
To demonstrate the problem with errors in the cardinality estimation I'm creating
a Non-Clustered Index on &lt;strong&gt;Column2&lt;/strong&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;CREATE&lt;/span&gt; &lt;span style="color:blue"&gt;NONCLUSTERED&lt;/span&gt; &lt;span style="color:blue"&gt;INDEX&lt;/span&gt; idxTable1_Column2 &lt;span style="color:blue"&gt;ON&lt;/span&gt; Table1&lt;span style="color:gray"&gt;(&lt;/span&gt;Column2&lt;span style="color:gray"&gt;) &lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;GO&lt;/span&gt; 
&lt;/p&gt;
&lt;p&gt;
The following query uses the previous created Non-Clustered Index: 
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;SELECT&lt;/span&gt; &lt;span style="color:gray"&gt;*&lt;/span&gt; &lt;span style="color:blue"&gt;FROM&lt;/span&gt; Table1 &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;WHERE&lt;/span&gt; Column2 &lt;span style="color:gray"&gt;=&lt;/span&gt; 2 &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;GO&lt;/span&gt; 
&lt;/p&gt;
&lt;p&gt;
SQL Server creates an Execution Plan with a Non-Clustered Index Seek and RID Lookup
(Heap) operator – the traditional Bookmark Lookup operator. By now we have a table
with 1500 records, which means we need 20 percent + 500 rows of data changes, until
SQL Server will update the underlying Statistics Object of the Non-Clustered Index.
In our case these are 800 data changes in our table (300 + 500). So let's insert 800
additional records into the table: 
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;SELECT&lt;/span&gt; &lt;span style="color:blue"&gt;TOP&lt;/span&gt; 800 &lt;span style="color:blue"&gt;IDENTITY&lt;span style="color:gray"&gt;(&lt;span style="color:blue"&gt;INT&lt;span style="color:gray"&gt;,&lt;/span&gt; 1&lt;span style="color:gray"&gt;,&lt;/span&gt; 1&lt;span style="color:gray"&gt;)&lt;/span&gt; AS&lt;/span&gt; n &lt;span style="color:blue"&gt;INTO&lt;/span&gt; #Nums &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;FROM &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;master&lt;span style="color:gray"&gt;.&lt;/span&gt;dbo&lt;span style="color:gray"&gt;.&lt;span style="color:green"&gt;syscolumns&lt;/span&gt; sc1 &lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;INSERT&lt;/span&gt; &lt;span style="color:blue"&gt;INTO&lt;/span&gt; Table1&lt;span style="color:blue"&gt; &lt;span style="color:gray"&gt;(&lt;/span&gt;Column2&lt;span style="color:gray"&gt;) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;SELECT&lt;/span&gt; 2 &lt;span style="color:blue"&gt;FROM&lt;/span&gt; #nums &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;DROP&lt;/span&gt; &lt;span style="color:blue"&gt;TABLE&lt;/span&gt; #nums &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;GO&lt;/span&gt; 
&lt;/p&gt;
&lt;p&gt;
SQL Server will update the Statistics Object as soon as a new SELECT query will reference
it. Prior to that we will now mark our database as read only, so that SQL Server can't
change anything anymore: 
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;USE&lt;/span&gt; &lt;span style="color:blue"&gt;master &lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;GO &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:green; font-family:Courier New; font-size:9pt"&gt;-- Mark the database
as readonly &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;ALTER&lt;/span&gt; &lt;span style="color:blue"&gt;DATABASE&lt;/span&gt; StatisticsDatabase &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;SET&lt;/span&gt; &lt;span style="color:blue"&gt;READ_ONLY&lt;/span&gt; &lt;span style="color:blue"&gt;WITH&lt;/span&gt; NO_WAIT &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;GO &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;USE&lt;/span&gt; StatisticsDatabase &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;GO&lt;/span&gt; 
&lt;/p&gt;
&lt;p&gt;
Let's now run the query which will trigger an update of the Statistics Object: 
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;SELECT&lt;/span&gt; &lt;span style="color:gray"&gt;*&lt;/span&gt; &lt;span style="color:blue"&gt;FROM&lt;/span&gt; Table1 &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Courier New; font-size:9pt"&gt;&lt;span style="color:blue"&gt;WHERE&lt;/span&gt; Column2 &lt;span style="color:gray"&gt;=&lt;/span&gt; 2 &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;GO &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Under normal conditions, SQL Server will now re-evaluate the cardinality estimation
and create an Execution Plan with a Table Scan operator. But in our case SQL Server
can't change anything in the database, therefore SQL Server will reuse the inefficient
cached Execution Plan with the Bookmark Lookup! When you look at the Execution Plan
you will also see a huge difference between the Estimated and Actual Number of Rows: 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.sqlpassion.at/blog/content/binary/022912_2051_StatisticsE1.png" alt="" /&gt; 
&lt;/p&gt;
&lt;p&gt;
That's the behavior of SQL Server 2005/2008 (R2), and you can't change anything about
it. The same problem will occur when you are using Database Snapshots. 
&lt;/p&gt;
&lt;p&gt;
But with SQL Server 2012 Microsoft has addressed that problem. SQL Server now supports
so-called &lt;strong&gt;Temporary Statistic Objects&lt;/strong&gt; which are created in TempDb.
Every time when SQL Server wants to create or update an Statistics Object on a read
only database or on a Database Snapshot, SQL Server will create the necessary Statistics
Object in TempDb. For this functionality SQL Server needs 1 data page per each Statistics
Object in TempDb. 
&lt;/p&gt;
&lt;p&gt;
So when you run the previous code on SQL Server 2012, SQL Server will create a new
temporary Statistics Object in TempDb, and will create an Execution Plan with a Table
Scan operator, which makes much more sense, because our query is not selective enough
anymore. 
&lt;/p&gt;
&lt;p&gt;
Temporary Statistics Objects are also used by Readable Secondaries in AlwaysOn in
SQL Server 2012, because Readable Secondaries also have the same problem: they are
used for read only workloads, and SQL Server can't change anything in the Secondary
Replica, because all Replicas must have the same physical structure in the Availability
Group. So every time when you are working with readable Secondaries in SQL Server
2012, you will also have an overhead in TempDb, because of temporary Statistics. And
Readable Secondaries are also using transparently Snapshot Isolation, which also impacts
the performance of TempDb. But that's a topic for another weblog posting &lt;span style="font-family:Wingdings"&gt;J&lt;/span&gt;. 
&lt;/p&gt;
&lt;p&gt;
Thanks for reading! 
&lt;/p&gt;
&lt;p&gt;
-Klaus
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=7e731801-151f-492a-bd1e-f421c9911729" /&gt;</description>
      <comments>http://www.sqlpassion.at/blog/CommentView,guid,7e731801-151f-492a-bd1e-f421c9911729.aspx</comments>
      <category>.NET German</category>
      <category>SQLServer</category>
      <category>SQLServerPedia</category>
    </item>
    <item>
      <trackback:ping>http://www.sqlpassion.at/blog/Trackback.aspx?guid=2d2f5339-3602-4e3f-a527-74e2b1f593dd</trackback:ping>
      <pingback:server>http://www.sqlpassion.at/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sqlpassion.at/blog/PermaLink,guid,2d2f5339-3602-4e3f-a527-74e2b1f593dd.aspx</pingback:target>
      <dc:creator>Klaus Aschenbrenner</dc:creator>
      <wfw:comment>http://www.sqlpassion.at/blog/CommentView,guid,2d2f5339-3602-4e3f-a527-74e2b1f593dd.aspx</wfw:comment>
      <wfw:commentRss>http://www.sqlpassion.at/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2d2f5339-3602-4e3f-a527-74e2b1f593dd</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In the last weeks it was very silent on my weblog, but life is pretty fast in 2012.
Currently I'm preparing tons of content about SQL Server 2012 for my upcoming event
series across Europe. Besides that (which is very time consuming), I'm also happy
to get the chance to speak at various SQL Server conferences across Europe within
the next weeks. Here's an overview where you can meet me in the near future: 
</p>
        <ul>
          <li>
March 5 – 7, Vienna/Austria:<br />
I'm doing my own "SQL Server 2012 Deep Dive Days" with brand new in-deep technical
content about SQL Server 2012. 
</li>
          <li>
March 12 – 14, Munich/Germany:<br />
"SQL Server 2012 Deep Dive Days" in Munich/Germany 
</li>
          <li>
March 17, SQLSaturday #115 in Lisbon/Portugal<br />
I'm speaking about Columnstore Indexes in SQL Server 2012 
</li>
          <li>
March 19 – 21, Zurich/Switzerland<br />
"SQL Server 2012 Deep Dive Days" in Zurich/Switzerland 
</li>
          <li>
March 24, SQLSaturday #105 in Dublin/Ireland<br />
I'm speaking about Advanced SQL Server Troubleshooting 
</li>
          <li>
March 28 – 29, London/United Kingdom<br />
I'm speaking at the DevWeek conference about SQL Server Execution Plans and SQL Server
Query Tuning 
</li>
          <li>
March 30 – 31, London/United Kingdom<br />
I'm speaking at the SQLbits conference about TempDb Troubleshooting 
</li>
          <li>
April 18 – 20, Billund/Denmark<br />
I'm speaking at Miracle Open World about SQL Server Execution Plans and SQL Server
Query Tuning 
</li>
          <li>
May 8 – 9, Berchtesgaden/Germany<br />
I'm speaking at the SQLConnections conference in Berchtesgaden/Germany, and my session
is not yet decided <span style="font-family:Wingdings">J</span></li>
        </ul>
        <p>
There are also 2 – 3 additional conferences, where I have submitted proposals, but
didn't have yet received an acknowledgement… 
</p>
        <p>
My flight schedule over the next weeks looks also very interesting: 
</p>
        <ol>
          <li>
March 11: Vienna- Munich 
</li>
          <li>
March 14: Munich – Vienna 
</li>
          <li>
March 16: Graz – Frankfurt 
</li>
          <li>
March 17: Frankfurt – Lisbon 
</li>
          <li>
March 18: Lisbon – Frankfurt – Vienna – Zurich 
</li>
          <li>
March 21: Zurich – Vienna 
</li>
          <li>
March 23: Vienna – Zurich – Dublin 
</li>
          <li>
March 25: Dublin – Zurich – Vienna 
</li>
          <li>
March 28: Vienna – London 
</li>
          <li>
March 31: London – Vienna 
</li>
          <li>
April 18: Vienna – Frankfurt – Billund 
</li>
          <li>
April 20: Billund – Frankfurt – Vienna 
</li>
        </ol>
        <p>
It seems that I'm spending more time in airplanes than at home… 
</p>
        <p>
See you soon <span style="font-family:Wingdings">J</span></p>
        <p>
-Klaus
</p>
        <img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=2d2f5339-3602-4e3f-a527-74e2b1f593dd" />
      </body>
      <title>My upcoming speaking engagements</title>
      <guid isPermaLink="false">http://www.sqlpassion.at/blog/PermaLink,guid,2d2f5339-3602-4e3f-a527-74e2b1f593dd.aspx</guid>
      <link>http://www.sqlpassion.at/blog/PermaLink,guid,2d2f5339-3602-4e3f-a527-74e2b1f593dd.aspx</link>
      <pubDate>Wed, 08 Feb 2012 15:04:53 GMT</pubDate>
      <description>&lt;p&gt;
In the last weeks it was very silent on my weblog, but life is pretty fast in 2012.
Currently I'm preparing tons of content about SQL Server 2012 for my upcoming event
series across Europe. Besides that (which is very time consuming), I'm also happy
to get the chance to speak at various SQL Server conferences across Europe within
the next weeks. Here's an overview where you can meet me in the near future: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
March 5 – 7, Vienna/Austria:&lt;br /&gt;
I'm doing my own "SQL Server 2012 Deep Dive Days" with brand new in-deep technical
content about SQL Server 2012. 
&lt;/li&gt;
&lt;li&gt;
March 12 – 14, Munich/Germany:&lt;br /&gt;
"SQL Server 2012 Deep Dive Days" in Munich/Germany 
&lt;/li&gt;
&lt;li&gt;
March 17, SQLSaturday #115 in Lisbon/Portugal&lt;br /&gt;
I'm speaking about Columnstore Indexes in SQL Server 2012 
&lt;/li&gt;
&lt;li&gt;
March 19 – 21, Zurich/Switzerland&lt;br /&gt;
"SQL Server 2012 Deep Dive Days" in Zurich/Switzerland 
&lt;/li&gt;
&lt;li&gt;
March 24, SQLSaturday #105 in Dublin/Ireland&lt;br /&gt;
I'm speaking about Advanced SQL Server Troubleshooting 
&lt;/li&gt;
&lt;li&gt;
March 28 – 29, London/United Kingdom&lt;br /&gt;
I'm speaking at the DevWeek conference about SQL Server Execution Plans and SQL Server
Query Tuning 
&lt;/li&gt;
&lt;li&gt;
March 30 – 31, London/United Kingdom&lt;br /&gt;
I'm speaking at the SQLbits conference about TempDb Troubleshooting 
&lt;/li&gt;
&lt;li&gt;
April 18 – 20, Billund/Denmark&lt;br /&gt;
I'm speaking at Miracle Open World about SQL Server Execution Plans and SQL Server
Query Tuning 
&lt;/li&gt;
&lt;li&gt;
May 8 – 9, Berchtesgaden/Germany&lt;br /&gt;
I'm speaking at the SQLConnections conference in Berchtesgaden/Germany, and my session
is not yet decided &lt;span style="font-family:Wingdings"&gt;J&lt;/span&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
There are also 2 – 3 additional conferences, where I have submitted proposals, but
didn't have yet received an acknowledgement… 
&lt;/p&gt;
&lt;p&gt;
My flight schedule over the next weeks looks also very interesting: 
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
March 11: Vienna- Munich 
&lt;/li&gt;
&lt;li&gt;
March 14: Munich – Vienna 
&lt;/li&gt;
&lt;li&gt;
March 16: Graz – Frankfurt 
&lt;/li&gt;
&lt;li&gt;
March 17: Frankfurt – Lisbon 
&lt;/li&gt;
&lt;li&gt;
March 18: Lisbon – Frankfurt – Vienna – Zurich 
&lt;/li&gt;
&lt;li&gt;
March 21: Zurich – Vienna 
&lt;/li&gt;
&lt;li&gt;
March 23: Vienna – Zurich – Dublin 
&lt;/li&gt;
&lt;li&gt;
March 25: Dublin – Zurich – Vienna 
&lt;/li&gt;
&lt;li&gt;
March 28: Vienna – London 
&lt;/li&gt;
&lt;li&gt;
March 31: London – Vienna 
&lt;/li&gt;
&lt;li&gt;
April 18: Vienna – Frankfurt – Billund 
&lt;/li&gt;
&lt;li&gt;
April 20: Billund – Frankfurt – Vienna 
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
It seems that I'm spending more time in airplanes than at home… 
&lt;/p&gt;
&lt;p&gt;
See you soon &lt;span style="font-family:Wingdings"&gt;J&lt;/span&gt; 
&lt;/p&gt;
&lt;p&gt;
-Klaus
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sqlpassion.at/blog/aggbug.ashx?id=2d2f5339-3602-4e3f-a527-74e2b1f593dd" /&gt;</description>
      <comments>http://www.sqlpassion.at/blog/CommentView,guid,2d2f5339-3602-4e3f-a527-74e2b1f593dd.aspx</comments>
      <category>.NET German</category>
      <category>Conferences</category>
      <category>SQLServer</category>
      <category>SQLServerPedia</category>
    </item>
  </channel>
</rss>
