<?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>Supporto Tecnico Enterprise : Raffaella Canobbio</title><link>http://blogs.technet.com/itasupport/archive/tags/Raffaella+Canobbio/default.aspx</link><description>Tags: Raffaella Canobbio</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>SQL Server - Algoritmo Proportional fill, Autogrow e loro effetto sulle dimensioni dei file di un filegroup</title><link>http://blogs.technet.com/itasupport/archive/2009/10/19/sql-server-algoritmo-proportional-fill-autogrow-e-loro-effetto-sulle-dimensioni-dei-file-di-un-filegroup.aspx</link><pubDate>Sun, 18 Oct 2009 23:00:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3287291</guid><dc:creator>itentblg</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/itasupport/comments/3287291.aspx</comments><wfw:commentRss>http://blogs.technet.com/itasupport/commentrss.aspx?PostID=3287291</wfw:commentRss><description>&lt;h3&gt;Algoritmo di Proportional fill&lt;/h3&gt;  &lt;p&gt;L'algoritmo di Proportional fill (&lt;a href="http://blogs.msdn.com/saponsqlserver/archive/2007/12/01/proportional-fill-and-how-to-check-whether-it-works.aspx"&gt;&lt;b&gt;Proportional fill and how to check whether it works&lt;/b&gt;&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ms187087.aspx"&gt;&lt;b&gt;Using Files and Filegroups&lt;/b&gt;&lt;/a&gt;) è l'algoritmo utilizzato per allocare extent (&lt;a href="http://msdn.microsoft.com/en-us/library/ms190969.aspx"&gt;&lt;b&gt;Understanding Pages and Extents&lt;/b&gt;&lt;/a&gt;) all'interno dei datafile di un filegroup (&lt;a href="http://msdn.microsoft.com/en-us/library/ms179316.aspx"&gt;&lt;b&gt;Files and Filegroups Architecture&lt;/b&gt;&lt;/a&gt;) che contiene da due a più datafile.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Sql server alloca un quantità di extent , proporzionale allo spazio libero all'interno di ciascun datafile di un filegroup, mantenendo in questo modo la stessa percentuale di spazio utilizzato su ciascun file.&lt;/p&gt;  &lt;p&gt;Il calcolo della proporzione da utilizzare per allocare lo spazio nei file viene effettuato con le seguenti modalità:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;la percentuale di Proportional fill viene ricalcolata dopo aver allocato 8192 extent&lt;/li&gt;    &lt;li&gt;il numero degli extent liberi del file con più spazio libero, viene diviso per il numero degli extent liberi degli altri file &lt;/li&gt;    &lt;li&gt;il rapporto considera solo numeri interi&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Tramite l'utilizzo dell'algoritmo del Proportional fill , i file all'interno di un filegroup si riempono contemporaneamente.&lt;/p&gt;  &lt;p&gt;Nel caso di datafile con uguali dimensioni iniziali, dovremmo aspettarci un uguale utilizzo dello spazio su tali file man mano che il database cresce di dimensione.&lt;/p&gt;  &lt;p&gt;L'algoritmo di Proportional fill considera solo interi, per cui si possono determinare uguali allocazioni anche con diverso spazio libero tra i file , ad esempio quando il rapporto tra lo spazio libero tra i file non è esattamente di 1 a 2 .   &lt;br /&gt;Avendo, all'interno di un filegroup, un datafile con 10 Gb di spazio libero e un datafile con 19,9 Gb di spazio libero , il rapporto tra lo spazio libero dei due datafile non è esattamente di 1 a 2, per cui il tasso di allocazione sui datafile sarà identico. In questa situazione, lo spazio verrà allocato nella stessa percentuale anche in file aventi una diversa quantità di spazio libero, con conseguente sbilanciamento dello spazio occupato tra di essi.&lt;/p&gt;  &lt;p&gt;Siccome l'algoritmo è ricalcolato frequentemente, gli errori dovuti al considerare solo numeri interi, dovrebbero bilanciarsi, arrivando generalmente a situazioni in cui tutti i file hanno la stessa percentuale di spazio utilizzato e arrivano in contemporanea ad occupare tutto lo spazio libero.&lt;/p&gt;  &lt;h3&gt;Autogrow&lt;/h3&gt;  &lt;p&gt;Le impostazioni di autogrow dei file di un database controllano il comportamento di tali file nel momento in cui raggiungono la loro massima dimensione &lt;a href="http://msdn.microsoft.com/en-us/library/ms180254(SQL.90).aspx"&gt;&lt;b&gt;Database Properties (Files Page)&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Ho spesso affrontato problemi di performance causati da una crescita per autogrow dei datafile o log file di un database. Il consiglio per evitare che l’autogrow venga scatenato durante l’attività sul database, causando problemi di performance, è di controllare periodicamente che ogni file abbia necessario spazio libero all'interno. In tal modo, lo spazio verrà allocato internamente al file e si eviterà la necessità di crescita automatica a causa del raggiungimento della massima dimensione.&lt;/p&gt;  &lt;p&gt;L’autogrow dovrebbe essere utilizzato solo per evitare problemi causati da crescite inaspettate e non pianificate del database e non come sostituto di un’opportuna analisi sull’andamento delle dimensioni del database.&lt;/p&gt;  &lt;p&gt;Attenzione è anche da riservare alla percentuale impostata di autogrow.&lt;/p&gt;  &lt;p&gt;Consideriamo un database che ha raggiunto la dimensione massima e su cui l’applicazione tenta di inserite dati. All’inserimento di dati, siccome non è più presente spazio libero, l’autogrow viene attivato.&lt;/p&gt;  &lt;p&gt;Se l’autogrow è impostato al 10% delle dimensioni del database e il database è di circa 30 GB, l’autogrow tenterà di aumentare le dimensioni del database di 3 GB. Tale espansione potrà richiedere molto tempo e terminare prima del timeout applicativo , determinando il fallimento dell’operazione di insert con un generico errore di timeout.&lt;/p&gt;  &lt;p&gt;Di seguito alcuni articoli relativi alle considerazioni sulle impostazioni di autogrow &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://support.microsoft.com/kb/315512"&gt;Considerations for the &amp;quot;autogrow&amp;quot; and &amp;quot;autoshrink&amp;quot; settings in SQL Server&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/sqlserverstorageengine/archive/2006/06/13/629866.aspx"&gt;Data files: To Autogrow Or Not To Autogrow?&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://support.microsoft.com/kb/822641"&gt;Additional diagnostics added to diagnose long-running or canceled database autogrow operations in SQL Server&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;L'autogrow oltre a causare problemi di performance , può indirettamente causare uno sbilanciamento tra le dimensioni dei datafile di uno stesso filegroup, sebbene tali file siano stati impostati inizialmente alla stessa dimensione e con identiche configurazioni di autogrow.&lt;/p&gt;  &lt;p&gt;Di seguito la spiegazione di come ciò possa avvenire&lt;/p&gt;  &lt;h3&gt;Autogrow e sbilanciamento dello spazio allocato tra i file di un filegroup nonostante il funzionamento del Proportional Fill&lt;/h3&gt;  &lt;p&gt;Sql server, allo startup, crea una lista dei datafile disponibili e calcola la percentuale di Proportional fill come sopra specificato.&lt;/p&gt;  &lt;p&gt;Dopo il verificarsi di un autogrow, Sql server conserva in memoria l'informazione di quale file nella lista sopra indicata è aumentato di dimensione per autogrow.&lt;/p&gt;  &lt;p&gt;In caso di mancanza di spazio su un database, il file successivo viene preso in considerazione per eventuali allocazioni.&lt;/p&gt;  &lt;p&gt;Al restart di Sql server, l'informazione relativa al file che ha subito l'autogrow, non viene mantenuta, per cui il primo file della lista viene nuovamente preso in considerazione in casi di mancanza di spazio , anche se l'autogrow si è appena verificato su di esso.&lt;/p&gt;  &lt;p&gt;A causa di questo meccanismo può capitare che nonostante il Proportional fill, uno dei file di un filegroup , possa raggiungere dimensioni maggiori rispetto agli altri sebbene le configurazioni iniziali siano state identiche.&lt;/p&gt;  &lt;h3&gt;Soluzione&lt;/h3&gt;  &lt;p&gt;Al fine di evitare lo sbilanciamento delle dimensioni di file configurati inizialmente con le stesse dimensioni all'interno di un filegroup si suggerisce di :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;aumentare manualmente e contemporaneamente la dimensione dei file di un filegroup &lt;/li&gt;    &lt;li&gt;verificare lo spazio libero all'interno dei file e aumentarli prima che si verifichi l'autogrow     &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Per Sql server 2005, la seguente select , mostra lo spazio libero e allocato all'interno dei file      &lt;br /&gt;      &lt;br /&gt;&lt;font size="3" face="Courier New"&gt;select       &lt;br /&gt;&lt;/font&gt;&lt;font size="3" face="Courier New"&gt;dbfiles.file_id,       &lt;br /&gt;&lt;/font&gt;&lt;font size="3" face="Courier New"&gt;[FILE_SIZE_MB] =        &lt;br /&gt;&lt;/font&gt;&lt;font size="3" face="Courier New"&gt;convert(decimal(12,2),round(dbfiles.size/128.000,2)),       &lt;br /&gt;&lt;/font&gt;&lt;font size="3" face="Courier New"&gt;[SPACE_USED_MB] =       &lt;br /&gt;&lt;/font&gt;&lt;font size="3" face="Courier New"&gt;convert(decimal(12,2),round(fileproperty(dbfiles.name,'SpaceUsed')/128.000,2)),       &lt;br /&gt;&lt;/font&gt;&lt;font size="3" face="Courier New"&gt;[FREE_SPACE_MB] =       &lt;br /&gt;&lt;/font&gt;&lt;font size="3" face="Courier New"&gt;convert(decimal(12,2),round((dbfiles.size-fileproperty(dbfiles.name,'SpaceUsed'))/128.000,2)) ,       &lt;br /&gt;&lt;/font&gt;&lt;font size="3" face="Courier New"&gt;NAME = left(dbfiles.NAME,15),       &lt;br /&gt;&lt;/font&gt;&lt;font size="3" face="Courier New"&gt;FILENAME = left(dbfiles.physical_name,30)       &lt;br /&gt;&lt;/font&gt;&lt;font size="3" face="Courier New"&gt;from       &lt;br /&gt;&lt;/font&gt;&lt;font size="3" face="Courier New"&gt;sys.database_files dbfiles       &lt;br /&gt;&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;In Sql server 2008, è possibile utilizzare il trace flag -T1117 per attivare l' autogrow di tutti i file di un filegroup contemporaneamente, garantendo in questo modo che tutti i file rimangano alla stessa dimensione &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/itasupport/pages/raffaella-canobbio.aspx"&gt;Raffaella Canobbio&lt;/a&gt;    &lt;br /&gt;Senior Support Escalation Engineer     &lt;br /&gt;Microsoft Enterprise SQL Support&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3287291" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/itasupport/archive/tags/SQL+Team/default.aspx">SQL Team</category><category domain="http://blogs.technet.com/itasupport/archive/tags/Raffaella+Canobbio/default.aspx">Raffaella Canobbio</category><category domain="http://blogs.technet.com/itasupport/archive/tags/SQL+Server/default.aspx">SQL Server</category></item><item><title>SQL Server - Errore 701 e Memory Clerk Userstore_sxc</title><link>http://blogs.technet.com/itasupport/archive/2009/07/20/sql-server-errore-701-e-memory-clerk-userstore-sxc.aspx</link><pubDate>Mon, 20 Jul 2009 02:00:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3266369</guid><dc:creator>itentblg</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/itasupport/comments/3266369.aspx</comments><wfw:commentRss>http://blogs.technet.com/itasupport/commentrss.aspx?PostID=3266369</wfw:commentRss><description>&lt;p&gt;In questo post descriverò una possibile &lt;strong&gt;causa dell'errore 701 ed individuazione della sua origine&lt;/strong&gt;.&lt;/p&gt;  &lt;h3&gt;Problema&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;In maniera sporadica alcune query falliscono con il seguente errore      &lt;br /&gt;&lt;i&gt;Error: 701, Severity: 17, State: 123.        &lt;br /&gt;&lt;/i&gt;&lt;i&gt;There is insufficient system memory to run this query.        &lt;br /&gt;&lt;/i&gt;&lt;/li&gt;    &lt;li&gt;Server a 32 bit:      &lt;br /&gt;Microsoft SQL Server 2005 - 9.00.3200.00 (Intel X86)       &lt;br /&gt;Windows NT 5.2 (Build 3790: Service Pack 2) &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Dati raccolti&lt;/h3&gt;  &lt;p&gt;Per questa particolare occorrenza dell’errore 701 sono stati raccolti ed analizzati solo i dati sotto riportati.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Informazioni relative a &lt;strong&gt;Dbcc Memorystatus&lt;/strong&gt; (&lt;a href="http://support.microsoft.com/kb/271624"&gt;INF: Using DBCC MEMORYSTATUS to Monitor SQL Server Memory Usage&lt;/a&gt;) registrate nell’error log di Sql server al momento della generazione dell’errore 701       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Memory Dump di Sql server&lt;/strong&gt; prodotto in modo automatico al verificarsi dell’errore 701 tramite l’abilitazione dei seguenti &lt;strong&gt;trace flag&lt;/strong&gt;:       &lt;ul&gt;       &lt;li&gt;.8004 per generare un dump al verificarsi dell’errore 701 &lt;/li&gt;        &lt;li&gt;.8026 per eliminare automaticamente il trace flag 8004 una volta che un primo dump è già stato prodotto per l’errore 701. Questo eviterà la successiva produzione di dump nel caso in cui l’errore 701 avvenisse numerose volte &lt;/li&gt;        &lt;li&gt;.2551 per generare un filtered dump          &lt;br /&gt;I trace flag potranno essere abilitati utilizzando dbcc traceon o l’opzione di startup -T come indicato in &lt;a href="http://msdn.microsoft.com/en-us/library/ms188396(SQL.90).aspx"&gt;&lt;b&gt;Trace Flags&lt;/b&gt;&lt;/a&gt;           &lt;br /&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Informazioni sulla &lt;strong&gt;configurazione del server&lt;/strong&gt; quali output di Sp_configure per Sql server e memoria fisica del server &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Analisi dei Dati&lt;/h3&gt;  &lt;p&gt;Quando si verifica l’errore 701, la prima attività, necessaria a determinarne la causa, è controllare lo &lt;strong&gt;stato della memoria di Sql server&lt;/strong&gt; scritto nell’Error log subito dopo il verificarsi dell’errore.     &lt;br /&gt;Di seguito un estratto dell’Error log e informazioni sullo stato della memoria di Sql server:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;i&gt;2008-12-21 14:22:33.61 spid54 Buffer Distribution: Stolen=5097 Free=680 Cached=162318        &lt;br /&gt;Database (clean)=831513 Database (dirty)=100         &lt;br /&gt;I/O=0, Latched=4         &lt;br /&gt;2008-12-21 14:22:33.61 spid54 Buffer Counts: Committed=999712 Target=1048576 Hashed=831617         &lt;br /&gt;Internal Reservation=33587 External Reservation=0         &lt;br /&gt;&lt;b&gt;Stolen Potential=-7875          &lt;br /&gt;&lt;/b&gt;Min Free=256 Visible=167936         &lt;br /&gt;Available Paging File=34149490688         &lt;br /&gt;2008-12-21 14:22:33.61 spid54 Procedure Cache: TotalProcs=3 TotalPages=63 InUsePages=15&lt;/i&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Come si può verificare lo &lt;strong&gt;&lt;i&gt;Stolen Potential&lt;/i&gt; è negativo&lt;/strong&gt;. &lt;i&gt;Stolen Potential&lt;/i&gt; indica il numero massimo di pagine che possono essere sottratte alla Buffer Pool (&lt;u&gt;&lt;a href="http://support.microsoft.com/kb/907877/en-us"&gt;&lt;i&gt;How to use the DBCC MEMORYSTATUS command to monitor memory usage on SQL Server 2005&lt;/i&gt;&lt;/a&gt;&lt;/u&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;In queste condizioni di Stolen Potential negativo, &lt;strong&gt;Sql server inizia ad impedire successive richieste di allocazione&lt;/strong&gt; nell'ambito della &lt;i&gt;Stolen Memory&lt;/i&gt;, per cui si possono generare errori 701 o di mancanza di memoria durante l'esecuzione di una query.     &lt;br /&gt;La &lt;i&gt;Stolen Memory&lt;/i&gt; indica buffers di 8Kb utilizzati per diversi tipi di allocazioni di memoria escluso le allocazioni per le pagine dati. Esempi di &lt;i&gt;Stolen Memory&lt;/i&gt; possono essere allocazioni della &lt;strong&gt;procedure cache, metadata cache, memoria dell'optimizer o memoria per esecuzione di query.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Esamindano l'output di dbcc memorystatus in corrispondenza della memoria utilizzata dai vari &lt;i&gt;Memory Clerk&lt;/i&gt;, è stato possibile individuare un &lt;i&gt;Memory Clerk&lt;/i&gt; utilizzante 1.3 Gb per single page allocator (Per una descrizione della &lt;i&gt;Buffer Pool&lt;/i&gt; e &lt;i&gt;Memory Clerk&lt;/i&gt; riferirsi al post di Slava Oks &lt;a href="http://blogs.msdn.com/slavao/archive/2005/02/11/371063.aspx"&gt;&lt;b&gt;SQLOS's memory manager and SQL Server's Buffer Pool&lt;/b&gt;&lt;/a&gt;)&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;USERSTORE_SXC (Total)      &lt;br /&gt;VM Reserved = 0 KB       &lt;br /&gt;VM Committed = 0 KB       &lt;br /&gt;AWE Allocated = 0 KB       &lt;br /&gt;SM Reserved = 0 KB       &lt;br /&gt;SM Committed = 0 KB       &lt;br /&gt;SinglePage Allocator = 1309464 KB       &lt;br /&gt;MultiPage Allocator = 0 KB&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Essendo il sistema a 32 bit, la dimensione della &lt;i&gt;Stolen Memory&lt;/i&gt; è &lt;strong&gt;limitata dalla dimensione del Virtual Address space&lt;/strong&gt; ( 2 GB di memoria per processo utente su windows-32 bit non utilizzanti il /3GB &lt;a href="http://msdn.microsoft.com/en-us/library/aa366912(VS.85).aspx"&gt;Virtual Address Space&lt;/a&gt; ), perciò, la quantità di memoria utilizzata dallo &lt;i&gt;User Store USERSTORE_SXC (1,3GB&lt;/i&gt; ), ha determinato una diminuzione della parte di memoria utilizzabile per Stolen Memory e pagine dati, determinando l'errore 701.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Per verificare su &lt;strong&gt;quale esatta allocazione l’errore 701 venisse prodotto&lt;/strong&gt;, abbiamo analizzato il dump ottenuto tramite i trace flag sopra menzionati &lt;/p&gt;  &lt;p&gt;Il dump, contenente le chiamate generanti l’errore 701, mostrava, il tentativo di allocazioni per &lt;i&gt;USERSTORE_SXC&lt;/i&gt; (&lt;b&gt;sqlservr!SOS_UserStore::CreateMemoryObject &lt;/b&gt;&lt;b&gt;à&lt;/b&gt; &lt;b&gt;sqlservr!SQLSinglePageAllocator::AllocatePages &lt;/b&gt;), scaturito da chiamate RPC (&lt;b&gt;sqlservr!processRPC&lt;/b&gt;)e fallito per condizione di mancanza di memoria (&lt;b&gt;sqlservr!BPool::RecordFailure&lt;/b&gt;).&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;b&gt;66f7f5ac 0158fefb sqlservr!BPool::RecordFailure+0x168        &lt;br /&gt;66f7f63c 0101890a sqlservr!BPool::Steal+0x15a&lt;/b&gt;       &lt;br /&gt;66f7f65c 01018a4f sqlservr!SQLSinglePageAllocator::AllocatePages+0x24       &lt;br /&gt;66f7f8b0 01018b4b sqlservr!MemoryNode::AllocatePagesInternal+0xd3       &lt;br /&gt;66f7f8d4 01042534 sqlservr!MemoryClerkInternal::AllocatePages+0x50       &lt;br /&gt;66f7f93c 01301643 sqlservr!MemoryObjectFactory::CreateMemObject+0x319       &lt;br /&gt;66f7f974 013015b4 &lt;b&gt;sqlservr!SOS_UserStore::CreateMemoryObject&lt;/b&gt;+0x136       &lt;br /&gt;66f7f998 01058e69 sqlservr!CCacheableSessionExecState::CreateMemoryObjectPxp+0x82       &lt;br /&gt;66f7f9c4 01058947 sqlservr!srv_rpcinfo::PxpAllocate+0x39       &lt;br /&gt;66f7fa00 01058784 &lt;b&gt;sqlservr!processRPC&lt;/b&gt;&amp;lt;3&amp;gt;+0x31e       &lt;br /&gt;66f7fa1c 0103d94c sqlservr!CRPCExecEnv::GetCommandInput+0x70       &lt;br /&gt;66f7fb94 0103d690 sqlservr!process_request+0x267       &lt;br /&gt;66f7fd4c 01008d68 sqlservr!process_commands+0x2e0&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Da notare che una volta prodotta una condizione di mancanza di memoria , l’errore 701 potrebbe prodursi anche su allocazioni diverse da quella che ha causato il problema, in questo caso il dump ha semplicemente rinforzato il concetto di un errore 701 avvenuto durante il tentativo di allocazioni per &lt;i&gt;USERSTORE_SXC&lt;/i&gt;&lt;/p&gt;  &lt;h3&gt;Soluzione&lt;/h3&gt;  &lt;p&gt;Il Memory Clerk&lt;i&gt; USERSTORE_SXC&lt;/i&gt; ha, tra i suoi utilizzi, la gestione della memoria per immagazzinare le richieste RPC e relativi parametri.     &lt;br /&gt;Numerose chiamate RPC possono essere inviate al server in un'unica richiesta.     &lt;br /&gt;Se il client invia al server numerosi batch RCP di grandi dimensioni in un'unica richiesta, Sql server 2005 accumula tale richiesta in memoria prima di iniziare l’esecuzione.&lt;/p&gt;  &lt;p&gt;La memoria utilizzata per immagazzinare questa richiesta, può diventare molto grande a seconda dei tipo di dati utilizzati per i parametri RPC e dalla dimensione dei batch (numero di RPC per richiesta).&lt;/p&gt;  &lt;p&gt;La soluzione a questo problema consiste nel&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ridurre la dimensione dei batch (numero di RPC per richiesta) oppure &lt;/li&gt;    &lt;li&gt;riconsiderare il tipo di dati dei parametri RPC , ad esempio evitando di utilizzare sql_variant. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Una soluzione temporanea potrebbe essere quella di liberare ad intervalli regolari la memoria associata a&lt;i&gt; USERSTORE_SXC&lt;/i&gt; tramite esecuzione di &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;DBCC FREESYSTEMCACHE ('sxcCacheStore') WITH MARK_IN_USE_FOR_REMOVAL&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/itasupport/pages/raffaella-canobbio.aspx"&gt;Raffaella Canobbio&lt;/a&gt;     &lt;br /&gt;Senior Support Escalation Engineer     &lt;br /&gt;Microsoft Enterprise SQL Support&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3266369" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/itasupport/archive/tags/SQL+Team/default.aspx">SQL Team</category><category domain="http://blogs.technet.com/itasupport/archive/tags/Raffaella+Canobbio/default.aspx">Raffaella Canobbio</category><category domain="http://blogs.technet.com/itasupport/archive/tags/SQL+Server/default.aspx">SQL Server</category></item><item><title>SQL Server - Query distribuite in esecuzione senza mai terminare</title><link>http://blogs.technet.com/itasupport/archive/2009/05/25/sql-server-query-distribuite-in-esecuzione-senza-mai-terminare.aspx</link><pubDate>Mon, 25 May 2009 02:00:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3240336</guid><dc:creator>itentblg</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/itasupport/comments/3240336.aspx</comments><wfw:commentRss>http://blogs.technet.com/itasupport/commentrss.aspx?PostID=3240336</wfw:commentRss><description>&lt;p&gt;Recentemente ho affrontato alcun problemi legati all'&lt;strong&gt;hang di query distribuite &lt;/strong&gt;che utilizzano &lt;strong&gt;linked server&lt;/strong&gt;, creati con provider di terze parti, per accedere a sorgenti dati diverse da &lt;strong&gt;Sql Server&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Di seguito sono descritte le attività eseguite per individuare la causa e come risolvere i problemi.&lt;/p&gt;  &lt;h3&gt;Problema&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;In modalità casuale query utilizzanti linked server creati con &lt;strong&gt;provider di terze parti&lt;/strong&gt;, rimangono in esecuzione senza mai terminare&lt;/li&gt;    &lt;li&gt;In alcuni casi, dopo il verificarsi della prima query in hang, &lt;strong&gt;tutte le successive query &lt;/strong&gt;utilizzanti lo specifico Linked server, rimangono nello stesso stato di &lt;strong&gt;hang&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;L'unica soluzione al problema consiste nel &lt;strong&gt;riavviare Sql Server&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;L'esecuzione di una &lt;strong&gt;select &lt;/strong&gt;sulla sysprocesses &lt;strong&gt;mostra lo SPID&lt;/strong&gt;, avente in esecuzione la query, in stato di running con &lt;strong&gt;attesa su oledb&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Dati da raccogliere &lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Al fine di verificare l'effettiva attività rimasta in esecuzione all'interno di Sql server, catturare un mini dump o filtered dump del processo di Sql server&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Di seguito il link su come utilizzare sqldumper per ottenere un filtered o mini dump   &lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/917825/en-us"&gt;How to use the Sqldumper.exe utility to generate a dump file in SQL Server 2005&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Mini-dump file that includes indirectly referenced memory      &lt;br /&gt;&lt;/i&gt;&lt;b&gt;&lt;i&gt;Sqldumper.exe &lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;ProcessID&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt; 0 0x0120:40&lt;/i&gt;&lt;/b&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Filtered dump file      &lt;br /&gt;&lt;/i&gt;&lt;b&gt;&lt;i&gt;Sqldumper.exe &lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;ProcessID&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt; 0 0x8100       &lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;i&gt;ProcessID&lt;/i&gt;&lt;i&gt;, in questo specifico caso, è l'ID del processo di Sql server&lt;/i&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Salvare il risultato di una &lt;font face="Courier New"&gt;select * from master..sysprocesses&lt;/font&gt;, per individuare facilmente il &lt;strong&gt;Thread Id avente in esecuzione la query&lt;/strong&gt;.&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Analisi dei dati e Soluzione&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Installare i &lt;a href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"&gt;Debugging Tools for Windows&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Aprire &lt;strong&gt;windbg&lt;/strong&gt;      &lt;br /&gt;start--&amp;gt;program files--&amp;gt;Debugging Tools for Windows—&amp;gt;windbg&lt;/li&gt;    &lt;li&gt;Caricare i &lt;strong&gt;simboli pubblici&lt;/strong&gt;      &lt;br /&gt;Con Windbg aperto, selezionare File --&amp;gt;Symbols file path       &lt;br /&gt;Inserire &lt;font face="Courier New"&gt;srv*c:\symbols*http://msdl.microsoft.com/download/symbols&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;Caricare il &lt;strong&gt;dump &lt;/strong&gt;prodotto      &lt;br /&gt;Con Windbg aperto , selezionare File --&amp;gt;Open Crash Dump, selezionare il dump precedentemente prodotto&lt;/li&gt;    &lt;li&gt;Individuare all'interno del dump il &lt;strong&gt;Thread ID &lt;/strong&gt;avente in esecuzione la query       &lt;br /&gt;Da Windbg, eseguire il comando ~ per avere la lista dei numeri relativi ai Thread ID e Thread instance      &lt;br /&gt;&lt;font face="Courier New"&gt;0:000&amp;gt; ~       &lt;br /&gt;. 0 Id: 2304.1500 Suspend: 0 Teb: bffdf000 Unfrozen        &lt;br /&gt;1 Id: 2304.141c Suspend: 0 Teb: bffdb000 Unfrozen        &lt;br /&gt;2 Id: 2304.11f4 Suspend: 0 Teb: bffda000 Unfrozen&lt;/font&gt;      &lt;br /&gt;      &lt;br /&gt;Convertire in esadecimale il valore presente nella colonna &lt;strong&gt;sysprocesses.kpid&lt;/strong&gt; in corrispondenza dello SPID avente in esecuzione la query verso linked server, tale valore sarà il ThreadID.      &lt;br /&gt;Cercare il valore così ottenuto tra i Thread ID nella lista sopra visualizzata, tenendo conto che nella riga &amp;quot;      &lt;br /&gt; &lt;font face="Courier New"&gt;2 Id: 2304.11f4 Suspend: 0 Teb: bffda000 Unfrozen&amp;quot;, 11f4       &lt;br /&gt;&lt;/font&gt; è il numero del Thread ID e 2 è numero del Thread Instance      &lt;br /&gt;      &lt;br /&gt;Da notare che a causa del &lt;strong&gt;thread switching&lt;/strong&gt;, il Thread ID potrebbe cambiare velocemente      &lt;br /&gt;      &lt;br /&gt;Per capire la relazione tra Spid. kpid e Thread Instance consiglio il seguente documento      &lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/117559/en-us"&gt;INFO: How to Correlate Spid, Kpid, and Thread Instance&lt;/a&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Posizionarsi sul thread eseguente la query tramite il comando     &lt;br /&gt;&lt;font face="Courier New"&gt; ~~[ ThreadID]       &lt;br /&gt;        &lt;br /&gt;&lt;/font&gt;Nel caso del dump da me analizzato, il numero del ThreadID era 1890      &lt;br /&gt;&lt;font face="Courier New"&gt;41 Id: 2304.&lt;strong&gt;1890&lt;/strong&gt; Suspend: 0 Teb: bff93000 Unfrozen        &lt;br /&gt;        &lt;br /&gt;&lt;/font&gt;Per cui ho eseguito il comando &lt;font face="Courier New"&gt;~~[1890]       &lt;br /&gt;0:000&amp;gt; ~~[1890]         &lt;br /&gt;. 41 Id: 2304.1890 Suspend: 0 Teb: bff93000 Unfrozen        &lt;br /&gt;Start: msvcr80!_endthreadex+0x61 (781329e1)         &lt;br /&gt;Priority: 0 Priority class: 32 Affinity: ff        &lt;br /&gt;&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;Visualizzare lo stack frame del thread tramite il comando k     &lt;br /&gt;&lt;font face="Courier New"&gt;0:041&amp;gt; k       &lt;br /&gt;# ChildEBP RetAddr        &lt;br /&gt;00 0f13d4b8 7739bf53 ntdll!KiFastSystemCallRet        &lt;br /&gt;01 0f13d4f0 7738965e user32!NtUserWaitMessage+0xc        &lt;br /&gt;02 0f13d518 7739f762 user32!InternalDialogBox+0xd0        &lt;br /&gt;03 0f13d7d8 7739f047 user32!SoftModalMessageBox+0x94b        &lt;br /&gt;04 0f13d928 7739eec9 user32!MessageBoxWorker+0x2ba        &lt;br /&gt;05 0f13d980 773d7d0d user32!MessageBoxTimeoutW+0x7a        &lt;br /&gt;06 0f13d9b4 773c42c8 user32!MessageBoxTimeoutA+0x9c        &lt;br /&gt;07 0f13d9d4 773c42a4 user32!MessageBoxExA+0x1b        &lt;br /&gt;&lt;/font&gt;&lt;b&gt;&lt;font face="Courier New"&gt;08 0f13d9f0 0cb13f41 user32!MessageBoxA+0x45         &lt;br /&gt;&lt;/font&gt;&lt;/b&gt;&lt;font face="Courier New"&gt;&lt;b&gt;09 0f13dad4 0cb180ac ThirdPartydriver!......         &lt;br /&gt;&lt;/b&gt;0a 0f13db68 0cb1b196 ThirdPartydriver!......        &lt;br /&gt;0b 0f13dbb4 0cb1b4e6 ThirdPartydriver!......        &lt;br /&gt;        &lt;br /&gt;&lt;/font&gt;Dallo stack sopra riportato, possiamo capire come il &lt;strong&gt;driver di terze party&lt;/strong&gt;, rinominato come ThirdPartydriver, ha eseguito internamente a Sql server una &lt;strong&gt;message box&lt;/strong&gt;, motivo per cui, il thread non può proseguire l'attività.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Con buona probabilità, il driver di terze party ha eseguito una message box in seguito ad un &lt;strong&gt;problema interno o errore verificatosi&lt;/strong&gt;, per cui per continuare l'analisi del problema sarà necessario contattare il produttore del driver.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/itasupport/pages/raffaella-canobbio.aspx"&gt;Raffaella Canobbio&lt;/a&gt;    &lt;br /&gt;Support Escalation Engineer     &lt;br /&gt;Microsoft Enterprise SQL Support&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3240336" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/itasupport/archive/tags/SQL+Team/default.aspx">SQL Team</category><category domain="http://blogs.technet.com/itasupport/archive/tags/Raffaella+Canobbio/default.aspx">Raffaella Canobbio</category><category domain="http://blogs.technet.com/itasupport/archive/tags/SQL+Server/default.aspx">SQL Server</category></item><item><title>SQL Server 2005 – Risolvere gli errori in fase d’installazione</title><link>http://blogs.technet.com/itasupport/archive/2009/01/26/sql-server-2005-risolvere-gli-errori-in-fase-d-installazione.aspx</link><pubDate>Mon, 26 Jan 2009 03:00:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3185795</guid><dc:creator>itentblg</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/itasupport/comments/3185795.aspx</comments><wfw:commentRss>http://blogs.technet.com/itasupport/commentrss.aspx?PostID=3185795</wfw:commentRss><description>&lt;p&gt;In questo post descriverò un esempio pratico di come è stato analizzato e risolto un errore durante il tentativo di aggiunta di un nodo ad un Sql Server in cluster.&lt;/p&gt;  &lt;h3&gt;Problema&lt;/h3&gt;  &lt;p&gt;Sql Server 2005 è stato disinstallato da uno dei nodi di un cluster tramite la procedura di rimozione di un nodo descritta in questo articolo    &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms191545(SQL.90).aspx"&gt;How to: Add or Remove Nodes in a SQL Server 2005 Failover Cluster (Setup)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Il tentativo di aggiungere nuovamente il nodo al cluster fallisce.&lt;/p&gt;  &lt;h3&gt;Dati da raccogliere&lt;/h3&gt;  &lt;p&gt;Tutte le informazioni per poter individuare un problema avvenuto durante il setup di Sql Server 2005 sono contenute nei file di log posizionati in &lt;strong&gt;%ProgramFiles%\microsoft sql server\90\setup bootstrap\log&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In caso di installazioni di Sql Server in cluster, i log sono consolidati in un'unica cartella senza la necessità di doverli recuperare su ciascun nodo del cluster.&lt;/p&gt;  &lt;h3&gt;Analisi dei dati&lt;/h3&gt;  &lt;p&gt;Nei seguenti articoli del Books Online è contenuta una descrizione dei file di log di Sql Server 2005 e come analizzarli &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms143702(SQL.90).aspx" target="_blank"&gt;How to: View SQL Server 2005 Setup Log Files&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms144287(SQL.90).aspx" target="_blank"&gt;How to: Read a SQL Server 2005 Setup Log File&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Verificare il summary.txt&lt;/h4&gt;  &lt;p&gt;Il primo file da verificare è il summary.txt il quale contiene un riassunto per ciascuna componente installata.&lt;/p&gt;  &lt;p&gt;Per questo particolare problema il file summary.txt presentava un errore durante l’installazione del database engine e indicava il log SQLSetup000X_&amp;lt;sqlsrv&amp;gt;_SQL.log come il file contenente l’errore.&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;Machine : Sqlx      &lt;br /&gt;Product : Microsoft SQL Server 2005 (64-bit)       &lt;br /&gt;Product Version : 9.00.1399.06       &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;b&gt;Install : Failed        &lt;br /&gt;&lt;/b&gt;Log File : \\sql\C$\Program Files\Microsoft SQL Server\90\Setup Bootstrap\LOG\Files\&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;b&gt;SQLSetup000X_&amp;lt;sqlsrv&amp;gt;_SQL.log        &lt;br /&gt;&lt;/b&gt;Last Action : SetInstanceProperty       &lt;br /&gt;Error String : The setup has encountered an unexpected error while Setting Internal Properties. The error is: 183       &lt;br /&gt;Error Number : 29528&lt;/font&gt;&lt;/p&gt;  &lt;h4&gt;Verificare il file di log contenente l’errore e indicato nel summary.txt&lt;/h4&gt;  &lt;p&gt;Per individuare l’errore corrispondente nel file di log SQLSetup000X_&amp;lt;srv&amp;gt;_SQL.log è necessario aprirlo in notepad ed effettuare una ricerca per “Return value 3”.&lt;/p&gt;  &lt;p&gt;La prima azione che va in errore è quella indicata nelle linee del file di log che precedono la stringa “Return value 3”.&lt;/p&gt;  &lt;p&gt;Come si può verificare da un estratto del file di log SQLSetup000X_&amp;lt;srv&amp;gt;_SQL.log sotto riportato, cercando per “Return value 3” , si individua l’azione generante l’errore. &lt;/p&gt;  &lt;p&gt;In questa situazione specifica l’errore consisteva in un tentativo di creare un file già esistente&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;Doing Action: SetInstanceProperty      &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;PerfTime Start: SetInstanceProperty : Mon Oct 27 15:06:05 2008      &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;lt;&lt;b&gt;Func Name='SetInstanceProperty'&lt;/b&gt;&amp;gt;       &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;MSI (s) (08!30) [15:06:05:344]: PROPERTY CHANGE: Adding SqlOriginalMachineName property. Its value is 'SQLX'.      &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;MSI (s) (08!30) [15:06:05:344]: PROPERTY CHANGE: Adding SqlLegacyRegPath property. Its value is 'Microsoft SQL Server\INSTANCE'.      &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;Loaded DLL:      &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;C:\Program Files\Microsoft SQL Server\90\Setup Bootstrap\xmlrw.dll      &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;Version: 2.0.3609.0      &lt;br /&gt;&lt;/font&gt;&lt;b&gt;&lt;font face="Courier New"&gt;Error Code: 0x800700b7 (183)        &lt;br /&gt;&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font face="Courier New"&gt;Windows Error Text: Cannot create a file when that file already exists.        &lt;br /&gt;&lt;/font&gt;&lt;/b&gt;&lt;font face="Courier New"&gt;Source File Name: sqlca\sqlcax.cpp      &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;Compiler Timestamp: Wed Sep 21 01:10:12 2005      &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;Function Name: SetInstanceProperty      &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;Source Line Number: 969      &lt;br /&gt;&lt;/font&gt;&lt;b&gt;&lt;font face="Courier New"&gt;Error Code: 183        &lt;br /&gt;&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font face="Courier New"&gt;MSI (s) (08!30) [15:08:48:663]: Product: Microsoft SQL Server 2005 (64-bit) -- Error 29528. The setup has encountered an unexpected error while Setting Internal Properties. The error is: 183        &lt;br /&gt;&lt;/font&gt;&lt;/b&gt;&lt;font face="Courier New"&gt;Error 29528. The setup has encountered an unexpected error while Setting Internal Properties. The error is: 183      &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;lt;EndFunc Name='LaunchFunction' Return='183' GetLastError='0'&amp;gt;      &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;Action ended 15:08:48: SetInstanceProperty.3EA9D9BF_D9D2_4023_B2A7_9E2137B2FB1B. &lt;b&gt;Return value 3&lt;/b&gt;.       &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;Action ended 15:08:48: INSTALL. Return value 3.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Sapendo che l’istanza era stata precedentemente rimossa dal nodo in cui si è verificato il problema e indicando il setup un errore relativo al tentativo di creare un file già esistente, abbiamo proceduto manualmente alla rimozione dell’istanza di Sql Server sul nodo avente il problema secondo la procedura sotto riportata.&lt;/p&gt;  &lt;p&gt;Prima di indicare i punti della procedura utilizzata in questo specifico problema è bene tener presente che generalmente le procedure di rimozione manuale di un’istanza di Sql Server sono documentate pubblicamente nel seguente articolo: &lt;a href="http://support.microsoft.com/kb/909967/en-us"&gt;How to uninstall an instance of SQL Server 2005 manually&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Di seguito le attività effettuate sul nodo affetto dal problema in questa specifica situazione:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Backup delle chiavi di registry al fine di garantire il server da danni causati da eventuali errori      &lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/322756/"&gt;How to back up and restore the registry in Windows&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Localizzazione della seguente chiave di registry HKLM\Software\Microsoft\Microsoft SQL Server\Instance Name\Sql ed individuazione del valore MSSql.X relativo all’istanza avente il problema &lt;/li&gt;    &lt;li&gt;All’interno di HKLM\Software\Microsoft\Microsoft SQL Server\Instance Name\Sql rimozione della chiave relativa all’istanza in questione &lt;/li&gt;    &lt;li&gt;Rinomina della cartella relativa all’istanza c:\program files\microsoft SQL Server\MSSQL.X &lt;/li&gt;    &lt;li&gt;Rimozione di HKLM\Software\Microsoft\Microsoft SQL Server\MSSQL.X &lt;/li&gt;    &lt;li&gt;Rimozione di      &lt;br /&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServer$InstanceName       &lt;br /&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT$InstanceName &lt;/li&gt;    &lt;li&gt;Riavvio del nodo &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Il successivo tentativo di aggiunta dell’istanza al nodo del cluster fallì con un nuovo errore.&lt;/p&gt;  &lt;p&gt;Partendo sempre dalla verifica del file summary.txt è stato possibile individuare il secondo errore:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;Machine : SQLX      &lt;br /&gt;Product : Microsoft SQL Server 2005 (64-bit)       &lt;br /&gt;Product Version : 9.00.1399.06       &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;b&gt;Install : Failed        &lt;br /&gt;&lt;/b&gt;Log File : \\Sqlx\C$\Program Files\Microsoft SQL Server\90\Setup Bootstrap\LOG\Files\&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;b&gt;SQLSetup000X_&amp;lt;sqlsrv&amp;gt;_SQL.log        &lt;br /&gt;&lt;/b&gt;Last Action : InstallFinalize       &lt;br /&gt;Error String : The setup has encountered an unexpected error while Completing Commit. The error is: &lt;/font&gt;&lt;font face="Courier New"&gt;&lt;b&gt;The cluster resource could not be found.        &lt;br /&gt;&lt;/b&gt;Error Number : 29528&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Il file di log SQLSetup000X_&amp;lt;sqlsrv&amp;gt;_SQL.log indicato nel summary.txt non conteneva il nome della risorsa cluster non trovata.&lt;/p&gt;  &lt;p&gt;Pertanto, non avendo ulteriori informazioni se non l’indicazione nel file di log di una risorsa cluster non trovata, sono state verificate le chiavi di registry associate alle risorse cluster relative ad un’installazione di Sql Server in cluster.&lt;/p&gt;  &lt;p&gt;Durante la verifica delle chiavi di registry relative a Sql Server, Sql Server Agent e Full Text Search è emerso che la chiave relativa a Sql Server Agent non presentava i valori di VirtualServerName e InstanceName&amp;#160;&amp;#160; che devono essere presenti per tale risorsa in un’installazione di Sql Server in cluster&lt;/p&gt;  &lt;p&gt;Di seguito le chiavi verificate:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;HKEY_LOCAL_MACHINE\Cluster\Resources\ 710f2e43-4387-4066-848f-c1e189f82349      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Name&amp;#160;&amp;#160;&amp;#160; REG_SZ&amp;#160;&amp;#160;&amp;#160; &lt;b&gt;SQL Server Agent&lt;/b&gt; (SQLINSTANCE)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;HKEY_LOCAL_MACHINE\Cluster\Resources\ 710f2e43-4387-4066-848f-c1e189f82349\&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;b&gt;Parameters        &lt;br /&gt;&lt;/b&gt;&amp;#160;&amp;#160;&amp;#160; ServiceName&amp;#160;&amp;#160;&amp;#160; REG_SZ&amp;#160;&amp;#160;&amp;#160; SQLAgent$QLINSTANCE       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; StartupParameters&amp;#160;&amp;#160;&amp;#160; REG_SZ&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UseNetworkName&amp;#160;&amp;#160;&amp;#160; REG_DWORD&amp;#160;&amp;#160;&amp;#160; 0x0&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Di seguito , come dovrebbero apparire i valori di &lt;b&gt;VirtualServerName &lt;/b&gt;e &lt;b&gt;InstanceName&lt;/b&gt; per la risorsa Sql Server Agent&lt;/p&gt;  &lt;p&gt;Per ricreare correttamente la chiave di registry relative alla risorsa Sql server Agent è stato seguito il seguente articolo    &lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/810056/en-us"&gt;How to manually re-create the resource-specific registry keys for SQL Server cluster resources&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una volta ricreata correttamente la chiave di registry per la risorsa Sql Server Agent è stato possibile risolvere questo ultimo errore “The cluster resource could not be found” e aggiungere l’istanza di Sql Server al nodo del cluster.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/itasupport/pages/raffaella-canobbio.aspx"&gt;Raffaella Canobbio&lt;/a&gt;     &lt;br /&gt;Support Escalation Engineer     &lt;br /&gt;Microsoft Enterprise SQL Support&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3185795" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/itasupport/archive/tags/SQL+Team/default.aspx">SQL Team</category><category domain="http://blogs.technet.com/itasupport/archive/tags/Raffaella+Canobbio/default.aspx">Raffaella Canobbio</category><category domain="http://blogs.technet.com/itasupport/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.technet.com/itasupport/archive/tags/Setup/default.aspx">Setup</category></item><item><title>SQL Server - Analizzare un problema di timeout utilizzando Sqlnexus</title><link>http://blogs.technet.com/itasupport/archive/2009/01/05/sql-server-analizzare-un-problema-di-timeout-utilizzando-sqlnexus.aspx</link><pubDate>Mon, 05 Jan 2009 03:00:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3174718</guid><dc:creator>itentblg</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/itasupport/comments/3174718.aspx</comments><wfw:commentRss>http://blogs.technet.com/itasupport/commentrss.aspx?PostID=3174718</wfw:commentRss><description>&lt;p&gt;Una delle richieste più frequenti che riceviamo nel team di supporto di Sql Server è quella di capire la causa determinante timeout applicativi durante l’esecuzione di query.&lt;/p&gt;  &lt;p&gt;In questo post spiegherò come utilizzare &lt;a href="http://www.codeplex.com/sqlnexus"&gt;Sqlnexus&lt;/a&gt; per effettuare velocemente l'analisi di un problema relativo alla lentezza di una query e determinante un timeout applicativo.&lt;/p&gt;  &lt;h3&gt;Problema &lt;/h3&gt;  &lt;p&gt;Errori di timeout, che si verificano in modalità casuale, durante una complessa attività applicativa.&lt;/p&gt;  &lt;h3&gt;Dati da raccogliere&lt;/h3&gt;  &lt;p&gt;Per capire la causa di problemi di timeout è necessario individuare l'attività su cui il timeout si verifica e se tale attività è stata affetta da blocchi o da problemi di performance sul server.&lt;/p&gt;  &lt;p&gt;Dal punto di vista di Sql server, l’analisi di un timeout verificatosi durante l’esecuzione di una query, può essere inizialmente affrontata come un generico problema di performance volto ad identificare la causa per cui una determinata query viene eseguita in un tempo superiore a quello impostato dal timeout applicativo. &lt;/p&gt;  &lt;p&gt;A tale scopo, durante il riprodursi del problema, si chiede generalmente di raccogliere dati di performance quali trace di &lt;a href="http://msdn.microsoft.com/en-us/library/ms173757(SQL.90).aspx"&gt;Sql server profiler&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ms191246(SQL.90).aspx"&gt;System monitor counters &lt;/a&gt;e trace di &lt;a href="http://support.microsoft.com/kb/271509/en-us"&gt;Blocker script&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Il tool in grado di raccogliere contemporaneamente tali informazioni è Pssdiag:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Sql server 2000 è disponibile pubblicamente con interfaccia grafica al seguente indirizzo &lt;a href="http://support.microsoft.com/kb/830232"&gt;http://support.microsoft.com/kb/830232&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Sql server 2005 è possibile utilizzare il tool &lt;a href="http://msdn.microsoft.com/en-us/library/ms162833(SQL.90).aspx"&gt;Sqldiag&lt;/a&gt; compreso nell'installazione e non avente interfaccia grafica &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Per avere un esempio degli eventi e counters da catturare è possibile far riferimento al seguente articolo &lt;a href="http://support.microsoft.com/kb/224587/en-us"&gt;HOW TO: Troubleshoot Application Performance with SQL Server&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In questa situazione specifica sono stati raccolti i seguenti eventi:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Database: tutti gli eventi &lt;/li&gt;    &lt;li&gt;Errors and warning: tutti gli eventi &lt;/li&gt;    &lt;li&gt;Locks: Lock:Deadlock, Lock:Escalation, Lock:Timeout &lt;/li&gt;    &lt;li&gt;Objects: Auto Update Stats &lt;/li&gt;    &lt;li&gt;Performance: Show Plan Statistics &lt;/li&gt;    &lt;li&gt;Security Audit: Login, Login Failed, Logout &lt;/li&gt;    &lt;li&gt;Sessions: ExistingConnestion &lt;/li&gt;    &lt;li&gt;StoredProcedure: RPC:Completed, RPC:Starting, SP:CacheInsert, SP:CacheRemove, SP:Recompile, SP:StmtCompleted, SP:StmtStarting &lt;/li&gt;    &lt;li&gt;Tsql:SQL:BatchCompleted, SQL:BatchStarting, SQL:StmtCompleted, SQL:StmtStarting &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Analisi dei dati&lt;/h3&gt;  &lt;p&gt;In questa sezione vedremo come Sqlnexus possa essere utilizzato per analizzare i dati raccolti tramite le trace di Sql server profiler.&lt;/p&gt;  &lt;h4&gt;Installazione di Sqlnexus&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://www.codeplex.com/sqlnexus" target="_blank"&gt;Scaricare il tool Sqlnexus&lt;/a&gt; e verificare le informazioni sul suo utilizzo&lt;/p&gt;  &lt;p&gt;Installare RML utilities &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7EDFA95A-A32F-440F-A3A8-5160C8DBE926&amp;amp;displaylang=en" target="_blank"&gt;RML Utilities for SQL Server – Versione a 32 bit (x86)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B60CDFA3-732E-4347-9C06-2D1F1F84C342&amp;amp;displaylang=en" target="_blank"&gt;RML Utilities for SQL Server – Versione a 64 bit (x64)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Caricamento dati in Sqlnexus&lt;/h4&gt;  &lt;p&gt;Avviare Sqlnexus.exe e connettersi a un Sql server in ambiente di test per effettuare l’analisi dei dati.    &lt;br /&gt;Una volta aperta l’interfaccia di Sqlnexus, cliccando su import, verrà visualizzata la finestra in cui impostare la cartella contenente i file di Sql server profiler raccolti con Pssdiag:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/SQLServerAnalizzareunproblemaditimeoutut_9F72/image_thumb1_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image_thumb1" border="0" alt="image_thumb1" src="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/SQLServerAnalizzareunproblemaditimeoutut_9F72/image_thumb1_thumb.png" width="546" height="238" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;Visualizzazione dei dati di performance &lt;/h4&gt;  &lt;p&gt;Terminato l'import dei dati , potremo selezionare &lt;b&gt;Readtrace_main&lt;/b&gt;, nella sezione &lt;b&gt;Reports&lt;/b&gt;, per visualizzare l'analisi:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/SQLServerAnalizzareunproblemaditimeoutut_9F72/image_thumb3_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image_thumb3" border="0" alt="image_thumb3" src="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/SQLServerAnalizzareunproblemaditimeoutut_9F72/image_thumb3_thumb.png" width="547" height="198" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Selezionando i link presenti nella schermata di &lt;b&gt;Performance Overview&lt;/b&gt;, potremo visualizzare i report indicanti le query eseguite durante l’intervallo di tempo di cattura dei dati e il rispettivo consumo di risorse. Tali report costituiscono un aiuto essenziale nell’individuare le query aventi maggiore impatto in termini di tempo di esecuzione , letture , scritture o consumo di CPU.&lt;/p&gt;  &lt;h4&gt;Individuazione dei timeout &lt;/h4&gt;  &lt;p&gt;Siccome l’obiettivo di questo blog e quello di analizzare le query su cui è avvenuto un timeout applicativo, dovremo individuare gli eventi di &lt;a href="http://msdn.microsoft.com/en-us/library/ms190979(SQL.90).aspx"&gt;Attention&lt;/a&gt; avvenuti durante la cattura dei dati.     &lt;br /&gt;Per visualizzare tali eventi, selezioniamo &lt;b&gt;Interesting events&lt;/b&gt; e sarà visualizzato un grafico simile a quello sotto riportato:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/SQLServerAnalizzareunproblemaditimeoutut_9F72/image_thumb5_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image_thumb5" border="0" alt="image_thumb5" src="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/SQLServerAnalizzareunproblemaditimeoutut_9F72/image_thumb5_thumb.png" width="614" height="449" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Come è possibile verificare dalla schermata sopra riportata, supponendo di aver impostato gli eventi necessari in Sql server profiler, potremo visualizzare tramite un grafico facilmente leggibile, altri tipi di eventi quali la crescita dei datafile o i sort warning e associare o meno tali eventi al verificarsi del problema.    &lt;br /&gt;Selezionando il link &lt;b&gt;Attention&lt;/b&gt;, potremo visualizzare la query su cui è avvenuto il timeout e lo spid che stava eseguendo in quel momento la query.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/SQLServerAnalizzareunproblemaditimeoutut_9F72/image_thumb7_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image_thumb7" border="0" alt="image_thumb7" src="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/SQLServerAnalizzareunproblemaditimeoutut_9F72/image_thumb7_thumb.png" width="654" height="264" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Selezionando la query, potremo visualizzare tutti i dettagli sul tempo di esecuzione, le letture eseguite, il consumo di CPU e il nome del file di Sql server profiler contenente l’esecuzione della query durante l’avvenuto timeout.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/SQLServerAnalizzareunproblemaditimeoutut_9F72/image_thumb9_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image_thumb9" border="0" alt="image_thumb9" src="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/SQLServerAnalizzareunproblemaditimeoutut_9F72/image_thumb9_thumb.png" width="654" height="159" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Dalla schermata sopra riportata è evidente che il tempo di esecuzione della query ha superato i 30 sec di timeout impostato dall’applicazione.&lt;/p&gt;  &lt;p&gt;Una volta individuata la query su cui si manifesta il problema, lo spid avente in esecuzione la query e l’intervallo di tempo in cui è avvenuto il timeout, potremo aprire la trace di Sql server profiler, filtrare per lo spid indicato da Sqlnexus, cercare la query affetta dal problema e analizzare in dettaglio i vari passi di esecuzione.&lt;/p&gt;  &lt;p&gt;Nell’esempio qui riportato, analizzando la trace di Sql server profiler in corrispondenza della query e dell’intervallo di tempo in cui si è verificato il problema è stato possibile verificare che il timeout applicativo era dovuto ad un tempo di esecuzione superiori ai 30 sec e che la maggior parte del tempo di esecuzione, circa 25 sec, era utilizzato nella ricompilazione e inserimento in cache.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/SQLServerAnalizzareunproblemaditimeoutut_9F72/image_thumb11_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image_thumb11" border="0" alt="image_thumb11" src="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/SQLServerAnalizzareunproblemaditimeoutut_9F72/image_thumb11_thumb.png" width="627" height="170" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Se la trace di Sql server profiler non dovesse bastare ad individuare la causa del problema, sarà necessario effettuare altre verifiche quali l’analisi del Blocker script e dei Performance counters in corrispondenza dell’intervallo di tempo in cui si è verificato il problema oppure la verifica dettagliata del piano di esecuzione della query per effettuare un adeguato tuning.&lt;/p&gt;  &lt;p&gt;Anche per analisi più approfondite Sqlnexus potrà aiutare, dandoci velocemente una panoramica delle attività presenti sul server durante il verificarsi del problema.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/itasupport/pages/raffaella-canobbio.aspx" target="_blank"&gt;Raffaella Canobbio&lt;/a&gt;     &lt;br /&gt;Support Escalation Engineer     &lt;br /&gt;Microsoft Enterprise SQL Support&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3174718" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/itasupport/archive/tags/SQL+Team/default.aspx">SQL Team</category><category domain="http://blogs.technet.com/itasupport/archive/tags/Raffaella+Canobbio/default.aspx">Raffaella Canobbio</category><category domain="http://blogs.technet.com/itasupport/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.technet.com/itasupport/archive/tags/SQL+Server/default.aspx">SQL Server</category></item></channel></rss>