<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Italian Premier Center for SQL Server </title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/</link><description /><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Importante modifica di sicurezza a FileTable introdotta dal Service Pack 1 di SQL Server 2012</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2013/03/04/importante-modifica-di-sicurezza-a-filetable-introdotta-dal-service-pack-1-di-sql-server-2012.aspx</link><pubDate>Mon, 04 Mar 2013 16:46:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3556300</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3556300</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2013/03/04/importante-modifica-di-sicurezza-a-filetable-introdotta-dal-service-pack-1-di-sql-server-2012.aspx#comments</comments><description>&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Un veloce post per sottolineare una funzionalit&amp;agrave; a mio avviso poco pubblicizzata introdotta dal &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=35575"&gt;&lt;span style="color: #0563c1;"&gt;Service Pack 1 di SQL Server 2012&lt;/span&gt;&lt;/a&gt;. Con FileTable potete esporre il contenuto di una tabella a schema fisso all&amp;rsquo;accesso non transazionale tipico dei file systems. Non entro nei dettagli, per un approfondimento vi rimando qui: &lt;a href="http://msdn.microsoft.com/en-us/library/ff929144.aspx"&gt;&lt;span style="color: #0563c1;"&gt;http://msdn.microsoft.com/en-us/library/ff929144.aspx&lt;/span&gt;&lt;/a&gt;. Voglio solo segnalarvi che, dal SP1 in poi, &amp;egrave; possibile specificare una Access Control List pi&amp;ugrave; completa ai files. Nello specifico ora possiamo specificare:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Accesso in sola lettura.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Accesso in lettura/scrittura.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Accesso negato.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;La matrice dei privilegi diventa quindi la seguente:&lt;/span&gt;&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: center;" valign="top" width="312"&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #000080; font-family: verdana,geneva; font-size: small;"&gt;Privilegio logico&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="text-align: center;" valign="top" width="312"&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #000080; font-family: verdana,geneva; font-size: small;"&gt;GRANT T-SQL&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="312"&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Privilegio di browse delle cartelle&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="312"&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;SELECT&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="312"&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Privilegio di lettura&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="312"&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;SELECT&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="312"&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Privilegio di scrittura di un file&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="312"&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;UPDATE&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="312"&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Privilegio di creazione di un file&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="312"&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;UPDATE &lt;strong&gt;e&lt;/strong&gt; INSERT&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="312"&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Privilegio di eliminazione&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="312"&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;DELETE&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Pre service pack era possibile dare&amp;nbsp;solo l'accesso in lettura/scrittura&amp;nbsp;(anche a fronte di un semplice GRANT SELECT).&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Da notare un paio di cose interessanti:&lt;/span&gt;&lt;/p&gt;
&lt;ol style="text-align: justify;"&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Dato che FileTable utilizza dietro le quinte FileStream per creare un file (anche vuoto) non basta avere il privilegio di INSERT. Bisogna avere anche il privilegio di UPDATE. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&amp;Egrave; possibile avere un principal che non pu&amp;ograve; modificare i files ma li pu&amp;ograve; eliminare. Ci&amp;ograve; pu&amp;ograve; sembrare bizzarro ma &amp;egrave; perfettamente coerente con le logiche dei securable di SQL Server. &lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Happy coding,&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;a title="Francesco Cogno" href="mailto:francesco.cogno@microsoft.com"&gt;Francesco Cogno&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3556300" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Security/">Security</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/SQL+Server+2012/">SQL Server 2012</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/FileTable/">FileTable</category></item><item><title>OPTIMIZE FOR e calcolo delle statistiche</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2013/02/12/optimize-for-e-calcolo-delle-statistiche.aspx</link><pubDate>Tue, 12 Feb 2013 15:01:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3551934</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3551934</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2013/02/12/optimize-for-e-calcolo-delle-statistiche.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;In questo articolo, esploreremo l&amp;rsquo;utilizzo dell&amp;rsquo;hint OPTIMIZE FOR e analizzeremo come questo impatta sulla lettura delle statistiche da parte dell&amp;rsquo;optimizer.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Quando una stored procedure viene eseguita la prima volta, i parametri con cui viene richiamata vengono salvati nella cache insieme al piano di esecuzione e utilizzati per il calcolo della cardinalit&amp;agrave;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Questo comportamento &amp;egrave; denominato &amp;ldquo;&lt;strong&gt;parameter sniffing&lt;/strong&gt;&amp;rdquo;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Nel caso in cui la distribuzione dei valori all&amp;rsquo;interno di una statistica sia &lt;strong&gt;poco uniforme&lt;/strong&gt;, una stima errata della cardinalit&amp;agrave;, dovuta al parameter sniffing, pu&amp;ograve; impattare negativamente sulle prestazioni in fase di esecuzione.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;&lt;span style="text-decoration: underline;"&gt;Facciamo un esempio&lt;/span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table border="0" cellpadding="5" bgcolor="#f2f2f2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;USE&lt;/span&gt; tempdb&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;GO&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;SET NOCOUNT ON&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;CREATE TABLE&lt;/span&gt; t1 (IdRow &lt;span style="color: #0000ff;"&gt;int identity&lt;/span&gt;(1,1) &lt;span style="color: #0000ff;"&gt;PRIMARY KEY&lt;/span&gt;, Valore &lt;span style="color: #0000ff;"&gt;char&lt;/span&gt;(3))&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; @i &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000; font-family: courier new,courier;"&gt;-- Inserisco 1000 righe con il valore AAA&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; @i = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;WHILE&lt;/span&gt; @i &amp;lt; 1000&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;INSERT INTO&lt;/span&gt; t1 (Valore) &lt;span style="color: #0000ff;"&gt;VALUES&lt;/span&gt; (&lt;span style="color: #ff0000;"&gt;'AAA'&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;SET&lt;/span&gt; @i = @i + 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;END&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000; font-family: courier new,courier;"&gt;-- Inserisco 500 righe con il valore BBB&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; @i = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;WHILE&lt;/span&gt; @i &amp;lt; 500&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;INSERT INTO&lt;/span&gt; t1 (Valore) VALUES (&lt;span style="color: #ff0000;"&gt;'BBB'&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;SET&lt;/span&gt; @i = @i + 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;END&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000; font-family: courier new,courier;"&gt;-- Inserisco 1 riga con il valore CCC&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;INSERT INTO&lt;/span&gt; t1 (Valore) &lt;span style="color: #0000ff;"&gt;VALUES&lt;/span&gt; (&lt;span style="color: #ff0000;"&gt;'CCC'&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;CREATE INDEX&lt;/span&gt; IX1 &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt; t1 (Valore)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;GO&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000; font-family: courier new,courier;"&gt;-- Analizziamo le statistiche&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;DBCC SHOW_STATISTICS&lt;/span&gt; (t1, IX1)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;GO&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/4846.Statistiche.JPG"&gt;&lt;img style="width: 698px; height: 177px;" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/4846.Statistiche.JPG" alt="" width="551" height="149" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Analizzando i piani di esecuzione possiamo constatare come le righe stimate vengano calcolate sulla base della cardinalit&amp;agrave; del parametro lanciato per primo dopo la compilazione (o ricompilazione) della stored procedure.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/2818.Piani-esecuzione.JPG"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/2818.Piani-esecuzione.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;La figura evidenzia, ad esempio, la discrepanza tra righe stimate e quelle reali nel caso in cui la stored procedure venga richiamata con il parametro &amp;ldquo;AAA&amp;rdquo; essendo stata richiamata la prima volta con il parametro &amp;ldquo;CCC&amp;rdquo;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Se guardiamo il piano di esecuzione in formato XML troveremo il dettaglio del parametro salvato:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table border="0" cellpadding="5" bgcolor="#f2f2f2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;lt;&lt;span style="color: #a82205;"&gt;ParameterList&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;lt;&lt;span style="color: #a82205;"&gt;ColumnReference&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;Column&lt;/span&gt;="&lt;span style="color: #0000ff;"&gt;@Valore&lt;/span&gt;" &lt;span style="color: #ff0000;"&gt;ParameterCompiledValue&lt;/span&gt;="&lt;span style="color: #0000ff;"&gt;'CCC'&lt;/span&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #ff0000;"&gt;ParameterRuntimeValue&lt;/span&gt;="&lt;span style="color: #0000ff;"&gt;'CCC'&lt;/span&gt;" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;lt;/&lt;span style="color: #a82205;"&gt;ParameterList&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;In casi come quello appena descritto, possiamo utilizzare l&amp;rsquo;hint &amp;ldquo;&lt;strong&gt;OPTIMIZE FOR&lt;/strong&gt;&amp;rdquo; per controllare la modalit&amp;agrave; con cui i parametri vengono salvati nel piano di esecuzione, in modo da migliorare la stima della cardinalit&amp;agrave;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Ci sono due modi per utilizzare &amp;ldquo;OPTIMIZE FOR&amp;rdquo;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;&lt;strong&gt;OPTIMIZE FOR &lt;em&gt;Parametro&lt;/em&gt;&lt;/strong&gt;: a prescindere dal parametro con cui la stored procedure viene chiamata per prima, il piano di esecuzione verr&amp;agrave; ottimizzato e salvato nella cache con il valore specificato e, di conseguenza, le statistiche verranno sempre calcolate in base alla cardinalit&amp;agrave; di quel parametro&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;&lt;strong&gt;OPTIMIZE FOR UNKNOWN&lt;/strong&gt;: non verr&amp;agrave; salvato alcun parametro nel piano di esecuzione in cache e le statistiche verranno calcolate in base alla densit&amp;agrave;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="font-family: Verdana;"&gt;&lt;span style="text-decoration: underline;"&gt;Esempio caso 1&lt;/span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table border="0" cellpadding="5" bgcolor="#f2f2f2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;ALTER PROCEDURE&lt;/span&gt; p1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;nbsp;@Valore &lt;span style="color: #0000ff;"&gt;char&lt;/span&gt;(3)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;AS&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; IdRow, Valore&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; t1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; Valore = @Valore&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;OPTION&lt;/span&gt;(&lt;span style="color: #008080;"&gt;OPTIMIZE&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FOR&lt;/span&gt; (@Valore = 'AAA'))&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;GO&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000; font-family: courier new,courier;"&gt;-- Eseguiamola passandogli prima 'CCC' e poi 'BBB'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;EXEC&lt;/span&gt; p1 &lt;span style="color: #ff0000;"&gt;'CCC'&lt;/span&gt; &lt;span style="color: #008000;"&gt;--&amp;gt; 1 riga, stimate 1000&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;EXEC&lt;/span&gt; p1 &lt;span style="color: #ff0000;"&gt;'BBB'&lt;/span&gt; &lt;span style="color: #008000;"&gt;--&amp;gt; 500 righe, stimate 1000&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="font-family: Verdana; font-size: small;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/8524.Piani-esecuzione-optimize-for-AAA.JPG"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/8524.Piani-esecuzione-optimize-for-AAA.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Come si vede, in entrambi i casi l&amp;rsquo;optimizer stima &lt;span style="text-decoration: underline;"&gt;1000 righe&lt;/span&gt; che &amp;egrave; appunto la cardinalit&amp;agrave; del valore &amp;ldquo;AAA&amp;rdquo;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="font-family: Verdana;"&gt;&lt;span style="text-decoration: underline;"&gt;Esempio caso 2&lt;/span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table border="0" cellpadding="5" bgcolor="#f2f2f2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;ALTER PROCEDURE&lt;/span&gt; p1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;nbsp;@Valore char(3)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;AS&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; IdRow, Valore&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; t1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; Valore = @Valore&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;OPTION&lt;/span&gt;(&lt;span style="color: #339966;"&gt;OPTIMIZE&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FOR&lt;/span&gt; UNKNOWN)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;GO&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000; font-family: courier new,courier;"&gt;-- Eseguiamola passandogli i vari valori&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;EXEC&lt;/span&gt; p1 &lt;span style="color: #ff0000;"&gt;'CCC'&lt;/span&gt; &lt;span style="color: #008000;"&gt;--&amp;gt; 1 riga, stimate 500,333&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;EXEC&lt;/span&gt; p1 &lt;span style="color: #ff0000;"&gt;'BBB'&lt;/span&gt; &lt;span style="color: #008000;"&gt;--&amp;gt; 500 righe, stimate 500,333&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;EXEC&lt;/span&gt; p1 &lt;span style="color: #ff0000;"&gt;'AAA'&lt;/span&gt; &lt;span style="color: #008000;"&gt;--&amp;gt; 1000 righe, stimate 500,333&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style="text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/8640.Piani-esecuzione-optimize-for-UNKNOWN.JPG"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/8640.Piani-esecuzione-optimize-for-UNKNOWN.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Come si vede, l&amp;rsquo;optimizer stima le righe in base alla densit&amp;agrave;, ovvero:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table border="0" cellpadding="5" bgcolor="#f2f2f2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: courier new,courier;"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;righe stimate = densit&amp;agrave; x numero righe totali = 0,3333333 x 1501 = &lt;span style="color: #ff0000;"&gt;500,333&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;&lt;em&gt;&lt;span style="text-decoration: underline;"&gt;Ora vi faccio notare qualcosa di interessante&lt;/span&gt;&lt;/em&gt; :-)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Proviamo ad aggiungere un po&amp;rsquo; di valori &lt;strong&gt;NULL&lt;/strong&gt; per il campo &amp;ldquo;Valore&amp;rdquo;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table border="0" cellpadding="5" bgcolor="#f2f2f2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; @i &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; @i = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;WHILE&lt;/span&gt; @i &amp;lt; 2000&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;INSERT INTO&lt;/span&gt; t1 (Valore) &lt;span style="color: #0000ff;"&gt;VALUES&lt;/span&gt; (NULL)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;SET&lt;/span&gt; @i = @i + 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;END&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000; font-family: courier new,courier;"&gt;-- Analizziamo le statistiche&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;UPDATE STATISTICS&lt;/span&gt; t1 &lt;span style="color: #0000ff;"&gt;WITH FULLSCAN&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;DBCC SHOW_STATISTICS&lt;/span&gt; (t1, IX1)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;GO&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-family: Verdana; font-size: small;"&gt;&amp;nbsp;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/1881.Statistiche-con-NULL.JPG"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/1881.Statistiche-con-NULL.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Dalle statistiche possiamo notare la presenza di 2000 valori NULL per il campo &amp;ldquo;Valore&amp;rdquo;. La densit&amp;agrave; &amp;egrave; leggermente diminuita, passando da 0,333 a 0,25.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Ricompiliamo la stored e lanciamola con il parametro CCC:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table border="0" cellpadding="5" bgcolor="#f2f2f2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;EXEC&lt;/span&gt; &lt;span style="color: #800000;"&gt;sp_recompile&lt;/span&gt; p1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;EXEC&lt;/span&gt; p1 &lt;span style="color: #ff0000;"&gt;'CCC'&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-family: Verdana; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Secondo i calcoli fatti in precedenza ci aspetteremmo la seguente stima:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table border="0" cellpadding="5" bgcolor="#f2f2f2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: courier new,courier;"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;densit&amp;agrave; x numero righe totali = 0,25 x 3501 = 875,25&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style="text-align: left;" align="center"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Se guardiamo per&amp;ograve; il piano di esecuzione notiamo che la stima non &amp;egrave; cambiata:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/2110.Piani-esecuzione-dopo-inserimento-NULL.JPG"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/2110.Piani-esecuzione-dopo-inserimento-NULL.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Come mai ha ignorato i valori &lt;em&gt;NULL&lt;/em&gt;?&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;La risposta &amp;egrave; insita nel predicato della query:&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;table border="0" cellpadding="5" bgcolor="#f2f2f2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; Valore = @Valore&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-family: Verdana; font-size: small;"&gt;Nel caso in cui @Valore sia &lt;em&gt;NULL&lt;/em&gt;, la query non restituir&amp;agrave; alcuna riga nonostante vi siano 2000 righe a &lt;em&gt;NULL&lt;/em&gt;, perch&amp;eacute; il risultato del confronto&amp;nbsp;"&lt;span style="font-family: courier new,courier;"&gt;Valore = @Valore&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt; &amp;egrave; valutato come &lt;strong&gt;UNKNOWN&lt;/strong&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;&amp;Egrave; interessante il fatto che l&amp;rsquo;optimizer, conscio di questo fatto, non consideri la cardinalit&amp;agrave; dei valori &lt;em&gt;NULL&lt;/em&gt;, migliorando la stima.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Il calcolo effettuato &amp;egrave;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table border="0" cellpadding="5" bgcolor="#f2f2f2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: courier new,courier;"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;[densit&amp;agrave; dei valori NOT NULL] x [numero righe totali NOT NULL]&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;dove &lt;span style="text-decoration: underline;"&gt;densit&amp;agrave; dei valori NOT NULL&lt;/span&gt; si ottiene facendo l&amp;rsquo;inverso della somma di tutti i valori della colonna &lt;strong&gt;&lt;em&gt;DISTINCT_RANGE_ROWS&lt;/em&gt;&lt;/strong&gt; con l&amp;rsquo;aggiunta del &lt;strong&gt;&lt;em&gt;numero di step &amp;ndash; 1&lt;/em&gt;&lt;/strong&gt; (escludo la riga dei NULL).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Nel nostro caso il calcolo &amp;egrave; &lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;[1/(0+0+0+0+4-1)] x 1501&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Verdana;"&gt;Alla prossima!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;&lt;a title="Giuseppe Zagarrio" href="mailto:giuseppe.zagarrio@microsoft.com"&gt;Giuseppe Zagarrio&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3551934" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/T_2D00_SQL/">T-SQL</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Statistics/">Statistics</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/SQL+Server+2012/">SQL Server 2012</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/OPTIMIZE+FOR/">OPTIMIZE FOR</category></item><item><title>Selective XML Indexes</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2012/12/18/selective-xml-indexes.aspx</link><pubDate>Tue, 18 Dec 2012 10:20:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3541461</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3541461</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2012/12/18/selective-xml-indexes.aspx#comments</comments><description>&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Con il Service Pack 1 di SQL Server 2012 &amp;egrave; stata aggiunta una funzionalit&amp;agrave; molto utile a chi utilizza il tipo nativo di SQL Server dedicato ai documenti XML: gli indici XML selettivi. Questi indici selettivi permettono di specificare quali elementi (o, meglio, &lt;em&gt;percorsi&lt;/em&gt;) da indicizzare in contrasto col l&amp;rsquo;indice primario XML che indicizza tutto il documento. Come potete immaginare, &amp;egrave; evidente che &amp;ndash; a fronte di pattern di ricerca prevedibili &amp;ndash; sia pi&amp;ugrave; efficiente indicizzare solo quei percorsi specifici. &lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Per maggiori dettagli vi rimando all&amp;rsquo;articolo sull&amp;rsquo;MSDN: &lt;a href="http://msdn.microsoft.com/en-us/library/jj670108.aspx"&gt;&lt;span style="color: #0563c1;"&gt;http://msdn.microsoft.com/en-us/library/jj670108.aspx&lt;/span&gt;&lt;/a&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Vediamo insieme un esempio pratico di questo nuovo indice. Per farlo creiamo un database, una tabella molto semplice e popoliamo con XML di esempio. Sottolineo che fra i prerequisiti ci sia la presenza dell&amp;rsquo;indice clustered (&lt;a href="http://msdn.microsoft.com/en-us/library/jj670108.aspx#prereq"&gt;&lt;span style="color: #0563c1;"&gt;http://msdn.microsoft.com/en-us/library/jj670108.aspx#prereq&lt;/span&gt;&lt;/a&gt;). Quindi niente indici XML selettivi su tabelle heap (un motivo in pi&amp;ugrave;&amp;hellip; :)).&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DATABASE&lt;/span&gt; TestSXI&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;USE&lt;/span&gt; TestSXI&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;TABLE&lt;/span&gt; testTbl&lt;span style="color: #308080;"&gt;(&lt;/span&gt;
    &lt;span style="color: #200080; font-weight: bold;"&gt;ID&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;INT&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;IDENTITY&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #008c00;"&gt;1&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt;&lt;span style="color: #008c00;"&gt;1&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;KEY&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;CLUSTERED&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt;
    XmlDoc &lt;span style="color: #200080; font-weight: bold;"&gt;XML&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;INTO&lt;/span&gt; testTbl&lt;span style="color: #308080;"&gt;(&lt;/span&gt;XmlDoc&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;'&amp;lt;Meme xmlns="http://schemas.test.com/xyz"&amp;gt;&lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;&amp;lt;WorkHours&amp;gt;500&amp;lt;/WorkHours&amp;gt;&lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;&amp;lt;TaskName&amp;gt;Mission Xyz III&amp;lt;/TaskName&amp;gt;&lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;&amp;lt;/Meme&amp;gt;'&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt; &lt;span style="color: #008c00;"&gt;500&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;INTO&lt;/span&gt; testTbl&lt;span style="color: #308080;"&gt;(&lt;/span&gt;XmlDoc&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;'&amp;lt;Meme xmlns="http://schemas.test.com/xyz"&amp;gt;&lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;&amp;lt;WorkHours&amp;gt;1&amp;lt;/WorkHours&amp;gt;&lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;&amp;lt;TaskName&amp;gt;Mission Xyz I&amp;lt;/TaskName&amp;gt;&lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;&amp;lt;/Meme&amp;gt;'&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt; 
&lt;span style="color: #200080; font-weight: bold;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;INTO&lt;/span&gt; testTbl&lt;span style="color: #308080;"&gt;(&lt;/span&gt;XmlDoc&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;'&amp;lt;Meme xmlns="http://schemas.test.com/xyz"&amp;gt;&lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;&amp;lt;WorkHours&amp;gt;222&amp;lt;/WorkHours&amp;gt;&lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;&amp;lt;TaskName&amp;gt;Mission Xyz II&amp;lt;/TaskName&amp;gt; &lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;&amp;lt;TaskName&amp;gt;Mind your head!&amp;lt;/TaskName&amp;gt;&lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;&amp;lt;TaskName&amp;gt;No task name&amp;lt;/TaskName&amp;gt;&lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;&amp;lt;/Meme&amp;gt;'&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt; &lt;span style="color: #008c00;"&gt;222&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;INTO&lt;/span&gt; testTbl&lt;span style="color: #308080;"&gt;(&lt;/span&gt;XmlDoc&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;SELECT&lt;/span&gt; XmlDoc &lt;span style="color: #200080; font-weight: bold;"&gt;FROM&lt;/span&gt; testTbl&lt;span style="color: #308080;"&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt; &lt;span style="color: #008c00;"&gt;7&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Come potete notare inseriamo dei documenti che potrebbero avere uno schema simile al seguente:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #004a43;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;xml&lt;/span&gt;&lt;span style="color: #074726;"&gt;version&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #7d0045;"&gt;1.0&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #074726;"&gt;encoding&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;utf-8&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #004a43;"&gt;?&amp;gt;&lt;/span&gt;
&lt;span style="color: #0057a6;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0066ee;"&gt;xs&lt;/span&gt;&lt;span style="color: #406080;"&gt;:&lt;/span&gt;&lt;span style="color: #333385;"&gt;schema&lt;/span&gt; &lt;span style="color: #474796;"&gt;attributeFormDefault&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;unqualified&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt; &lt;span style="color: #474796;"&gt;elementFormDefault&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;qualified&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt; &lt;span style="color: #474796;"&gt;targetNamespace&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;http://schemas.test.com/xyz&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt; &lt;span style="color: #0066ee;"&gt;xmlns&lt;/span&gt;&lt;span style="color: #406080;"&gt;:&lt;/span&gt;&lt;span style="color: #074726;"&gt;xs&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #0066ee;"&gt;http&lt;/span&gt;&lt;span style="color: #406080;"&gt;:&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;//&lt;/span&gt;&lt;span style="color: #5555dd;"&gt;www.w3.org&lt;/span&gt;&lt;span style="color: #40015a;"&gt;/2001/XMLSchema&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #0057a6;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: #0057a6;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0066ee;"&gt;xs&lt;/span&gt;&lt;span style="color: #406080;"&gt;:&lt;/span&gt;&lt;span style="color: #333385;"&gt;element&lt;/span&gt; &lt;span style="color: #474796;"&gt;name&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;Meme&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #0057a6;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0057a6;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0066ee;"&gt;xs&lt;/span&gt;&lt;span style="color: #406080;"&gt;:&lt;/span&gt;&lt;span style="color: #333385;"&gt;complexType&lt;/span&gt;&lt;span style="color: #0057a6;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: #0057a6;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0066ee;"&gt;xs&lt;/span&gt;&lt;span style="color: #406080;"&gt;:&lt;/span&gt;&lt;span style="color: #333385;"&gt;sequence&lt;/span&gt;&lt;span style="color: #0057a6;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0057a6;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0066ee;"&gt;xs&lt;/span&gt;&lt;span style="color: #406080;"&gt;:&lt;/span&gt;&lt;span style="color: #333385;"&gt;element&lt;/span&gt; &lt;span style="color: #474796;"&gt;minOccurs&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;1&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt; &lt;span style="color: #474796;"&gt;maxOccurs&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;1&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt; &lt;span style="color: #474796;"&gt;nillable&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;false&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt; &lt;span style="color: #474796;"&gt;name&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;WorkHours&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt; &lt;span style="color: #474796;"&gt;type&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;xs:integer&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt; &lt;span style="color: #0057a6;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0057a6;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0066ee;"&gt;xs&lt;/span&gt;&lt;span style="color: #406080;"&gt;:&lt;/span&gt;&lt;span style="color: #333385;"&gt;element&lt;/span&gt; &lt;span style="color: #474796;"&gt;minOccurs&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;0&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt; &lt;span style="color: #474796;"&gt;maxOccurs&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;unbounded&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt; &lt;span style="color: #474796;"&gt;nillable&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;false&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt; &lt;span style="color: #474796;"&gt;name&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;TaskName&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt; &lt;span style="color: #474796;"&gt;type&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;xs:string&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;"&lt;/span&gt; &lt;span style="color: #0057a6;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color: #0057a6;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0066ee;"&gt;xs&lt;/span&gt;&lt;span style="color: #406080;"&gt;:&lt;/span&gt;&lt;span style="color: #333385;"&gt;sequence&lt;/span&gt;&lt;span style="color: #0057a6;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0057a6;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0066ee;"&gt;xs&lt;/span&gt;&lt;span style="color: #406080;"&gt;:&lt;/span&gt;&lt;span style="color: #333385;"&gt;complexType&lt;/span&gt;&lt;span style="color: #0057a6;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: #0057a6;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0066ee;"&gt;xs&lt;/span&gt;&lt;span style="color: #406080;"&gt;:&lt;/span&gt;&lt;span style="color: #333385;"&gt;element&lt;/span&gt;&lt;span style="color: #0057a6;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0057a6;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0066ee;"&gt;xs&lt;/span&gt;&lt;span style="color: #406080;"&gt;:&lt;/span&gt;&lt;span style="color: #333385;"&gt;schema&lt;/span&gt;&lt;span style="color: #0057a6;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Fino al Service Pack 1 di SQL Server potevamo solo indicizzare tutto il documento con un indice XML. Ad esempio con:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;XML&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;INDEX&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;PXML_XmlDoc&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;ON&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;dbo&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;testTbl&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;XmlDoc&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: Times New Roman; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Creaimo un indice XML completo.&amp;nbsp; Supponiamo che la nostra query ricorrente sia di questo tipo:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;WITH&lt;/span&gt; XMLNAMESPACES &lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;'http://schemas.test.com/xyz'&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;as&lt;/span&gt; yming&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #7779bb; font-weight: bold;"&gt;COUNT&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;*&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;FROM&lt;/span&gt; testTbl
&lt;span style="color: #200080; font-weight: bold;"&gt;WHERE&lt;/span&gt; XmlDoc&lt;span style="color: #308080;"&gt;.&lt;/span&gt;exist&lt;span style="color: #308080;"&gt;(&lt;/span&gt;N&lt;span style="color: #1060b6;"&gt;'(/yming:Meme/yming:WorkHours[.=222])'&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #008c00;"&gt;1&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Ovviamente sarebbe molto pi&amp;ugrave; efficiente indicizzare il solo percorso che identifica WorkHours dentro il tipo Meme. Per far questo cerchiamo di creare il nostro indice XML selettivo:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;CREATE&lt;/span&gt; SELECTIVE &lt;span style="color: #200080; font-weight: bold;"&gt;XML&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;INDEX&lt;/span&gt; sxi_Test &lt;span style="color: #200080; font-weight: bold;"&gt;ON&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;dbo&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;testTbl&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;XmlDoc&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;WITH&lt;/span&gt; XMLNAMESPACES &lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;'http://schemas.test.com/xyz'&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;as&lt;/span&gt; yming&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;FOR&lt;/span&gt;
&lt;span style="color: #308080;"&gt;(&lt;/span&gt;    
    pathWH2 &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;'/yming:Meme/yming:WorkHours'&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;AS&lt;/span&gt; XQUERY &lt;span style="color: #1060b6;"&gt;'xs:integer'&lt;/span&gt; SINGLETON
&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;SQLMS vi dir&amp;agrave; che non pu&amp;ograve; farlo a meno che voi abilitiate la funzionalit&amp;agrave;: &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #ff0000;"&gt;Msg 9539, Level 16, State 1, Line 1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #ff0000;"&gt;Selective XML Index feature is not supported for the current database version&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: small;"&gt;Per farlo basta eseguire questo comando:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;EXEC&lt;/span&gt; sp_db_selective_xml_index &lt;span style="color: #200080; font-weight: bold;"&gt;NULL&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;'TRUE'&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: Times New Roman; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Perch&amp;eacute; &amp;egrave; necessario abilitare espressamente la funzionalit&amp;agrave;? Questo perch&amp;eacute; abilitando il supporto alla funzionalit&amp;agrave; di indici XML selettivi si &lt;strong&gt;aumenta&lt;/strong&gt; la versione del database. In questo modo SQL garantisce che un database con questa funzionalit&amp;agrave; (che evidentemente &amp;egrave; stata abilitata da un SQL 2012 &lt;em&gt;almeno&lt;/em&gt; SP1) non venga restorato su un SQL che non la supporta (ad esempio, ma non solo, SQL 2012 RTM).&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Per vederlo utilizziamo il comando non documentato n&amp;eacute; supportato DBCC DBINFO (quindi non usatelo se non per scopi didattici!):&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;EXEC&lt;/span&gt; sp_db_selective_xml_index &lt;span style="color: #200080; font-weight: bold;"&gt;NULL&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;'TRUE'&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;DBCC&lt;/span&gt; DBINFO&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;'TestSXI'&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;WITH&lt;/span&gt; TABLERESULTS&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;EXEC&lt;/span&gt; sp_db_selective_xml_index &lt;span style="color: #200080; font-weight: bold;"&gt;NULL&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;'FALSE'&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;DBCC&lt;/span&gt; DBINFO&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;'TestSXI'&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;WITH&lt;/span&gt; TABLERESULTS&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: Times New Roman; font-size: small;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/4276.dbv00.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/4276.dbv00.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: Times New Roman; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;Per maggiori informazioni vi rimando a questo post di Igor: &lt;/span&gt;&lt;a href="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/12/14/il-falso-mito-della-migrazione-da-una-versione-di-sql-all-altra.aspx"&gt;&lt;span style="color: #0563c1; font-size: small;"&gt;http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/12/14/il-falso-mito-della-migrazione-da-una-versione-di-sql-all-altra.aspx&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Abilitato il supporto alla nuova funzionalit&amp;agrave; riproviamo a creare l&amp;rsquo;indice XML selettivo. Notiamo come venga specificato l&amp;rsquo;attributo SINGLETON per migliorare le performance di SQL. Questo attributo equivale a maxOccurs=&amp;rdquo;1&amp;rdquo; dell&amp;rsquo;XSD. &lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/3554.00.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/3554.00.png" alt="" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;SQL anche in questo caso non ci permette di creare l&amp;rsquo;indice. Questa volta &amp;egrave; perch&amp;eacute; abbiamo scelto un tipo non supportato per gli indici XML selettivi su XML untyped. Qui &amp;egrave; chiaramente dettagliato l&amp;rsquo;elenco supportato: &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/jj670107.aspx#untyped"&gt;&lt;span style="color: #0563c1; font-size: small;"&gt;http://msdn.microsoft.com/en-us/library/jj670107.aspx#untyped&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt; . Essi sono:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;xs:boolean&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;xs:double&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;xs:string&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;xs:date&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;xs:time&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;xs:dateTime&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Per i nostri scopi scegliamo xs:string e riproviamo:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;CREATE&lt;/span&gt; SELECTIVE &lt;span style="color: #200080; font-weight: bold;"&gt;XML&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;INDEX&lt;/span&gt; sxi_Test &lt;span style="color: #200080; font-weight: bold;"&gt;ON&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;dbo&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;testTbl&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;XmlDoc&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;WITH&lt;/span&gt; XMLNAMESPACES &lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;'http://schemas.test.com/xyz'&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;as&lt;/span&gt; yming&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;FOR&lt;/span&gt;
&lt;span style="color: #308080;"&gt;(&lt;/span&gt;    
    pathWH2 &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;'/yming:Meme/yming:WorkHours'&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;AS&lt;/span&gt; XQUERY &lt;span style="color: #1060b6;"&gt;'xs:string'&lt;/span&gt; SINGLETON
&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: Times New Roman; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Questa volta abbiamo successo. &lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;Per testare l&amp;rsquo;efficacia dell&amp;rsquo;indice effettuiamo nuovamente la nostra query (dopo avere abilitato le statistiche con &lt;/span&gt;SET STATISTICS IO ON &lt;span style="font-size: small;"&gt;e aver abilitato la visualizzazione del piano di esecuzione effettivo in SSMS). Per vedere l&amp;rsquo;incremento di performance eseguiamo la query due volte nello stesso batch. Fra una esecuzione e l&amp;rsquo;altra droppiamo l&amp;rsquo;indice XML selettivo (per il momento non possiamo usare i query hints).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;WITH&lt;/span&gt; XMLNAMESPACES &lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;'http://schemas.test.com/xyz'&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;as&lt;/span&gt; yming&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #7779bb; font-weight: bold;"&gt;COUNT&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;*&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;FROM&lt;/span&gt; testTbl
&lt;span style="color: #200080; font-weight: bold;"&gt;WHERE&lt;/span&gt; XmlDoc&lt;span style="color: #308080;"&gt;.&lt;/span&gt;exist&lt;span style="color: #308080;"&gt;(&lt;/span&gt;N&lt;span style="color: #1060b6;"&gt;'(/yming:Meme/yming:WorkHours[.=222])'&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #008c00;"&gt;1&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;DROP&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;INDEX&lt;/span&gt; sxi_Test &lt;span style="color: #200080; font-weight: bold;"&gt;ON&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;dbo&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;testTbl&lt;span style="color: #308080;"&gt;]&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;WITH&lt;/span&gt; XMLNAMESPACES &lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;'http://schemas.test.com/xyz'&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;as&lt;/span&gt; yming&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #7779bb; font-weight: bold;"&gt;COUNT&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;*&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;FROM&lt;/span&gt; testTbl
&lt;span style="color: #200080; font-weight: bold;"&gt;WHERE&lt;/span&gt; XmlDoc&lt;span style="color: #308080;"&gt;.&lt;/span&gt;exist&lt;span style="color: #308080;"&gt;(&lt;/span&gt;N&lt;span style="color: #1060b6;"&gt;'(/yming:Meme/yming:WorkHours[.=222])'&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #008c00;"&gt;1&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/5670.01.png"&gt;&lt;img style="margin-right: auto; margin-left: auto; display: block;" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/5670.01.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Notiamo anche la differenza tangibile di IO:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/3568.02.png"&gt;&lt;img style="margin-right: auto; margin-left: auto; display: block;" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/3568.02.png" alt="" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Happy Coding,&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;&lt;a title="Francesco Cogno" href="mailto:francesco.cogno@microsoft.com"&gt;Francesco Cogno&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3541461" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/T_2D00_SQL/">T-SQL</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/XML/">XML</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/XSD/">XSD</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Performance/">Performance</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/SQL+Server+2012/">SQL Server 2012</category></item><item><title>Entity Framework 5.0 e Microsoft SQL Server (parte 1)</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2012/11/19/entity-framework-5-0-e-microsoft-sql-server-parte-1.aspx</link><pubDate>Mon, 19 Nov 2012 16:05:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3533333</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3533333</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2012/11/19/entity-framework-5-0-e-microsoft-sql-server-parte-1.aspx#comments</comments><description>&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;"&gt;Oggi esploreremo il comportamento delle EntityFramework 5.0 su SQL Server, in particolare il comportamento che si ha utilizzando l&amp;rsquo;approccio Code First. &lt;/span&gt;&lt;span style="font-family: verdana,geneva;"&gt;Per questo esempio creiamo un progetto console con Visual Studio e aggiungiamo (tramite NUGet ad esempio) i riferimenti ad EntityFramework:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/3531.00.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/3531.00.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Ora aggiungiamo due entit&amp;agrave; (classi), una chiamata Crewman:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Collections&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Generic&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Linq&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Text&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Threading&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Tasks&lt;span style="color: #406080;"&gt;;&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;namespace&lt;/span&gt; ConsoleApplication3
&lt;span style="color: #406080;"&gt;{&lt;/span&gt;
    &lt;span style="color: #200080; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;class&lt;/span&gt; Crewman
    &lt;span style="color: #406080;"&gt;{&lt;/span&gt;
        &lt;span style="color: #200080; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;int&lt;/span&gt; ID &lt;span style="color: #406080;"&gt;{&lt;/span&gt; get&lt;span style="color: #406080;"&gt;;&lt;/span&gt; set&lt;span style="color: #406080;"&gt;;&lt;/span&gt; &lt;span style="color: #406080;"&gt;}&lt;/span&gt;

        &lt;span style="color: #200080; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;string&lt;/span&gt; Name &lt;span style="color: #406080;"&gt;{&lt;/span&gt; get&lt;span style="color: #406080;"&gt;;&lt;/span&gt; set&lt;span style="color: #406080;"&gt;;&lt;/span&gt; &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
        &lt;span style="color: #200080; font-weight: bold;"&gt;public&lt;/span&gt; Rank Rank &lt;span style="color: #406080;"&gt;{&lt;/span&gt; get&lt;span style="color: #406080;"&gt;;&lt;/span&gt; set&lt;span style="color: #406080;"&gt;;&lt;/span&gt; &lt;span style="color: #406080;"&gt;}&lt;/span&gt;

        &lt;span style="color: #200080; font-weight: bold;"&gt;public&lt;/span&gt; Crewman ReportingOfficier &lt;span style="color: #406080;"&gt;{&lt;/span&gt; get&lt;span style="color: #406080;"&gt;;&lt;/span&gt; set&lt;span style="color: #406080;"&gt;;&lt;/span&gt; &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
    &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
&lt;span style="color: #406080;"&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&amp;nbsp;E l&amp;rsquo;altra chiamata StarShip:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Collections&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Generic&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Linq&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Text&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Threading&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Tasks&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Data&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Entity&lt;span style="color: #406080;"&gt;;&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;namespace&lt;/span&gt; ConsoleApplication3
&lt;span style="color: #406080;"&gt;{&lt;/span&gt;
    &lt;span style="color: #200080; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;class&lt;/span&gt; Starship
    &lt;span style="color: #406080;"&gt;{&lt;/span&gt;
        &lt;span style="color: #200080; font-weight: bold;"&gt;public&lt;/span&gt; Starship&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
        &lt;span style="color: #406080;"&gt;{&lt;/span&gt;
            Crew &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;new&lt;/span&gt; List&lt;span style="color: #308080;"&gt;&amp;lt;&lt;/span&gt;Crewman&lt;span style="color: #308080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
        &lt;span style="color: #406080;"&gt;}&lt;/span&gt;

        &lt;span style="color: #200080; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;int&lt;/span&gt; ID &lt;span style="color: #406080;"&gt;{&lt;/span&gt; get&lt;span style="color: #406080;"&gt;;&lt;/span&gt; set&lt;span style="color: #406080;"&gt;;&lt;/span&gt; &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
        
        &lt;span style="color: #200080; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;string&lt;/span&gt; Name &lt;span style="color: #406080;"&gt;{&lt;/span&gt; get&lt;span style="color: #406080;"&gt;;&lt;/span&gt; set&lt;span style="color: #406080;"&gt;;&lt;/span&gt; &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
        &lt;span style="color: #200080; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;string&lt;/span&gt; Designation &lt;span style="color: #406080;"&gt;{&lt;/span&gt; get&lt;span style="color: #406080;"&gt;;&lt;/span&gt; set&lt;span style="color: #406080;"&gt;;&lt;/span&gt; &lt;span style="color: #406080;"&gt;}&lt;/span&gt;

        &lt;span style="color: #200080; font-weight: bold;"&gt;public&lt;/span&gt; List&lt;span style="color: #308080;"&gt;&amp;lt;&lt;/span&gt;Crewman&lt;span style="color: #308080;"&gt;&amp;gt;&lt;/span&gt; Crew &lt;span style="color: #406080;"&gt;{&lt;/span&gt; get&lt;span style="color: #406080;"&gt;;&lt;/span&gt; set&lt;span style="color: #406080;"&gt;;&lt;/span&gt; &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
    &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
&lt;span style="color: #406080;"&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&amp;nbsp;Il tipo Rank &amp;egrave; un enumerato cos&amp;igrave; definito:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;enum&lt;/span&gt; Rank
    &lt;span style="color: #406080;"&gt;{&lt;/span&gt;
        Captain&lt;span style="color: #308080;"&gt;,&lt;/span&gt; FirstOfficer&lt;span style="color: #308080;"&gt;,&lt;/span&gt; ChiefEngineer&lt;span style="color: #308080;"&gt;,&lt;/span&gt; Crewman&lt;span style="color: #308080;"&gt;,&lt;/span&gt; Medic
    &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Notiamo come abbiamo deliberatamente sempre specificato una propriet&amp;agrave; pubblica di tipo int con nome ID. Inoltre notiamo come abbiamo creato una relazione fra le entit&amp;agrave; semplicemente definendo una propriet&amp;agrave; come enumerabile di Crewman. Nel modello relazionale potremmo dire che l&amp;rsquo;entit&amp;agrave; Starship ha 0..&amp;infin; Crewman. Inoltre possiamo dire che ciascun Crewman pu&amp;ograve; avere un Crewman ReportingOfficier.&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Per rendere persistenti le entit&amp;agrave; definiamo una estensione di DbContext in questo modo:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Collections&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Generic&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Linq&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Text&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Threading&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Tasks&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Data&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Entity&lt;span style="color: #406080;"&gt;;&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;namespace&lt;/span&gt; ConsoleApplication3
&lt;span style="color: #406080;"&gt;{&lt;/span&gt;    
    &lt;span style="color: #200080; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;class&lt;/span&gt; StarFleet &lt;span style="color: #308080;"&gt;:&lt;/span&gt; DbContext
    &lt;span style="color: #406080;"&gt;{&lt;/span&gt;
        &lt;span style="color: #200080; font-weight: bold;"&gt;public&lt;/span&gt; DbSet&lt;span style="color: #308080;"&gt;&amp;lt;&lt;/span&gt;Starship&lt;span style="color: #308080;"&gt;&amp;gt;&lt;/span&gt; StarShips &lt;span style="color: #406080;"&gt;{&lt;/span&gt; get&lt;span style="color: #406080;"&gt;;&lt;/span&gt; set&lt;span style="color: #406080;"&gt;;&lt;/span&gt; &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
        &lt;span style="color: #200080; font-weight: bold;"&gt;public&lt;/span&gt; DbSet&lt;span style="color: #308080;"&gt;&amp;lt;&lt;/span&gt;Crewman&lt;span style="color: #308080;"&gt;&amp;gt;&lt;/span&gt; Crew &lt;span style="color: #406080;"&gt;{&lt;/span&gt; get&lt;span style="color: #406080;"&gt;;&lt;/span&gt; set&lt;span style="color: #406080;"&gt;;&lt;/span&gt; &lt;span style="color: #406080;"&gt;}&lt;/span&gt;

        &lt;span style="color: #200080; font-weight: bold;"&gt;public&lt;/span&gt; StarFleet&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;string&lt;/span&gt; nameOrConnectionString&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
            &lt;span style="color: #308080;"&gt;:&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;base&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;nameOrConnectionString&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
        &lt;span style="color: #406080;"&gt;{&lt;/span&gt; &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
    &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
&lt;span style="color: #406080;"&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Notiamo l&amp;rsquo;utilizzo dell&amp;rsquo;insieme DbSet per le propriet&amp;agrave; pubbliche da persistere su SQL Server. A questo punto l&amp;rsquo;utilizzo &amp;egrave; semplice, nel metodo main della nostra classe console creiamo una istanza di StarFleet (con il puntamento ad una nostra istanza di SQL) e popoliamola con dati fittizi:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Collections&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Generic&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Linq&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Text&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;using&lt;/span&gt; System&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Threading&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Tasks&lt;span style="color: #406080;"&gt;;&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;namespace&lt;/span&gt; ConsoleApplication3
&lt;span style="color: #406080;"&gt;{&lt;/span&gt;
    &lt;span style="color: #200080; font-weight: bold;"&gt;class&lt;/span&gt; Program
    &lt;span style="color: #406080;"&gt;{&lt;/span&gt;
        &lt;span style="color: #200080; font-weight: bold;"&gt;static&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;void&lt;/span&gt; Main&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;string&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt; args&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
        &lt;span style="color: #406080;"&gt;{&lt;/span&gt;
            &lt;span style="color: #200080; font-weight: bold;"&gt;try&lt;/span&gt;
            &lt;span style="color: #406080;"&gt;{&lt;/span&gt;
                StarFleet sf &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;new&lt;/span&gt; StarFleet&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;Server=&amp;rdquo;ServerHere&amp;rdquo;;Database=TestEFCF;Trusted_Connection=True&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;

                &lt;span style="color: #406080;"&gt;{&lt;/span&gt;
                    Crewman cKirk &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;new&lt;/span&gt; Crewman&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #406080;"&gt;{&lt;/span&gt; Name &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;J.T. Kirk&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; Rank &lt;span style="color: #308080;"&gt;=&lt;/span&gt; ConsoleApplication3&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Rank&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Captain &lt;span style="color: #406080;"&gt;}&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
                    Crewman cSpock &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;new&lt;/span&gt; Crewman&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #406080;"&gt;{&lt;/span&gt; Name &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;Spock&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; Rank &lt;span style="color: #308080;"&gt;=&lt;/span&gt; ConsoleApplication3&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Rank&lt;span style="color: #308080;"&gt;.&lt;/span&gt;FirstOfficer&lt;span style="color: #308080;"&gt;,&lt;/span&gt; ReportingOfficier &lt;span style="color: #308080;"&gt;=&lt;/span&gt; cKirk &lt;span style="color: #406080;"&gt;}&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
                    Crewman cBones &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;new&lt;/span&gt; Crewman&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #406080;"&gt;{&lt;/span&gt; Name &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;Leonard McCoy&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; Rank &lt;span style="color: #308080;"&gt;=&lt;/span&gt; ConsoleApplication3&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Rank&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Medic&lt;span style="color: #308080;"&gt;,&lt;/span&gt; ReportingOfficier &lt;span style="color: #308080;"&gt;=&lt;/span&gt; cKirk &lt;span style="color: #406080;"&gt;}&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;

                    Starship s &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;new&lt;/span&gt; Starship&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #406080;"&gt;{&lt;/span&gt; Name &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;USS Enterprise A&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #406080;"&gt;}&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
                    s&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Crew&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Add&lt;span style="color: #308080;"&gt;(&lt;/span&gt;cKirk&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
                    s&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Crew&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Add&lt;span style="color: #308080;"&gt;(&lt;/span&gt;cSpock&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
                    s&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Crew&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Add&lt;span style="color: #308080;"&gt;(&lt;/span&gt;cBones&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;

                    sf&lt;span style="color: #308080;"&gt;.&lt;/span&gt;StarShips&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Add&lt;span style="color: #308080;"&gt;(&lt;/span&gt;s&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
                &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
                &lt;span style="color: #595979;"&gt;//-----------------------------&lt;/span&gt;
                &lt;span style="color: #406080;"&gt;{&lt;/span&gt;
                    Crewman cPicard &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;new&lt;/span&gt; Crewman&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #406080;"&gt;{&lt;/span&gt; Name &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;Jean Luc Picard&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; Rank &lt;span style="color: #308080;"&gt;=&lt;/span&gt; ConsoleApplication3&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Rank&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Captain &lt;span style="color: #406080;"&gt;}&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
                    Crewman cData &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;new&lt;/span&gt; Crewman&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #406080;"&gt;{&lt;/span&gt; Name &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;Data&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; Rank &lt;span style="color: #308080;"&gt;=&lt;/span&gt; ConsoleApplication3&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Rank&lt;span style="color: #308080;"&gt;.&lt;/span&gt;FirstOfficer&lt;span style="color: #308080;"&gt;,&lt;/span&gt; ReportingOfficier &lt;span style="color: #308080;"&gt;=&lt;/span&gt; cPicard &lt;span style="color: #406080;"&gt;}&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
                    Crewman cCrusher &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;new&lt;/span&gt; Crewman&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #406080;"&gt;{&lt;/span&gt; Name &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;Wesley Crusher&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; Rank &lt;span style="color: #308080;"&gt;=&lt;/span&gt; ConsoleApplication3&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Rank&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Captain&lt;span style="color: #308080;"&gt;,&lt;/span&gt; ReportingOfficier &lt;span style="color: #308080;"&gt;=&lt;/span&gt; cData &lt;span style="color: #406080;"&gt;}&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
                    Starship s2 &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;new&lt;/span&gt; Starship&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #406080;"&gt;{&lt;/span&gt; Name &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;USS Enterprise C&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #406080;"&gt;}&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
                    s2&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Crew&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Add&lt;span style="color: #308080;"&gt;(&lt;/span&gt;cPicard&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
                    s2&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Crew&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Add&lt;span style="color: #308080;"&gt;(&lt;/span&gt;cData&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
                    s2&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Crew&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Add&lt;span style="color: #308080;"&gt;(&lt;/span&gt;cCrusher&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;

                    sf&lt;span style="color: #308080;"&gt;.&lt;/span&gt;StarShips&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Add&lt;span style="color: #308080;"&gt;(&lt;/span&gt;s2&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
                &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
                &lt;span style="color: #595979;"&gt;//------------------------------&lt;/span&gt;
                sf&lt;span style="color: #308080;"&gt;.&lt;/span&gt;SaveChanges&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;

            &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
            &lt;span style="color: #200080; font-weight: bold;"&gt;catch&lt;/span&gt; &lt;span style="color: #308080;"&gt;(&lt;/span&gt;Exception exce&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
            &lt;span style="color: #406080;"&gt;{&lt;/span&gt;
                Console&lt;span style="color: #308080;"&gt;.&lt;/span&gt;WriteLine&lt;span style="color: #308080;"&gt;(&lt;/span&gt;exce&lt;span style="color: #308080;"&gt;.&lt;/span&gt;ToString&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #406080;"&gt;;&lt;/span&gt;
            &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
        &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
    &lt;span style="color: #406080;"&gt;}&lt;/span&gt;
&lt;span style="color: #406080;"&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Notiamo subito che il Database non &amp;egrave; necessario che esista: in caso negativo il framework cercher&amp;agrave; di crearne uno ex-novo (ovviamente&amp;nbsp;la login&amp;nbsp;deve possedere&amp;nbsp;i relativi privilegi perch&amp;eacute; questa creazione vada a buon fine). Eseguendo il programma otterremo un database con le seguenti tabelle:&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/1464.01.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/1464.01.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/3073.02.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/3073.02.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/1307.03.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/1307.03.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Ma cosa succeed dietro le quinte? Attiviamo una sessione di eXtended Events (non pi&amp;ugrave; profiler :)) usando il template &amp;ldquo;Query detail tacking&amp;rdquo;:&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/2821.04.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/2821.04.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Rieseguiamo il programma (supponendo di aver ripulito il db) e vedremo che i passi effettuati dall&amp;rsquo;entity framework (tralasciamo la tabella [dbo].[__MigrationHistory] che &amp;egrave; privata del framework e non ci interessa in questo contesto).&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Vedendo che non esistono le tabelle richieste, il framework le crea per noi:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;TABLE&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;dbo&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;Starships&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #308080;"&gt;(&lt;/span&gt;      
    &lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;ID&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;NOT&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;NULL&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;IDENTITY&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt;      
    &lt;span style="color: #308080;"&gt;[&lt;/span&gt;Name&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;nvarchar&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #7779bb; font-weight: bold;"&gt;max&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt;      
    &lt;span style="color: #308080;"&gt;[&lt;/span&gt;Designation&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;nvarchar&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #7779bb; font-weight: bold;"&gt;max&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt;      
    &lt;span style="color: #200080; font-weight: bold;"&gt;CONSTRAINT&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;PK_dbo&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Starships&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;KEY&lt;/span&gt; &lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;ID&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;  
    &lt;span style="color: #308080;"&gt;)&lt;/span&gt; 

&lt;span style="color: #200080; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;TABLE&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;dbo&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;Crewmen&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #308080;"&gt;(&lt;/span&gt;      
    &lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;ID&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;NOT&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;NULL&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;IDENTITY&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt;      
    &lt;span style="color: #308080;"&gt;[&lt;/span&gt;Name&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;nvarchar&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #7779bb; font-weight: bold;"&gt;max&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt;      
    &lt;span style="color: #308080;"&gt;[&lt;/span&gt;Rank&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;NOT&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;NULL&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt;      
    &lt;span style="color: #308080;"&gt;[&lt;/span&gt;ReportingOfficier_ID&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt;      
    &lt;span style="color: #308080;"&gt;[&lt;/span&gt;Starship_ID&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt;      
    &lt;span style="color: #200080; font-weight: bold;"&gt;CONSTRAINT&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;PK_dbo&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Crewmen&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;KEY&lt;/span&gt; &lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;ID&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&amp;nbsp;In&amp;nbsp;seguito vengono creati gli indici:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;INDEX&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;IX_ReportingOfficier_ID&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;ON&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;dbo&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;Crewmen&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;ReportingOfficier_ID&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; 

&lt;span style="color: #200080; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;INDEX&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;IX_Starship_ID&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;ON&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;dbo&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;Crewmen&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;Starship_ID&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;E poi le constraint:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;TABLE&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;dbo&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;Crewmen&lt;span style="color: #308080;"&gt;]&lt;/span&gt; 
&lt;span style="color: #200080; font-weight: bold;"&gt;ADD&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;CONSTRAINT&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;FK_dbo&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Crewmen_dbo&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Crewmen_ReportingOfficier_ID&lt;span style="color: #308080;"&gt;]&lt;/span&gt; 
&lt;span style="color: #200080; font-weight: bold;"&gt;FOREIGN&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;KEY&lt;/span&gt; &lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;ReportingOfficier_ID&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;REFERENCES&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;dbo&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;Crewmen&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;ID&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; 


&lt;span style="color: #200080; font-weight: bold;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;TABLE&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;dbo&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;Crewmen&lt;span style="color: #308080;"&gt;]&lt;/span&gt; 
&lt;span style="color: #200080; font-weight: bold;"&gt;ADD&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;CONSTRAINT&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;FK_dbo&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Crewmen_dbo&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Starships_Starship_ID&lt;span style="color: #308080;"&gt;]&lt;/span&gt; 
&lt;span style="color: #200080; font-weight: bold;"&gt;FOREIGN&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;KEY&lt;/span&gt; &lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;Starship_ID&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;REFERENCES&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;dbo&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;Starships&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;ID&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Notiamo subito un paio cose interssanti:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;L&amp;rsquo;ordine di creazione delle tabelle &amp;egrave; quello relazionale e &lt;em&gt;non&lt;/em&gt; quello del codice.&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;L&amp;rsquo;entity framework crea per noi gli indici sulla chiave esterna.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Mentre la prima &amp;egrave; attesa, la seconda &amp;egrave; una ottima notizia: utilizzando SSMS 2012 avremmo avuto &lt;strong&gt;solo &lt;/strong&gt;la constraint e non l&amp;rsquo;indice:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #595979;"&gt;/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;BEGIN&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;TRANSACTION&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;SET&lt;/span&gt; QUOTED_IDENTIFIER &lt;span style="color: #200080; font-weight: bold;"&gt;ON&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;SET&lt;/span&gt; ARITHABORT &lt;span style="color: #200080; font-weight: bold;"&gt;ON&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;SET&lt;/span&gt; NUMERIC_ROUNDABORT &lt;span style="color: #200080; font-weight: bold;"&gt;OFF&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;SET&lt;/span&gt; CONCAT_NULL_YIELDS_NULL &lt;span style="color: #200080; font-weight: bold;"&gt;ON&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;SET&lt;/span&gt; ANSI_NULLS &lt;span style="color: #200080; font-weight: bold;"&gt;ON&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;SET&lt;/span&gt; ANSI_PADDING &lt;span style="color: #200080; font-weight: bold;"&gt;ON&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;SET&lt;/span&gt; ANSI_WARNINGS &lt;span style="color: #200080; font-weight: bold;"&gt;ON&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;COMMIT&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;BEGIN&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;TRANSACTION&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;TABLE&lt;/span&gt; dbo&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Starships &lt;span style="color: #200080; font-weight: bold;"&gt;SET&lt;/span&gt; &lt;span style="color: #308080;"&gt;(&lt;/span&gt;LOCK_ESCALATION &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;COMMIT&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;BEGIN&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;TRANSACTION&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;TABLE&lt;/span&gt; dbo&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Crewmen &lt;span style="color: #200080; font-weight: bold;"&gt;ADD&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;CONSTRAINT&lt;/span&gt;
    FK_Crewmen_Starships &lt;span style="color: #200080; font-weight: bold;"&gt;FOREIGN&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;KEY&lt;/span&gt;
    &lt;span style="color: #308080;"&gt;(&lt;/span&gt;
    Starship_ID
    &lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;REFERENCES&lt;/span&gt; dbo&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Starships
    &lt;span style="color: #308080;"&gt;(&lt;/span&gt;
    &lt;span style="color: #200080; font-weight: bold;"&gt;ID&lt;/span&gt;
    &lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;ON&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;UPDATE&lt;/span&gt;  &lt;span style="color: #200080; font-weight: bold;"&gt;NO&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;ACTION&lt;/span&gt; 
     &lt;span style="color: #200080; font-weight: bold;"&gt;ON&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DELETE&lt;/span&gt;  &lt;span style="color: #200080; font-weight: bold;"&gt;NO&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;ACTION&lt;/span&gt; 
    
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;TABLE&lt;/span&gt; dbo&lt;span style="color: #308080;"&gt;.&lt;/span&gt;Crewmen &lt;span style="color: #200080; font-weight: bold;"&gt;SET&lt;/span&gt; &lt;span style="color: #308080;"&gt;(&lt;/span&gt;LOCK_ESCALATION &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;COMMIT&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Gli inserimenti avvengono in questa maniera:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;exec&lt;/span&gt; sp_executesql N&lt;span style="color: #1060b6;"&gt;'insert [dbo].[Crewmen]([Name], [Rank], [ReportingOfficier_ID], [Starship_ID])&lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;values (@0, @1, @2, @3)&lt;/span&gt;

&lt;span style="color: #1060b6;"&gt;select [ID]&lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;from [dbo].[Crewmen]&lt;/span&gt;
&lt;span style="color: #1060b6;"&gt;where @@ROWCOUNT &amp;gt; 0 and [ID] = scope_identity()'&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt;

N&lt;span style="color: #1060b6;"&gt;'@0 nvarchar(max) ,@1 int,@2 int,@3 int'&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt;
&lt;span style="color: #007d45;"&gt;@0&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;N&lt;span style="color: #1060b6;"&gt;'Leonard McCoy'&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt;
&lt;span style="color: #007d45;"&gt;@1&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #008c00;"&gt;4&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt;
&lt;span style="color: #007d45;"&gt;@2&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #008c00;"&gt;3&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt;
&lt;span style="color: #007d45;"&gt;@3&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #008c00;"&gt;1&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Notiamo come ogni inserimento siano in realt&amp;agrave; due statement separati:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;insert&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;dbo&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;Crewmen&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;Name&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;Rank&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;ReportingOfficier_ID&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;Starship_ID&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;values&lt;/span&gt; &lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #007d45;"&gt;@0&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #007d45;"&gt;@1&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #007d45;"&gt;@2&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #007d45;"&gt;@3&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;select&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;ID&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt;  &lt;span style="color: #200080; font-weight: bold;"&gt;from&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;dbo&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;Crewmen&lt;span style="color: #308080;"&gt;]&lt;/span&gt;  &lt;span style="color: #200080; font-weight: bold;"&gt;where&lt;/span&gt; &lt;span style="color: #007d45;"&gt;@@ROWCOUNT&lt;/span&gt; &lt;span style="color: #308080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #008c00;"&gt;0&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;and&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;ID&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #7779bb; font-weight: bold;"&gt;scope_identity&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;(NB: potreste vedere comparire anche un SELECT StatMan([SC0])&amp;hellip; ma questo non &amp;egrave; dovuto ovviamente a EF).&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Evidentemente EF usa il secondo statement per sincronizzare l&amp;rsquo;entit&amp;agrave; persisita via codice con l&amp;rsquo;ID generato da SQL. Domanda: come mai l&amp;rsquo;EF non usa la clausola OUTPUT? &lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;La risposta pi&amp;ugrave; probabile &amp;egrave; che si aspetti zero record in caso di fallimento (da where @@ROWCOUNT &amp;gt; 0) mentre lo statement OUTPUT restituisce righe anche se l&amp;rsquo;operazione fallisce. Per maggiori dettagli vedere &lt;a href="http://msdn.microsoft.com/en-us/library/ms177564(v=sql.110).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms177564(v=sql.110).aspx&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Nei post successivi continueremo con l&amp;rsquo;analisi delle interazioni EF5.0-SQL.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Happy coding,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Francesco Cogno&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3533333" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/T_2D00_SQL/">T-SQL</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/C_2300_/">C#</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Entity+Framework/">Entity Framework</category></item><item><title>Contained database authentication e user with password con SID identici</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2012/11/07/contained-database-authentication-e-user-with-password-con-sid-identici.aspx</link><pubDate>Wed, 07 Nov 2012 10:58:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3531065</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3531065</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2012/11/07/contained-database-authentication-e-user-with-password-con-sid-identici.aspx#comments</comments><description>&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Con SQL 2012 &amp;egrave; possibile creare user che si autenticano direttamente nei database. In SSMS li vediamo nominati &amp;ldquo;user with password&amp;rdquo;. Questa modalit&amp;agrave;, molto utile per l&amp;rsquo;indipendenza del database dall&amp;rsquo;istanza su cui riesiede, ha tuttavia alcuni effetti collaterali. Il pi&amp;ugrave; evidente &amp;egrave; il cosiddetto &amp;ldquo;login masquerading&amp;rdquo; dovuto all&amp;rsquo;algoritmo di probing di SQL in fase di autenticazione (maggiori informazioni qui &lt;a href="http://msdn.microsoft.com/it-it/library/ff929055.aspx"&gt;&lt;span style="color: #0563c1;"&gt;http://msdn.microsoft.com/it-it/library/ff929055.aspx&lt;/span&gt;&lt;/a&gt;). In parole povere &amp;egrave; possibile creare uno user with password con lo stesso nome di una login a livello d&amp;rsquo;istanza. SQL Server sceglier&amp;agrave; di autenticare &lt;em&gt;prima&lt;/em&gt; lo user with password se:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&amp;Egrave; specificato un initial database nella stringa di connessione.&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;L&amp;rsquo;initial database ha il supporto al contenimento parziale attivato.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Capite bene che ci&amp;ograve; vuol dire che l&amp;rsquo;identit&amp;agrave; presentata a SQL non &amp;egrave; pi&amp;ugrave; la coppia username-password ma diventa la tupla username-password-initial database. &lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Non gestendo correttamente questa nuova modalit&amp;agrave; ci si espone ovviamente a diversi rischi. &lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Oggi per&amp;ograve; voglio parlarvi di uno scenario proposto da un cliente particolarmente brillante: cosa succede se io creo due user with password con &lt;span style="text-decoration: underline;"&gt;&lt;span style="font-family: courier new,courier;"&gt;SID&lt;/span&gt; identici &lt;/span&gt;su due diversi database? Supponendo che insistano sulla stessa istanza, posso usare lo statement &lt;span style="font-family: courier new,courier;"&gt;USE [database]&lt;/span&gt; per passare da uno all&amp;rsquo;altro?&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Ovviamente se cos&amp;igrave; fosse sarebbe un problema di sicurezza non trascurabile: ad esempio restorando in produzione un database si potrebbe aprire una porta di accesso ad altri database preesistenti. Lo scenario sarebbe:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;In produzione esiste un database (chiamato Prod) con autenticazione autocontenuta.&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Su Prod esiste uno user with password che ha i permessi di &lt;span style="font-family: courier new,courier;"&gt;db_owner&lt;/span&gt;. La password, ovviamente, &amp;egrave; criptata e segretata. Il &lt;span style="font-family: courier new,courier;"&gt;SID&lt;/span&gt; dello user, invece, &amp;egrave; in chiaro e facilmente ottenibile.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;A questo punto avviene questo:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;In sviluppo viene creato un db (chiamato Dev) con autenticazione autocontenuta.&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Lo sviluppatore aggiunge una login with password con il &lt;span style="font-family: courier new,courier;"&gt;SID&lt;/span&gt; dello user di Prod (sintassi &lt;span style="font-family: courier new,courier;"&gt;CREATE USER &amp;hellip; WITH SID=&amp;hellip;&lt;/span&gt;). Lo chiamiamo SvilLogin.&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Lo sviluppatore chiede il restore di Svil sulla stessa istanza di Prod.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Ci&amp;ograve; che suddede (correttamente) &amp;egrave; che sar&amp;agrave; possibile collegarsi a Svil in produzione utilizzando SvilLogin.&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Ci&amp;ograve; che non deve succedere &amp;egrave; che sia possibile accedere a Prod autenticandosi su Svil. Di fatto &lt;span style="font-family: courier new,courier;"&gt;USE Prod&lt;/span&gt; deve fallire in questo contesto.&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Controlliamo che ci&amp;ograve; non succeda. Creiamo per prima cosa due DB con autenticazione autocontenuta:&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DATABASE&lt;/span&gt; Cont1&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DATABASE&lt;/span&gt; Cont2&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DATABASE&lt;/span&gt; Cont1 &lt;span style="color: #200080; font-weight: bold;"&gt;SET&lt;/span&gt; CONTAINMENT&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;PARTIAL&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DATABASE&lt;/span&gt; Cont2 &lt;span style="color: #200080; font-weight: bold;"&gt;SET&lt;/span&gt; CONTAINMENT&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;PARTIAL&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;A questo punto creiamo le user with password (&lt;span style="font-family: courier new,courier;"&gt;SQLCmd mode&lt;/span&gt;):&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #007d45;"&gt;:SETVAR&lt;/span&gt; &lt;span style="color: #7779bb; font-weight: bold;"&gt;user&lt;/span&gt; UserWithSameSID
&lt;span style="color: #007d45;"&gt;:SETVAR&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;password&lt;/span&gt; Passw0rd

&lt;span style="color: #200080; font-weight: bold;"&gt;USE&lt;/span&gt; Cont1&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #7779bb; font-weight: bold;"&gt;USER&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;$&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #7779bb; font-weight: bold;"&gt;user&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;WITH&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;PASSWORD&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;'$(password)'&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #007d45;"&gt;@sid&lt;/span&gt; VARBINARY&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #7779bb; font-weight: bold;"&gt;MAX&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #007d45;"&gt;@sid&lt;/span&gt; &lt;span style="color: #308080;"&gt;=&lt;/span&gt; SID &lt;span style="color: #200080; font-weight: bold;"&gt;FROM&lt;/span&gt; Cont1&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #7779bb; font-weight: bold;"&gt;sys&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;database_principals &lt;span style="color: #200080; font-weight: bold;"&gt;WHERE&lt;/span&gt; name &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;'$(user)'&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #007d45;"&gt;@stmt&lt;/span&gt; NVARCHAR&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #008c00;"&gt;4000&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;SET&lt;/span&gt; &lt;span style="color: #007d45;"&gt;@stmt&lt;/span&gt; &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;'CREATE USER [$(user)] WITH PASSWORD='&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;'$(password)'&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;', SID='&lt;/span&gt; &lt;span style="color: #308080;"&gt;+&lt;/span&gt; &lt;span style="color: #7779bb; font-weight: bold;"&gt;CONVERT&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #008c00;"&gt;255&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #007d45;"&gt;@sid&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #008c00;"&gt;1&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #308080;"&gt;+&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;';'&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;PRINT&lt;/span&gt; &lt;span style="color: #007d45;"&gt;@stmt&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;USE&lt;/span&gt; Cont2&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;EXEC&lt;/span&gt; sp_executeSQL &lt;span style="color: #007d45;"&gt;@stmt&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #308080;"&gt;*&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;FROM&lt;/span&gt; Cont1&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #7779bb; font-weight: bold;"&gt;sys&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;database_principals &lt;span style="color: #200080; font-weight: bold;"&gt;WHERE&lt;/span&gt; name &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;'$(user)'&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;UNION&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;ALL&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #308080;"&gt;*&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;FROM&lt;/span&gt; Cont2&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #7779bb; font-weight: bold;"&gt;sys&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;database_principals &lt;span style="color: #200080; font-weight: bold;"&gt;WHERE&lt;/span&gt; name &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;'$(user)'&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Come si nota&amp;nbsp;i due user hanno &lt;span style="font-family: courier new,courier;"&gt;SID&lt;/span&gt; identici... anzi hanno anche lo stesso &lt;span style="font-family: courier new,courier;"&gt;principal_id&lt;/span&gt; (incidentalmente):&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/6175.00.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/6175.00.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Ora proviamo a collegarci a &lt;span style="font-family: courier new,courier; text-decoration: underline;"&gt;Cont1&lt;/span&gt; con l'utenza appena creata. A connessione avvenuta proviamo a eseguire:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #308080;"&gt;*&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;FROM&lt;/span&gt; &lt;span style="color: #7779bb; font-weight: bold;"&gt;sys&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;databases&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Il risultato &amp;egrave; l'atteso, infatti&amp;nbsp;vediamo oltre al nostro DB anche &lt;span style="font-family: courier new,courier;"&gt;master&lt;/span&gt; e il &lt;span style="font-family: courier new,courier;"&gt;TempDB&lt;/span&gt; ma &lt;strong&gt;non &lt;/strong&gt;&lt;span style="font-family: courier new,courier;"&gt;Cont2&lt;/span&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/6471.01.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/6471.01.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Anche USE [Cont2] non funziona come ci attendiamo:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/4150.02.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/4150.02.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Ora la domanda lecita &amp;egrave;: dove SQL tiene traccia del db iniziale (che completa la tupla username-password-initial db)?&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Guardiamo nella &lt;span style="font-family: courier new,courier;"&gt;sys.dm_exec_sessions&lt;/span&gt; e troviamo un campo che fa al caso nostro: &lt;span style="font-family: courier new,courier;"&gt;authenticating_database_id&lt;span style="font-family: verdana,geneva;"&gt;. Nel caso delle autenticazioni a livello di database questo campo sar&amp;agrave; ovviamente diverso da 1:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/7711.05.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/7711.05.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Happy Coding,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Francesco Cogno&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3531065" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/T_2D00_SQL/">T-SQL</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Security/">Security</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/SQL+Server+2012/">SQL Server 2012</category></item><item><title>Cambiamento nella priorità degli Sch-S locks in SQL 2012 sotto RUI e RCSI</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2012/06/18/cambiamento-nella-priorita-degli-sch-s-locks-in-sql-2012-sotto-rui-e-rcsi.aspx</link><pubDate>Mon, 18 Jun 2012 09:09:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3504392</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3504392</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2012/06/18/cambiamento-nella-priorita-degli-sch-s-locks-in-sql-2012-sotto-rui-e-rcsi.aspx#comments</comments><description>&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span face="Calibri" size="3"&gt;Oggi continuiamo ad esplorare le novit&amp;agrave; di SQL 2012 andando a testare una piccola ma importante modifica alla gestione della priorit&amp;agrave; degli schema lock. Gli schema lock sono quei particolari tipi di lock utilizzati da SQL server per coordinare le operazioni con impatto a livello di schema. Alcuni esempi? Un alter table ovviamente richiede un lock di tipo schema &lt;b&gt;M&lt;/b&gt; (modifica). Una select in read uncommitted richiede - sorpresa - un lock di tipo schema &lt;b&gt;S&lt;/b&gt; (stabilit&amp;agrave;). Come potete immaginare (ma come potete confermare leggendo qui: &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms186396(v=sql.105).aspx)"&gt;&lt;span style="color: #0000ff;" face="Calibri" color="#0000ff" size="3"&gt;http://msdn.microsoft.com/en-us/library/ms186396(v=sql.105).aspx)&lt;/span&gt;&lt;/a&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt; i due diversi tipi di lock non sono compatibili fra di loro. In casi in cui&amp;nbsp;non si riesca ad acquisire un lock perch&amp;eacute; ne esiste uno incompatibile SQL metter&amp;agrave; il lock in &lt;i&gt;attesa&lt;/i&gt; (o, meglio, il thread che ha richiesto il lock). Appena il lock sar&amp;agrave; disponibile SQL &lt;i&gt;risveglier&amp;agrave;&lt;/i&gt; il thread in attesa e permetter&amp;agrave; al lock di acquisire il possesso dell&amp;rsquo;oggetto.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Questo meccanismo si basa su una coda FIFO che garantisce che tutti i thread avranno la loro occasione di ottenere il possesso dell&amp;rsquo;oggetto (questo ovviamente a meno di deadlocks ma non ne parleremo ora).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Ad esempio supponendo di avere un lock di tipo S (condiviso) sull&amp;rsquo;oggetto A avremo una coda di questo tipo:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;" size="3"&gt;&lt;span face="Calibri"&gt;1: Lock S su A (attivo).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Ora supponiamo che arrivino due richieste X (esclusive) su A. X non &amp;egrave; compatibile con S per cui viene messo in attesa.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;b&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;3: Lock X su A (attesa).&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;b&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;2: Lock X su A (attesa).&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;" size="3"&gt;&lt;span face="Calibri"&gt;1: Lock S su A (attivo).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Appena il lock X su A verr&amp;agrave; rilasciato il primo thread in attesa del lock X su A verr&amp;agrave; risvegliato per cui avremo:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;" size="3"&gt;&lt;span face="Calibri"&gt;2: Lock X su A (attesa).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;" size="3"&gt;&lt;span face="Calibri"&gt;1: Lock X su A (attivo).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Se ora arrivasse una richiesta di lock S su A anche lui andr&amp;agrave; in coda:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;b&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;3: Lock S su A (attesa).&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;" size="3"&gt;&lt;span face="Calibri"&gt;2: Lock X su A (attesa).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;" size="3"&gt;&lt;span face="Calibri"&gt;1: Lock X su A (attivo).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;NB: Questa &amp;egrave; una semplificazione estrema, i lock sono molti di pi&amp;ugrave; e gli &lt;i&gt;oggetti &lt;/i&gt;su cui si pongono sono vari; tuttavia &amp;egrave; sufficiente per lo scopo di questo post.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Questo meccanismo aveva per gli schema locks &amp;ndash; fino a SQL 2008 R2 incluso &amp;ndash; una deroga: gli Sch-S lock posti negli isolation level &lt;b&gt;read uncommitted&lt;/b&gt; e &lt;b&gt;read committed snapshot&lt;/b&gt; avevano precedenza sugli altri schema lock (cio&amp;egrave; sul Sch-M).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Ci&amp;ograve; vuol dire che in una situazione come questa:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;" size="3"&gt;&lt;span face="Calibri"&gt;3: Lock Sch-M su A (attesa).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;" size="3"&gt;&lt;span face="Calibri"&gt;2: Lock Sch-M su A (attesa).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;" size="3"&gt;&lt;span face="Calibri"&gt;1: Lock Sch-S su A (attivo).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;All&amp;rsquo;arrivo di un nuovo Sch-S invece che essere messo in fondo alla coda questo verr&amp;agrave; messo in testa:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;" size="3"&gt;&lt;span face="Calibri"&gt;4: Lock Sch-M su A (attesa).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;" size="3"&gt;&lt;span face="Calibri"&gt;3: Lock Sch-M su A (attesa).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&lt;b&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;2: Lock Sch-S su A (attesa).&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;" size="3"&gt;&lt;span face="Calibri"&gt;1: Lock Sch-S su A (attivo).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Come potete ben immaginare in determinate condizioni &amp;ndash; ad esempio arrivando continui Sch-S in read uncommitted &amp;ndash; i thread in attesa del Sch-M non verrebbero &lt;i&gt;mai&lt;/i&gt; risvegliati. Questa situazione &amp;egrave; chiamata in letteratura &lt;i&gt;thread starvation&lt;/i&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Ora voi sarete tranquilli perch&amp;egrave; non utilizzate l&amp;rsquo;isolation level read uncommitted. Chi lo usa dopotutto? ;)&lt;/span&gt;&lt;span face="Calibri"&gt;. Per&amp;ograve; se ci pensate ogni volta che usate il query hint &lt;b&gt;WITH(NOLOCK)&lt;/b&gt; lo state facendo! Quindi se voi utilizzate WITH(NOLOCK) siete esposti a questo problema. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Vi do un paio di script per provare il tutto (non in prod, mi raccomando!):&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DATABASE&lt;/span&gt; StarvationDemo&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;USE&lt;/span&gt; StarvationDemo&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;TABLE&lt;/span&gt; NoLockSample&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;ID&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;INT&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;IDENTITY&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #008c00;"&gt;1&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt;&lt;span style="color: #008c00;"&gt;1&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;KEY&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;CLUSTERED&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; Testo NVARCHAR&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #008c00;"&gt;255&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;INTO&lt;/span&gt; NoLockSample
&lt;span style="color: #200080; font-weight: bold;"&gt;SELECT&lt;/span&gt; name &lt;span style="color: #200080; font-weight: bold;"&gt;FROM&lt;/span&gt; &lt;span style="color: #7779bb; font-weight: bold;"&gt;sys&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;objects&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt; &lt;span style="color: #008c00;"&gt;256&lt;/span&gt;
&lt;/pre&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Ora aprite tre o quattro finestre di SSMS e lanciate contemporaneamente questo script&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;USE&lt;/span&gt; StarvationDemo&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #007d45;"&gt;@cnt&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;FLOAT&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;WHILE&lt;/span&gt; &lt;span style="color: #008c00;"&gt;1&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #008c00;"&gt;1&lt;/span&gt;
    &lt;span style="color: #200080; font-weight: bold;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #007d45;"&gt;@cnt&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #7779bb; font-weight: bold;"&gt;AVG&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #7779bb; font-weight: bold;"&gt;CONVERT&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;FLOAT&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;ID&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;FROM&lt;/span&gt; NoLockSample
        &lt;span style="color: #200080; font-weight: bold;"&gt;WITH&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #7779bb; font-weight: bold;"&gt;NOLOCK&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
        &lt;span style="color: #200080; font-weight: bold;"&gt;WHERE&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;LEFT&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;Testo&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #008c00;"&gt;1&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt; &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;'LL'&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;/pre&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Notate che usiamo il famigerato NOLOCK. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Se a questo punto, in un&amp;rsquo;altra finestra, lanciate un banale alter table:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;USE&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;StarvationDemo&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;Table&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;dbo&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;&lt;span style="color: #308080;"&gt;[&lt;/span&gt;NoLockSample&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;ADD&lt;/span&gt; PocaRoba &lt;span style="color: #200080; font-weight: bold;"&gt;BIT&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;/pre&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Attenderete parecchio :)&lt;/span&gt;&lt;span face="Calibri"&gt;. Se controllate i lock presenti:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;l&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;request_mode&lt;span style="color: #308080;"&gt;,&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;r&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;transaction_id&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;r&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;blocking_session_id&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;r&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;wait_type&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;r&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;start_time&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;l&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;request_lifetime&lt;span style="color: #595979;"&gt;--, r.*, l.*&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;FROM&lt;/span&gt; &lt;span style="color: #7779bb; font-weight: bold;"&gt;sys&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;dm_tran_locks &lt;span style="color: #200080; font-weight: bold;"&gt;l&lt;/span&gt;
      &lt;span style="color: #200080; font-weight: bold;"&gt;inner&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;join&lt;/span&gt; &lt;span style="color: #7779bb; font-weight: bold;"&gt;sys&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;dm_exec_requests &lt;span style="color: #200080; font-weight: bold;"&gt;r&lt;/span&gt;
            &lt;span style="color: #200080; font-weight: bold;"&gt;on&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;l&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;request_session_id &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;r&lt;/span&gt;&lt;span style="color: #308080;"&gt;.&lt;/span&gt;session_id
&lt;span style="color: #200080; font-weight: bold;"&gt;where&lt;/span&gt; request_mode &lt;span style="color: #200080; font-weight: bold;"&gt;in&lt;/span&gt; &lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;'Sch-S'&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;'Sch-M'&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;order&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;by&lt;/span&gt; start_time &lt;span style="color: #200080; font-weight: bold;"&gt;desc&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" face="Calibri"&gt;&lt;span size="3"&gt;Vedrete gli Sch-S locks attivi con il vostro Sch-M lock in attesa (notate come l'id di transazione cambi):&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/7870.zaga.png"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/7870.zaga.png" /&gt;&lt;/a&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/0652.Capture.PNG"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" face="Calibri"&gt;&lt;span size="3"&gt;Se avete sottomano un SQL 2012 vedrete che il thread in attesa di Sch-M non verr&amp;agrave; &amp;ldquo;scavalcato&amp;rdquo;, di fatto risolvendo il thread starvation. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Ecco un altro motivo in pi&amp;ugrave; per passare a SQL 2012 :).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Happy coding,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;strong&gt;&lt;span style="font-family: verdana,geneva;" size="3"&gt;&lt;span face="Calibri"&gt;Francesco Cogno&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3504392" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/SQL+Server+2008+R2/">SQL Server 2008 R2</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/T_2D00_SQL/">T-SQL</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/SQL+Server+2012/">SQL Server 2012</category></item><item><title>SQL 2012 e VLFs</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2012/05/28/sql-2012-e-vlfs.aspx</link><pubDate>Mon, 28 May 2012 14:17:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3500508</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3500508</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2012/05/28/sql-2012-e-vlfs.aspx#comments</comments><description>&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Un post veloce per mostrare una funzionalit&amp;agrave; molto gradita introdotta da SQL Server 2012. Come sicuramente saprete, troppi VLF (virtual log files) possono impattare negativamente le operazioni del transaction log.&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Fino SQL Server 2008 R2 bisognava attivamente documentarsi per avere informazioni sul numero di VLF (ad esempio con DBCC LOGINFO). SQL Server 2012, invece, mostra un messaggio di warning nell'error log se, durante la fase di redo, l'engine identifica un database con pi&amp;ugrave; di 10000 (si, diecimila) VLF.&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Il messaggio &amp;egrave; il seguente:&lt;/span&gt;&lt;/p&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #595979;"&gt;Database testVLF has more than 1000 virtual log files which is excessive. Too many virtual log files can cause long startup and backup times. Consider shrinking the log and using a different growth increment to reduce the number of virtual log files.&lt;/span&gt;
&lt;/pre&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Volete provare voi stessi? Potete usare questo script:&lt;/span&gt;&lt;/p&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;use&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;master&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DATABASE&lt;/span&gt; testVLF&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DATABASE&lt;/span&gt; testVLF &lt;span style="color: #200080; font-weight: bold;"&gt;SET&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;RECOVERY&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;FULL&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;BACKUP&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DATABASE&lt;/span&gt; testVLF &lt;span style="color: #200080; font-weight: bold;"&gt;TO&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DISK&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;'nul'&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;BACKUP&lt;/span&gt; &lt;span style="color: #7779bb; font-weight: bold;"&gt;LOG&lt;/span&gt; testVLF &lt;span style="color: #200080; font-weight: bold;"&gt;TO&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DISK&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;'nul'&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;USE&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;master&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DATABASE&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;testVLF&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;MODIFY&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;FILE&lt;/span&gt; &lt;span style="color: #308080;"&gt;(&lt;/span&gt; NAME &lt;span style="color: #308080;"&gt;=&lt;/span&gt; N&lt;span style="color: #1060b6;"&gt;'testVLF_log'&lt;/span&gt;&lt;span style="color: #308080;"&gt;,&lt;/span&gt; FILEGROWTH &lt;span style="color: #308080;"&gt;=&lt;/span&gt; 1KB &lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;USE&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;testVLF&lt;span style="color: #308080;"&gt;]&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;


&lt;span style="color: #200080; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;TABLE&lt;/span&gt; test&lt;span style="color: #308080;"&gt;(&lt;/span&gt;testo &lt;span style="color: #200080; font-weight: bold;"&gt;CHAR&lt;/span&gt;&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #008c00;"&gt;1200&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;PRINT&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;'Inserimento 100 righe...'&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;INTO&lt;/span&gt; test &lt;span style="color: #200080; font-weight: bold;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;'somedata'&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt; &lt;span style="color: #008c00;"&gt;100&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;PRINT&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;'Inserimento massivo righe...'&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;INTO&lt;/span&gt; test 
&lt;span style="color: #200080; font-weight: bold;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #308080;"&gt;*&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;FROM&lt;/span&gt; test&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt; &lt;span style="color: #008c00;"&gt;14&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;DBCC&lt;/span&gt; LOGINFO&lt;span style="color: #308080;"&gt;(&lt;/span&gt;testVLF&lt;span style="color: #308080;"&gt;)&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;USE&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;master&lt;/span&gt;&lt;span style="color: #308080;"&gt;]&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;BACKUP&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DATABASE&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;testVLF&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;TO&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DISK&lt;/span&gt;&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;'I:\Samples\TooManyVLFs\testVLF.bak'&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;WITH&lt;/span&gt; COMPRESSION&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;DROP&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DATABASE&lt;/span&gt; testVLF&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;RESTORE&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;DATABASE&lt;/span&gt; &lt;span style="color: #308080;"&gt;[&lt;/span&gt;testVLF&lt;span style="color: #308080;"&gt;]&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;FROM&lt;/span&gt;  &lt;span style="color: #200080; font-weight: bold;"&gt;DISK&lt;/span&gt; &lt;span style="color: #308080;"&gt;=&lt;/span&gt; N&lt;span style="color: #1060b6;"&gt;'I:\Samples\TooManyVLFs\testVLF.bak'&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;WITH&lt;/span&gt; STATS&lt;span style="color: #308080;"&gt;=&lt;/span&gt;&lt;span style="color: #008c00;"&gt;1&lt;/span&gt;&lt;span style="color: #308080;"&gt;;&lt;/span&gt;
&lt;span style="color: #200080; font-weight: bold;"&gt;GO&lt;/span&gt;

&lt;span style="color: #200080; font-weight: bold;"&gt;EXEC&lt;/span&gt; xp_readErrorLog
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Sostanzialmente stiamo creando un database nuovo a cui impostiamo l'autogrowth a 1024 bytes&amp;nbsp;(ma che SQL alzer&amp;agrave; al minimo che &amp;egrave; 262144 bytes). A questo punto riempiamo il tlog fino a generare almeno 10000 vlf (da cui avremo un tlog di almeno 2.5 GB circa). Ora effettuiamo un backup-drop-restore (potreste dover cambiare il percorso di backup sulla vostra macchina di test).&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;L'error log riporter&amp;agrave; un warning simile a questo:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/4456.Capturevlf.PNG"&gt;&lt;img style="margin-right: auto; margin-left: auto; display: block;" border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/4456.Capturevlf.PNG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;strong&gt;Nota&lt;/strong&gt;: non considerate "giusto" il numero di VLF se &amp;egrave; minore di 10000. Il valore di 10000 &amp;egrave; preso come soglia oltre la quale i VLF sono &lt;em&gt;decisamente&lt;/em&gt; troppi. Come sempre, l'unico vero valore giusto &amp;egrave; quello che soddisfa le vostre esigenze. In altre parole, testate :). Lo scopo di questo warning &amp;egrave; di evidenziare, a beneficio dei DBA, una situazione che sta sfuggendo di controllo.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Happy coding,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;a title="Francesco Cogno" href="mailto:francesco.cogno@microsoft.com"&gt;Francesco Cogno&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3500508" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/T_2D00_SQL/">T-SQL</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Performance/">Performance</category></item><item><title>DISM: Chi è costui?</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2012/01/27/dism-chi-232-costui.aspx</link><pubDate>Fri, 27 Jan 2012 14:11:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3477533</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3477533</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2012/01/27/dism-chi-232-costui.aspx#comments</comments><description>&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Il suo nome per esteso &amp;egrave; &amp;ldquo;&lt;i&gt;Deployment Image Services and Management Tool&lt;/i&gt;&amp;rdquo;, ed e&amp;rsquo; la seconda volta che mi imbatto in questo tool di sistema operativo per Windows Server 2008 R2:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/4544.pag200.png"&gt;&lt;img style="margin-right: auto; margin-left: auto; display: block;" border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/4544.pag200.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Si tratta di uno strumento &amp;ldquo;builtin&amp;rdquo; accessibile da command line con privilegi amministrativi &amp;ldquo;elevati&amp;rdquo; e nel caso specifico l&amp;rsquo;ho dovuto utilizzare per rimuovere i file di backup dell&amp;rsquo;installazione della &amp;ldquo;&lt;i&gt;Service Pack 1&lt;/i&gt;&amp;rdquo; di Windows Server 2008 R2&amp;rdquo;, il comando dettagliato &amp;egrave; il seguente:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;&lt;b&gt;DISM.exe /online /Cleanup-Image /spsuperseded&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small; text-decoration: underline;"&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;Et voil&amp;agrave;, avete appena liberato 2.1 GB sul disco &amp;ldquo;C:&amp;rdquo; che fanno sempre comodo !&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;span style="text-decoration: underline;"&gt;NOTA&lt;/span&gt;: Ovviamente, poi non sarete pi&amp;ugrave; in grado di rimuovere la SP1, ma ad oggi non ho ancora avuto notizia di un Cliente che abbia avuto bisogno di farlo.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Ah, si&amp;hellip; Vi ho accennato ad un'altra volta in cui mi sono imbattuto in codesto tool, per l&amp;rsquo;esattezza durante una procedura di &amp;ldquo;Security Hardening&amp;rdquo; di una installazione SQL Server per un grosso cliente in italia; ebbene, utilizzando il seguente comando potete &lt;span style="text-decoration: underline;"&gt;completamente rimuovere &amp;ldquo;Internet Explorer&amp;rdquo; dalla Vostra installazione (x64)&lt;/span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;span style="color: #0000ff; font-family: courier new,courier;"&gt;&lt;b&gt;Dism /online /disable-feature /featurename:Internet-Explorer-Optional-amd64&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Carino vero ? :)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Ho testato la cosa ed &amp;egrave; assolutamente supportata, c&amp;rsquo;&amp;egrave; solo il problema, in ambiente Cluster, di non poter pi&amp;ugrave; riuscire a vedere in locale il &amp;ldquo;Validation Report&amp;rdquo;, ma si pu&amp;ograve; facilmente ovviare da remoto.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Buon lavoro a tutti.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;b&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;--Igor Pagliai--&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3477533" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Security/">Security</category></item><item><title>MSDTC &amp; “Mount Point” NTFS</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2012/01/27/msdtc-amp-mount-point-ntfs.aspx</link><pubDate>Fri, 27 Jan 2012 09:19:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3477505</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3477505</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2012/01/27/msdtc-amp-mount-point-ntfs.aspx#comments</comments><description>&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Sar&amp;agrave; un post abbastanza breve, ma l&amp;rsquo;argomento sono sicuro che interesser&amp;agrave; molte persone dato che la cosa non &amp;egrave; ufficialmente riportata in nessuna documentazione Microsoft, almeno in quella ufficiale, e riguarda l&amp;rsquo;utilizzo di un &amp;ldquo;&lt;i&gt;Mount Point&lt;/i&gt;&amp;rdquo; NTFS come base per la componente MSDTC (&lt;i&gt;Microsoft Distributed Transaction Coordinator&lt;/i&gt;) in ambiente Cluster.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Prima di passare all&amp;rsquo;argomento principale di questo post, &amp;egrave; bene ricordare che in Windows Server 2008 R2:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" face="Calibri" size="3"&gt;-&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Mentre con SQL Server 2005, in ambiente Cluster, l&amp;rsquo;installazione della componente MSDTC era propedeutica all&amp;rsquo;installazione di SQL, in SQL Server 2008 non &amp;egrave; pi&amp;ugrave; cos&amp;igrave;, anzi, se la componente MSDTC non &amp;egrave; richiesta dallo scenario applicativo/architetturale potete assolutamente fare a meno di installarla;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" face="Calibri" size="3"&gt;-&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;In Windows Server 2008 Cluster, potete avere quante istanza della componente MSDTC volete, a differenza di Windows Server 2003 dove era possibile averne solo una per l&amp;rsquo;intero sistema Cluster;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Dunque, qualora Vi venisse la tentazione di utilizzare un &amp;ldquo;Mount Point&amp;rdquo; NTFS come disco di base per la componente MSDTC, sappiate che ci&amp;ograve; non &amp;egrave; supportato e neanche possibile, avrete sicuramente dei problemi ma non subito: all&amp;rsquo;atto dell&amp;rsquo;installazione/configurazione dell&amp;rsquo;MSDTC, nulla sembra indicare nessun tipo di problema, ma nel momento in cui tenterete di eseguire un &amp;ldquo;failover&amp;rdquo; manuale (in questo caso) su un altro nodo, l&amp;rsquo;operazione fallir&amp;agrave; e, a seconda di quanti nodi avete e della configurazione adottata, assisterete al tipico fenomeno del &amp;ldquo;ping pong&amp;rdquo; delle risorse da un nodo all&amp;rsquo;altro, fino a che il tutto non torner&amp;agrave; sul nodo iniziale.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Un rapido esame dell&amp;rsquo;Event Log &amp;ldquo;Application&amp;rdquo; del Sistema del Sistema Operativo, riveler&amp;agrave; il seguente messaggio di errore:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/6864.pag1.png"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/6864.pag1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;A beneficio dei motori di ricerca che presto indicizzeranno questo post, riporto la stringa completa dell&amp;rsquo;errore:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; font-family: courier new,courier; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Source: MSDTC Client 2&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; font-family: courier new,courier; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Event ID: &lt;b&gt;4101&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; font-family: courier new,courier; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Level: Error&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; font-family: courier new,courier; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Description: The DTC cluster resource&amp;rsquo;s log file path was originally configured at: \\?. Attempting to change that to: &lt;span style="text-decoration: underline;"&gt;\\?\GLOBALROOT\Device\Harddisk22\Partition1&lt;/span&gt;. This indicate a change in the path of the DTC cluster resource&amp;rsquo;s dependent disk resource. &lt;span style="color: #ff0000;"&gt;&lt;b&gt;&lt;span style="text-decoration: underline;"&gt;This is not supported&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;. The error code returned: &lt;b&gt;0x8000FFFF&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Ebbene, dopo alcune verifiche interne quello che l&amp;rsquo;errore ci dice, e che ovviamente ho sospettato, si &amp;egrave; rivelato corretto: &lt;i&gt;&lt;span style="text-decoration: underline;"&gt;l&amp;rsquo;utilizzo dei &amp;ldquo;Mount Point&amp;rdquo; NTFS, in configurazione Cluster, anche sul pi&amp;ugrave; recente Windows Server 2008 R2, non &amp;egrave; (ancora) supportata&lt;/span&gt;&lt;/i&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Esternamente potete trovare traccia di questa cosa sul sito Connect di Microsoft, al link seguente, Vi invito a votare a favore di questo &amp;ldquo;bug&amp;rdquo; per far sapere al nostro gruppo di sviluppo per Windows Server quanto questa cosa sia &amp;ldquo;desiderabile&amp;rdquo; avere nella prossima versione:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" face="Calibri" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;a href="https://connect.microsoft.com/SQLServer/feedback/details/576545/msdtc-fails-to-restart-in-sql-server-2008-r2-clustered-group"&gt;&lt;span style="color: #0000ff; font-size: small;" face="Calibri" size="3" color="#0000ff"&gt;https://connect.microsoft.com/SQLServer/feedback/details/576545/msdtc-fails-to-restart-in-sql-server-2008-r2-clustered-group&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Buon lavoro a tutti, al prossimo post.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;b&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;--Igor Pagliai-- &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3477505" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/SQL+Server+2008+R2/">SQL Server 2008 R2</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Cluster/">Cluster</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Networking/">Networking</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/MSDTC/">MSDTC</category></item><item><title>TDS and Network packet size</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2012/01/18/tds-and-network-packet-size.aspx</link><pubDate>Wed, 18 Jan 2012 08:16:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3475998</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3475998</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2012/01/18/tds-and-network-packet-size.aspx#comments</comments><description>&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" face="Calibri" size="3"&gt;Vi siete mai chiesti qual&amp;rsquo;e&amp;rsquo; l&amp;rsquo;overhead del protocollo TDS? Il protocollo e&amp;rsquo; ben documentato a questo indirizzo: &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd304523(v=PROT.13).aspx"&gt;&lt;span style="color: #0000ff; font-size: small;" face="Calibri" size="3" color="#0000ff"&gt;http://msdn.microsoft.com/en-us/library/dd304523(v=PROT.13).aspx&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;, tuttavia in questo post seguiremo un approccio differente da quello accademico: snifferemo i pacchetti (TCP) fra Management Studio e SQL Server per analizzarli ex-post. In questo modo avremo un pretesto per analizzare il comportamento del protocollo TDS.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-family: verdana,geneva; font-size: medium;" size="4"&gt;&lt;span style="color: #4f81bd;" color="#4f81bd"&gt;&lt;span face="Cambria"&gt;Strumenti&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" face="Calibri" size="3"&gt;Per la nostra analisi utilizzeremo Microsoft Network Monitor (per gli amici, NetMon) disponibile qui: &lt;/span&gt;&lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=4865"&gt;&lt;span style="color: #0000ff; font-size: small;" face="Calibri" size="3" color="#0000ff"&gt;http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=4865&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;. Tramite NetMon e&amp;rsquo; possibile intercettare tutti i pacchetti in ingresso ed in uscita da una interfaccia di rete. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-family: verdana,geneva; font-size: medium;" size="4"&gt;&lt;span style="color: #4f81bd;" color="#4f81bd"&gt;&lt;span face="Cambria"&gt;Configurazione iniziale&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Scriviamo un codice TSQL abbastanza prolisso da essere di dimensioni significative. Nel mio caso mi sono affidato al comment per ingrossare la dimensione del file. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/7446.SSMS_2D00_00_2D00_00.png"&gt;&lt;img style="margin-right: auto; margin-left: auto; display: block;" border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/7446.SSMS_2D00_00_2D00_00.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" face="Calibri" size="3"&gt;Salviamo il codice dentro un file. &lt;b&gt;Importante: &lt;/b&gt;assicuratevi che il formato sia ANSI (cfr &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd357447(v=PROT.13).aspx"&gt;&lt;span style="color: #0000ff; font-size: small;" face="Calibri" size="3" color="#0000ff"&gt;2.2.1.3 SQL Batch&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;) altrimenti avrete dei numeri errati. Guardate la dimensione del file (proprieta&amp;rsquo;) per avere la dimensione del &amp;ldquo;payload utile&amp;rdquo; che invieremo a SQL Server:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" face="Calibri" size="3"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/2604.fileproperties.png"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/2604.fileproperties.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;La dimensione che ci interessa e&amp;rsquo; il campo Size (&lt;span style="text-decoration: underline;"&gt;non&lt;/span&gt; Size on disk). Nell&amp;rsquo;esempio il mio codice occupa 6.145 bytes. Essendo ANSI dobbiamo moltiplicare per 2 il numero di bytes occupati per avere l&amp;rsquo;occupazione Unicode. Otteniamo 12.290 bytes.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;" align="center"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;La dimensione di default del pacchetto TDS e&amp;rsquo; 4096 (4KB). Con questa impostazione saranno necessari almeno 4 pacchetti (16.384 bytes) per inviare il SQL Batch message da SSMS a SQL Server.&amp;nbsp; Supponiamo di voler minizzare il numero di pacchetti inviati per cui decidiamo di &lt;i&gt;negoziare&lt;/i&gt; un packet size di 32.767 bytes (massimo consentito). Per farlo serve modificare l&amp;rsquo;impostazione del server SQL? La risposta e&amp;rsquo; no per cui lasciamo il server al valore di default:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" face="Calibri" size="3"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/6457.Server_2D00_4096.png"&gt;&lt;img style="margin-right: auto; margin-left: auto; display: block;" border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/6457.Server_2D00_4096.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Ma assicuriamoci di modificare lato SSMS il parametro corretto:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/7610.Conn_2D00_32767.png"&gt;&lt;img style="margin-right: auto; margin-left: auto; display: block;" border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/7610.Conn_2D00_32767.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-family: verdana,geneva; font-size: medium;" size="4"&gt;&lt;span style="color: #4f81bd;" color="#4f81bd"&gt;&lt;span face="Cambria"&gt;Test&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Ora attiviamo NetMon ed eseguiamo la query da SSMS. Il risultato (colorato e filtrato) e&amp;rsquo; il seguente:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/1323.netmon00_2D00_00.png"&gt;&lt;img style="margin-right: auto; margin-left: auto; display: block;" border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/1323.netmon00_2D00_00.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" face="Calibri" size="3"&gt;Ho evidenziato i pacchetti da SSMS a SQL. Si nota subito una cosa interessante: benche&amp;rsquo; abbiamo impostato il packet size a 32.767 il layer sottostante (TCP) ha comunque deciso di segmentare il messaggio in piu&amp;rsquo; pacchetti separati (nel mio caso di 1448 bytes). Cio&amp;rsquo; e&amp;rsquo; atteso e documentato qui &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa174503(v=SQL.80).aspx"&gt;&lt;span style="color: #0000ff; font-size: small;" face="Calibri" size="3" color="#0000ff"&gt;http://msdn.microsoft.com/en-us/library/aa174503(v=SQL.80).aspx&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: courier new,courier;"&gt;You can configure the SQL Server packet size, which is the size of the TDS packets. The size of the TDS packets defaults to 4 KB on most clients (DB-Library applications default to 512 bytes), which testing has shown to be the optimal TDS packet size in almost all scenarios. &lt;span style="background-color: #ffff00;"&gt;The size of the TDS packets can be larger than the size of the packets in the underlying protocol. If this is the case, the protocol stack on the sending computer disassembles the TDS packets automatically into units that fit into the protocol packets, and the protocol stack on the client computer reassembles the TDS packets on the receiving computer.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Cio&amp;rsquo; vuol dire che per calcolare la dimensione totale del nostro messaggio TDS dobbiamo sommare tutti i pacchetti TCP componenti il messaggio TDS. Nell&amp;rsquo;esempio abbiamo 8 pacchetti TCP da 1448 bytes e 1 pacchetto (l&amp;rsquo;ultimo) da 736 bytes. In totale, quindi, il messaggio TDS ha dimensione 12.320 bytes. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Ora ripetiamo l&amp;rsquo;esperimento rinegoziando il network packet TDS a 8.192 bytes. In questo caso saranno necessari 2 pacchetti TDS per inviare il batch di cui sopra:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" face="Calibri" size="3"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/6562.netmon01_2D00_00.png"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/6562.netmon01_2D00_00.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Sommando i pacchetti (8 da 1448 bytes e 1 da 744 bytes) si ottiene 12.328 bytes.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-family: verdana,geneva; font-size: medium;" size="4"&gt;&lt;span style="color: #4f81bd;" color="#4f81bd"&gt;&lt;span face="Cambria"&gt;Risultato&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Nel primo caso abbiamo utilizzato un TDS network packet size di 32.767 bytes e abbiamo effettuato un traffico TCP di 12.320 bytes. Nel secondo caso abbiamo abbassato il network packet size a 8.192 bytes e abbiamo effettuato un traffic TCP di 12.328 bytes. La differenza e&amp;rsquo; di &lt;b&gt;8 bytes&lt;/b&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" face="Calibri" size="3"&gt;A cosa sono dovuti? E&amp;rsquo; l&amp;rsquo;header in piu&amp;rsquo; dovuto al fatto che abbiamo inviato 2 pacchetti TDS invece che 1. Vi rimando qui per maggiori dettagli &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd340948(v=PROT.13).aspx"&gt;&lt;span style="color: #0000ff; font-size: small;" face="Calibri" size="3" color="#0000ff"&gt;http://msdn.microsoft.com/en-us/library/dd340948(v=PROT.13).aspx&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt; .&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" face="Calibri" size="3"&gt;Confrontando con l&amp;rsquo;occupazione del semplice statement Unicode (12.290 bytes) avanzano 30 bytes. Esclusi gli 8 precedentemente evidenziati ne rimangono ancora 22. Questo valore e&amp;rsquo; quello che ci attendiamo per il campo&lt;i&gt; All_Header&lt;/i&gt; (cfr &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd304416(v=PROT.13).aspx"&gt;&lt;span style="color: #0000ff; font-size: small;" face="Calibri" size="3" color="#0000ff"&gt;http://msdn.microsoft.com/en-us/library/dd304416(v=PROT.13).aspx&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt; ). L&amp;rsquo;esempio cita infatti: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;lt;TotalLength&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;DWORD&amp;gt;16 00 00 00 &amp;lt;/DWORD&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;&amp;lt;/TotalLength&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;0x16 in esadecimale equivale esattamente a 22 in decimale. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Aggiungo come riferimento la progressione dell&amp;rsquo;overhead (dell&amp;rsquo;header TDS) in percentuale per uno statement di 65.536 bytes in funzione del network packet size. Come si nota anche con un packet size di 512 bytes l&amp;rsquo;overhead e&amp;rsquo; inferiore al 2%. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/2388.tab.PNG"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/2388.tab.PNG" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" face="Calibri" size="3"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Happy coding&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;b&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Francesco Cogno&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3475998" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Performance/">Performance</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/TDS/">TDS</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Networking/">Networking</category></item><item><title>Il falso mito della migrazione da una versione di SQL all'altra</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/12/14/il-falso-mito-della-migrazione-da-una-versione-di-sql-all-altra.aspx</link><pubDate>Wed, 14 Dec 2011 14:41:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3470829</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3470829</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/12/14/il-falso-mito-della-migrazione-da-una-versione-di-sql-all-altra.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Moltissimi DBA conoscono benissimo la seguente regola: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&amp;ldquo;&lt;i&gt;You can migrate a database that was created in an earlier &lt;span style="text-decoration: underline;"&gt;version &lt;/span&gt;of SQL Server to a later version. This is a typical database upgrade and is supported. However, you cannot migrate a database that was created in a later &lt;span style="text-decoration: underline;"&gt;version &lt;/span&gt;of SQL Server to an earlier version.&amp;rdquo;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Per moltissimo tempo la regola effettivamente non ha avuto eccezioni ed anche Microsoft, in moltissimi documenti e per bocca del suo Supporto, ha fatto di tutto per diffondere questo messaggio.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;b&gt;&lt;span style="text-decoration: underline;"&gt;NOTA&lt;/span&gt;&lt;/b&gt;: Ho sottolineato il termine &lt;span style="text-decoration: underline;"&gt;versione&lt;/span&gt; perch&amp;eacute; &amp;egrave; proprio qui che si nasconde l&amp;rsquo;ambiguit&amp;agrave; !&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" face="Calibri" size="3"&gt;Ebbene, &amp;egrave; un altro falso mito o falsa leggenda metropolitana, ne esistono molti/molte in giro come anche il nostro buon amico &lt;b&gt;Paul Randal&lt;/b&gt; (&lt;/span&gt;&lt;a href="http://www.sqlskills.com/BLOGS/PAUL/"&gt;&lt;span style="color: #0000ff; font-size: small;" face="Calibri" size="3" color="#0000ff"&gt;http://www.sqlskills.com/BLOGS/PAUL/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;) ha largamente documentato in questo documento di notevole interesse:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" face="Calibri" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;a href="http://www.sqlskills.com/BLOGS/PAUL/post/T-SQL-Tuesday-11-Misconceptions-about-EVERYTHING!!.aspx"&gt;&lt;span style="color: #0000ff; font-size: small;" face="Calibri" size="3" color="#0000ff"&gt;http://www.sqlskills.com/BLOGS/PAUL/post/T-SQL-Tuesday-11-Misconceptions-about-EVERYTHING!!.aspx&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Beh, almeno un&amp;rsquo;eccezione esiste, come Vi illustrer&amp;ograve; tra poco e sono sicuro che non &amp;egrave; l&amp;rsquo;unica, magari ne parler&amp;ograve; in un altro blog.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Dunque, il documento che ha attirato la mia attenzione &amp;egrave; il seguente e tratta del supporto &amp;ldquo;esteso&amp;rdquo; al numero massimo di partizioni per singola tabella, passato da 1000 a 15000 con la SP2 di SQL Server 2008 &lt;b&gt;&lt;i&gt;&lt;span style="text-decoration: underline;"&gt;e&lt;/span&gt;&lt;/i&gt;&lt;/b&gt; la SP1 di SQL Server 2008 R2:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" face="Calibri" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;a href="http://download.microsoft.com/download/B/E/1/BE1AABB3-6ED8-4C3C-AF91-448AB733B1AF/Support_for_15000_Partitions.docx"&gt;&lt;span style="color: #0000ff; font-size: small;" face="Calibri" size="3" color="#0000ff"&gt;http://download.microsoft.com/download/B/E/1/BE1AABB3-6ED8-4C3C-AF91-448AB733B1AF/Support_for_15000_Partitions.docx&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;La parte interessante, per quanto riguarda questo mio post, &amp;egrave; la seguente:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;i&gt;SQL Server 2008 SP2 databases with support for 15,000 partitions have &lt;b&gt;&lt;span style="text-decoration: underline;"&gt;version number 662&lt;/span&gt;&lt;/b&gt;, while SQL erver 2008 R2 RTM supports databases with &lt;b&gt;&lt;span style="text-decoration: underline;"&gt;version numbers up to and including 661&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Quello che in pratica &amp;egrave; scritto qui smentisce la regola iniziale che ho citato e che &amp;egrave; riportata anche nel sudetto documento: in questo specifico caso, non &amp;egrave; possibile migrare un database da una istanza &lt;b&gt;SQL Server 2008 SP2&lt;/b&gt; (build &lt;b&gt;10.0&lt;/b&gt;.x.x) ad una pi&amp;ugrave; recente (altro termine ambiguo !) &lt;b&gt;SQL 2008 R2 SP1&lt;/b&gt; (build &lt;b&gt;10.50&lt;/b&gt;.x.x), eppure la build &amp;egrave; superiore !&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;L&amp;rsquo;ambiguit&amp;agrave; sta proprio nel termine &amp;ldquo;version&amp;rdquo; che ho sottolineato pi&amp;ugrave; volte, &amp;egrave; necessario rifrasare la regola iniziale nel seguente modo:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;i&gt;&amp;rdquo;You can migrate a database that was created in an earlier version of SQL Server to a later version to a later version &lt;span style="text-decoration: underline;"&gt;if and only if&lt;/span&gt; this later version understand/support the existing database version number&lt;/i&gt;&amp;rdquo;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;In questo caso specifico:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Si pu&amp;ograve; migrare un database da SQL Server 2008 SP2&amp;nbsp; a SQL Server 2008 R2 RTM se non si &amp;egrave; abilitato il supporto esteso per le 15000 partizioni;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Si pu&amp;ograve; migrare un database da SQL Server 2008 SP2 a SQL Server 2008 R2 SP1;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Un interessante ed importante corollario &amp;egrave; il seguente:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;i&gt;&amp;ldquo;I can migrate a database that was created in a later version of SQL Server to an earlier &lt;/i&gt;version&lt;i&gt;&lt;span style="text-decoration: underline;"&gt; if and only if&lt;/span&gt; the database version number supported by the target instance is the same or higher of the one stamped in the database itself by the source instance&amp;rdquo;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Un esempio ? Se avete un database su SQL Server 2008 SP1 potete migrarlo/spostarlo su una nuova/differente istanza SQL Server 2008 RTM, quindi con un differente livello di Service Pack; lo stesso esempio si pu&amp;ograve; fare con SQL Server 2005, in pratica le Service Pack, in genere, ma non &amp;egrave; sempre garantito che sia cos&amp;igrave;, non innalzano la &amp;ldquo;DB version&amp;rdquo; di un database e se cos&amp;igrave; &amp;egrave;, il relativo database pu&amp;ograve; essere portato su una versione precedente (differente livello di SP ma stessa versione) di SQL Server.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Un&amp;rsquo;ultima annotazione: come si fa a controllare la &amp;ldquo;DB version&amp;rdquo; di un database ?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Il modo pi&amp;ugrave; semplice &amp;egrave; fornito dal seguente comando &lt;span style="text-decoration: underline;"&gt;non documentato&lt;/span&gt; (e quindi non supportato ! :)&lt;/span&gt;&lt;span face="Calibri"&gt;) ma ben noto a molti DBA:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;dbcc&lt;/span&gt; dbinfo&lt;span style="color: #308080;"&gt;(&lt;/span&gt;&lt;span style="color: #1060b6;"&gt;'AdventureWorks2008'&lt;/span&gt;&lt;span style="color: #308080;"&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;b&gt;&lt;span style="text-decoration: underline;"&gt;NOTA&lt;/span&gt;&lt;/b&gt;: per visualizzare a video il relativo output, dovete prima eseguire il comando&lt;b&gt; DBCC TRACEON(3604) &lt;/b&gt;altrimenti il tutto finir&amp;agrave; nell&amp;rsquo;ERRORLOG dell&amp;rsquo;istanza SQL corrente.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Ecco un estratto di cosa compare a video:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;DBINFO STRUCTURE:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;DBINFO @0x0000000012F5D780&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;dbi_dbid = 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dbi_status = 65544&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dbi_nextid = 647673355&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;dbi_dbname = AdventureWorks2008R2&amp;nbsp;&amp;nbsp;&amp;nbsp; dbi_maxDbTimestamp = 52000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;dbi_version = 661&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;dbi_createVersion = 661&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dbi_ESVersion = 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;dbi_nextseqnum = 1900-01-01 00:00:00.000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dbi_crdate = 2010-06-28 15:31:23.283&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;La parte evidenziata in rosso fornisce l&amp;rsquo;informazione che cerchiamo, in questo caso la &amp;ldquo;DB version&amp;rdquo; &amp;egrave; &lt;b&gt;661&lt;/b&gt; ! &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Se invece avete fatto un backup del database che volete esaminare, potete anche esaminare una delle tabella di sistema del database MSDB con la seguente semplice query:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;select&lt;/span&gt; backup_set_id&lt;span style="color: #308080;"&gt;,&lt;/span&gt;database_version 
&lt;span style="color: #200080; font-weight: bold;"&gt;from&lt;/span&gt; msdb&lt;span style="color: #308080;"&gt;.&lt;/span&gt;dbo&lt;span style="color: #308080;"&gt;.&lt;/span&gt;backupset
&lt;span style="color: #200080; font-weight: bold;"&gt;where&lt;/span&gt; database_name &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;'AdventureWorks2008R2'&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Come ulteriore possibilit&amp;agrave;, se non avete le necessarie informazioni in MSDB ma solamente il file BAK, ecco il comando che fa per Voi:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre style="color: #000020; background: #f6f8ff;"&gt;&lt;span style="color: #200080; font-weight: bold;"&gt;restore&lt;/span&gt; headeronly &lt;span style="color: #200080; font-weight: bold;"&gt;from&lt;/span&gt; &lt;span style="color: #200080; font-weight: bold;"&gt;disk&lt;/span&gt; &lt;span style="color: #308080;"&gt;=&lt;/span&gt; &lt;span style="color: #1060b6;"&gt;'C:\temp\DB_BACKUP.bak'&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;L&amp;rsquo;informazione che cerchiamo &amp;egrave; immediatamente visibile nell&amp;rsquo;output del comando:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/5483.pag00.png"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/5483.pag00.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Anche per questo post &amp;egrave; tutto, buon lavoro a tutti !&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" face="Calibri" size="3"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;b&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;---Igor Pagliai ---&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3470829" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/SQL+Server+2008+R2/">SQL Server 2008 R2</category></item><item><title>Cambiamento epocale nella gestione delle statistiche</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/11/25/cambiamento-epocale-nella-gestione-delle-statistiche.aspx</link><pubDate>Fri, 25 Nov 2011 14:40:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3467289</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3467289</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/11/25/cambiamento-epocale-nella-gestione-delle-statistiche.aspx#comments</comments><description>&lt;p style="text-align: left;" align="center"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Salve a tutti,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;L&amp;rsquo;argomento di oggi ha, per chi lavora con SQL Server da molti anni, un significato particolare perch&amp;eacute; va ad impattare uno degli aspetti pi&amp;ugrave; granitici ed immutabili nel tempo, sai che &amp;egrave; cos&amp;igrave; da (n) versioni e (m) anni, con tutti i problemi del caso, ed un bel giorno Ti svegli ed alcune di queste certezze non ci sono pi&amp;ugrave; ! :)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;L&amp;rsquo;oggetto della mia meraviglia, e del presente post, &amp;egrave; un nuovo meccanismo per la gestione &amp;ldquo;dinamica&amp;rdquo; delle statistiche, &lt;span style="text-decoration: underline;"&gt;introdotto con la SP1 di SQL Server 2008 R2&lt;/span&gt; e che sar&amp;agrave; anche nella prossima versione di SQL Server (nome in codice &amp;ldquo;Denali&amp;rdquo;): quello che ora cambia, se abilitate il trace flag &lt;b&gt;&amp;ndash;T2371&lt;/b&gt;, &amp;egrave; la magica soglia (di modifiche ad una colonna/e di una tabella) oltre la quale una certa statistica viene aggiornata automaticamente da SQL Server.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Fino a ieri, la regoletta che potete trovare in varie documentazioni su Internet era la seguente, per l&amp;rsquo;aggiornamento dinamico di una statistica (&amp;ldquo;&lt;i&gt;recompilation threshold&lt;/i&gt;&amp;rdquo;):&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;&lt;span style="text-decoration: underline;"&gt;Tabelle con numero di righe&amp;nbsp; &amp;lt; 500&lt;/span&gt;: la soglia di aggiornamento delle statistiche &amp;egrave; (500) modifiche;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;&lt;span style="text-decoration: underline;"&gt;Tabelle con numeri di righe &amp;gt;= 500&lt;/span&gt;: la soglia di aggiornamento delle statistiche &amp;egrave; [(500) + (20% del numero di righe di una tabella)] modifiche;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;&lt;span style="text-decoration: underline;"&gt;Tabelle temporanee&lt;/span&gt;: come sopra, con una ulteriore soglia che scatta al raggiungimento delle 6 righe inserite nella tabella;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Con varie sfaccettature, questa soglia statica (cio&amp;egrave; il numero &amp;ldquo;20%&amp;rdquo;) non &amp;egrave; mai cambiata dalla sua introduzione in SQL 7.0, parliamo quindi di circa 13 anni fa !&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Il problema di questa percentuale fissa &amp;egrave; che, su tabelle molto grandi come numerosit&amp;agrave; di righe, tale soglia &amp;egrave; troppo alta e si rischia che SQL Server non scateni mai l&amp;rsquo;aggiornamento automatico delle statistiche, con conseguenti problemi di accuratezza dei &amp;ldquo;query plan&amp;rdquo; generati.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Per farVi un esempio concreto, immaginate la seguente situazione:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;Tabella con 100 milioni di record (credetemi, non sono tante ! :)&lt;/span&gt;&lt;span face="Calibri"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;Ogni giorno vengono inseriti 1 milione di nuovi record;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;Il 95% delle attivit&amp;agrave; sulla tabella, intese come INSERT,UPDATE, DELETE ma anche SELECT, sono sui dati dell&amp;rsquo;ultima settimana, quindi gli &amp;ldquo;ultimi&amp;rdquo; 7 milioni di record;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;Il database che contiene tale tabella ha, come da default, l&amp;rsquo;opzione &amp;ldquo;AutoUpdate Statistics&amp;rdquo; abilitata;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;Le statistiche non legati agli indici, presenti sulla tabella, hanno un &amp;ldquo;sample&amp;rdquo; di default del 10%, cio&amp;egrave; considerano un campione casuale/uniforme dei dati dell&amp;rsquo;intera tabella;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" face="Calibri" size="3"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Riuscite a vedere il problema? Con la soglia fissa al 20%, &lt;span style="text-decoration: underline;"&gt;le statistiche di questa tabella saranno aggiornate non prima di 20gg&lt;/span&gt; (1M di record x 20gg = 20M record =circa il 20% delle righe della tabella) !!!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Con tabelle di queste dimensioni, spesso partizionate, la soglia classica di aggiornamento delle statistiche non basta mai, per cui &amp;egrave; altrettanto spesso necessario inserire un &amp;ldquo;job&amp;rdquo; del &amp;ldquo;SQL Agent&amp;rdquo; che periodicamente (non certo ogni 20gg !) forzi l&amp;rsquo;aggiornamento delle statistiche.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" face="Calibri" size="3"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Con questo nuovo meccanismo, la soglia di auto-aggiornamento delle statistiche non &amp;egrave; pi&amp;ugrave; fissa al 20% ma varia, nella sua percentuale, dinamicamente in base al numero di record di una tabella: purtroppo al momento l&amp;rsquo;informazione esatta su come varia questa percentuale non &amp;egrave; di carattere pubblico :)&lt;/span&gt;&lt;span face="Calibri"&gt;, ma facendo qualche test numerico &amp;egrave; facilmente intuibile ;)&lt;/span&gt;&lt;span face="Calibri"&gt;, il concetto importante da considerare &amp;egrave; che pi&amp;ugrave; record ha una tabella e pi&amp;ugrave; si abbassa la percentuale oltre la quale scatta l&amp;rsquo;aggiornamento delle statistiche, ecco alcuni esempi:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;Tabella con &lt;b&gt;10 milioni di record&lt;/b&gt;, la soglia &amp;egrave; circa dell&amp;rsquo;&lt;b&gt;1%&lt;/b&gt;;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;L&amp;rsquo;autoupdate scatter&amp;agrave; dopo 100mila modifiche, anzich&amp;eacute; 2 milioni di modifiche, quindi &lt;span style="text-decoration: underline;"&gt;20 volte pi&amp;ugrave; frequente&lt;/span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;Tabella con &lt;b&gt;50 milioni di record&lt;/b&gt;, la soglia &amp;egrave; circa dello &lt;b&gt;0.5%&lt;/b&gt;;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;L&amp;rsquo;autoupdate scatter&amp;agrave; dopo 250mila modifiche, anzich&amp;eacute; 10 milioni di modifiche, quindi &lt;span style="text-decoration: underline;"&gt;40 volte pi&amp;ugrave; frequente&lt;/span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;Tabella con &lt;b&gt;100 milioni di record&lt;/b&gt;, la soglia &amp;egrave; circa lo &lt;b&gt;0.3%&lt;/b&gt;;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;L&amp;rsquo;autoupdate scatter&amp;agrave; dopo 300mila modifiche, anzich&amp;eacute; 20 milioni di modifiche, quindi &lt;span style="text-decoration: underline;"&gt;67 volte pi&amp;ugrave; frequente&lt;/span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Per chi non avesse ancora indovinato la funzione matematica che governa la soglia dinamica, rendo ancora pi&amp;ugrave; facile la cosa con il seguente grafico tratto da un post del collega &lt;b&gt;Juergen Thomas&lt;/b&gt; (grazie !), il nostro maggiore esperto di SAP:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" face="Calibri" size="3"&gt;&amp;nbsp;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/3036.andam.png"&gt;&lt;img style="margin-right: auto; margin-left: auto; display: block;" border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/3036.andam.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" face="Calibri" size="3"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;span style="text-decoration: underline;"&gt;NOTA&lt;/span&gt;: Non Vi aspettate che questo meccanismo entri in azione su tabelle piccole, come potete vedere dal grafico la soglia &amp;egrave; identica fino a (circa) 25000 righe, poi il comportamento cambia.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;OK, sembra tutto fantastico, ma qualcuno dovrebbe chiedersi: pech&amp;egrave; devo abilitare un &amp;ldquo;trace flag&amp;rdquo; per avere questo meccanismo ed invece non &amp;egrave; un comportamento di default di SQL Server?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;La cosa ha molto senso ed &amp;egrave; una consuetudine del gruppo di sviluppo di SQL Server: ogni modifica al codice e/o nuova funzionalit&amp;agrave; che cambi il comportamento dell&amp;rsquo;engine di SQL deve essere attivata esplicitamente (e consciamente), ed i &amp;ldquo;trace flags&amp;rdquo; adempiono proprio a questo scopo, oltre ovviamente a molti altri. Vorrei poi puntualizzare che non &amp;egrave; detto che questo meccanismo porti beneficio a tutti i clienti: &amp;egrave; vero che le statistiche saranno aggiornate pi&amp;ugrave; frequentemente, ma ci&amp;ograve; vuol dire anche un maggiore numero di &amp;ldquo;ricompilazioni&amp;rdquo; delle stored procedure e delle query adhoc, quindi (tra le altre cose) un maggiore utilizzo della CPU.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Come si abilita in maniera &amp;ldquo;permanente&amp;rdquo; questo meccanismo ? V&amp;agrave; inserito il trace flag &lt;b&gt;&amp;ndash;T2371&lt;/b&gt; negli &amp;ldquo;&lt;i&gt;startup parameters&lt;/i&gt;&amp;rdquo; dell&amp;rsquo;istanza SQL utilizzando il tool &amp;ldquo;SQL Configuration Manager&amp;rdquo;, tab &amp;ldquo;Advanced&amp;rdquo; nelle propriet&amp;agrave; del servizio SQL Server, riga &amp;ldquo;&lt;i&gt;startup parameters&lt;/i&gt;&amp;rdquo;: attenzione, dovete inserire &lt;b&gt;&amp;ndash;T2371&lt;/b&gt; in coda a quello che gi&amp;agrave; c&amp;rsquo;&amp;egrave;, pre-pendendo un punto e virgola (&lt;b&gt;;&lt;/b&gt;). Dopo l&amp;rsquo;inserimento del trace flag di SQL tramite SQL Configuration Manager, e relativo reboot, verificate che nella parte iniziale dell&amp;rsquo;ERRRORLOG compaia una cosa del genere:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" face="Calibri" size="3"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;i&gt;Registry startup parameters: &lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; font-family: verdana,geneva; font-size: small;"&gt;&lt;i&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;-d C:\SQL2008R2\MSSQL10_50.SQL2008R2\MSSQL\DATA\master.mdf&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; font-family: verdana,geneva; font-size: small;"&gt;&lt;i&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;-e C:\SQL2008R2\MSSQL10_50.SQL2008R2\MSSQL\Log\ERRORLOG&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; font-family: verdana,geneva; font-size: small;"&gt;&lt;i&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;-l C:\SQL2008R2\MSSQL10_50.SQL2008R2\MSSQL\DATA\mastlog.ldf&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; font-family: verdana,geneva; font-size: small;"&gt;&lt;i&gt;&lt;span size="3"&gt;&lt;span face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;b&gt;-T 2371&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #ff0000; font-family: verdana,geneva; font-size: small;" face="Calibri" size="3"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;span style="color: #ff0000;"&gt;&lt;b&gt;&lt;span style="text-decoration: underline;"&gt;IMPORTANTE&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;: Sebbene dobbiate inserire &lt;b&gt;-T2371&lt;/b&gt; senza spazio tra &lt;b&gt;&amp;ndash;T&lt;/b&gt; e &lt;b&gt;2371&lt;/b&gt; negli &amp;ldquo;startup parameters&amp;rdquo;, nell&amp;rsquo;ERRORLOG lo spazio invece compare, non Vi preoccupate &amp;egrave; normale e deve essere cos&amp;igrave; altrimenti avete commesso un errore nella configurazione;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Anche per oggi &amp;egrave; tutto, mi raccomando: testate, testate ed ancora testate&amp;hellip;..&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;b&gt;&lt;span face="Calibri" size="3"&gt;--Igor Pagliai&amp;mdash;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3467289" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Performance/">Performance</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Statistics/">Statistics</category></item><item><title>Come esportare il contenuto di una istanza di Reporting Services</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/11/25/come-esportare-il-contenuto-di-una-istanza-di-reporting-services.aspx</link><pubDate>Fri, 25 Nov 2011 14:02:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3467279</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3467279</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/11/25/come-esportare-il-contenuto-di-una-istanza-di-reporting-services.aspx#comments</comments><description>&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Migrare reporting services e' una operazione ben documentata. Oggi vedremo come, con poche righe di codice, sia possibile esportare una istanza di reporting services su file system. Non entrero' nel dettaglio di come collegarsi e utilizzare il web service di reporting services (per dettagli vedere qui: &lt;a href="http://msdn.microsoft.com/en-us/library/bb522713.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb522713.aspx)&lt;/a&gt;. Mi limitero' a utilizzare questi due metodi che fanno al caso nostro:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;a title="FindItems Method" href="http://msdn.microsoft.com/en-us/library/reportservice2010.reportingservice2010.finditems.aspx"&gt;ReportingService2010.FindItems Method&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/reportservice2010.reportingservice2010.getitemdefinition.aspx"&gt;ReportingService2010.GetItemDefinition Method&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Il primo metodo e' in grado di restituire tutti gli oggetti di una istanza di RS, il secondo estrae il contenuto come array di bytes. Salvando su file system il contenuto noteremo che si tratta dello stesso XML (o meglio, RDL) che compone il report.&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Il codice a questo punto e' molto semplice (qui sotto ne pubblico uno spunto per una eventuale implementazione):&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre&gt;            RS2010.ReportingService2010SoapClient svc = &lt;span style="color: blue;"&gt;new&lt;/span&gt; RS2010.ReportingService2010SoapClient();
            svc.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
            svc.Endpoint.Address = &lt;span style="color: blue;"&gt;new&lt;/span&gt; System.ServiceModel.EndpointAddress(args[&lt;span style="color: maroon;"&gt;0&lt;/span&gt;]);

            RS2010.TrustedUserHeader tuh = &lt;span style="color: blue;"&gt;new&lt;/span&gt; RS2010.TrustedUserHeader();

            RS2010.CatalogItem[] items = &lt;span style="color: blue;"&gt;null&lt;/span&gt;;
            
            &lt;span style="color: green;"&gt;// Lettura di tutti gli oggetti del server&lt;/span&gt;
            svc.FindItems(tuh, &lt;span style="color: maroon;"&gt;"/"&lt;/span&gt;, RS2010.BooleanOperatorEnum.And,
                &lt;span style="color: blue;"&gt;new&lt;/span&gt; RS2010.Property[] { &lt;span style="color: blue;"&gt;new&lt;/span&gt; RS2010.Property() { Name = &lt;span style="color: maroon;"&gt;"Recursive"&lt;/span&gt;, Value = &lt;span style="color: maroon;"&gt;"true"&lt;/span&gt; } },
                &lt;span style="color: blue;"&gt;new&lt;/span&gt; RS2010.SearchCondition[] { },
                &lt;span style="color: blue;"&gt;out&lt;/span&gt; items);

            &lt;span style="color: blue;"&gt;#region&lt;/span&gt; Extract all
            &lt;span style="color: blue;"&gt;if&lt;/span&gt; (fExtractAll)
            {
                Console.WriteLine(&lt;span style="color: maroon;"&gt;"Extracting all items"&lt;/span&gt;);

                &lt;span style="color: blue;"&gt;byte&lt;/span&gt;[] bBuffer2;
                &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; i = &lt;span style="color: maroon;"&gt;0&lt;/span&gt;; i &amp;lt; items.Length; i++)
                {
                    &lt;span style="color: blue;"&gt;if&lt;/span&gt; (items[i] &lt;span style="color: blue;"&gt;is&lt;/span&gt; RS2010.CatalogItem)
                    {
                        RS2010.CatalogItem ci = (RS2010.CatalogItem)items[i];
                        &lt;span style="color: blue;"&gt;if&lt;/span&gt; (ci.TypeName == &lt;span style="color: maroon;"&gt;"Folder"&lt;/span&gt;)
                            &lt;span style="color: blue;"&gt;continue&lt;/span&gt;;

                        &lt;span style="color: blue;"&gt;try&lt;/span&gt;
                        {
                            Console.WriteLine(&lt;span style="color: maroon;"&gt;"Extracting "&lt;/span&gt; + ci.Path);

                            &lt;span style="color: green;"&gt;// Estrazione definizione dell'oggetto&lt;/span&gt;
                            svc.GetItemDefinition(tuh, ci.Path, &lt;span style="color: blue;"&gt;out&lt;/span&gt; bBuffer2);

                            &lt;span style="color: blue;"&gt;int&lt;/span&gt; idx = ci.Path.LastIndexOf(&lt;span style="color: maroon;"&gt;'/'&lt;/span&gt;);
                            &lt;span style="color: blue;"&gt;string&lt;/span&gt; strPath = ci.Path;
                            &lt;span style="color: blue;"&gt;if&lt;/span&gt; (idx &amp;gt; &lt;span style="color: maroon;"&gt;0&lt;/span&gt;)
                            {
                                strPath = strPath.Substring(&lt;span style="color: maroon;"&gt;0&lt;/span&gt;, idx);
                                strPath = strPath.Replace(&lt;span style="color: maroon;"&gt;'/'&lt;/span&gt;, System.IO.Path.DirectorySeparatorChar).Substring(&lt;span style="color: maroon;"&gt;1&lt;/span&gt;);
                            }
                            &lt;span style="color: blue;"&gt;else&lt;/span&gt;
                            {
                                strPath = &lt;span style="color: maroon;"&gt;""&lt;/span&gt;;
                            }

                            System.IO.DirectoryInfo di = &lt;span style="color: blue;"&gt;new&lt;/span&gt; System.IO.DirectoryInfo(
                                strBaseDirectory + System.IO.Path.DirectorySeparatorChar +
                                strPath);
                            &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!di.Exists)
                                di.Create();

                            &lt;span style="color: blue;"&gt;string&lt;/span&gt; strFileName = di.FullName + System.IO.Path.DirectorySeparatorChar + ci.Name;
                            &lt;span style="color: blue;"&gt;if&lt;/span&gt; (ci.TypeName == &lt;span style="color: maroon;"&gt;"Report"&lt;/span&gt;)
                                strFileName += &lt;span style="color: maroon;"&gt;".rdl"&lt;/span&gt;;
                            &lt;span style="color: blue;"&gt;else&lt;/span&gt;
                                strFileName += &lt;span style="color: maroon;"&gt;".xml"&lt;/span&gt;;

                            &lt;span style="color: blue;"&gt;using&lt;/span&gt; (System.IO.FileStream fs = &lt;span style="color: blue;"&gt;new&lt;/span&gt; System.IO.FileStream(
                                strFileName,
                                System.IO.FileMode.Create,
                                System.IO.FileAccess.ReadWrite,
                                System.IO.FileShare.Read))
                            {
                                fs.Write(bBuffer2, &lt;span style="color: maroon;"&gt;0&lt;/span&gt;, bBuffer2.Length);
                            }
                        }
                        &lt;span style="color: blue;"&gt;catch&lt;/span&gt; (Exception e)
                        {
                            Console.WriteLine(e.ToString());
                        }
                    }
                }
            }
            &lt;span style="color: blue;"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: verdana,geneva; font-size: small;"&gt;Un paio di note:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="color: #000000; font-family: verdana,geneva; font-size: small;"&gt;Ricordatevi di alzare il valore maxReceivedMessageSize del binding al WS.&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="color: #000000; font-family: verdana,geneva; font-size: small;"&gt;Per usare l'autenticazione integrata impostate&amp;nbsp;&lt;em&gt;security &lt;span face="Consolas" size="2" color="#ff0000"&gt;&lt;span face="Consolas" size="2" color="#ff0000"&gt;&lt;span face="Consolas" size="2" color="#ff0000"&gt;mode&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span face="Consolas" size="2" color="#0000ff"&gt;&lt;span face="Consolas" size="2" color="#0000ff"&gt;&lt;span face="Consolas" size="2" color="#0000ff"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span face="Consolas" size="2"&gt;&lt;span face="Consolas" size="2"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span face="Consolas" size="2" color="#0000ff"&gt;&lt;span face="Consolas" size="2" color="#0000ff"&gt;&lt;span face="Consolas" size="2" color="#0000ff"&gt;TransportCredentialOnly&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;span face="Consolas" size="2"&gt;&lt;span face="Consolas" size="2"&gt;&lt;em&gt;"&lt;/em&gt; e &lt;/span&gt;&lt;/span&gt;&lt;em&gt;transport &lt;span face="Consolas" size="2" color="#ff0000"&gt;&lt;span face="Consolas" size="2" color="#ff0000"&gt;&lt;span face="Consolas" size="2" color="#ff0000"&gt;clientCredentialType&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span face="Consolas" size="2" color="#0000ff"&gt;&lt;span face="Consolas" size="2" color="#0000ff"&gt;&lt;span face="Consolas" size="2" color="#0000ff"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span face="Consolas" size="2"&gt;&lt;span face="Consolas" size="2"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span face="Consolas" size="2" color="#0000ff"&gt;&lt;span face="Consolas" size="2" color="#0000ff"&gt;&lt;span face="Consolas" size="2" color="#0000ff"&gt;Windows&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span face="Consolas" size="2"&gt;&lt;span face="Consolas" size="2"&gt;".&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Benche' sia possibile esportare anche i shared data sources, fate attenzione perche' le password non verranno esportate.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: verdana,geneva; font-size: small;"&gt;Happy coding,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Francesco Cogno&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3467279" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Reporting+Services/">Reporting Services</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/C_2300_/">C#</category></item><item><title>Statistiche &amp; FULLSCAN</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/11/23/statistiche-amp-fullscan.aspx</link><pubDate>Wed, 23 Nov 2011 14:53:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3466967</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3466967</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/11/23/statistiche-amp-fullscan.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Le statistiche sono importanti. SQL Server, se opportunamente configurato, crea e manutiene le statistiche automaticamente. Questo bellissimo articolo&amp;nbsp;tratta in maniera esaustiva le statistiche: &lt;a href="http://msdn.microsoft.com/en-us/library/dd535534(v=SQL.100)"&gt;MSDN: Statistics Used by the Query Optimizer in Microsoft SQL Server 2008&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Ma come fare ad identificare le statistiche sottocampionate?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Potete provare con questo script che analizza tutti i DB di una istanza:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000000; background: #ffffff;"&gt;&lt;span style="color: #000084; font-weight: bold;"&gt;SET&lt;/span&gt; NOCOUNT &lt;span style="color: #000084; font-weight: bold;"&gt;ON&lt;/span&gt;

&lt;span style="color: #000084; font-weight: bold;"&gt;IF&lt;/span&gt; (&lt;span style="color: #000084; font-weight: bold;"&gt;OBJECT_ID&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;'tempdb..#tmpstat'&lt;/span&gt;) &lt;span style="color: #000084; font-weight: bold;"&gt;IS&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;NOT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;NULL&lt;/span&gt;)
    &lt;span style="color: #000084; font-weight: bold;"&gt;DROP&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; #tmpstat
&lt;span style="color: #000084; font-weight: bold;"&gt;IF&lt;/span&gt; (&lt;span style="color: #000084; font-weight: bold;"&gt;OBJECT_ID&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;'tempdb..#cmd'&lt;/span&gt;) &lt;span style="color: #000084; font-weight: bold;"&gt;IS&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;NOT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;NULL&lt;/span&gt;)
    &lt;span style="color: #000084; font-weight: bold;"&gt;DROP&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; #cmd
&lt;span style="color: #000084; font-weight: bold;"&gt;IF&lt;/span&gt; (&lt;span style="color: #000084; font-weight: bold;"&gt;OBJECT_ID&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;'tempdb..#tmpMismatch'&lt;/span&gt;) &lt;span style="color: #000084; font-weight: bold;"&gt;IS&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;NOT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;NULL&lt;/span&gt;)
    &lt;span style="color: #000084; font-weight: bold;"&gt;DROP&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; #tmpMismatch
&lt;span style="color: #000084; font-weight: bold;"&gt;IF&lt;/span&gt; (&lt;span style="color: #000084; font-weight: bold;"&gt;OBJECT_ID&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;'tempdb..#tmpstatDatabase'&lt;/span&gt;) &lt;span style="color: #000084; font-weight: bold;"&gt;IS&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;NOT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;NULL&lt;/span&gt;)
    &lt;span style="color: #000084; font-weight: bold;"&gt;DROP&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; #tmpstatDatabase
        
&lt;span style="color: #000084; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; #tmpstat(
    Name &lt;span style="color: #000084; font-weight: bold;"&gt;VARCHAR&lt;/span&gt;(255), 
    Updated DATETIME,
    [&lt;span style="color: #000084; font-weight: bold;"&gt;Rows&lt;/span&gt;] &lt;span style="color: #000084; font-weight: bold;"&gt;INT&lt;/span&gt;,
    [&lt;span style="color: #000084; font-weight: bold;"&gt;Rows&lt;/span&gt; Sampled] &lt;span style="color: #000084; font-weight: bold;"&gt;INT&lt;/span&gt;,
    [Steps] &lt;span style="color: #000084; font-weight: bold;"&gt;INT&lt;/span&gt;,
    [Density] &lt;span style="color: #000084; font-weight: bold;"&gt;INT&lt;/span&gt;,
    [Average &lt;span style="color: #000084; font-weight: bold;"&gt;key&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;length&lt;/span&gt;] &lt;span style="color: #000084; font-weight: bold;"&gt;FLOAT&lt;/span&gt;,
    [String &lt;span style="color: #000084; font-weight: bold;"&gt;Index&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;Filter&lt;/span&gt;] &lt;span style="color: #000084; font-weight: bold;"&gt;VARCHAR&lt;/span&gt;(255),
    [Expression] &lt;span style="color: #000084; font-weight: bold;"&gt;VARCHAR&lt;/span&gt;(255),
    [Unfiltered &lt;span style="color: #000084; font-weight: bold;"&gt;Rows&lt;/span&gt;] &lt;span style="color: #000084; font-weight: bold;"&gt;INT&lt;/span&gt;)
    
&lt;span style="color: #000084; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; #tmpstatDatabase(
    DatabaseName &lt;span style="color: #000084; font-weight: bold;"&gt;VARCHAR&lt;/span&gt;(255),
    [&lt;span style="color: #000084; font-weight: bold;"&gt;Object&lt;/span&gt;] &lt;span style="color: #000084; font-weight: bold;"&gt;VARCHAR&lt;/span&gt;(255),
    Statistic &lt;span style="color: #000084; font-weight: bold;"&gt;VARCHAR&lt;/span&gt;(255), 
    Updated DATETIME,
    [&lt;span style="color: #000084; font-weight: bold;"&gt;Rows&lt;/span&gt;] &lt;span style="color: #000084; font-weight: bold;"&gt;INT&lt;/span&gt;,
    [&lt;span style="color: #000084; font-weight: bold;"&gt;Rows&lt;/span&gt; Sampled] &lt;span style="color: #000084; font-weight: bold;"&gt;INT&lt;/span&gt;,
    [Steps] &lt;span style="color: #000084; font-weight: bold;"&gt;INT&lt;/span&gt;,
    [Density] &lt;span style="color: #000084; font-weight: bold;"&gt;INT&lt;/span&gt;,
    [Average &lt;span style="color: #000084; font-weight: bold;"&gt;key&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;length&lt;/span&gt;] &lt;span style="color: #000084; font-weight: bold;"&gt;FLOAT&lt;/span&gt;,
    [String &lt;span style="color: #000084; font-weight: bold;"&gt;Index&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;Filter&lt;/span&gt;] &lt;span style="color: #000084; font-weight: bold;"&gt;VARCHAR&lt;/span&gt;(255),
    [Expression] &lt;span style="color: #000084; font-weight: bold;"&gt;VARCHAR&lt;/span&gt;(255),
    [Unfiltered &lt;span style="color: #000084; font-weight: bold;"&gt;Rows&lt;/span&gt;] &lt;span style="color: #000084; font-weight: bold;"&gt;INT&lt;/span&gt;)
    
&lt;span style="color: #000084; font-weight: bold;"&gt;SELECT&lt;/span&gt; * &lt;span style="color: #000084; font-weight: bold;"&gt;INTO&lt;/span&gt; #tmpMismatch &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; #tmpstatDatabase;    

&lt;span style="color: #000084; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; #cmd(TsqlFullScan NVARCHAR(&lt;span style="color: #000084; font-weight: bold;"&gt;MAX&lt;/span&gt;))

&lt;span style="color: #000084; font-weight: bold;"&gt;DECLARE&lt;/span&gt; @dbname SYSNAME;
&lt;span style="color: #000084; font-weight: bold;"&gt;DECLARE&lt;/span&gt; @statement NVARCHAR(&lt;span style="color: #000084; font-weight: bold;"&gt;MAX&lt;/span&gt;);

&lt;span style="color: #000084; font-weight: bold;"&gt;DECLARE&lt;/span&gt; cDatabase &lt;span style="color: #000084; font-weight: bold;"&gt;CURSOR&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;FOR&lt;/span&gt;
&lt;span style="color: #000084; font-weight: bold;"&gt;SELECT&lt;/span&gt; name &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;sys&lt;/span&gt;.databases
&lt;span style="color: #000084; font-weight: bold;"&gt;WHERE&lt;/span&gt; name &lt;span style="color: #000084; font-weight: bold;"&gt;NOT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;IN&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;'master'&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;'msdb'&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;'tempdb'&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;'model'&lt;/span&gt;)
&lt;span style="color: #000084; font-weight: bold;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;BY&lt;/span&gt; name;

&lt;span style="color: #000084; font-weight: bold;"&gt;OPEN&lt;/span&gt; cDatabase;

&lt;span style="color: #000084; font-weight: bold;"&gt;FETCH&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;NEXT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; cDatabase &lt;span style="color: #000084; font-weight: bold;"&gt;INTO&lt;/span&gt; @dbname;

&lt;span style="color: #000084; font-weight: bold;"&gt;WHILE&lt;/span&gt; (@@FETCH_STATUS = 0)
&lt;span style="color: #000084; font-weight: bold;"&gt;BEGIN&lt;/span&gt;
    &lt;span style="color: #000084; font-weight: bold;"&gt;PRINT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;'Working on '&lt;/span&gt; + @dbname + &lt;span style="color: #0000ff;"&gt;'.'&lt;/span&gt;;
    &lt;span style="color: #000084; font-weight: bold;"&gt;SET&lt;/span&gt; @statement =
        &lt;span style="color: #0000ff;"&gt;'DECLARE cStats CURSOR FOR &lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;SELECT &lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;SCH.name AS Sch,&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;O.name AS Tab, &lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;S.name AS Obj&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;FROM ['&lt;/span&gt; + @dbname + &lt;span style="color: #0000ff;"&gt;'].sys.stats S&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;INNER JOIN ['&lt;/span&gt; + @dbname + &lt;span style="color: #0000ff;"&gt;'].sys.objects O ON S.object_id = O.object_id&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;INNER JOIN ['&lt;/span&gt; + @dbname + &lt;span style="color: #0000ff;"&gt;'].sys.schemas SCH ON O.schema_id = SCH.schema_id&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;WHERE O.type = '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'U'&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;ORDER BY S.name&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;DECLARE @sch VARCHAR(255)&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;DECLARE @tab VARCHAR(255)&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;DECLARE @obj VARCHAR(255)&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;DECLARE @cmd NVARCHAR(MAX)&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;OPEN cStats&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;FETCH NEXT FROM cStats INTO @sch, @tab, @obj&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;WHILE(@@FETCH_STATUS = 0)&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;SET @cmd = &lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;'&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'INSERT #tmpstat '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;' +&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;'&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'EXEC('&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;''&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'DBCC SHOW_STATISTICS(&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;'&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;''&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;''&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;''&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'['&lt;/span&gt; + @dbname + &lt;span style="color: #0000ff;"&gt;'].['&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;' +&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;@sch + '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'].['&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;' + @tab + '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;']'&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;''&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;''&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;''&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;', ['&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;' + &lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;@obj + '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;']) WITH STAT_HEADER, NO_INFOMSGS'&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;''&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;')'&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;--PRINT @cmd;&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;EXEC sp_executeSQL @cmd;&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;IF EXISTS(&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;SELECT * FROM #tmpstat&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;[Name] = @obj&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;AND &lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;ISNULL([Rows], 0) &amp;lt;&amp;gt; ISNULL([Rows Sampled], 0)&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;)&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;INSERT INTO #cmd&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;SELECT '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'UPDATE STATISTICS '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;' + &lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;'&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'['&lt;/span&gt; + @dbname + &lt;span style="color: #0000ff;"&gt;'].'&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;' +&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;'&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'['&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;' + @sch + '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'].['&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;' + @tab + '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'] WITH FULLSCAN'&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;INSERT INTO #tmpstatDatabase&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;SELECT '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;''&lt;/span&gt; + @dbname + &lt;span style="color: #0000ff;"&gt;''&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;', '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'['&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;' + @sch + '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'].['&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;' + @tab + '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;']'&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;', * FROM #tmpstat&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;INSERT INTO #tmpMismatch &lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;SELECT '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;''&lt;/span&gt; + @dbname + &lt;span style="color: #0000ff;"&gt;''&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;', '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'['&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;' + @sch + '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'].['&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;' + @tab + '&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;']'&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;', * FROM #tmpstat&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;[Name] = @obj&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;AND &lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;ISNULL([Rows], 0) &amp;lt;&amp;gt; ISNULL([Rows Sampled], 0) &lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;TRUNCATE TABLE #tmpstat;&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;FETCH NEXT FROM cStats INTO @sch, @tab, @obj &lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;END &lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;CLOSE cStats;&lt;/span&gt;
&lt;span style="color: #0000ff;"&gt;DEALLOCATE cStats;'&lt;/span&gt;
        
        &lt;span style="color: #808080;"&gt;--PRINT @statement;&lt;/span&gt;
        
        &lt;span style="color: #000084; font-weight: bold;"&gt;EXEC&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;master&lt;/span&gt;..sp_ExecuteSQL @statement;
        
        &lt;span style="color: #000084; font-weight: bold;"&gt;FETCH&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;NEXT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; cDatabase &lt;span style="color: #000084; font-weight: bold;"&gt;INTO&lt;/span&gt; @dbname;
&lt;span style="color: #000084; font-weight: bold;"&gt;END&lt;/span&gt;

&lt;span style="color: #000084; font-weight: bold;"&gt;CLOSE&lt;/span&gt; cDatabase;
&lt;span style="color: #000084; font-weight: bold;"&gt;DEALLOCATE&lt;/span&gt; cDatabase;

&lt;span style="color: #808080;"&gt;--SELECT * FROM #tmpstatDatabase;&lt;/span&gt;
&lt;span style="color: #000084; font-weight: bold;"&gt;SELECT&lt;/span&gt; * &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; #tmpMismatch;
&lt;span style="color: #000084; font-weight: bold;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;DISTINCT&lt;/span&gt; * &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; #cmd;

&lt;span style="color: #000084; font-weight: bold;"&gt;DROP&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; #tmpstat;
&lt;span style="color: #000084; font-weight: bold;"&gt;DROP&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; #cmd;
&lt;span style="color: #000084; font-weight: bold;"&gt;DROP&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; #tmpMismatch;
&lt;span style="color: #000084; font-weight: bold;"&gt;DROP&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; #tmpstatDatabase;
&lt;span style="color: #000084; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;L'output sara' l'elenco di statistiche sottocampionate. Il secondo recordset e' l'elenco dei comandi T-SQL per correggere la situazione.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/8372.upd2.png"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/8372.upd2.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Happy coding,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Francesco Cogno&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3466967" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/T_2D00_SQL/">T-SQL</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Performance/">Performance</category></item><item><title>Uno sguardo nello schema di ShowPlanXML: come individuare i table scans con XPath</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/11/03/uno-sguardo-nello-schema-di-showplanxml-come-individuare-i-table-scans-con-xpath.aspx</link><pubDate>Thu, 03 Nov 2011 11:33:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3463022</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3463022</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/11/03/uno-sguardo-nello-schema-di-showplanxml-come-individuare-i-table-scans-con-xpath.aspx#comments</comments><description>&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Recentemente un cliente mi ha posto questa domanda: &amp;ldquo;come posso identificare le query ad-hoc che effettuano table scan?&amp;rdquo; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;La risposta e&amp;rsquo; semplice e consiste nel guardare il piano di esecuzione. Per esempio questa query:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre style="color: #000000; background: #ffffff;"&gt;&lt;span style="color: #000084; font-weight: bold;"&gt;SELECT&lt;/span&gt; * &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; charge;
&lt;span style="color: #000084; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Effettuata su una tabella heap senza indici risulta in un table scan, come si puo&amp;rsquo; vedere dal piano di esecuzione: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/4604.01_2D00_00.png"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/4604.01_2D00_00.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Ma se volessimo farlo programmaticamente? Se analizziamo lo schema del piano d&amp;rsquo;esecuzione (pubblicato all&amp;rsquo;indirizzo &lt;/span&gt;&lt;/span&gt;&lt;a href="http://schemas.microsoft.com/sqlserver/2004/07/showplan/"&gt;&lt;span style="color: #0000ff; font-size: small;" size="3" face="Calibri" color="#0000ff"&gt;http://schemas.microsoft.com/sqlserver/2004/07/showplan/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;) vediamo che lo schema e&amp;rsquo; semplice:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/6138.01_2D00_01.png"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/6138.01_2D00_01.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Dove&amp;nbsp; &lt;/span&gt;&lt;/span&gt;StmtBlockType&lt;span style="font-size: small;" size="3" face="Calibri"&gt; e&amp;rsquo; un &lt;/span&gt;complexType&lt;span style="font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt; cosi&amp;rsquo; definito:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:complexType&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;StmtBlockType&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
     &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:annotation&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
       &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:documentation&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;The statement block that contains many statements&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:documentation&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
     &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:annotation&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
     &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:sequence&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
       &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:choice&lt;/span&gt; &lt;span style="color: red;"&gt;minOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;maxOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;unbounded&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
         &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;StmtSimple&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:StmtSimpleType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
         &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;StmtCond&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:StmtCondType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
         &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;StmtCursor&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:StmtCursorType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
         &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;StmtReceive&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:StmtReceiveType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
         &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;StmtUseDb&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:StmtUseDbType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
       &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:choice&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
     &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:sequence&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:complexType&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
 &lt;/pre&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;" size="3" face="Calibri"&gt;Per la nostra indagine ci interessano gli &lt;/span&gt;StmpSimpleType&lt;span style="font-size: small;" size="3" face="Calibri"&gt;. Al suo interno poniamo l&amp;rsquo;attenzione su&lt;/span&gt; QueryPlanType&lt;span style="font-size: small;" size="3" face="Calibri"&gt;:&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:complexType&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;StmtSimpleType&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:annotation&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:documentation&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;The simple statement that may or may not contain query plan, UDF plan or Stored Procedure plan &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:documentation&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:annotation&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:complexContent&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:extension&lt;/span&gt; &lt;span style="color: red;"&gt;base&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:BaseStmtInfoType&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:sequence&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
          &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;QueryPlan&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:QueryPlanType&lt;/span&gt;" &lt;span style="color: red;"&gt;minOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;maxOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
          &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;UDF&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:FunctionType&lt;/span&gt;" &lt;span style="color: red;"&gt;minOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;maxOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;unbounded&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
          &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;StoredProc&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:FunctionType&lt;/span&gt;" &lt;span style="color: red;"&gt;minOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;maxOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:sequence&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:extension&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:complexContent&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:complexType&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Notiamo che, come atteso, possiamo avere un solo QueryPlan per StmtSimple (opzionale).&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:complexType&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;QueryPlanType&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:annotation&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:documentation&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
			New Runtime information:
			DegreeOfParallelism
			MemoryGrant (in kilobytes)
			
			New compile time information:
			mem fractions
			CachedPlanSize (in kilobytes)
			CompileTime (in milliseconds)
			CompileCPU (in milliseconds)
			CompileMemory (in kilobytes)
			Parameter values used during query compilation
			&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:documentation&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:annotation&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:sequence&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;InternalInfo&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:InternalInfoType&lt;/span&gt;" &lt;span style="color: red;"&gt;minOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;maxOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;MissingIndexes&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:MissingIndexesType&lt;/span&gt;" &lt;span style="color: red;"&gt;minOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;maxOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;GuessedSelectivity&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:GuessedSelectivityType&lt;/span&gt;" &lt;span style="color: red;"&gt;minOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;maxOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;UnmatchedIndexes&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:UnmatchedIndexesType&lt;/span&gt;" &lt;span style="color: red;"&gt;minOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;maxOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;RelOp&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:RelOpType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;ParameterList&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:ColumnReferenceListType&lt;/span&gt;" &lt;span style="color: red;"&gt;minOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;maxOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:sequence&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;DegreeOfParallelism&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:int&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;optional&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;MemoryGrant&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:unsignedLong&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;optional&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;CachedPlanSize&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:unsignedLong&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;optional&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;CompileTime&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:unsignedLong&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;optional&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;CompileCPU&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:unsignedLong&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;optional&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;CompileMemory&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:unsignedLong&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;optional&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;UsePlan&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:boolean&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;optional&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:complexType&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Il QueryPlan ha tantissime informazioni, inclusa quella che stiamo cercando: il RelOpType. Lascio a voi esplorare le decine di elementi e attributi che compongono questo tipo complesso. Basti per ora sapere che un attributo e&amp;rsquo; quello che fa al caso nostro&lt;/span&gt;:&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:complexType&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;RelOpType&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:sequence&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;OutputList&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:ColumnReferenceListType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Warnings&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:WarningsType&lt;/span&gt;" &lt;span style="color: red;"&gt;minOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;maxOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;MemoryFractions&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:MemoryFractionsType&lt;/span&gt;" &lt;span style="color: red;"&gt;minOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;maxOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;RunTimeInformation&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:RunTimeInformationType&lt;/span&gt;" &lt;span style="color: red;"&gt;minOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;maxOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;RunTimePartitionSummary&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:RunTimePartitionSummaryType&lt;/span&gt;" &lt;span style="color: red;"&gt;minOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;maxOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;     
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;InternalInfo&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:InternalInfoType&lt;/span&gt;" &lt;span style="color: red;"&gt;minOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;maxOccurs&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:choice&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Assert&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:FilterType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Bitmap&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:BitmapType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Collapse&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:CollapseType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;ComputeScalar&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:ComputeScalarType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Concat&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:ConcatType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;ConstantScan&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:ConstantScanType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;CreateIndex&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:CreateIndexType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;DeletedScan&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:RowsetType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Extension&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:UDXType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Filter&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:FilterType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Generic&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:GenericType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Hash&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:HashType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;IndexScan&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:IndexScanType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;InsertedScan&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:RowsetType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;LogRowScan&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:RelOpBaseType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Merge&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:MergeType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;MergeInterval&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:SimpleIteratorOneChildType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;NestedLoops&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:NestedLoopsType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;OnlineIndex&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:CreateIndexType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Parallelism&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:ParallelismType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;ParameterTableScan&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:RelOpBaseType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;PrintDataflow&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:RelOpBaseType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;RemoteFetch&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:RemoteFetchType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;RemoteModify&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:RemoteModifyType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;RemoteQuery&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:RemoteQueryType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;RemoteRange&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:RemoteRangeType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;RemoteScan&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:RemoteType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;RowCountSpool&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:SpoolType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;ScalarInsert&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:ScalarInsertType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Segment&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:SegmentType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Sequence&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:SequenceType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;SequenceProject&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:ComputeScalarType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;SimpleUpdate&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:SimpleUpdateType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Sort&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:SortType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Split&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:SplitType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Spool&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:SpoolType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;StreamAggregate&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:StreamAggregateType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Switch&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:SwitchType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;TableScan&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:TableScanType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;TableValuedFunction&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:TableValuedFunctionType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Top&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:TopType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;TopSort&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:TopSortType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:element&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Update&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:UpdateType&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:choice&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:sequence&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;AvgRowSize&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:double&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;required&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;EstimateCPU&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:double&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;required&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;EstimateIO&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:double&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;required&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;EstimateRebinds&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:double&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;required&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;EstimateRewinds&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:double&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;required&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;GroupExecuted&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:boolean&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;optional&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;EstimateRows&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:double&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;required&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;LogicalOp&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:LogicalOpType&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;required&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;NodeId&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:int&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;required&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Parallel&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:boolean&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;required&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;Partitioned&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:boolean&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;optional&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;PhysicalOp&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;shp:PhysicalOpType&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;required&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;EstimatedTotalSubtreeCost&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:double&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;required&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:attribute&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;="&lt;span style="color: blue;"&gt;TableCardinality&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:double&lt;/span&gt;" &lt;span style="color: red;"&gt;use&lt;/span&gt;="&lt;span style="color: blue;"&gt;optional&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:complexType&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Questo tipo e&amp;rsquo; un enumerato (o meglio, una xsd:string ristretta) che puo&amp;rsquo; avere uno di questi valori:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre&gt;    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:restriction&lt;/span&gt; &lt;span style="color: red;"&gt;base&lt;/span&gt;="&lt;span style="color: blue;"&gt;xsd:string&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Aggregate&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Assert&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Async Concat&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Bitmap Create&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Clustered Index Scan&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Clustered Index Seek&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Clustered Update&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Collapse&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Compute Scalar&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Concatenation&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Constant Scan&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Cross Join&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Delete&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Deleted Scan&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Distinct Sort&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Distinct&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Distribute Streams&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Eager Spool&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Filter&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Flow Distinct&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Full Outer Join&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Gather Streams&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Generic&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Index Scan&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Index Seek&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Inner Join&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Insert&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Inserted Scan&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Lazy Spool&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Left Anti Semi Join&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Left Outer Join&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Left Semi Join&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Log Row Scan&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Merge Interval&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Parameter Table Scan&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Partial Aggregate&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Print&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Remote Delete&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Remote Index Scan&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Remote Index Seek&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Remote Insert&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Remote Query&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Remote Scan&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Remote Update&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Repartition Streams&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;RID Lookup&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Right Anti Semi Join&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Right Outer Join&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Right Semi Join&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Segment&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Sequence&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Sort&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Split&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Switch&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Table-valued function&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Table Scan&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Top&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;TopN Sort&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;UDX&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Union&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Update&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;xsd:enumeration&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;="&lt;span style="color: blue;"&gt;Merge&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:restriction&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;xsd:simpleType&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Ora, tornando alla nostra query, esaminiamo l&amp;rsquo;XML del piano d&amp;rsquo;esecuzione (menu contestuale -&amp;gt; Show execution plan XML...) qui semplificato per brevita&amp;rsquo;:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: maroon;"&gt;xml&lt;/span&gt; &lt;span style="color: red;"&gt;version&lt;/span&gt;="&lt;span style="color: blue;"&gt;1.0&lt;/span&gt;" &lt;span style="color: red;"&gt;encoding&lt;/span&gt;="&lt;span style="color: blue;"&gt;utf-16&lt;/span&gt;"&lt;span style="color: blue;"&gt;?&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;ShowPlanXML&lt;/span&gt; &lt;span style="color: red;"&gt;xmlns:xsi&lt;/span&gt;="&lt;span style="color: blue;"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/span&gt;" &lt;span style="color: red;"&gt;xmlns:xsd&lt;/span&gt;="&lt;span style="color: blue;"&gt;http://www.w3.org/2001/XMLSchema&lt;/span&gt;" &lt;span style="color: red;"&gt;Version&lt;/span&gt;="&lt;span style="color: blue;"&gt;1.1&lt;/span&gt;" &lt;span style="color: red;"&gt;Build&lt;/span&gt;="&lt;span style="color: blue;"&gt;10.50.2769.0&lt;/span&gt;" &lt;span style="color: red;"&gt;xmlns&lt;/span&gt;="&lt;span style="color: blue;"&gt;http://schemas.microsoft.com/sqlserver/2004/07/showplan&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;BatchSequence&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Batch&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Statements&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;StmtSimple&lt;/span&gt; &lt;span style="color: red;"&gt;StatementCompId&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;" &lt;span style="color: red;"&gt;StatementEstRows&lt;/span&gt;="&lt;span style="color: blue;"&gt;100000&lt;/span&gt;" &lt;span style="color: red;"&gt;StatementId&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;" &lt;span style="color: red;"&gt;StatementOptmLevel&lt;/span&gt;="&lt;span style="color: blue;"&gt;TRIVIAL&lt;/span&gt;" &lt;span style="color: red;"&gt;StatementSubTreeCost&lt;/span&gt;="&lt;span style="color: blue;"&gt;0.543652&lt;/span&gt;" &lt;span style="color: red;"&gt;StatementText&lt;/span&gt;="&lt;span style="color: blue;"&gt;SELECT * FROM charge;&amp;amp;#xD;&amp;amp;#xA;&lt;/span&gt;" &lt;span style="color: red;"&gt;StatementType&lt;/span&gt;="&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt;" &lt;span style="color: red;"&gt;QueryHash&lt;/span&gt;="&lt;span style="color: blue;"&gt;0x6AFC07EFC55B8B3D&lt;/span&gt;" &lt;span style="color: red;"&gt;QueryPlanHash&lt;/span&gt;="&lt;span style="color: blue;"&gt;0x41C1392D57C141DB&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
          &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;StatementSetOptions&lt;/span&gt; &lt;span style="color: red;"&gt;ANSI_NULLS&lt;/span&gt;="&lt;span style="color: blue;"&gt;true&lt;/span&gt;" &lt;span style="color: red;"&gt;ANSI_PADDING&lt;/span&gt;="&lt;span style="color: blue;"&gt;true&lt;/span&gt;" &lt;span style="color: red;"&gt;ANSI_WARNINGS&lt;/span&gt;="&lt;span style="color: blue;"&gt;true&lt;/span&gt;" &lt;span style="color: red;"&gt;ARITHABORT&lt;/span&gt;="&lt;span style="color: blue;"&gt;true&lt;/span&gt;" &lt;span style="color: red;"&gt;CONCAT_NULL_YIELDS_NULL&lt;/span&gt;="&lt;span style="color: blue;"&gt;true&lt;/span&gt;" &lt;span style="color: red;"&gt;NUMERIC_ROUNDABORT&lt;/span&gt;="&lt;span style="color: blue;"&gt;false&lt;/span&gt;" &lt;span style="color: red;"&gt;QUOTED_IDENTIFIER&lt;/span&gt;="&lt;span style="color: blue;"&gt;true&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
          &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;QueryPlan&lt;/span&gt; &lt;span style="color: red;"&gt;DegreeOfParallelism&lt;/span&gt;="&lt;span style="color: blue;"&gt;1&lt;/span&gt;" &lt;span style="color: red;"&gt;CachedPlanSize&lt;/span&gt;="&lt;span style="color: blue;"&gt;16&lt;/span&gt;" &lt;span style="color: red;"&gt;CompileTime&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;CompileCPU&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;CompileMemory&lt;/span&gt;="&lt;span style="color: blue;"&gt;72&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;RelOp&lt;/span&gt; &lt;span style="color: red;"&gt;AvgRowSize&lt;/span&gt;="&lt;span style="color: blue;"&gt;45&lt;/span&gt;" &lt;span style="color: red;"&gt;EstimateCPU&lt;/span&gt;="&lt;span style="color: blue;"&gt;0.110079&lt;/span&gt;" &lt;span style="color: red;"&gt;EstimateIO&lt;/span&gt;="&lt;span style="color: blue;"&gt;0.433574&lt;/span&gt;" &lt;span style="color: red;"&gt;EstimateRebinds&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;EstimateRewinds&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;EstimateRows&lt;/span&gt;="&lt;span style="color: blue;"&gt;100000&lt;/span&gt;" &lt;span style="color: red;"&gt;LogicalOp&lt;/span&gt;="&lt;span style="color: blue;"&gt;Table Scan&lt;/span&gt;" &lt;span style="color: red;"&gt;NodeId&lt;/span&gt;="&lt;span style="color: blue;"&gt;0&lt;/span&gt;" &lt;span style="color: red;"&gt;Parallel&lt;/span&gt;="&lt;span style="color: blue;"&gt;false&lt;/span&gt;" &lt;span style="color: red;"&gt;PhysicalOp&lt;/span&gt;="&lt;span style="color: blue;"&gt;Table Scan&lt;/span&gt;" &lt;span style="color: red;"&gt;EstimatedTotalSubtreeCost&lt;/span&gt;="&lt;span style="color: blue;"&gt;0.543652&lt;/span&gt;" &lt;span style="color: red;"&gt;TableCardinality&lt;/span&gt;="&lt;span style="color: blue;"&gt;100000&lt;/span&gt;" /&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;             
          &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;QueryPlan&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;StmtSimple&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;Statements&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;Batch&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;BatchSequence&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon;"&gt;ShowPlanXML&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Ora che sappiamo dove trovare l&amp;rsquo;informazione che ci serve possiamo &amp;ndash; ad esempio &amp;ndash; interrogare la DMV dei piani di esecuzione in cache per identificare le query cachate che hanno eseguito table scans:&lt;/span&gt;&lt;/p&gt;
&lt;div style="overflow: scroll;"&gt;
&lt;pre style="color: #000000; background: #ffffff;"&gt;&lt;span style="color: #000084; font-weight: bold;"&gt;WITH&lt;/span&gt; 
    XMLNAMESPACES(&lt;span style="color: #000084; font-weight: bold;"&gt;DEFAULT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;'http://schemas.microsoft.com/sqlserver/2004/07/showplan'&lt;/span&gt;),
    CTE &lt;span style="color: #000084; font-weight: bold;"&gt;AS&lt;/span&gt;
    (
        &lt;span style="color: #000084; font-weight: bold;"&gt;SELECT&lt;/span&gt; 
        P.plan_handle, P.cacheobjtype
        &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;sys&lt;/span&gt;.dm_exec_cached_plans P
        &lt;span style="color: #000084; font-weight: bold;"&gt;CROSS&lt;/span&gt; APPLY &lt;span style="color: #000084; font-weight: bold;"&gt;sys&lt;/span&gt;.dm_exec_query_plan(P.plan_handle) QP
        &lt;span style="color: #000084; font-weight: bold;"&gt;CROSS&lt;/span&gt; APPLY QP.query_plan.nodes(&lt;span style="color: #0000ff;"&gt;'/ShowPlanXML/.//RelOp[@LogicalOp='&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'Table Scan'&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;']'&lt;/span&gt;) &lt;span style="color: #000084; font-weight: bold;"&gt;AS&lt;/span&gt; rp(stmt)
        &lt;span style="color: #000084; font-weight: bold;"&gt;GROUP&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;BY&lt;/span&gt; P.plan_handle, P.cacheobjtype
    )
    &lt;span style="color: #000084; font-weight: bold;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;A&lt;/span&gt;.plan_handle, &lt;span style="color: #000084; font-weight: bold;"&gt;A&lt;/span&gt;.cacheobjtype, EQP.query_plan &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; CTE &lt;span style="color: #000084; font-weight: bold;"&gt;A&lt;/span&gt;
    &lt;span style="color: #000084; font-weight: bold;"&gt;CROSS&lt;/span&gt; APPLY &lt;span style="color: #000084; font-weight: bold;"&gt;sys&lt;/span&gt;.dm_exec_query_plan(&lt;span style="color: #000084; font-weight: bold;"&gt;A&lt;/span&gt;.plan_handle) EQP
&lt;/pre&gt;
&lt;/div&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;La stessa logica si puo&amp;rsquo; adottare per identificare, ad esempio, l&amp;rsquo;utilizzo di un particolare indice o il grado di parallelismo. &lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Happy coding, &lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Francesco Cogno&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3463022" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/T_2D00_SQL/">T-SQL</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/XML/">XML</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/XSD/">XSD</category></item><item><title>La fiducia delle constraints e come questo puo’ impattare i vostri piani d’esecuzione</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/11/03/la-fiducia-delle-constraints-e-come-questo-puo-impattare-i-vostri-piani-d-esecuzione.aspx</link><pubDate>Thu, 03 Nov 2011 11:16:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3463018</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3463018</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/11/03/la-fiducia-delle-constraints-e-come-questo-puo-impattare-i-vostri-piani-d-esecuzione.aspx#comments</comments><description>&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Tutti noi sappiamo che i constraint sono un ottimo modo per assicurarci l&amp;rsquo;aderenza del nostro schema alle business rules. Quello che e&amp;rsquo; meno noto e&amp;rsquo; che SQL Server, dietro le quinte, utilizza i nostri constraints durante la scelta del piano d&amp;rsquo;esecuzione ottimale. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Per vederlo all&amp;rsquo;opera creiamo tre tabelle con i relativi constaints:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre style="color: #000000; background: #ffffff;"&gt;&lt;span style="color: #000084; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;DATABASE&lt;/span&gt; Demo;
&lt;span style="color: #000084; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #000084; font-weight: bold;"&gt;USE&lt;/span&gt; Demo;
&lt;span style="color: #000084; font-weight: bold;"&gt;GO&lt;/span&gt;

&lt;span style="color: #808080;"&gt;--2000&lt;/span&gt;
&lt;span style="color: #000084; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; Demo2000(&lt;span style="color: #000084; font-weight: bold;"&gt;id&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;INT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;IDENTITY&lt;/span&gt;(1,1) &lt;span style="color: #000084; font-weight: bold;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;KEY&lt;/span&gt;, txt NVARCHAR(255), dt DATETIME)
&lt;span style="color: #000084; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;span style="color: #000084; font-weight: bold;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; [dbo].[Demo2000]  &lt;span style="color: #000084; font-weight: bold;"&gt;WITH&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;CHECK&lt;/span&gt; 
&lt;span style="color: #000084; font-weight: bold;"&gt;ADD&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;CONSTRAINT&lt;/span&gt; [CK_Demo2000_dt] &lt;span style="color: #000084; font-weight: bold;"&gt;CHECK&lt;/span&gt; (([dt]&amp;gt;=&lt;span style="color: #0000ff;"&gt;'2000-01-01'&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;AND&lt;/span&gt; [dt]&amp;lt;&lt;span style="color: #0000ff;"&gt;'2001-01-01'&lt;/span&gt;))
&lt;span style="color: #000084; font-weight: bold;"&gt;GO&lt;/span&gt;

&lt;span style="color: #808080;"&gt;--2001&lt;/span&gt;
&lt;span style="color: #000084; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; Demo2001(&lt;span style="color: #000084; font-weight: bold;"&gt;id&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;INT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;IDENTITY&lt;/span&gt;(1,1) &lt;span style="color: #000084; font-weight: bold;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;KEY&lt;/span&gt;, txt NVARCHAR(255), dt DATETIME)
&lt;span style="color: #000084; font-weight: bold;"&gt;GO&lt;/span&gt; 
&lt;span style="color: #000084; font-weight: bold;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; [dbo].[Demo2001]  &lt;span style="color: #000084; font-weight: bold;"&gt;WITH&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;CHECK&lt;/span&gt; 
&lt;span style="color: #000084; font-weight: bold;"&gt;ADD&lt;/span&gt;  &lt;span style="color: #000084; font-weight: bold;"&gt;CONSTRAINT&lt;/span&gt; [CK_Demo2001_dt] &lt;span style="color: #000084; font-weight: bold;"&gt;CHECK&lt;/span&gt;  (([dt]&amp;gt;=&lt;span style="color: #0000ff;"&gt;'2001-01-01'&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;AND&lt;/span&gt; [dt]&amp;lt;&lt;span style="color: #0000ff;"&gt;'2002-01-01'&lt;/span&gt;))
&lt;span style="color: #000084; font-weight: bold;"&gt;GO&lt;/span&gt;

&lt;span style="color: #808080;"&gt;--2002&lt;/span&gt;
&lt;span style="color: #000084; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; Demo2002(&lt;span style="color: #000084; font-weight: bold;"&gt;id&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;INT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;IDENTITY&lt;/span&gt;(1,1) &lt;span style="color: #000084; font-weight: bold;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;KEY&lt;/span&gt;, txt NVARCHAR(255), dt DATETIME)
&lt;span style="color: #000084; font-weight: bold;"&gt;GO&lt;/span&gt; 
&lt;span style="color: #000084; font-weight: bold;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; [dbo].[Demo2002]  &lt;span style="color: #000084; font-weight: bold;"&gt;WITH&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;CHECK&lt;/span&gt; 
&lt;span style="color: #000084; font-weight: bold;"&gt;ADD&lt;/span&gt;  &lt;span style="color: #000084; font-weight: bold;"&gt;CONSTRAINT&lt;/span&gt; [CK_Demo2002_dt] &lt;span style="color: #000084; font-weight: bold;"&gt;CHECK&lt;/span&gt;  (([dt]&amp;gt;=&lt;span style="color: #0000ff;"&gt;'2002-01-01'&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;AND&lt;/span&gt; [dt]&amp;lt;&lt;span style="color: #0000ff;"&gt;'2003-01-01'&lt;/span&gt;))
&lt;span style="color: #000084; font-weight: bold;"&gt;GO&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Ciascuna tabella rappresenta un anno di record. Inseriamo alcuni valori nelle tabelle (ovviamente tenendo conto dei constraints):&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre style="color: #000000; background: #ffffff;"&gt;&lt;span style="color: #000084; font-weight: bold;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;INTO&lt;/span&gt; Demo2000(txt, dt) &lt;span style="color: #000084; font-weight: bold;"&gt;VALUES&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;'a'&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;'2000-03-30'&lt;/span&gt;);
&lt;span style="color: #000084; font-weight: bold;"&gt;GO&lt;/span&gt; 100

&lt;span style="color: #000084; font-weight: bold;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;INTO&lt;/span&gt; Demo2000(txt, dt) &lt;span style="color: #000084; font-weight: bold;"&gt;VALUES&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;'b'&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;'2000-05-10'&lt;/span&gt;);
&lt;span style="color: #000084; font-weight: bold;"&gt;GO&lt;/span&gt; 100

&lt;span style="color: #000084; font-weight: bold;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;INTO&lt;/span&gt; Demo2001(txt, dt) &lt;span style="color: #000084; font-weight: bold;"&gt;VALUES&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;'a'&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;'2001-03-30'&lt;/span&gt;);
&lt;span style="color: #000084; font-weight: bold;"&gt;GO&lt;/span&gt; 100

&lt;span style="color: #000084; font-weight: bold;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;INTO&lt;/span&gt; Demo2002(txt, dt) &lt;span style="color: #000084; font-weight: bold;"&gt;VALUES&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;'a'&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;'2002-03-30'&lt;/span&gt;);
&lt;span style="color: #000084; font-weight: bold;"&gt;GO&lt;/span&gt; 100
&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Ora supponiamo che per comodita&amp;rsquo; venga creata questa vista riepilogativa:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre style="color: #000000; background: #ffffff;"&gt;&lt;span style="color: #000084; font-weight: bold;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;VIEW&lt;/span&gt; DemoView
&lt;span style="color: #000084; font-weight: bold;"&gt;AS&lt;/span&gt;

&lt;span style="color: #000084; font-weight: bold;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;id&lt;/span&gt;, txt, dt &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; Demo2000

&lt;span style="color: #000084; font-weight: bold;"&gt;UNION&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;ALL&lt;/span&gt;
&lt;span style="color: #000084; font-weight: bold;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;id&lt;/span&gt;, txt, dt &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; Demo2001
&lt;span style="color: #000084; font-weight: bold;"&gt;UNION&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;ALL&lt;/span&gt;
&lt;span style="color: #000084; font-weight: bold;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;id&lt;/span&gt;, txt, dt &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; Demo2002
&lt;/pre&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Le query di interrogazione utilizzeranno i constraints creati? Per controllarlo basta effettuare una semplice query guardando il piano d&amp;rsquo;esecuzione:&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre style="background: #ffffff; color: #000000;"&gt;&lt;span style="color: #000084; font-weight: bold;"&gt;SELECT&lt;/span&gt; * &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; DemoView &lt;span style="color: #000084; font-weight: bold;"&gt;WHERE&lt;/span&gt; dt = &lt;span style="color: #0000ff;"&gt;'2001-03-30'&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background: #ffffff; color: #000000;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/8407.00_2D00_00.png"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/8407.00_2D00_00.png" /&gt;&lt;/a&gt; &lt;/pre&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Come si vede, SQL Server sa che il risultato della query sara&amp;rsquo; soddisfatto &lt;i&gt;solo &lt;/i&gt;dalla tabella Demo2001 e quindi non effettua scansione delle altre due rimanenti (Demo2000 e Demo2002). Questa operazione riduce il carico di IO necessario per soddisfare la query. Quindi SQL Server utilizza attivamente le nostre constraints per ottimizzare il piano d&amp;rsquo;esecuzione.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Ora, pero&amp;rsquo;, supponiamo che per risparmiare spazio sul DB decidiamo di svuotare la tabella del 2000. Prima di farlo esportiamo i dati con BCP in modo da portere, in seguito, reimportare i dati in caso diventasse necessario. La sintassi e&amp;rsquo; la seguente:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;bcp Demo.dbo.Demo2000 out Demo2000.dat -S &amp;lt;your instance&amp;gt; -T &amp;ndash;N&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Ove al posto di &lt;span style="font-family: courier new,courier;"&gt;&amp;lt;your instance&amp;gt;&lt;/span&gt; dovete ovviamente mettere la vostra instanza. &amp;nbsp;Ora svuotare la tabella del 2000 e&amp;rsquo; semplice e &lt;/span&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;veloce:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000084; font-weight: bold;"&gt;TRUNCATE&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; Demo2000&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Ma se ora vi servissero di nuovo i dati del 2000? Semplice, basta reimportare il file esportato precedentemente:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;bcp Demo.dbo.Demo2000 in Demo2000.dat -S &amp;lt;your instance&amp;gt; -T &amp;ndash;N&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Eseguendo la query:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000084; font-weight: bold;"&gt;SELECT&lt;/span&gt; * &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; DemoView &lt;span style="color: #000084; font-weight: bold;"&gt;WHERE&lt;/span&gt; dt = &lt;span style="color: #0000ff;"&gt;'2000-03-30'&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Otteniamo il risultato atteso:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/0552.00_2D00_01.png"&gt;&lt;img style="border: 0px currentColor;" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/0552.00_2D00_01.png" width="280" height="375" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;I dati sono stati reimportati correttamente. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Se pero&amp;rsquo; eseguiamo la query del &lt;b&gt;2001&lt;/b&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000084; font-weight: bold;"&gt;SELECT&lt;/span&gt; * &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; DemoView &lt;span style="color: #000084; font-weight: bold;"&gt;WHERE&lt;/span&gt; dt = &lt;span style="color: #0000ff;"&gt;'2001-03-30'&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Il risultato e&amp;rsquo; corretto. Notiamo pero' che &lt;span style="text-decoration: underline;"&gt;il piano d&amp;rsquo;esecuzione e&amp;rsquo; cambiato&lt;/span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/0216.00_2D00_02.png"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/0216.00_2D00_02.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Perche&amp;rsquo; ora SQL accede &lt;b&gt;sia alla tabella del&lt;/b&gt; &lt;b&gt;2001 che a quella del 2000&lt;/b&gt;? Non ci sono le constraints? La risposta e&amp;rsquo; si, ma non sono piu&amp;rsquo; &lt;i&gt;trusted&lt;/i&gt; (fidate). Il tool BCP, per efficienza, importa i dati &lt;span style="text-decoration: underline;"&gt;disattivando di default il controllo delle constraints&lt;/span&gt;. Cio&amp;rsquo; vuol dire che &amp;ndash; potenzialmente &amp;ndash; e&amp;rsquo; possibile importare dati che violino la constraint (cioe&amp;rsquo;, ad esempio, inserire record del 2001 nella tabella 2000). Dato che la constraint e&amp;rsquo; stata &lt;i&gt;potenzialmente&lt;/i&gt; violata, SQL non si fida piu&amp;rsquo; e crea un piano d&amp;rsquo;esecuzione che riflette questa sua sfiducia. Cio&amp;rsquo; e&amp;rsquo; deleterio per le performance (pensate se la tabella del 2000 avesse miloni di record!). Come si fa a sapere quindi se una constraint e&amp;rsquo; fidata (trusted)?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Con questa query:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000084; font-weight: bold;"&gt;SELECT&lt;/span&gt; is_not_trusted, * &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;sys&lt;/span&gt;.check_constraints &lt;span style="color: #000084; font-weight: bold;"&gt;WHERE&lt;/span&gt; name=&lt;span style="color: #0000ff;"&gt;'CK_Demo2000_dt'&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Il risultato, come ci aspettiamo, e&amp;rsquo; il seguente:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/7674.00_2D00_03.png"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/7674.00_2D00_03.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Come facciamo a riguadagnare fiducia in una constraint? Bisogna dire a SQL Server di analizzare &lt;i&gt;tutti&lt;/i&gt; i record della tabella e di assicurarsi che siano conformi alla constraint. Nel nostro caso cio&amp;rsquo; equivale a:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000084; font-weight: bold;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;TABLE&lt;/span&gt; Demo2000 &lt;span style="color: #000084; font-weight: bold;"&gt;WITH&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;CHECK&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;CHECK&lt;/span&gt; &lt;span style="color: #000084; font-weight: bold;"&gt;CONSTRAINT&lt;/span&gt; [CK_Demo2000_dt]&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Che riporta la situazione in questo modo:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/0878.00_2D00_04.png"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/0878.00_2D00_04.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;"&gt;Questo da la garanzia necessaria a SQL Server per ottimizzare il piano d&amp;rsquo;esecuzione della nostra query originaria:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000084; font-weight: bold;"&gt;SELECT&lt;/span&gt; * &lt;span style="color: #000084; font-weight: bold;"&gt;FROM&lt;/span&gt; DemoView &lt;span style="color: #000084; font-weight: bold;"&gt;WHERE&lt;/span&gt; dt = &lt;span style="color: #0000ff;"&gt;'2001-03-30'&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/7534.00_2D00_05.png"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/7534.00_2D00_05.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Morale: controllate periodicamente che le vostre constraints siano trusted. Ci sono tante operazioni che possono rendere le constraints insicure e l&amp;rsquo;effetto lo avete visto: i piani d&amp;rsquo;esecuzione sono peggiori. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Happy coding,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva; font-size: small;" size="3"&gt;&lt;span face="Calibri"&gt;Francesco Cogno&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3463018" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/T_2D00_SQL/">T-SQL</category></item><item><title>Cumulative Update Review: SQL 2008 SP3 CU1</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/10/31/cumulative-update-review-sql-2008-sp3-cu1.aspx</link><pubDate>Mon, 31 Oct 2011 14:03:23 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3462369</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3462369</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/10/31/cumulative-update-review-sql-2008-sp3-cu1.aspx#comments</comments><description>&lt;p&gt;Come spesso accade per la &lt;span style="text-decoration: underline;"&gt;prima &lt;/span&gt;&lt;i&gt;Cumulative Update &lt;/i&gt;(&lt;b&gt;CU&lt;/b&gt;) dopo ogni &lt;i&gt;Service Pack&lt;/i&gt; (&lt;b&gt;SP&lt;/b&gt;), il tempo necessario al rilascio &amp;egrave; molto breve, una o due settimane, per &lt;span style="text-decoration: underline;"&gt;due &lt;/span&gt;motivi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dato che una certa SP, per motivi temporali e di&lt;br /&gt;test, non riesce ad includere tutte ultime CU relative alla SP precedente, la&lt;br /&gt;CU1 ha sempre un certo carattere di urgenza per permettere ai clienti di&lt;br /&gt;applicare la nuova&amp;nbsp; SP anche se hanno&lt;br /&gt;installato una CU non coperta da codesta SP;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nel momento stesso in cui la lista delle hotfix&lt;br /&gt;da includere in una certa SP viene chiusa e si procede con i test finali,&lt;br /&gt;parallelamente si &amp;ldquo;apre&amp;rdquo; il progetto di lavorazione per la prima CU successiva;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un esempio concreto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="padding-left: 30px;"&gt;Il Cliente ha installato in produzione SQL Server 2008 SP2 con CU5 o CU6;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-left: 30px;"&gt;Come da mio post precedente, la SP3 include &lt;span style="text-decoration: underline;"&gt;solamente &lt;/span&gt;CU1, CU2, CU3 e CU4;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-left: 30px;"&gt;In questa situazione non &amp;egrave; consigliabile installare la SP3 altrimenti l&amp;rsquo;effetto immediato sar&amp;agrave; quello di &lt;span style="text-decoration: underline;"&gt;portare indietro il livello della versione di SQL Server a SP2 + CU4&lt;/span&gt;, ritornando quindi vulnerabili ai bug corretti in CU5 e CU6;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;b&gt;&lt;i&gt;&lt;span style="text-decoration: underline;"&gt;ATTENZIONE&lt;/span&gt;: Oltre al problema ora enunciato, ce ne potrebbero essere anche altri dovuti a questa sorta di &amp;ldquo;downgrade&amp;rdquo;; &amp;egrave; quindi caldamente consigliato installare la CU1 per SQL Server 2008 SP3 se avete inavvertitamente installato la SP3 &amp;ldquo;sopra&amp;rdquo; la SP2 con CU5 o CU6.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="padding-left: 30px;"&gt;Fermo restando quello appena detto, &amp;egrave; comunque ammissibile/consigliabile installare la SP3 sopra una istanza SQL con SP2 e CU5 o CU6 a patto di installare immediatamente dopo la CU1 per SP3.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ok,&amp;nbsp; smarcata questa importante considerazione su cosa e quando installare, passiamo al pratico.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;articolo di riferimento per la CU1 per SQL Server 2008 SP3 &amp;egrave; il seguente:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;Cumulative update package 1 for SQL Server 2008 Service Pack&lt;/i&gt;&lt;/b&gt; 3&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://support.microsoft.com/kb/2617146/en-us"&gt;http://support.microsoft.com/kb/2617146/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="text-decoration: underline;"&gt;NOTA&lt;/span&gt;&lt;/b&gt;: Essendo questo pacchetto &lt;span style="text-decoration: underline;"&gt;la prima CU&lt;/span&gt; relativa alla SP3, un nuovo articolo di Knowledge Base &amp;egrave; stato creato per tenere traccia di tutte quelle future relative alla stessa SP:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;SQL Server 2008 builds that were released after SQL Server 2008 SP3 was released&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://support.microsoft.com/kb/2629969/en-us"&gt;http://support.microsoft.com/kb/2629969/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Selezionando l&amp;rsquo;apposito link per scaricare l&amp;rsquo;aggiornamento, si pu&amp;ograve; vedere che stavolta c&amp;rsquo;&amp;egrave; un solo pacchetto da scaricare per piattaforma (x86, x64, IA64):&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/2311.PIPPO.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/2311.PIPPO.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Vi ricordo che ogni pacchetto include gli aggiornamenti per &lt;span style="text-decoration: underline;"&gt;tutte le lingue supportate&lt;/span&gt;, molto comodo anche se ci&amp;ograve; comporta un sensibile aumento di dimensione totale.&lt;/p&gt;
&lt;p&gt;Dopo il download del pacchetto da 177MB (versione x64), scompattiamo il contenuto in una directory temporanea giusto per dare un&amp;rsquo;occhiata alla struttura, per ottenere questo risultato lanciare il pacchetto da riga di comando con la solita opzione &amp;ldquo;&lt;b&gt;/x&lt;/b&gt;&amp;rdquo; (senza virgolette); fatto questo,&lt;br /&gt;dovete ancora lanciare l&amp;rsquo;eseguibile appena estratto, nuovamente con l&amp;rsquo;opzione /x&amp;rdquo;, ammetto che la cosa &amp;egrave; fastidiosa :-( , in ogni modo, vi dico subito che non c&amp;rsquo;&amp;egrave; nulla di eclatante, per questa volta le cose sono estremamente chiare.&lt;/p&gt;
&lt;p&gt;Nel caso vogliate &amp;ldquo;esplorare&amp;rdquo; i possibili parametri con cui lanciare a riga di comando il setup, dovete aggiungere l&amp;rsquo;opzione &amp;ldquo;/?&amp;rdquo; come al solito, la spiegazione di quello che vedrete la potete ripescare da uno dei miei post precedenti sulla review delle CU, niente di nuovo.&lt;/p&gt;
&lt;p&gt;Per quanto riguarda le hotfix importanti o critiche che Vi consiglio di verificare con attenzione, Vi segnalo le seguenti:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;&lt;em&gt;2530921: FIX: Incorrect results when you run an INSERT SELECT UNION ALL statement in SQL Server 2008 or in SQL Server 2008 R2&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://support.microsoft.com/kb/2530921"&gt;http://support.microsoft.com/kb/2530921&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;&lt;em&gt;2542225: FIX: Assertion failure or other issues occur when you run a DML query against a table or view that has two indexes in SQL Server 2008 or in SQL Server 2008 R2&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://support.microsoft.com/kb/2542225"&gt;http://support.microsoft.com/kb/2542225&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;&lt;em&gt;2574699: FIX: Database data files might be incorrectly marked as sparse in SQL Server 2008 R2 or in SQL Server 2008 even when the physical files are marked as not sparse in the file system&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://support.microsoft.com/kb/2574699"&gt;http://support.microsoft.com/kb/2574699&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Se poi siete interessati agli scenari di replica, allora &amp;egrave; consigliabile rivedere attentamente la fixlist di questa CU, ci sono 3 problemi di una cert&amp;agrave; gravit&amp;agrave; fissati.&lt;/p&gt;
&lt;p&gt;Buon lavoro a tutti !&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;--Igor Pagliai--&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3462369" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Cumulative+Updates/">Cumulative Updates</category></item><item><title>Annunciato il nome ufficiale della prossima versione di SQL Server</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/10/13/annunciato-il-nome-ufficiale-della-prossima-versione-di-sql-server.aspx</link><pubDate>Thu, 13 Oct 2011 07:36:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3459015</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3459015</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/10/13/annunciato-il-nome-ufficiale-della-prossima-versione-di-sql-server.aspx#comments</comments><description>&lt;p&gt;&lt;span style="color: black; font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin;"&gt;Salve a tutti,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="color: black; font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin;"&gt;Brevissimo post solo per annunciarVi che finalmente &amp;egrave; stato reso noto il nome ufficiale per la prossima versione di SQL Server, nome in codice "Denali": come probabilmente molti di Voi avranno immaginato il nome ufficiale sar&amp;agrave; "&lt;strong&gt;&lt;span style="font-family: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin;"&gt;SQL Server 2012&lt;/span&gt;&lt;/strong&gt;", la notizia &amp;egrave; stata appena data alla PASS Conference (&lt;/span&gt;&lt;a href="http://www.sqlpass.org/summit/2011"&gt;&lt;span style="font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin;"&gt;http://www.sqlpass.org/summit/2011&lt;/span&gt;&lt;/a&gt;&lt;span style="color: black; font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin;"&gt;) in corso a Seattle ! Sfortunatamente la data di rilascio &amp;egrave; ancora un p&amp;ograve; vaga, al momento le notizie ufficiali indicano "&lt;strong&gt;&lt;em&gt;&lt;span style="font-family: 'Calibri','sans-serif'; font-size: 12pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: IT; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;first half of 2012&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;".&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="color: black; font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/1261.SQL_5F00_Logo.gif"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/1261.SQL_5F00_Logo.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="color: black; font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin;"&gt;Moltissime le novit&amp;agrave; in arrivo, sicuramente sar&amp;agrave; un argomento molto caldo anche per il nostro blog.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: black; font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin;"&gt;-- Igor Pagliai --&lt;/span&gt;&lt;/strong&gt;&lt;span style="color: black; font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3459015" width="1" height="1"&gt;</description></item><item><title>Tutto quello che dovete sapere sulla Service Pack 3 per SQL Server 2008</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/10/12/tutto-quello-che-dovete-sapere-sulla-service-pack-3-per-sql-server-2008.aspx</link><pubDate>Wed, 12 Oct 2011 08:58:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3458764</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3458764</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/10/12/tutto-quello-che-dovete-sapere-sulla-service-pack-3-per-sql-server-2008.aspx#comments</comments><description>&lt;p&gt;Buongiorno a tutti....&lt;/p&gt;
&lt;p&gt;Con buon anticipo rispetto alla normale frequenza di rilascio delle &amp;ldquo;Service Pack&amp;rdquo; (SP) di SQL Server 2008, lo scorso &lt;span style="text-decoration: underline;"&gt;6 Ottobre&lt;/span&gt; &amp;egrave; stata rilasciata la "Service Pack 3" (SP3); come ben sapete questo blog non &amp;egrave; uno dei tanti (troppi !) che segnalano la semplice uscita di qualche aggiornamento, quindi fatemi &amp;ldquo;incollare&amp;rdquo; i links alle componenti principali della documentazione e poi vediamo di aggiungere alcune informazioni utili:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;Main Download Page&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=27594"&gt;http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=27594&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;List of issues that are fixed by SQL Server 2008 Service Pack 3&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://support.microsoft.com/kb/2546951/en-us"&gt;http://support.microsoft.com/kb/2546951/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;Microsoft SQL Server 2008 SP3 Release Notes&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://social.technet.microsoft.com/wiki/contents/articles/microsoft-sql-server-2008-sp3-release-notes.aspx"&gt;http://social.technet.microsoft.com/wiki/contents/articles/microsoft-sql-server-2008-sp3-release-notes.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;Readme&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=229521"&gt;http://go.microsoft.com/fwlink/?LinkId=229521&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;NOTA&lt;/b&gt;: La build di riferimento per SQL Server 2008 una volta installata la "Service Pack 3" (SP3)&amp;nbsp;&amp;egrave; la&amp;nbsp;&amp;ldquo;&lt;b&gt;10.00.5500.00&lt;/b&gt;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Subito&amp;nbsp;&lt;span style="text-decoration: underline;"&gt;tre&lt;/span&gt; considerazioni importanti sulla SP3:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Con l'uscita della SP3, &lt;span style="text-decoration: underline;"&gt;la "Service Pack 1" (SP1) di SQL Server 2008 &amp;egrave; ufficialmente fuori supporto&lt;/span&gt;, come da "Lifecycle Policy" standard Microsoft:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;em&gt;Support ends 12 months after the next service pack releases or at the end of the product's support lifecycle, whichever comes first.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;For more information, please see the service pack policy at &lt;a href="http://support.microsoft.com/lifecycle/#ServicePackSupport"&gt;http://support.microsoft.com/lifecycle/#ServicePackSupport&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Questa SP contiene tutti gli aggiornamenti (ovviamente) della SP2 pi&amp;ugrave; le &lt;span style="text-decoration: underline;"&gt;Cumulative Update (CU) dalla 1 alla 4 comprese&lt;/span&gt;, quindi se avete la CU5 o CU6 (ad oggi queste sono quelle disponibili), dovete aspettare il futuro rilascio della &lt;span style="text-decoration: underline;"&gt;CU1 per SQL Server 2008 SP3&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;b&gt;&lt;i&gt;The SQL Server 2008 builds that were released after SQL Server 2008 Service Pack 2 was released &lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;a href="http://support.microsoft.com/kb/2402659/en-us"&gt;http://support.microsoft.com/kb/2402659/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ovviamente contiene anche l&amp;rsquo;unico bug (quasi :-),vedi post precedente sull&amp;rsquo;argomento in questo stesso blog) di sicurezza finora rilasciato per SQL Server 2008 (&lt;strong&gt;&lt;i&gt;MS11-049&lt;/i&gt;&lt;/strong&gt;):&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;a href="http://www.microsoft.com/technet/security/bulletin/MS11-049.mspx"&gt;http://www.microsoft.com/technet/security/bulletin/MS11-049.mspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Dunque, a questo punto vorrei rimarcare una cosa che troppe volte viene trascurata se non proprio dimenticata: leggetevi &lt;span style="text-decoration: underline;"&gt;sempre&lt;/span&gt; I documenti di &amp;ldquo;&lt;strong&gt;&lt;em&gt;Readme&lt;/em&gt;&lt;/strong&gt;&amp;rdquo; e &amp;ldquo;&lt;strong&gt;&lt;em&gt;Release Notes&lt;/em&gt;&lt;/strong&gt;&amp;rdquo; che accompagnano ogni rilascio perch&amp;eacute; &amp;egrave; qui che trovate preziose informazioni del tipo: pre-requisiti, problemi di installazione, compatibilit&amp;agrave;, nuove funzionalit&amp;agrave;, istruzioni &amp;ldquo;speciali&amp;rdquo; per installazioni cluster, mirror, replica e quant&amp;rsquo;altro; &lt;span style="text-decoration: underline;"&gt;tre&lt;/span&gt; fulgidi esempi da questi file di documentazione:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="text-decoration: underline;"&gt;Problema noto di installazione:&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;em&gt;If you apply a SQL Server cumulative update to an instance of SQL Server where the features are not all at the same version level, the &lt;span style="text-decoration: underline;"&gt;update will fail&lt;/span&gt;. To avoid this failure, you must ensure that all the features in an instance of SQL Server are at the same version of SQL Server.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="text-decoration: underline;"&gt;Falso problema di installazione:&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;em&gt;You might see SQL Server 2008 R2 features included in the list of features to be updated by the SQL Server 2008 service pack on the Select Feature or Ready to Update page. SQL Server 2008 R2 components are not affected by the SQL Server 2008 service pack update. No action is required.&lt;/em&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;em&gt;You might see SQL Server 2008 R2 components in the list of features on the Select Feature or Ready to Uninstall page when removing a SQL Server 2008 service pack update. SQL Server 2008 R2 features are not uninstalled during this process. No action is required.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="text-decoration: underline;"&gt;Nuove funzionalit&amp;agrave;:&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Enhanced upgrade experience from previous versions of SQL Server to SQL Server 2008 SP3;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Increased the performance &amp;amp; reliability of the setup experience;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;In SQL Server Integration Services logs will now show the total number of rows sent in Data Flows;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Enhanced warning messages when creating the maintenance plan if the Shrink Database option is enabled; &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Resolving database issue with transparent data encryption enabled and making it available even if certificate is dropped; &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Optimized query outcomes when indexed Spatial Data Type column is referenced by DTA (Database Tuning Advisor); &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Superior user experience with Sequence Functions (e.g Row_Numbers()) in a Parallel execution plan;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Altro aspetto importante: &lt;span style="text-decoration: underline;"&gt;cosa non contiene questa SP3&lt;/span&gt; ? Come al solito, nei pacchetti di aggiornamento di una SP, &lt;span style="text-decoration: underline;"&gt;non&lt;/span&gt; vengono incluse le seguenti componenti per cui &amp;egrave; necessario un download separato:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B&lt;em&gt;ooks Online&lt;/em&gt;&lt;/strong&gt;: &lt;em&gt;(link non ancora disponibile) &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;i&gt;Feature Pack&lt;/i&gt;&lt;/b&gt;: &lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=27596"&gt;http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=27596&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Come per le altre precedenti SP, valgono le seguenti regole per la SP3 di SQL Server 2008:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Prima e pi&amp;ugrave; importante: prima di installare la SP3 su una istanza SQL che ospita database relativi ad applicazioni, &amp;egrave; necessario avere la conferma della supportabilit&amp;agrave;/compatibilit&amp;agrave; dal fornitore dell'applicazione stessa, ove possibile; ad esempio, prima di installare la SP3 su una istanza SQL che ospita uno o pi&amp;ugrave; database di Sharepoint &amp;egrave; necessario avere la conferma da Microsoft che la cosa &amp;egrave; supportata (= testata !);&lt;/li&gt;
&lt;li&gt;Pu&amp;ograve; essere disinstallata;&lt;/li&gt;
&lt;li&gt;Supporta l&amp;rsquo;installazione in modalit&amp;agrave; &amp;ldquo;Slipstream&amp;rdquo;;&lt;/li&gt;
&lt;li&gt;In installazioni Cluster, al contrario di SQL Server 2005 (e precedenti), si parte con l&amp;rsquo;aggiornamento dei nodi passivi; se per caso lanciate il setup su un nodo dove &amp;egrave; attiva l&amp;rsquo;istanza che volete aggiornare un messaggio di &amp;ldquo;Warning&amp;rdquo; Vi avvertir&amp;agrave; della cosa e Vi chieder&amp;agrave; conferma prima di&lt;br /&gt;procedere, ovviamente ci&amp;ograve; comporter&amp;agrave; un disservizio;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;span style="background-color: #ff0000;"&gt;&lt;b&gt;&lt;span style="text-decoration: underline;"&gt;IMPORTANTE&lt;/span&gt;&lt;/b&gt;:&lt;/span&gt; Le SP di SQL Server 2008 (e successivi) contengono una logica per cui quando installate la SP sul &lt;strong&gt;[n/2]+1 &amp;ndash; esimo&lt;/strong&gt; nodo, cio&amp;egrave; passata la maggioranza dei nodi, il setup eseguir&amp;agrave; automaticamente il failover dell&amp;rsquo;istanza interessata su uno dei nodi gi&amp;agrave; aggiornati. Se non volete che questo accada e volete essere Voi a decidere quando spostare l&amp;rsquo;istanza, dovete lanciare il setup a riga di comando con lo switch &amp;ldquo;&lt;strong&gt;CLUSTERPASSIVE&lt;/strong&gt;&amp;rdquo; come potete verificare lanciando l&amp;rsquo;eseguibile con l&amp;rsquo;opzione &amp;ldquo;/?&amp;rdquo;:&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;strong&gt;&lt;em&gt;Usage:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&amp;nbsp;&lt;em&gt;setup.exe /[option]={value} /[option]={value}&lt;/em&gt;&lt;br /&gt;...&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&amp;nbsp;&lt;strong&gt;&lt;em&gt;Options:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;ACTION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Specifies a Setup work flow, like INSTALL, UNINSTALL, or UPGRADE. This is a required parameter.&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;ALLINSTANCES&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Specifies that all instances are to be included in&amp;nbsp;the Setup operation. This parameter is only supported&amp;nbsp;when applying a patch.&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;b&gt;CLUSTERPASSIVE&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Specifies that SQL Server Setup should not manage the&amp;nbsp;SQL Server services. This option should only be used&amp;nbsp;in a non-Microsoft cluster environment.&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;HELP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Displays the command line parameters usage&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;INDICATEPROGRESS&amp;nbsp;&amp;nbsp;&amp;nbsp;Specifies that the detailed Setup log should be piped&amp;nbsp;&amp;nbsp;to the console.&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;INSTANCENAME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Specify a default or named instance. MSSQLSERVER is&amp;nbsp;the default instance for non-Express editions and&amp;nbsp;SQLExpress for Express editions.&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;QUIET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Setup will not display any user interface.&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;QUIETSIMPLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Setup will display progress only without any user&amp;nbsp;interaction.&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;X86&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Specifies that Setup should install into WOW64. This command line argument is not supported on an IA64 or a 32-bit system.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.In caso di configurazione in &amp;ldquo;&lt;b&gt;&lt;i&gt;Mirroring&lt;/i&gt;&lt;/b&gt;&amp;rdquo;, c&amp;rsquo;&amp;egrave; un ordine ben preciso che, in generale, prevede l&amp;rsquo;applicazione prima sul &amp;ldquo;Witness&amp;rdquo; (se presente), quindi sul &amp;ldquo;Mirror&amp;rdquo;, infine sul &amp;ldquo;Principal&amp;rdquo;, i dettagli li trovate nel seguente articolo di KB valido anche per SQL 2008:&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;b&gt;&lt;i&gt;How to install service packs and hotfixes on an instance of SQL Server 2005 that is configured to use database mirroring&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;a href="http://support.microsoft.com/kb/926824/en-us"&gt;http://support.microsoft.com/kb/926824/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6. Anche in caso di configurazione in &amp;ldquo;&lt;b&gt;&lt;i&gt;Replication&lt;/i&gt;&lt;/b&gt;&amp;rdquo;, c&amp;rsquo;&amp;egrave; un ordine ben preciso, in generale si parte dal &amp;ldquo;Distributor&amp;rdquo;, quindi il &amp;ldquo;Publisher&amp;rdquo;, infine i &amp;ldquo;Subscriber&amp;rdquo;, i dettagli li trovate nel seguente articolo di KB valido anche per SQL 2008:&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;b&gt;&lt;i&gt;How to apply a hotfix for SQL Server 2005 in a replication topology &lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;a href="http://support.microsoft.com/kb/941232/en-us"&gt;http://support.microsoft.com/kb/941232/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7. Se poi avete una configurazione estremamente complessa che comprende sia &amp;ldquo;Mirroring&amp;rdquo; che &amp;ldquo;Replication&amp;rdquo;, &amp;egrave; necessario adottare estrema cura e seguire le indicazioni del seguente articolo:&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;b&gt;&lt;i&gt;How to apply a hotfix for SQL Server 2005 or SQL Server 2008 in a transactional replication and database mirroring topology&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;a href="http://support.microsoft.com/kb/977051/en-us"&gt;http://support.microsoft.com/kb/977051/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8. Un singolo &amp;ldquo;run&amp;rdquo; del Setup, oltre ad aggiornare le &amp;ldquo;Shared Components&amp;rdquo;, offre la possibilit&amp;agrave; di aggiornare pi&amp;ugrave; istanze SQL Server 2008, se presenti sulla macchina;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9. Le componenti &amp;ldquo;Shared Components&amp;rdquo; (Native Client, MMC, tools vari) verranno obbligatoriamente aggiornate al primo lancio del setup;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10.&amp;nbsp;Con i path di default per l'installazione di SQL Server 2008, il file di log dell'installazione &amp;egrave; localizzato nel seguente folder, &amp;egrave; &lt;span style="text-decoration: underline;"&gt;necessario&lt;/span&gt; averlo in caso di problemi relativi ad installazioni fallite ed &amp;egrave; &lt;span style="text-decoration: underline;"&gt;consigliabile&lt;/span&gt; verificare l'avvenuta installazione con successo:&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;b&gt;C:\%Program Files%\Microsoft SQL Server\100\Setup Bootstrap\LOG\&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;b&gt;&lt;i&gt;Overall summary:&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;i&gt;Final result:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;span style="background-color: #ff0000;"&gt;&lt;b&gt;&lt;i&gt;Passed&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;i&gt;Exit code (Decimal):&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;i&gt;Exit message:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Passed&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;i&gt;Start time:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2011-10-12 11:35:26&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;i&gt;End time:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2011-10-12 11:41:47&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;i&gt;Requested action:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Patch&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;i&gt;[&amp;hellip;&amp;hellip;]&lt;/i&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;b&gt;&lt;i&gt;Instance &amp;lt;&amp;lt;instance name&amp;gt;&amp;gt; overall summary:&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;i&gt;&amp;nbsp; Final result:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;span style="background-color: #ff0000;"&gt;&lt;b&gt;&lt;i&gt;Passed&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;i&gt;&amp;nbsp; Exit code (Decimal):&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;i&gt;&amp;nbsp; Exit message:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Passed&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;i&gt;&amp;nbsp; Start time: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2011-10-12 11:39:20&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;i&gt;&amp;nbsp; End time:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2011-10-12 11:41:44&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 90px;"&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;i&gt;&amp;nbsp; Requested action:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Patch&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;E anche per questa volta &amp;egrave; tutto, buon lavoro.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;--Igor Pagliai--&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3458764" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Mirroring/">Mirroring</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Cluster/">Cluster</category></item><item><title>Attenzione a modificare la struttura di una tabella con il Table Designer del Management Studio di SQL</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/09/30/attenzione-a-modificare-la-struttura-di-una-tabella-con-il-table-designer-del-management-studio-di-sql.aspx</link><pubDate>Fri, 30 Sep 2011 06:22:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3456486</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3456486</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/09/30/attenzione-a-modificare-la-struttura-di-una-tabella-con-il-table-designer-del-management-studio-di-sql.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;Lo confesso, anche io non presto molta attenzione alle &amp;ldquo;Options&amp;rdquo; del SQL Management Studio (SSMS), principalmente perch&amp;eacute; uso sempre gli script TSQL per modificare (e non solo) la struttura di una tabella, ma la cosa pu&amp;ograve; essere potenzialmente pericolosa per cui ho ritenuto interessante creare questo nuovo post per il nostro blog.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;Dunque, lo scenario &amp;egrave; quello relativo ad una eventuale modifica della struttura di una tabella, magari molto grossa in termini di spazio occupato e numero di righe contenute, per la quale il DBA sceglie di usare l&amp;rsquo;interfaccia grafica del &amp;ldquo;SQL Server Management Studio (SSMS)&amp;rdquo;, nello specifico il &amp;ldquo;Table Designer&amp;rdquo;. Quest &amp;egrave; una semplice tabella a 2 campi con 1000 record banali inseriti:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/3326.P1.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/3326.P1.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;Ora proviamo ad aggiungere una colonna altrettanto banale (&amp;ldquo;valore2&amp;rdquo; di tipo INT &amp;ldquo;nullable) alla suddetta tabella:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/8132.P1.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/8132.P1.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;Ok, fin qui tutto bene, la colonna &amp;egrave; stata aggiunta istantaneamente ed i valori per tutte le righe sono state impostati ovviamente a &amp;ldquo;NULL&amp;rdquo;:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/0066.P1.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/0066.P1.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;Proviamo ora una cosa diversa, cio&amp;egrave; la rimozione della stessa colonna, ancora tutto bene, nessun problema e prendendo una trace con il Profiler, la console di SQL tra le altre cose esegue il comando che ci si aspetta:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;ALTER TABLE dbo.T1 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DROP COLUMN valore2&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;Proviamo ora a rimuovere l&amp;rsquo;attributo &amp;ldquo;Allow Nulls&amp;rdquo; dalla colonna &amp;ldquo;valore2&amp;rdquo;, sempre dal &amp;ldquo;Table Designer&amp;rdquo;, non appena clicchiamo per salvare la modifica ecco quello che compare sullo schermo:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/4760.P1.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/4760.P1.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;Perch&amp;eacute; appare questo messaggio ? Perch&amp;eacute; il &amp;ldquo;Table Designer&amp;rdquo; vuole distruggere questa tabella e ricrearla ?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;La risposta alla &lt;b&gt;&lt;span style="text-decoration: underline;"&gt;prima domanda&lt;/span&gt;&lt;/b&gt; &amp;egrave; nelle &amp;ldquo;Options&amp;rdquo; del tool, cos&amp;igrave; appaiono di default (almeno su SQL 2008 R2):&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/8867.P1.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/8867.P1.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;span style="line-height: 115%; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;span style="line-height: 115%; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;La risposta alla &lt;span style="text-decoration: underline;"&gt;seconda domanda&lt;/span&gt; &amp;egrave; che l&amp;rsquo;interfaccia grafica talvolta non &amp;ldquo;traduce&amp;rdquo; la Vostra modifica in rapporto 1:1 con i comandi TSQL che normalmente un DBA utilizzerebbe; per verificare questo disabilitiamo l&amp;rsquo;opzione cerchiata in rosso e ripetiamo l&amp;rsquo;operazione, nel frattempo avviamo una semplice trace con il SQL Profiler per vedere cosa accade in background:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;span style="line-height: 115%; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/6811.P1.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/6811.P1.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;Ovviamente nessun messaggio di errore questa volta, ma andando a vedere cosa c&amp;rsquo;&amp;egrave; nella trace del SQL Profiler abbiamo diverse cose molto interessanti:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;C&amp;rsquo;&amp;egrave; tutta una lunga serie di query di controllo che l&amp;rsquo;interfaccia esegue sul design della tabella, gli attributi, le statistiche, le permission, etc. ; fin qui nulla di strano;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;span style="line-height: 115%; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;Alla fine delle query precedenti, ecco la prima cosa interessante (evento SQL &amp;ldquo;&lt;i&gt;SQL:stmtCompleted&lt;/i&gt;&amp;rdquo;):&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/6787.P1.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/6787.P1.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;A questo punto ho un sospetto terribile, proseguiamo nell&amp;rsquo;analisi degli eventi ed ecco cosa troviamo, un travaso brutale di dati dalla tabella originaria (&lt;b&gt;T1&lt;/b&gt;) a quella temporanea appena creata (&lt;b&gt;Tmp_T1&lt;/b&gt;) e per di pi&amp;ugrave; con un lock esclusivo a livello di tabella (&lt;b&gt;TABLOCKX&lt;/b&gt;) per tutta la durata dell&amp;rsquo;operazione di lettura dei dati (&lt;b&gt;HOLDLOCK&lt;/b&gt;):&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/3386.P1.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/3386.P1.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;span style="line-height: 115%; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;Avrete gi&amp;agrave; capito quello che succede, in ogni modo proseguiamo nell&amp;rsquo;analisi della trace e troviamo:&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;span style="line-height: 115%; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;span style="line-height: 115%; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/2870.P1.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/2870.P1.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;span style="line-height: 115%; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/7875.P1.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/7875.P1.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;A questo punto ricapitoliamo cosa &amp;egrave; successo a fronte della modifica alla struttura della tabella:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;Il &amp;ldquo;Table Designer&amp;rdquo;, non il database engine di SQL, ha creato una tabella di appoggio (non temporanea !) con la stessa struttura della tabella originaria;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;Bloccando la tabella &amp;ldquo;T1) in maniera esclusiva e continuata, ha copiato i dati sulla tabella di appoggio appena creata;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;E&amp;rsquo; stata &amp;ldquo;droppata&amp;rdquo; la tabella originaria;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;E&amp;rsquo; stata rinominata la tabella di appoggio &amp;nbsp;usando lo stesso nome della tabella originaria;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;Se non avete colto la pericolosit&amp;agrave; di questa cosa permettetemi di aiutarVi, immaginate che la tabella &amp;ldquo;T1&amp;rdquo; abbia qualche decina o centinaia di milioni di record o che comunque sia di dimensioni ragguardevoli:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;La tabella &amp;ldquo;T1&amp;rdquo; viene bloccata in maniera esclusiva e nessun client/applicazione pu&amp;ograve; acceddere: per quanto tempo non &amp;egrave; dato saperlo, ma se la tabella &amp;egrave; grossa e l&amp;rsquo;attivit&amp;agrave; elevata la cosa si tradurr&amp;agrave; in un blocco esteso e non desiderato;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="line-height: 115%; font-family: arial,helvetica,sans-serif; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-ansi-language: IT; mso-bidi-language: AR-SA;"&gt;Il caricamento dei dati nella tabella temporanea comporter&amp;agrave; una grossa (enorme ?) crescita del transaction log del database utente: faccio notare che tale tabella non &amp;egrave; temporanea, quindi non user&amp;agrave; spazio nel TEMPDB, bens&amp;igrave; nel database utente, con tutti i problemi del caso;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;Un&amp;rsquo;ultima considerazione: cosa sarebbe accaduto nel caso questa tabella fosse stata riferita da una o pi&amp;ugrave; &amp;ldquo;Foreign Key Contraint&amp;rdquo; ? L&amp;rsquo;operazione di &amp;ldquo;drop&amp;rdquo; della tabella originaria sarebbe andata in errore oppure il Table Designer avrebbe eseguito ulteriori attivit&amp;agrave; in background ? B&amp;egrave;, per questo magari dovrete aspettare un ulteriore post su questo blog ! :-)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;A questo punto, per i DBA non avvezzi all&amp;rsquo;uso estensivo del TSQL per la modifica della struttura delle tabelle, una domanda sorge spontanea: c&amp;rsquo;&amp;egrave; un modo pi&amp;ugrave; efficiente per fare questa operazione ? Ovviamente s&amp;igrave;, ed &amp;egrave; anche molto semplice: &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;&lt;strong&gt;alter table T1&amp;nbsp;alter column valore char(8000) not null;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;Avendo abilitato le statistiche sull&amp;rsquo;I/O , l&amp;rsquo;esecuzione (&lt;span style="text-decoration: underline;"&gt;con successo&lt;/span&gt;) del suddetto comando, ecco le informazioni:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;&lt;strong&gt;&lt;em&gt;Table 'T1'. Scan count 1, logical reads 1000, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;Liscio e lineare, vero ?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;La lezione di oggi dal titolo: &amp;ldquo;&lt;i&gt;&lt;span style="text-decoration: underline;"&gt;In produzione, mai modificare la struttura di una tabella con il Table Designer&amp;nbsp; senza aver prima verificato cosa realmente accade in background, specialmente se la tabella &amp;egrave; molto grande&lt;/span&gt;&lt;/i&gt;&amp;rdquo; &amp;egrave; finita, buon lavoro a tutti ed arrivederci al prossimo post.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;--Igor Pagliai--&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3456486" width="1" height="1"&gt;</description></item><item><title>Cumulative Update Review: SQL 2008 SP2 CU6</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/09/23/cumulative-update-review-sql-2008-sp2-cu6.aspx</link><pubDate>Fri, 23 Sep 2011 06:34:53 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3455111</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3455111</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/09/23/cumulative-update-review-sql-2008-sp2-cu6.aspx#comments</comments><description>&lt;p&gt;Ecco l&amp;rsquo;ultima Cumulative Update (CU) per SQL Server 2008 con SP2:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;Cumulative update package 6 for SQL&lt;br /&gt;Server 2008 Service Pack 2&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;&lt;a href="http://support.microsoft.com/kb/2582285/en-us"&gt;http://support.microsoft.com/kb/2582285/en-us&lt;/a&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Come al solito, la lista delle (CU) rilasciate per SQL Server 2008 dal rilascio della SP2, &amp;egrave; disponibile al seguente link:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;The SQL Server 2008 builds that were released after SQL Server 2008 Service Pack 2 was released &lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;&lt;a href="http://support.microsoft.com/kb/2402659/en-us"&gt;http://support.microsoft.com/kb/2402659/en-us&lt;/a&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;La prima cosa che salta all&amp;rsquo;occhio &amp;egrave; la vicinanza tra il build number di questa CU (4321) e di quella precedente (4316&amp;nbsp;- CU(5)), davvero impressionante, segno che il team di sviluppo di SQL Server ha raggiunto, e non da ora, un livello qualitativo notevole.&lt;/p&gt;
&lt;p&gt;Ecco cosa di interessante contiene:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Senza scendere nel dettaglio dei singoli problemi, se state usando la &amp;ldquo;&lt;i&gt;Replica&lt;/i&gt;&amp;rdquo; o &amp;ldquo;&lt;i&gt;Analysis Services&lt;/i&gt;&amp;rdquo;, sappiate che ci sono ben 5 problemi la cui soluzione Vi potrebbe interessare di cui 2 importanti (&amp;ldquo;crash&amp;rdquo;) di Analysis Services;&lt;/li&gt;
&lt;li&gt;Di queste, 2 hotfix &amp;ldquo;interessanti&amp;rdquo; per quanto riguarda la replica di tipo &amp;ldquo;Snapshot&amp;rdquo; (&amp;ldquo;high memory usage&amp;rdquo;) e la replica di tipo &amp;ldquo;Merge&amp;rdquo; (&amp;ldquo;Non-convergence or data loss&amp;rdquo;), quest&amp;rsquo;ultima sicuramente pi&amp;ugrave; grave;&lt;/li&gt;
&lt;li&gt;Come ho gi&amp;agrave; scritto pochi giorni fa per l&amp;rsquo;ultima (CU) di SQL Server 2008 R2 SP1, anche qui &amp;egrave; presente un &amp;ldquo;porting&amp;rdquo; per la soluzione di un problema che ha iniziato a manifestarsi pi&amp;ugrave; di un anno fa e che, data la sua subdula natura ed i suoi intreggi con l&amp;rsquo;NTFS di Windows, &amp;egrave; da&lt;br /&gt;valutare con estrema attenzione:&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;Database data files might be incorrectly marked as sparse in SQL Server 2008 R2 or in SQL Server 2008 even when the physical files are marked as not sparse in the file system&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;&lt;a href="http://support.microsoft.com/kb/2574699/en-us"&gt;http://support.microsoft.com/kb/2574699/en-us&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt; &lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;Per maggiori dettagli Vi consiglio di andare a rileggerVi il precedente &amp;ldquo;post&amp;rdquo;:&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&amp;nbsp;&lt;a href="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/09/13/cumulative-update-review-sql-2008-r2-sp1-cu2.aspx"&gt;http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/09/13/cumulative-update-review-sql-2008-r2-sp1-cu2.aspx&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Come sapete pongo molta attenzione a quei &amp;ldquo;bug&amp;rdquo; che potrebbero, in talune specifiche situazioni, influire sul risultati generate dalle query, li considero molto importanti e pericolosi al pari dei problemi di stabilit&amp;agrave; (&amp;ldquo;crash&amp;rdquo; o &amp;ldquo;hang&amp;rdquo;) dell&amp;rsquo;engine di SQL, ebbene ce ne sono due da considerare attentamente, ognuno nelle due citate categorie:&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;b&gt;Assertion failure or other issues occur when you run a DML query against a table or a view that has two indexes in SQL Server 2008 &lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;b&gt;&lt;a href="http://support.microsoft.com/kb/2542225/en-us"&gt;http://support.microsoft.com/kb/2542225/en-us&lt;/a&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;b&gt;You receive an incorrect result when you run a query that uses the row_number function in SQL Server 2008 &lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;&lt;b&gt;&lt;a href="http://support.microsoft.com/kb/970198/en-us"&gt;http://support.microsoft.com/kb/970198/en-us&lt;/a&gt;&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Rileggendo la lista che Vi ho fatto, direi che si tratta di una CU di media importanza, se non siete interessati alla parte di &amp;ldquo;Analysis Services&amp;rdquo; e/o &amp;ldquo;Replica&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Anche per questa volta &amp;egrave; tutto, buon lavoro a tutti.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;--Igor Pagliai--&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3455111" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Cumulative+Updates/">Cumulative Updates</category></item><item><title>SQL Alert: Problema “Non-Yielding Scheduler”</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/09/16/sql-alert-problema-non-yelding-scheduler.aspx</link><pubDate>Fri, 16 Sep 2011 12:49:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3453717</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3453717</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/09/16/sql-alert-problema-non-yelding-scheduler.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;&lt;span style="text-decoration: underline;"&gt;IMPORTANTE: &lt;/span&gt;&lt;/b&gt;Questo post &amp;egrave; il primo di questo tipo, lo scopo &amp;egrave; allertare i Clienti e tutti gli interessati su problemi non solo di una certa gravit&amp;agrave; ma anche di ampia diffusione.&lt;/p&gt;
&lt;p&gt;Nelle due ultime settimane ho riscontrato il seguente problema da ben quattro clienti su installazioni SQL Server 2008 e SQL Server 2008 R2:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;"Non-yielding Scheduler" error and SQL Server 2008 or SQL&lt;br /&gt;Server 2008 R2 stops responding intermittently in Windows Server 2008 or in&lt;br /&gt;Windows Server 2008 R2&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://support.microsoft.com/kb/2491214/en-us"&gt;http://support.microsoft.com/kb/2491214/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Impatto&lt;/span&gt;: processo SQL Server non responsivo;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Condizioni di applicabilit&amp;agrave;&lt;/span&gt;: Utilizzo del SQL Native Client 10.0 da parte dell&amp;rsquo;applicazione;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Evidenza del problema&lt;/span&gt;: messaggi nell&amp;rsquo;ERRORLOG;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Workaround&lt;/span&gt;: SI, vedi articolo;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Fix&lt;/span&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Cumulative update package 2 for SQL Server 2008 Service Pack 2&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Cumulative update package 6 for SQL Server 2008 R2&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per i dettagli, ovviamente leggete con attenzione l&amp;rsquo;articolo, in caso di dubbi, problemi o complicazioni contattate il Vostro Technical Account Manager (TAM).&lt;/p&gt;
&lt;p&gt;Buon lavoro a tutti.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;b&gt;--Igor Pagliai--&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3453717" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Alert/">Alert</category></item><item><title>Cumulative Update Review: SQL 2008 R2 SP1 CU2</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/09/13/cumulative-update-review-sql-2008-r2-sp1-cu2.aspx</link><pubDate>Tue, 13 Sep 2011 10:44:40 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3452842</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3452842</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/09/13/cumulative-update-review-sql-2008-r2-sp1-cu2.aspx#comments</comments><description>&lt;p&gt;Speravo di fare un unico post ed includere anche la successiva CU per SQL 2008, purtroppo sta tardando e quindi procediamo con questo unico aggiornamento:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;Cumulative update package 2 for SQL Server 2008&lt;br /&gt;R2 Service Pack 1&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://support.microsoft.com/kb/2567714/en-us"&gt;http://support.microsoft.com/kb/2567714/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Come al solito, la lista delle (CU) rilasciate per SQL Server 2008 R2 dal rilascio della SP1, &amp;egrave; disponibile al seguente link:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;i&gt;The SQL Server 2008 R2 builds that were released&amp;nbsp;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;after SQL Server 2008 R2 Service Pack 1 was released &lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://support.microsoft.com/kb/2567616/en-us"&gt;http://support.microsoft.com/kb/2567616/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Ecco cosa di interessante contiene:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;Senza scendere nel dettaglio dei singoli problemi, se state usando la &amp;ldquo;&lt;b&gt;&lt;i&gt;Replica&lt;/i&gt;&lt;/b&gt;&amp;rdquo;, allora questa (CU2) &amp;egrave; un &amp;ldquo;must&amp;rdquo; per Voi, ci sono &lt;span style="text-decoration: underline;"&gt;ben 6 problemi risolti&lt;/span&gt;, alcuni di una certa gravit&amp;agrave;;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- Miglioramento dei tempi di &amp;ldquo;&lt;i&gt;recovery&lt;/i&gt;&amp;rdquo; di un database, specialmente se avete un numero non banale di &amp;ldquo;&lt;i&gt;Virtual Log Files&lt;/i&gt;&amp;rdquo;:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;Recovery takes longer than expected for a database in a SQL Server 2008 or in a SQL Server 2008 R2 environment&amp;nbsp; &lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://support.microsoft.com/kb/2524743/en-us"&gt;http://support.microsoft.com/kb/2524743/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;Soluzione ad un problema di generazione di risultati non corretta in caso di query che contiene una &amp;ldquo;INSERT .. SELECT&amp;rdquo; abbinata ad una&amp;nbsp; &amp;ldquo;UNION ALL&amp;rdquo;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;Incorrect results when you run an INSERT SELECT UNION ALL statement in SQL Server 2008 or in SQL Server 2008 R2&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://support.microsoft.com/kb/2530921/en-us"&gt;http://support.microsoft.com/kb/2530921/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- Il &lt;span style="text-decoration: underline;"&gt;pezzo forte&lt;/span&gt; di questa collezione &amp;egrave; invece constituito dalla fix per il seguente annoso problema:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;Database data files might be incorrectly marked as sparse in SQL Server 2008 R2 even when the physical files are marked as not sparse in the file system&amp;nbsp; &lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://support.microsoft.com/kb/2574699/en-us"&gt;http://support.microsoft.com/kb/2574699/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ho detto annoso perch&amp;eacute; non si tratta di un problema di oggi, ma di &lt;span style="text-decoration: underline;"&gt;ben 3 anni fa&lt;/span&gt;, come da &amp;ldquo;alert&amp;rdquo; uscito a suo tempo e per cui molti Clienti sono stati direttamente avverti dai loro Technical Account Manager (TAM):&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;&lt;i&gt;SQL Server reports operating system error 1450 or 1452 or 665 (retries)&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://blogs.msdn.com/b/psssql/archive/2008/07/10/sql-server-reports-operating-system-error-1450-or-1452-or-665-retries.aspx"&gt;http://blogs.msdn.com/b/psssql/archive/2008/07/10/sql-server-reports-operating-system-error-1450-or-1452-or-665-retries.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I punti di interesse di questo problema erano (e sono) due:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1) Non si tratta di un problema causato da SQL Server bens&amp;igrave; dall&amp;rsquo;NTFS di Windows in una concomitanza di diversi fattori (sparse files, snapshot, backup,etc.):&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;i&gt;&amp;hellip;This issue occurs because the file system incorrectly marks a whole database data file as sparse after an alternative stream that was originally marked as sparse is removed&amp;hellip;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2) La procedura per venire fuori da questo problema non era (a suo tempo) banale, e comunque Vi sareste trovati con un database &amp;ldquo;offline&amp;rdquo; senza possibilit&amp;agrave; di montarlo:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;i&gt;To resolve this issue in SQL Server 2008 R2, apply the following hotfix, and then bring the database online. When database is brought online, SQL Server checks whether the metadata of the physical database file is marked as sparse in the file system. If it is marked as not sparse, the SQL Server metadata is updated.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Con questa hotfix, invece, nel caso Vi imbattiate nel problema, &amp;egrave; sufficiente installarla e quindi far ripartire l&amp;rsquo;istanza SQL Server; alcune considerazioni aggiuntive sono contenute all&amp;rsquo;interno dell&amp;rsquo;articolo, da leggere in caso Vi imbattiate effettivamente in questa casistica.&lt;/p&gt;
&lt;p&gt;Anche per questa volta &amp;egrave; tutto, buon lavoro a tutti.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;--Igor Pagliai--&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3452842" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/SQL+Server+2008+R2/">SQL Server 2008 R2</category><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Cumulative+Updates/">Cumulative Updates</category></item><item><title>Tutto quello che avreste dovuto sapere sul TEMPDB e che non avete mai osato chiedere</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/09/12/tutto-quello-che-avreste-dovuto-sapere-sul-tempdb-e-che-non-avete-mai-osato-chiedere.aspx</link><pubDate>Mon, 12 Sep 2011 05:57:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3452427</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3452427</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/09/12/tutto-quello-che-avreste-dovuto-sapere-sul-tempdb-e-che-non-avete-mai-osato-chiedere.aspx#comments</comments><description>&lt;p&gt;Salve, ero indeciso sul fatto di creare un &amp;ldquo;post&amp;rdquo; sull&amp;rsquo;argomento, dato che si tratta di argomento trattato e ritrattato fino alla noia, ma all&amp;rsquo;ennesima domanda di un cliente che chiedeva chiarimenti sul numero di file da fare (vi dice niente ? :-) ) ho deciso di mettermi a scrivere questa pagina, con la promessa, per&amp;ograve;, di raccogliere nella maniera pi&amp;ugrave; sintetica possibile tutto quello che riguarda eventuali ottimizzazioni di performance e cercando di fugare la ridda di informazioni parziali, non corrette e vecchie che si trovano in giro su Internet, e talvolta anche nella documentazione Microsoft.&lt;br /&gt;Ma perch&amp;eacute; il TEMPDB &amp;egrave; cos&amp;igrave; importante ? Principalmente per &lt;span style="text-decoration: underline;"&gt;due&lt;/span&gt; ordini di ragioni:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;E&amp;rsquo; una risorsa al pari delle CPU, della RAM, dei dischi e della rete: ne esiste solo uno per istanza, a prescindere da quanti database utente avete, quindi un eventuale collo di bottiglia su questa importante risorsa pu&amp;ograve; influenzare tutti i database e le relative applicazioni;&lt;/li&gt;
&lt;li&gt;Molte &amp;ldquo;features&amp;rdquo; di SQL Server utilizzano il TEMPDB, direttamente o indirettamente, oltre ovviamente ad eventuali oggetti temporanei costruiti ed utilizzati dal codice applicativo; tra le &amp;ldquo;features&amp;rdquo; pi&amp;ugrave; voraci di spazio in TEMPDB e/o pi&amp;ugrave; importanti abbiamo:&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left: 60px;"&gt;Versioning (utilizzo degli &amp;ldquo;Snapshot Isolation Levels&amp;rdquo;);&lt;br /&gt;Online index operations (create, alter, rebuild);&lt;br /&gt;DBCC;&lt;br /&gt;Cursori;&lt;br /&gt;Triggers;&lt;br /&gt;MARS;&lt;br /&gt;Multi-statement table-valued functions (TVFs);&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Dunque, ecco la lista dei punti qualificanti che vorrei presentarVi, ho evidenziato in blu le frasi pi&amp;ugrave; significative per darVi una visione immediata delle semplici regole da utilizzare:&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;1)&amp;nbsp;Numero di data file&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;a.&amp;nbsp;Questo &amp;egrave; il punto di maggior confusione, esistono in giro varie interpretazioni basate sul numero di CPU, sull&amp;rsquo;Hyper-Threading, sui Core, e via discorrendo, fino ad arrivare alla regola che molti conoscono la quale finisce con la frase &amp;ldquo;&amp;hellip;. ma non pi&amp;ugrave; di 8&amp;hellip;&amp;rdquo;;&lt;/p&gt;
&lt;p&gt;b.&amp;nbsp;Il concetto teorico che sta dietro ad un stima corretta &amp;egrave;: quanti thread (i.e. = query) ci possono essere, nel caso peggiore, che accedano contemporaneamente ad oggetti nel TEMPDB ? Questo dovrebbe subito rivelarVi che non importa l&amp;rsquo;Hyper-Threading o i Core, importa alla fine solo il numero di &amp;ldquo;CPU Logiche&amp;rdquo; che alla fine SQL Server si ritrova, al netto ovviamente di una eventuale &amp;ldquo;&lt;span style="background-color: #ffffff;"&gt;Affinity&lt;/span&gt; Mask&amp;rdquo; con cui &amp;egrave; possibile limitare i Core/CPU utilizzati da una istanza di SQL Server. Se non volete affaticarVi nel conteggio, &amp;egrave; sufficiente eseguire la seguente query per ottenere il numero esatto:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;select COUNT(*) from sys.dm_os_schedulers where [status] = 'VISIBLE ONLINE'&lt;/p&gt;
&lt;p&gt;c.&amp;nbsp;OK, ora che sappiamo quante &amp;ldquo;CPU Logiche&amp;rdquo; ha la nostra istanza di SQL Server, quanti data file creiamo per il TEMPDB ? La regola pi&amp;ugrave; completa, ma non necessariamente la pi&amp;ugrave; corretta, &amp;egrave;: &amp;ldquo;Tanti data file quante sono le CPU Logiche in uso all&amp;rsquo;istanza di SQL Server&amp;rdquo;; perch&amp;eacute; ho detto che non &amp;egrave; necessariamente la pi&amp;ugrave; corretta ? Perch&amp;eacute; la regola vera sarebbe &amp;ldquo;Tanti&amp;nbsp; data file fin quando non c&amp;rsquo;&amp;egrave; pi&amp;ugrave; &amp;ldquo;contention&amp;rdquo; sulle pagine di allocazione di sistema contenuti nei data file stessi del TEMPDB&amp;rdquo;, ma non &amp;egrave; molto semplice da appurare per un non esperto DBA, quindi manteniamo per semplicit&amp;agrave; la regola precedente marcata in blu.&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;NOTA:&amp;nbsp;La famosa postilla che molti di Voi hanno sicuramente visto/sentito riguarda l&amp;rsquo;ipotetico massimo di 8 data file: intendiamoci, non &amp;egrave; sbagliata a priori, il senso di questa regola &amp;egrave; che se non sapete con certezza quanti data file fare per eliminare la &amp;ldquo;contention&amp;rdquo;, allora partite pure con la regola marcata in blu ma senza esagerare, un numero superiore di data file dovrebbe essere giustificato da una approfondita analisi delle performance del TEMPDB per capire se ha senso andare oltre;&lt;/p&gt;
&lt;p&gt;d.&amp;nbsp;E&amp;rsquo; bene tener presente che fare un gran numero di data file per qualsiasi database, a maggior ragione per il TEMPDB, pu&amp;ograve; avere effetti deleteri sul tempo necessario per portare &amp;ldquo;ONLINE&amp;rdquo; un database, dato che una delle fasi di &amp;ldquo;start&amp;rdquo; che opera in maniera rigorosamente seriale &amp;egrave; appunto quella che analizza e poi apre (a livello NTFS) ogni singolo file.&lt;/p&gt;
&lt;p&gt;e.&amp;nbsp;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;IMPORTANTE:&lt;/strong&gt;&lt;/span&gt; Vi prego di notare che ho sempre specificato &amp;ldquo;data file&amp;rdquo; e non &amp;ldquo;log file&amp;rdquo; o &amp;ldquo;transaction log file&amp;rdquo; (le definizioni sono equivalenti) dato che &amp;egrave; assolutamente inutile fare &amp;ldquo;log file&amp;rdquo; aggiuntivi: a differenza dei &amp;ldquo;data file&amp;rdquo; che vengono usati in parallelo, i &amp;ldquo;log file&amp;rdquo; sono usati in seriale, solo al riempimento dell&amp;rsquo;uno SQL Server usa il successivo;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2)&amp;nbsp;Dimensione iniziale&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;a.&amp;nbsp;Questa &amp;egrave; una delle pi&amp;ugrave; importanti ottimizzazioni, per qualche scellerato motivo, quando installate SQL Server, la dimensione iniziale dell&amp;rsquo;unico data file &amp;egrave; di soli 8 MB, quella dell&amp;rsquo;unico transaction log file &amp;egrave; di 1 MB, entrambi con &amp;ldquo;autogrowth&amp;ldquo; del 10 %:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&amp;nbsp;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/1602.p1.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/1602.p1.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;b.&amp;nbsp;Se pensate che un TEMPDB pu&amp;ograve; arrivare a svariati GB, se non decine o centinaia di GB, Vi immaginate quanti piccoli &amp;ldquo;pezzi&amp;rdquo; (fragment) sul file system dovranno essere allocati ? Migliaia se non milioni, e tutti di dimensioni ridicole, questo &amp;egrave; il modo perfetto per distruggere le performance dell&amp;rsquo;NTFS anche sulle SAN pi&amp;ugrave; potenti !&lt;/p&gt;
&lt;p&gt;c.&amp;nbsp;La regola d&amp;rsquo;oro in questo caso &amp;egrave;: &amp;ldquo;Immediatamente dopo l&amp;rsquo;installazione, rivedere le dimensioni iniziali del TEMPDB portando la dimensione dell&amp;rsquo;unico data file e del transaction log file ad almeno 1GB&amp;rdquo;.&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="text-decoration: underline;"&gt;NOTA:&lt;/span&gt;&amp;nbsp;Non &amp;egrave; detto che 1GB sia sufficiente, diciamo che l&amp;rsquo;NTFS sotto questa soglia ha performance non ottimali per i data file di SQL, su installazioni medie se non grosse consiglio almeno 4-8GB per i data file e 2-4GB per il transaction log file;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3)&amp;nbsp;Autogrowth&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;a.&amp;nbsp;Ad integrazione della precedente,&amp;nbsp; aggiungo anche questa ulteriore regola: &amp;ldquo;Eliminare l&amp;rsquo;Autogrowth in percentuale ed impostare un valore fisso di incremento in MB per tutti i file, usando lo stesso valore&amp;rdquo;.&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;i.&amp;nbsp;Che valore scegliere per l&amp;rsquo; &amp;rdquo;Autogrowth&amp;rdquo; ? Come raccomandazioni di massima direi almeno 1-2GB per i data file e tra 0.5 e 1.0GB per i transaction log file;&lt;/p&gt;
&lt;p&gt;b.&amp;nbsp;Nello scegliere la dimensione per l&amp;rsquo;autogrowth del transaction log file del TEMPDB, cos&amp;igrave; come per ogni altro database utente considerate questa postilla aggiuntiva: &amp;ldquo;Evitate di usare il valore esattamente pari a 4GB per l&amp;rsquo;espansione del transaction log, altrimenti incorrerete in bug noto da 3 versioni di SQL Server&amp;rdquo;;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;br /&gt;i.&amp;nbsp;Il bug &amp;egrave; descritto al seguente link:&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;Bug: log file growth broken for multiples of 4GB&lt;br /&gt;&lt;a href="http://www.sqlskills.com/BLOGS/PAUL/post/Bug-log-file-growth-broken-for-multiples-of-4GB.aspx"&gt;http://www.sqlskills.com/BLOGS/PAUL/post/Bug-log-file-growth-broken-for-multiples-of-4GB.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;NOTA&lt;/span&gt;&lt;/strong&gt;: Ho gi&amp;agrave; verificato che nella CTP3 di Denali questo annoso, nel vero senso della parola, problema &amp;egrave; stato finalmente risolto;&lt;/p&gt;
&lt;p&gt;c.&amp;nbsp;Lo scopo ultimo dovrebbe essere quello di evitare eventi di &amp;ldquo;Autogrowth&amp;rdquo; , dato che sono eventi bloccanti (per il workload di SQL Server) per l&amp;rsquo;intera durata dell&amp;rsquo;operazione di espansione, specialmente se:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;br /&gt;i.&amp;nbsp;Si tratta di transaction log file con incrementi cospicui, dato che non &amp;egrave; possibile beneficiare dell&amp;rsquo; &amp;ldquo;Instant File Initialization&amp;rdquo; (vedi punto[4] seguente);&lt;br /&gt;ii.&amp;nbsp;Si tratta di data file con incrementi cospicui e non si sta utilizando la feature &amp;ldquo;Instant File Initialization&amp;rdquo; (vedi punto[4] seguente);&lt;/p&gt;
&lt;p&gt;d.&amp;nbsp;Se volete sapere quali, quanti e di che durata sono stati gli eventi di &amp;ldquo;Autogrowth&amp;rdquo; sulla Vostra istanza SQL, &amp;egrave; possibile utilizzare il report &amp;ldquo;Disk Usage&amp;rdquo; dalla console di SQL, tra gli &amp;ldquo;Standard Report&amp;rdquo; a livello di singolo database:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/3362.p2.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/3362.p2.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;i.&amp;nbsp;E&amp;rsquo; anche possibile catturare uno specifico evento in una trace SQL con il SQL Profiler:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/5314.p3.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/5314.p3.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;e.&amp;nbsp;Utilizzando le informazioni dei punti precedenti, ecco una ulteriore regola a corollario della principale: &amp;ldquo;Dopo aver riconfigurato i valori di size ed autogrowth per i data/log file del TEMPDB, verificare periodicamente la numerosit&amp;agrave; e la durata degli eventi di autogrowth ed eventualmente ritoccarli ulteriormente per diminuirne frequenza e durata&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4)&amp;nbsp;Instant File Initialization&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;a.&amp;nbsp;Si tratta di una importantissima &amp;ldquo;feature&amp;rdquo; dell&amp;rsquo;NTFS di Windows (&amp;gt;= 2003) che permette la creazione o l&amp;rsquo;espansione istantanea (1-2ms) dei data file di SQL Server, ma non dei transaction log files (quindi prestate attenzione!), anche di centinaia di Gigabyte (GB) o Terabyte (TB).&lt;/p&gt;
&lt;p&gt;b.&amp;nbsp;A meno che non abbiate interesse in una attivit&amp;agrave; di &amp;ldquo;Security Hardening&amp;rdquo; molto spinta, consiglio caldamente l&amp;rsquo;abilitazione di questa funzionalit&amp;agrave;, come abilitarla &amp;egrave; presto detto nella seguente frase che riassume questa raccomandazione: &amp;ldquo;Assicurarsi che il service account di SQL Server abbia lo user-right denominato [Perform Volume Maintenance Tasks] su tutte le macchine dove girer&amp;agrave; il servizio&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5)&amp;nbsp;Posizionamento file&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;a.&amp;nbsp;Dato che le performance del TEMPDB sono critiche, dovrebbe essere oggetto privilegiato per avere almeno una LUN dedicata, la regola pi&amp;ugrave; generale (e costosa !) possibile recita: &amp;ldquo;Il database TEMPDB dovrebbe avere una LUN dedicata per i data file ed una LUN dedicata per il transaction log file&amp;rdquo;;&lt;br /&gt;b.Dare due LUN al TEMPDB potrebbe non essere sempre possibile per ragioni di costo, oppure potrebbe essere non necessario perch&amp;eacute; le altre LUN condivise potrebbero reggere il carico necessario;&lt;br /&gt;c.In caso ci si debba ridurre ad una sola LUN per il TEMPDB, consiglio di dedicarla ai data file e di piazzare il transaction log file sulla stessa LUN utilizzata dai transaction log dei database utente;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6)&amp;nbsp;RAID&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;a.&amp;nbsp;Qui la storia &amp;egrave; semplice, vale la regola generale per tutti i database, quindi la regola sommaria potrebbe recitare cos&amp;igrave;: &amp;ldquo;Per la LUN del transaction log file del TEMPDB, scegliere un tipo di RAID che ottimizzi le scritture sequenziali (RAID-1 o RAID-10), mentre per i data file scegliere un tipo di RAID che ottimizzi letture/scritture random, pur garantendo il necessario grado di fault tollerance&amp;rdquo;.&lt;br /&gt;b.La suddetta regola si riferisce ad una situazione ottimale, &amp;egrave; anche possibile utilizzare un tipo di RAID meno performante, ma anche meno costoso, a patto che il sottosistema di I/O sia in grado di reggere il carico necessario;&lt;br /&gt;c.Per verificare le performance dell&amp;rsquo; I/O a livello di singolo file, non &amp;egrave; possibile fare uso dei Performance Counters di Windows, &amp;egrave; per&amp;ograve; possibile usare la seguente query in SQL Server (specifica per tutti i file del TEMPDB):&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;SELECT * FROM sys.dm_io_virtual_file_stats(DB_ID(N'tempdb'),null)&lt;/p&gt;
&lt;p&gt;d.E&amp;rsquo; anche possibile visualizzare in modalit&amp;agrave; &amp;ldquo;live&amp;rdquo; I tempi di accesso ad ogni file di ogni database, anche per il TEMPDB quindi, utilizzando l&amp;rsquo;Activity Monitor di SQL 2008 (e successive versioni) come da figura seguente:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/0172.p4.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/0172.p4.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;b.&amp;nbsp;Sebbene il TEMPDB sia un database con dati &amp;ldquo;a perdere&amp;rdquo; dato che tutti i suoi file vengono distrutti e ricreati ad ogni stop/start, &amp;ldquo;Per il TEMPDB &amp;egrave; comunque sconsigliato utilizzare volumi di tipo RAID-0&amp;rdquo;: in caso di fallimento/corruzione del disco, l&amp;rsquo;intera istanza si fermer&amp;agrave; se il TEMPDB non sar&amp;agrave; in grado di funzionare correttamente.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7)&amp;nbsp;Trace flags&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;a.&amp;nbsp;I principali e pi&amp;ugrave; importanti &amp;ldquo;trace flags&amp;rdquo; con cui si pu&amp;ograve; intervenire per ottimizzare le performance del TEMPDB sono due:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;br /&gt;i.&amp;nbsp;-T1118: Utilizzato moltissimo in SQL 2000 dove non erano presenti alcune importanti ottimizzazioni per il TEMPDB, &amp;egrave; tutt&amp;rsquo;ora valido (e utile) anche in SQL 2005 e successive versioni: dopo aver abilitato tale trace flag, l&amp;rsquo;allocazione di spazio per gli oggetti temporanei avverr&amp;agrave; solo utilizzando &amp;ldquo;extent&amp;rdquo; di tipo &amp;ldquo;uniform&amp;rdquo;, non pi&amp;ugrave; di tipo &amp;ldquo;mixed&amp;rdquo;, i particolari sono nel link seguente, questo serve a diminuire possibili colli di bottiglia sulle pagine di sistema di tipo SGAM in ogni data file del database:&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;Concurrency enhancements for the tempdb database&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/328551/en-us"&gt;http://support.microsoft.com/kb/328551/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;SQL Server (2005 and 2008) Trace Flag 1118 (-T1118) Usage&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/psssql/archive/2008/12/17/sql-server-2005-and-2008-trace-flag-1118-t1118-usage.aspx"&gt;http://blogs.msdn.com/b/psssql/archive/2008/12/17/sql-server-2005-and-2008-trace-flag-1118-t1118-usage.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left: 60px;"&gt;Misconceptions around TF 1118&lt;br /&gt;&lt;a href="http://www.sqlskills.com/BLOGS/PAUL/post/Misconceptions-around-TF-1118.aspx"&gt;http://www.sqlskills.com/BLOGS/PAUL/post/Misconceptions-around-TF-1118.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;ii.&amp;nbsp;-T1117: Questo &amp;egrave; molto meno noto del precedente, ma fornisce un&amp;rsquo;interessante funzionalit&amp;agrave;: nel caso il TEMPDB abbia pi&amp;ugrave; data file, quando un singolo file deve andare in &amp;ldquo;Autogrowth&amp;rdquo;, allora SQL Server espande tutti i data file comtemporaneamente; su alcune grosse installazioni di SQL Server, questo serve a mantenere perfettamente bilanciato lo spazio allocato tra tutti i data file presenti, migliorando la strategia di allocazione per il TEMPDB;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;IMPORTANTE:&lt;/span&gt;&lt;/strong&gt; Nel caso si decida di adottare il trace flag &amp;ldquo;-T1117&amp;rdquo; e/o si abbiano numerosi data file e/o le dimensioni di &amp;ldquo;Autogrowth&amp;rdquo; siano non trascurabili, assicurarsi di aver abilitato la feature &amp;ldquo;Instant File Initialization&amp;rdquo; altrimenti le operazioni di espansione si prolungheranno per un tempo potenzialmente lungo.&lt;/p&gt;
&lt;p&gt;b.&amp;nbsp;Questi trace flag devono essere aggiunti, eventualmente, agli &amp;ldquo;startup parameters&amp;rdquo; dell&amp;rsquo;istanza SQL Server mediante il tool &amp;ldquo;SQL Configuration Manager&amp;rdquo;, separati da &amp;ldquo;;&amp;rdquo; e facendo molta attenzione ad aggiungerli alla fine di quanto gi&amp;agrave; presente senza sovrascrivere i parametri esistenti, e senza spazi tra &amp;ldquo;-T&amp;rdquo; ed il valore numerico (1117 o 1118):&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/5732.p5.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/5732.p5.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;c.&amp;nbsp;Per finire, ecco la regola sommaria: &amp;ldquo;Utilizzando il tool SQL Configuration Manager, aggiungere il trace flag &amp;ndash;T1118, ed eventualmente anche &amp;ndash;T1117, agli startup parameters dell&amp;rsquo;istanza SQL.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;d.&amp;nbsp;I parametri avranno effetto al successivo riavvio dell&amp;rsquo;istanza SQL, verificate che nell&amp;rsquo;ERRORLOG compaia una situazione del genere (deve comparire uno spazio tra &amp;ndash;T ed il relativo valore numerico, altrimenti avete sbagliato qualcosa !):&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Registry startup parameters:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&amp;nbsp; -d C:\SQL2008\MSSQL10.SQL2008\MSSQL\DATA\master.mdf&lt;br /&gt;&amp;nbsp; -e C:\SQL2008\MSSQL10.SQL2008\MSSQL\Log\ERRORLOG&lt;br /&gt;&amp;nbsp; -l C:\SQL2008\MSSQL10.SQL2008\MSSQL\DATA\mastlog.ldf&lt;br /&gt;&amp;nbsp; -T 1118&lt;br /&gt;&amp;nbsp; -T 1117&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;8)&amp;nbsp;Frammentazione esterna NTFS&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;a.&amp;nbsp;Altro effetto sgradevole delle &amp;ldquo;Autogrowth&amp;rdquo; frequenti e/o di piccole dimensioni, &amp;egrave; la frammentazione a livello NTFS dei data/log file non solo del TEMPDB, in questo caso, ma di tutti i database in generale, ovviamente &amp;egrave; preferibile che tutti i data/log file di un database siano preallocati in maniera contigua evitando, per quanto possibile, susseguenti espansioni;&lt;/p&gt;
&lt;p&gt;b.&amp;nbsp;Se volete analizzare lo stato di frammentazione a livello di file system potete usare il seguente utilissimo tool dalla suite di SysInternals:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Contig v1.6 (by Mark Russinovich)&lt;br /&gt;&lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb897428.aspxc"&gt;http://technet.microsoft.com/en-us/sysinternals/bb897428.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;c.&amp;nbsp;Dato che ho gi&amp;agrave; formulato, nei paragrafi precedenti, le regole relative alle dimensioni raccomandate per la size iniziale e per l&amp;rsquo;&amp;rdquo;Autogrowth&amp;rdquo;, qui non mi rimane che aggiungere la seguente regola accessoria: &amp;ldquo;E&amp;rsquo; consigliato controllare periodicamente la frammentazione a livello di file system dei data/log file che compongono il TEMPDB, utilizzando il tool Contig di SysInternals &amp;rdquo;; nel caso che uno o pi&amp;ugrave; dei suddetti file sia composto da pi&amp;ugrave; di una decina di &amp;ldquo;fragments&amp;rdquo; &amp;egrave; consigliato rigenerare i file del TEMPDB con i seguenti macro passi:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;i.&amp;nbsp;Fermare il servizio SQL Server;&lt;br /&gt;ii.&amp;nbsp;Eseguire un backup &amp;ldquo;offline&amp;rdquo; di tutti i data/log file che compongono tutti i database (di sistema e utente) dell&amp;rsquo;istanza, ad eccezione del TEMPDB;&lt;br /&gt;iii.&amp;nbsp;Utilizzare un tool di deframmentazione disco ed attivarlo sulla/e LUN in oggetto per ricompattare lo spazio libero su disco.&lt;br /&gt;iv.&amp;nbsp;Riavviare l&amp;rsquo;istanza SQL: al riavvio il database TEMPDB sar&amp;agrave; ricreato in ogni suo file, stavolta con dimensioni iniziali congrue in modo da evitare ulteriori frammentazioni dovute a valori iniziali troppo piccoli e/o autogrowth troppo frequenti;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;9)&amp;nbsp;Frammentazione interna VLF&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;a.&amp;nbsp;Il transaction log di ogni database ha una sua struttura interna complessa, cercando di condensare quanto pi&amp;ugrave; possibile, esso &amp;egrave; diviso in un numero variabile di unit&amp;agrave; contigue di spazio disco denominate Virtual Log Files (VLFs): quanti VLF, e di che dimensione lo decide SQL Server autonomamente senza possibilit&amp;agrave; di intervento diretto, l&amp;rsquo;unico modo di influenzarlo &amp;egrave; stabilire la dimensione iniziale del transaction log e la dimensione delle eventuali autogrowth, in base a questi SQL Server far&amp;agrave; le sue scelte; I particolari li potete trovare a questo link:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Transaction Log Physical Architecture&lt;br /&gt;&lt;a href="http://technet.microsoft.com/en-us/library/ms179355.aspx"&gt;http://technet.microsoft.com/en-us/library/ms179355.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;b.&amp;nbsp;Il problema nasce se il numero di VLF diventa elevato, questo infatti pu&amp;ograve; impattare, in generale su ogni database ed in parte anche sul TEMPDB, pesantemente su attivit&amp;agrave; come la recovery di un database (alla partenza di SQL), i tempi di backup/restore, le autogrowth del transaction log ed addirittura le classiche operazioni di manipolazioni dati (DML);&lt;/p&gt;
&lt;p&gt;c.&amp;nbsp;In base alle considerazioni dei due punti precedenti, ecco la regola sintetica di questo paragrafo: &amp;ldquo;Periodicamente, &amp;egrave; necessario monitorare il numero di VLF per il database TEMPDB e se ne risultano pi&amp;ugrave; di 100 &amp;egrave; necessario intraprendere azioni correttive&amp;rdquo;;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;i.&amp;nbsp;Per controllare il numero di VLF per tutti i database, anche per il TEMPDB, &amp;egrave; possibile utilizzare lo script che trovate al seguente link, gentilmente fornito dal nostro buon amico Paul Randal (&lt;a href="http://www.sqlskills.com)http"&gt;http://www.sqlskills.com):&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a title="http://www.sqlskills.com/BLOGS/PAUL/file.axd?file=2010%2f4%2fSQLSkillsLogInfo.zip" href="http://www.sqlskills.com/BLOGS/PAUL/file.axd?file=2010%2f4%2fSQLSkillsLogInfo.zip"&gt;http://www.sqlskills.com/BLOGS/PAUL/file.axd?file=2010%2f4%2fSQLSkillsLogInfo.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;d.&amp;nbsp;Le azioni correttive per abbassare il numero dei VLF nel database TEMPDB sono le seguenti:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;br /&gt;i.&amp;nbsp;Aumentare la dimensione iniziale del transaction log in maniera congrua, seguendo le raccomandazioni di questo documento;&lt;br /&gt;ii.&amp;nbsp;Aumentare la dimensione della eventuale autogrowth in maneria congrua, seguendo le raccomandazioni di questo documento;&lt;br /&gt;iii.&amp;nbsp;Riavviare l&amp;rsquo;istanza SQL Server per rigenerare il database TEMPDB;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10)&amp;nbsp;Formattazione LUN&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;a.&amp;nbsp;Se avete ancora la sfortuna di dover ancora installare (o gestire) SQL Server su Windows Server 2003 (o precedenti) fate molta attenzione all &amp;ldquo;Partition Alignment&amp;rdquo;, dato che tali versioni di Windows, by default, creano le partizioni &amp;ldquo;disallineate&amp;rdquo; con offset a 31.5 KB; la perdita di performance, sul sottosistema di I/O, pu&amp;ograve; arrivare anche al 50%, &amp;egrave; caldamente consigliato crearle, quindi, con offset a 1MB come da default per Windows Server 2008 e successive:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Disk Partition Alignment Best Practices for SQL Server&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd758814.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd758814.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;NOTA: In genere l&amp;rsquo;offset a 1MB &amp;egrave; ottimale per tutte le &amp;ldquo;stripe unit&amp;rdquo; delle SAN attualmente in commercio, in ogni modo &amp;egrave; consigliato verificare con il Vendor per eventuali differenti raccomandazioni in tale senso.&lt;/p&gt;
&lt;p&gt;b.&amp;nbsp;A meno che il Vendor della Vostra SAN non abbia differenti e specifiche raccomandazioni in materia, formattare la partizione per il TEMPDB con &amp;ldquo;allocation unit&amp;rdquo; a&amp;nbsp; 64KB;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="text-decoration: underline;"&gt;NOTA&lt;/span&gt;: entrambe queste raccomandazioni si applicano in generale alle LUN utilizzate per tutti i database, non solo per il TEMPDB.&lt;/p&gt;
&lt;p&gt;In aggiunta a questa lunga lista, ecco alcune importanti informazioni e peculiarit&amp;agrave; sul TEMPDB:&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;-&amp;nbsp;Da SQL 2008 &amp;egrave; possibile abilitare l&amp;rsquo;algoritmo di tipo &amp;ldquo;CHECKSUM&amp;rdquo; (default in SQL 2008 e seguenti) anche sul TEMPDB;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/8267.p6.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/8267.p6.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;Il &amp;ldquo;Recovery Model&amp;rdquo; di default del TEMPDB &amp;egrave; SIMPLE (vedi figura precedente) e decisamente non vedo ragioni per cambiarlo;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;-&amp;nbsp;Aspetto teorico, ma anche &amp;ldquo;capacitivo&amp;rdquo;, molto interessante del TEMPDB: al contrario dei &amp;ldquo;normali&amp;rdquo; database utente, dove sia le informazioni di &amp;ldquo;redo&amp;rdquo; (roll-forward) che di &amp;ldquo;undo&amp;rdquo; (roll-back) delle transazioni vengono inserite nel transaction log, nel TEMPDB solo le informazioni di &amp;ldquo;undo&amp;rdquo; vengono considerate in modo da poter supportare eventuali &amp;ldquo;rollback&amp;rdquo; delle transazioni utente che contengono tabelle temporanee; non &amp;egrave; necessario avere le informazioni di &amp;ldquo;redo&amp;rdquo;, necessarie eventualmente solo nella procedura di &amp;ldquo;crash recovery&amp;rdquo; (di qualsiasi altro database), quando esso viene messo/portato &amp;ldquo;online&amp;rdquo;, perch&amp;eacute; il TEMPDB viene ricreato da zero e non passa attraverso tale procedura.&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;Il processo di &amp;ldquo;Checkpoint&amp;rdquo; interno di SQL Server, &amp;egrave; attivo anche sul TEMPDB ma si comporta in maniera leggermente differente: generalmente (esiste un&amp;rsquo;eccezione), le &amp;ldquo;dirty pages&amp;rdquo; in memoria relative al TEMPDB non vengono scaricate (flush) su disco proprio perch&amp;eacute; il TEMPDB non passa attraverso la procedura di &amp;ldquo;crash recovery&amp;rdquo; quando v&amp;agrave; online; l&amp;rsquo;eccezione &amp;egrave; la regola per i database in SIMPLE recovery model, e cio&amp;egrave; quando lo spazio effettivamente usato arriva al 70% della dimensione totale.&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;In SQL Server 2005 &amp;egrave; stato introdotto un meccanismo di &amp;ldquo;caching&amp;rdquo; specializzato per il TEMPDB in modo da eliminare gli storici colli di bottiglia sulle mappe di allocazione: quando si distrugge un oggetto temporaneo in TEMPDB, non tutto viene deallocato, una pagina di tipo &amp;ldquo;IAM&amp;rdquo; (index allocation map) ed un data page rimangono, in modo da poter essere eventualmente riutilizzate senza dover passar da alcune tabelle di sistema (di allocazione) di SQL Server;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;In aggiunta ai normali performance counters utilizzati per ogni database utente, il TEMPDB ne ha alcuni specializzati che &amp;egrave; bene tenere sotto controllo:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&amp;bull;&amp;nbsp;General Statistics -&amp;gt; Active Temp Tables;&lt;br /&gt;&amp;bull;&amp;nbsp;General Statistics -&amp;gt; Temp Tables Creation Rate;&lt;br /&gt;&amp;bull;&amp;nbsp;General Statistics -&amp;gt; Temp Tables for Destruction;&lt;br /&gt;&amp;bull;&amp;nbsp;Transactions -&amp;gt; Free Space in tempdb (KB);&lt;br /&gt;&amp;bull;&amp;nbsp;Transactions -&amp;gt; tutti i counters che iniziano con "Version";&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;Credenza popolare assolutamente sbagliata: le variabili di tipo tabelle temporanee stanno in memoria e non in tempdb, &lt;span style="text-decoration: underline;"&gt;ovviamente non &amp;egrave; vero !&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;Anche per il TEMPDB &amp;egrave; possibile eseguire il controllo per la presenza di eventuali corruzioni con il comando &amp;ldquo;DBCC CHECKDB&amp;rdquo;, cosa per altro consigliata;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;Anche per le tabelle temporanee create in TEMPDB, &amp;egrave; possibile creare indici e statistiche, inoltre le funzionalit&amp;agrave; a livello di database denominate &amp;ldquo;AutoCreate Statistics&amp;rdquo; e &amp;ldquo;AutoUpdate Statistics&amp;rdquo; sono attive ed &amp;egrave; consigliato lasciarle in questo stato.&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;Il &amp;ldquo;database ID&amp;rdquo; del TEMPDB &amp;egrave; sempre (2), ricordavelo, specialmente quando analizzate eventuali blocchi, deadlock, o report di corruzione;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;Attenzione quando abilitate la &amp;ldquo;Transparent Database Encryption&amp;rdquo; (TDE) di SQL 2008 su un qualsiasi database utente perch&amp;eacute; anche il TEMPDB sar&amp;agrave; totalmente criptato, sia nella parte relativa ai data file che transaction log files.&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;Attenzione ad eventuali operazioni di &amp;ldquo;shrink&amp;rdquo; manuale sul TEMPDB, potreste causare una corruzione dello stesso database, leggete bene il seguente articolo, in particolare la sezione "Effects of Execution of DBCC SHRINKDATABASE or DBCCSHRINKFILE While Tempdb Is In Use":&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;How to shrink the tempdb database in SQL Server&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/307487/en-us"&gt;http://support.microsoft.com/kb/307487/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;La &amp;ldquo;Collation&amp;rdquo; con cui il TEMPDB viene creato &amp;egrave; quella di sistema che Voi avete specificato all&amp;rsquo;atto dell&amp;rsquo;installazione, fate attenzione ad usare database con tale differente impostazione perch&amp;egrave;, nel caso le Vostre query facciano un confronto tra stringhe e/o tipi di dato strutturati (money, datetime, etc.) potrebbero esserci dei problemi o degli errori perch&amp;eacute; il confronto &amp;egrave; tra &amp;ldquo;Collation&amp;rdquo; differenti e potrebbe essere necessario inserire delle conversioni forzate (&amp;ldquo;collate&amp;rdquo; query hint option) per rendere consistente il risultato.&lt;/p&gt;
&lt;p&gt;Spero di avere inserito tutto, nel caso mi fossi dimenticato qualcosa non esitate a farmelo sapere.&lt;/p&gt;
&lt;p&gt;Al prossimo post !&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;--Igor Pagliai--&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3452427" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/TempDB/">TempDB</category></item><item><title>Visita guidata ai Datacenter Microsoft</title><link>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/09/05/visita-guidata-ai-datacenter-microsoft.aspx</link><pubDate>Mon, 05 Sep 2011 06:23:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3451126</guid><dc:creator>Italian Premier Center for SQL Server</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/italian_premier_center_for_sql_server/rsscomments.aspx?WeblogPostID=3451126</wfw:commentRss><comments>http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/2011/09/05/visita-guidata-ai-datacenter-microsoft.aspx#comments</comments><description>&lt;p&gt;Volete sapere come Microsoft gestisce, a livello di logistica ed infrastruttura, i sui Datacenter ? Volete sapere come &amp;egrave; possibile &lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;stipare 2400 server in un container&lt;/span&gt;&lt;/strong&gt; (si, avete capito bene) merci ?&lt;/p&gt;
&lt;p&gt;Il seguente video &amp;egrave; molto interessante, poche persone hanno avuto la possibilit&amp;agrave; di accedervi di persona,&amp;nbsp;direi che vale la pena spenderci i 10 minuti della durata.&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://blog.seattlepi.com/microsoft/2011/08/05/what-is-the-cloud-take-a-video-tour-of-microsoft-data-centers/"&gt;http://blog.seattlepi.com/microsoft/2011/08/05/what-is-the-cloud-take-a-video-tour-of-microsoft-data-centers/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Buona visione a tutti.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;--Igor Pagliai--&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/2311.cloudpower.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x550/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-37/2311.cloudpower.jpg" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3451126" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/italian_premier_center_for_sql_server/archive/tags/Datacenter/">Datacenter</category></item></channel></rss>