<?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 : Mauro Munzi</title><link>http://blogs.technet.com/itasupport/archive/tags/Mauro+Munzi/default.aspx</link><description>Tags: Mauro Munzi</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>SQL 2005 – Utilizzo del setup da riga di comando per upgrade/downgrade di versione</title><link>http://blogs.technet.com/itasupport/archive/2009/11/23/sql-2005-utilizzo-del-setup-da-riga-di-comando-per-upgrade-downgrade-di-versione.aspx</link><pubDate>Mon, 23 Nov 2009 00:00:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3293729</guid><dc:creator>itentblg</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/itasupport/comments/3293729.aspx</comments><wfw:commentRss>http://blogs.technet.com/itasupport/commentrss.aspx?PostID=3293729</wfw:commentRss><description>&lt;p&gt;L’esecuzione del setup di SQL Server da riga di comando permette di specificare diversi parametri e configurazioni e viene principalmente utilizzato per effettuare un upgrade di versione o per aggiornare versioni “Evaluation” a quelle definitive; in casi eccezionali può essere usato anche per l’operazione inversa (downgrade) preservando i dati e le configurazioni esistenti.&lt;/p&gt;  &lt;p&gt;prendiamo ora in considerazione il caso più “semplice”, l’upgrade di versione ed i relativi passi. Si fa riferimento ad un istanza di SQL Server in configurazione cluster, con le opzioni non necessarie alle configurazioni standalone commentate singolarmente&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;E' necessario avere a disposizione il DVD della versione RTM o i file di installazione in una directory locale &lt;/li&gt;    &lt;li&gt;Aprire un Command Prompt e posizionarsi nella directory Servers del DVD o della copia locale &lt;/li&gt;    &lt;li&gt;eseguire il seguente comando:&lt;/li&gt; &lt;/ol&gt;  &lt;blockquote&gt;   &lt;p&gt;start /wait setup.exe INSTANCENAME=SQL2005CU11 UPGRADE=SQL_Engine SKUUPGRADE=1 /qb VS=VSQL2005 ADMINPASSWORD=pwd GROUP=&amp;quot;SQL 2005 ENG CU11&amp;quot; ADDNODE=W2K3NODE1_1,W2K3NODE2_2&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Vediamo il significato dei vari parametri, applicati ad un cluster di laboratorio che ho usato per i test&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;INSTANCENAME è il nome dell’istanza da aggiornare, specificare MSSQLSERVER nel caso si tratti di quella di default &lt;/li&gt;    &lt;li&gt;UPGRADE permette di specificare l’elenco delle componenti da aggiornare separati dalla virgola: in questo caso SQL_Engine informa il setup di aggiornare solo la parte di “Database Engine” &lt;/li&gt;    &lt;li&gt;SKUUPGRADE=1 è il parametro che permette l’aggiornamento &lt;/li&gt;    &lt;li&gt;VS è il nome del Virtual Server da aggiornare, ossia il nome della risorsa “Network Name” all’interno del gruppo del cluster che contiene SQL Server; questo parametro non serve per le configurazioni standalone &lt;/li&gt;    &lt;li&gt;ADMINPASSWORD è la password dell’account (con diritti amministrativi) correntemente logato al nodo del cluster che sta eseguendo il setup; serve per potere gestire il nodo remoto (o i nodi) durante il setup. Non è richiesto per le configurazioni Standalone &lt;/li&gt;    &lt;li&gt;GROUP è il gruppo del cluster all’interno del quale si trovano le risorse di SQL Server e nel caso in cui ci siano degli spazi il nome deve essere racchiuso tra doppi apici. Non è richiesto nelle installazioni Standalone &lt;/li&gt;    &lt;li&gt;ADDNODE è utilizzato per specificare l’elenco dei nodi che possono essere “owwer” dell’istanza. Non richiesto per le Standalone &lt;/li&gt;    &lt;li&gt;/qb abilita una modalità “semi silent” visualizzado solo richieste di input quando necessario&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Vediamo ora le operazioni necessarie per potere fare il downgrade della versione mantenendo i database e le configurazioni esistenti; le operazioni sono un po’ più lunghe che nel precedente caso.    &lt;br /&gt;Per prima cosa occorre rimuovere l’istanza esistente usando il parametro SAVESYSDB, per cui lasciando inalterati i precedenti punti 1 e 2 la riga di comando diventa&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;start /wait setup.exe /qb INSTANCENAME=SQL2005CU11 VS=VSQL2005 REMOVE=All ADMINPASSWORD=pwd SAVESYSDB=1&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Tutti parametri già visti tranne SAVESYSDB=1 che è quello che istruisce il setup di mantenere i database di sistema nella directory DATA originaria e REMOVE, che serve per indicare le componenti che devono essere rimosse, in questo caso tutte (All): è consigliabile comunque fare una copia dei file esistenti.   &lt;br /&gt;A questo punto si può procedere con l’installazione&amp;#160; della nuova istanza seguendo i passi seguenti:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Riavviare i nodi dopo la rimozione di SQL effettuata in precedenza &lt;/li&gt;    &lt;li&gt;Seguire i punti 1 e 2 gia visti per l’upgrade &lt;/li&gt;    &lt;li&gt;eseguire la seguente riga di comando:      &lt;p&gt;start /wait setup.exe /qb &lt;b&gt;VS&lt;/b&gt;=VSQL2005 &lt;b&gt;INSTANCENAME&lt;/b&gt;=SQL2005CU11 &lt;b&gt;GROUP&lt;/b&gt;=&amp;quot;SQL 2005 ENG CU11&amp;quot; &lt;b&gt;ADDNODE&lt;/b&gt;=w2k3node1_1,w2k3node2_2 &lt;b&gt;INSTALLVS&lt;/b&gt;=SQL_Engine &lt;b&gt;ADDLOCAL&lt;/b&gt;=SQL_Engine,SQL_Replication,SQL_FullText,Client_Components,Connectivity,SQL_Tools90,SQL_Documentation,SQL_BooksOnline &lt;b&gt;IP&lt;/b&gt;=10.10.10.80,ToHost &lt;b&gt;INSTALLSQLDIR&lt;/b&gt;=&amp;quot;C:\Program Files\Microsoft SQL Server&amp;quot; &lt;b&gt;INSTALLSQLDATADIR&lt;/b&gt;=&amp;quot;g:\Program Files\Microsoft SQL Server&amp;quot; &lt;b&gt;ADMINPASSWORD&lt;/b&gt;=pwd &lt;b&gt;SQLACCOUNT&lt;/b&gt;=CLUSTERDOM\sqlsvc &lt;b&gt;SQLPASSWORD&lt;/b&gt;=pwd &lt;b&gt;AGTACCOUNT&lt;/b&gt;=CLUSTERDOM\sqlsvc &lt;b&gt;AGTPASSWORD&lt;/b&gt;=pwd &lt;b&gt;SQLBROWSERACCOUNT&lt;/b&gt;=&amp;quot;NT AUTHORITY\SYSTEM&amp;quot; &lt;b&gt;SQLCLUSTERGROUP&lt;/b&gt;=CLUSTERDOM\CLUSTER &lt;b&gt;AGTCLUSTERGROUP&lt;/b&gt;=CLUSTERDOM\CLUSTER &lt;b&gt;FTSCLUSTERGROUP&lt;/b&gt;=CLUSTERDOM\CLUSTER &lt;b&gt;USESYSDB&lt;/b&gt;=&amp;quot;G:\Microsoft SQL Server\MSSQL.1\MSSQL&amp;quot;&lt;/p&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Tra i vari parametri non ancora visti abbiamo:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;INSTALLVS indica per quale componente si vuole creare un Virtual Server (in questo caso il Database Engine). Non è richiesto nel caso di installazione locale &lt;/li&gt;    &lt;li&gt;ADDLOCAL permette di specificare quali componenti aggiungere alla parte locale dell’installazione: l’elenco riportato sopra corrisponde ad un’installazione tipica che comprende Database Enginge, Management Tools, Performance Tool e BooksOnline. &lt;/li&gt;    &lt;li&gt;IP serve a specificare l’IP assegnato all’istanza ed il nome assegnato alla connesione di rete da usare, separati da una virgola; &lt;strong&gt;devono rimanere identici all’ IP e al nome della rete dell’istanza rimossa in precedenza&lt;/strong&gt;. Non richiesto per un server Standalone. &lt;/li&gt;    &lt;li&gt;INSTALLSQLDIR è la directory di installazione locale di SQL Server &lt;/li&gt;    &lt;li&gt;INSTALLSQLDATADIR e la directory predefinita per il posizionamento dei file di dati e &lt;strong&gt;deve coincidere con quella precedente&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;SQLACCOUNT e SQLPASSWORD rappresentano l’account di servizio di SQL Server e relativa password &lt;/li&gt;    &lt;li&gt;AGTACCOUNT e AGTPASSWORD rappresentano l’account di servizio del SQL Server Agent e relativa password &lt;/li&gt;    &lt;li&gt;SQLBROWSERACCOUNT è l’account associato al servizio SQL Server Browser. Nel caso in cui si lascia l’account System (consigliato) non è necessario specificare la password &lt;/li&gt;    &lt;li&gt;SQLCLUSTERGROUP, AGTCLUSTERGROUP e FTSCLUSTERGROUP rappresentano i gruppo di dominio necessari per l’installazione di un’istanza cluster e non sono richiesti nel caso di Standalone &lt;/li&gt;    &lt;li&gt;USESYSDB permette di specificare il percorso base dal quale prendere i file di sistema e i database utente esistenti &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Entrambe le modalità di &amp;quot;upgrade” riportano SQL Server alla versione RTM per cui al termine è necessario ri-applicare la stessa Service Pack e Cumulative Update esistenti prima dell’attività di manutenzione.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/itasupport/pages/mauro-munzi.aspx"&gt;Mauro Munzi&lt;/a&gt;     &lt;br /&gt;Senior Support Engineer     &lt;br /&gt;Microsoft Enterprise SQL Support&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3293729" 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/Mauro+Munzi/default.aspx">Mauro Munzi</category><category domain="http://blogs.technet.com/itasupport/archive/tags/SQL+Server/default.aspx">SQL Server</category></item><item><title>SQL 2000 - Spostamento della directory FTDATA su un altro disco per un istanza Cluster</title><link>http://blogs.technet.com/itasupport/archive/2009/11/16/sql-2000-spostamento-della-directory-ftdata-su-un-altro-disco-per-un-istanza-cluster.aspx</link><pubDate>Mon, 16 Nov 2009 00:00:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3293728</guid><dc:creator>itentblg</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/itasupport/comments/3293728.aspx</comments><wfw:commentRss>http://blogs.technet.com/itasupport/commentrss.aspx?PostID=3293728</wfw:commentRss><description>&lt;p&gt;Mi è capitato alcune volte di incontrare clienti che hanno avuto problemi durante lo spostamento della directory FTDATA di SQL Server 2000 da un disco all’altro (così come da una directory all’altra all’interno dello stesso disco); praticamente tutti hanno fatto riferimento all’articolo tecnico &lt;a title="http://support.microsoft.com/kb/240867/en-us" href="http://support.microsoft.com/kb/240867/en-us"&gt;http://support.microsoft.com/kb/240867/en-us&lt;/a&gt; e si sono scontrati con alcuni punti che sembrano essere un po’ difficili da applicare, in particolare quelli relativi alle modifiche sulle chiavi di registry.&lt;/p&gt;  &lt;p&gt;A tal proposito già diverse volte mi sono trovato a suggerire una procedura alternativa, che non vuole rimpiazzare l’articolo tecnico, che i feedback ottenuti fino ad ora mi hanno confermato essere di più semplice implementazione; in questo caso ci stiamo riferendo ad una istanza di SQL Server 2000 in configurazione Cluster, ma le stesse informazioni possono essere applicate anche ad un server stand-alone.&lt;/p&gt;  &lt;p&gt;Vediamo in dettaglio le azioni da fare: in questo caso si parte da una FTDATA posizionata in G:\Program Files\Microsoft SQL Server\MSSQL$SQL2000SP4\FTDATA, riferita a una Named Instance “SQL2000SP4”. Nel caso di un istanza di default non avremo MSSQL$SQL2000SP4 ma semplicemente MSSQL. La directory FTDATA alla fine della procedura si troverà su un nuovo disco Y: mantenendo lo stesso percorso, ma le stessa procedura può essere utilizzata per spostarla in qualsiasi directory senza però modificare la struttura delle cartelle al di sotto di FTDATA.&lt;/p&gt;  &lt;p&gt;Ecco le azioni:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;posizione originaria in G:\Program Files\Microsoft SQL Server\MSSQL$SQL2000SP4\FTDATA &lt;/li&gt;    &lt;li&gt;La risorsa FullText all’interno del gruppo di SQL Server deve rimanere Online in questa fase (o semplicemente il servizio FullText in caso di installazione Standalone) &lt;/li&gt;    &lt;li&gt;Sul nodo con in carico l’istanza occorre modificare tutte le ricorrenze del disco G: in Y: all’interno della chiave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0. Come già anticipato si può modifare anche il percorso in qualsiasi modo, ma fino alla cartella FTDATA e non oltre. &lt;/li&gt;    &lt;li&gt;Offline della risorsa Fulltext: in questa fase nei file CLUSTX.X che si trovano in FTDATA vengono salvate la chiavi di registry che abbiamo modificato al punto 3, evitando così di dovere caricare i vari file nel registry per fare le modifiche. i file CLUSTX.X sono specifici per SQL Server 2000 e contengono la configurazione del FullText quando è configurato su un Cluster, per cui non saranno mai presenti in un server Standalone, per il quale è sufficiente spegnere il servizio dopo il punto 3 &lt;/li&gt;    &lt;li&gt;spostare il contenuto della cartella FTDATA sull’altro disco (Y: )&amp;#160; e/o directory a patto che il cambio sia coerente con le modifiche fatte al punto 3. &lt;/li&gt;    &lt;li&gt;Modificare ApplicationPath in HKEY_LOCAL_MACHINE\Cluster\Resources\xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx\Parameters, dove xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx coincide con il GUID delle risorsa FullText, per rispecchiare la nuova posizione di FTDATA per quell’istanza. &lt;/li&gt;    &lt;li&gt;Modificare il valore FullTextDefaultPath nella chiave HKLM\Software\Microsoft\Microsoft SQL Server\&amp;lt;Istanza&amp;gt; per puntare alla nuova posizione (questo passo non è richiesto per un server standalone) &lt;/li&gt;    &lt;li&gt;Offline e Online di SQL Server, Online del FullText. A questo punto nelle proprietà del FullText sotto “Support Services” (in Enterprise Manager) si dovrebbe vedere il puntamento al nuovo percorso. &lt;/li&gt;    &lt;li&gt;Se i cataloghi non sono nella posizione predefinita occorre modificare il campo path della tabella sysfulltextcatalogs per ogni database &lt;/li&gt;    &lt;li&gt;Da Query Analyzer      &lt;ul&gt;       &lt;li&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;sp_configure 'allow updates', 1&lt;/strong&gt; &lt;/font&gt;&lt;/li&gt;        &lt;li&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;go &lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;        &lt;li&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;reconfigure with override &lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;        &lt;li&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;go &lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;        &lt;li&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Update sysfultext catalogs set path =’nuova path’ where ftcatid=X&lt;/font&gt;&lt;/strong&gt;, dove ‘nuova path’ è il nuovo percorso che si vuole impostare e X è l’id del catalogo che si vuole modificare. Questa operazione deve essere fatta per ognuno dei cataloghi in ogni database: se il campo ‘path’ contiene il valore NULL non c’è bisongo di apportare modifiche &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Offline e Online di SQL Server &lt;/li&gt;    &lt;li&gt;Offline e Online del FullText &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;NOTA: gli ultimi 3 passi sono necessari solo se i cataloghi non sono stati creati in origine nella posizione predefinita&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/itasupport/pages/mauro-munzi.aspx"&gt;Mauro Munzi&lt;/a&gt;     &lt;br /&gt;Senior Support Engineer     &lt;br /&gt;Microsoft Enterprise SQL Support&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3293728" 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/Mauro+Munzi/default.aspx">Mauro Munzi</category><category domain="http://blogs.technet.com/itasupport/archive/tags/SQL+Server/default.aspx">SQL Server</category></item><item><title>SQL Server - Facciamo quattro conti con i dischi</title><link>http://blogs.technet.com/itasupport/archive/2009/02/09/sql-server-facciamo-quattro-conti-con-i-dischi.aspx</link><pubDate>Mon, 09 Feb 2009 03:00:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3199176</guid><dc:creator>itentblg</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/itasupport/comments/3199176.aspx</comments><wfw:commentRss>http://blogs.technet.com/itasupport/commentrss.aspx?PostID=3199176</wfw:commentRss><description>&lt;p&gt;Mi capita spesso di incontrare evidenti problemi di performance sui vari volumi utilizzati da SQL Server, sia per un’errata scelta del livello di &lt;a href="http://it.wikipedia.org/wiki/RAID" target="_blank"&gt;RAID&lt;/a&gt; sia per un errato dimensionamento del numero di dischi necessari a soddisfare la quantità di operazioni al secondo richieste dai vari database.&lt;/p&gt;  &lt;p&gt;Le moderne &lt;a href="http://it.wikipedia.org/wiki/Storage_Area_Network" target="_blank"&gt;Storage Area Network&lt;/a&gt; dispongono di sistemi di gestione dei volumi che praticamente in tempo reale possono riallocare su meccaniche completamente differenti,anche come numero, quello che dal sistema operativo viene visto come disco (la lettera dell’unità): inoltre la grande quantità di memoria cache installata garantisce prestazioni teoriche tali da non far sorgere preoccupazioni, tant’è che per volumi dedicati alla “semplice” di repository normalmente si può risparmiare su qualche disco.&amp;#160; &lt;/p&gt;  &lt;p&gt;La tendenza attuale inoltre è quella che porta a vedere la SAN più come una riserva di GigaByte e TeraByte di spazio, piuttosto che come un sistema dal quale si possono estrarre notevoli performance, perché normalmente si chiede “Ho bisogno di&amp;#160; XXX Gb di spazio”&amp;#160; e non “Ho bisogno di&amp;#160; XXX Gb di spazio che sia in grado di garantirmi YYY operazioni di I/O al secondo”.&lt;/p&gt;  &lt;p&gt;E qui si inserisce un aspetto molto importante da considerare: SQL Server ( e anche Exchange ) all’avvio richiede l’apertura dei suoi file di database in modalità WriteThrouh, tramite il flag FILE_FLAG_WRITE_THROUGH e FILE_FLAG_NO_BUFFER della funzione Windows &lt;a href="http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx" target="_blank"&gt;CreateFile&lt;/a&gt;, ignorando quindi qualsiasi tipo di cache, da quella del sistema operativo a quella che può essere presente sul disco. Solo alcuni sistemi molto avanzati possono essere configurati per ignorare questi due flag e fare in modo che SQL Server “veda” la cache come “stable media” (praticamente un disco) garantendo così elevate performance, ma la maggior parte delle installazioni oggi presenti non è in grado: e qui iniziano i problemi perché dobbiamo fare i conti, nel vero senso del termine, con le pure caratteristiche fisiche dei dischi che compongono gli array (spesso uno solo) dove risiedono i file di dati di SQL Server.&lt;/p&gt;  &lt;p&gt;Vediamo quindi un generico disco SCSI di ultima generazione cosa può garantirci come numero di operazioni di I/O prima di iniziare ad accodare le richieste e allungare i tempi di risposta: il riferimento dei nostri calcoli è un &lt;a href="http://www.seagate.com/www/en-us/products/servers/cheetah/cheetah_15k.5/" target="_blank"&gt;Seagate Cheetah 15.5K&lt;/a&gt;, disponibile nei tagli 74Gb, 146Gb e 300Gb, i più comuni (purtroppo … come dimensione del singolo) usati oggi all’interno delle SAN.&lt;/p&gt;  &lt;p&gt;Il disco in questione presenta per i tre formati le seguenti caratteristiche:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;latenza media di 2ms (considerata come la metà del tempo necessario per compiere un intera rotazione dei piatti) &lt;/li&gt;    &lt;li&gt;Scrittura Random 4.0ms &lt;/li&gt;    &lt;li&gt;Lettura Random 3.5ms &lt;/li&gt;    &lt;li&gt;Scrittura Sequenziale 0.4ms &lt;/li&gt;    &lt;li&gt;Lettura Sequenziale 0.2ms &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Tenendo presente che un disco inizia a dare evidenti segni di accodamento quando viene usato in modo continuativo oltre l’ 85% delle sue capacità (Cap. 8 di “Microsoft SQL Server 2000 Performance Tuning Technical Reference”), possiamo passare a valutare quanto rende il nostro Cheetah in termini di operazioni al secondo.&lt;/p&gt;  &lt;p&gt;&lt;a name="IMG_13"&gt;&lt;/a&gt;&lt;img title="clip_image001" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="207" alt="clip_image001" src="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/Facciamoquattroconticonidischi_B75E/clip_image001_f6fcb021-7528-4965-a681-12a2fc4b93ee.jpg" width="373" border="0" /&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;Relazione tra tempi di risposta e percentuale di utilizzo del disco&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Abbiamo che in modalità sequenziale una lettura richiede una latenza totale di 2.2ms mentre per una scrittura servono 2.4ms, per un totale rispettivamente di 455 e 417 operazioni/sec (= 1000m / latenza ). In modalità random i valori salgono 5.5ms e 6.0ms ottenendo così 182 e 167 operazioni/sec.&lt;/p&gt;  &lt;p&gt;A questi risultati dobbiamo sottrarre l’overhead della catena driver+controller+logica di gestione del disco, in sostanza tutto quello che si trova tra la richiesta di scrittura da parte del sistema operativo e la testina del disco, valutato intorno al 20% per le operazioni random e 10% per quelle sequenziali. I valori calcolati prima diventano così 364 e 333 per l’accesso sequenziale mentre per l’accesso random si scende a 164 e 150: abbiamo così il massimo ammissibile per ogni disco nel caso di uso non continuativo. I valori medi diventano quindi 348 nel caso di accesso sequenziale e 157 per l’accesso random.&lt;/p&gt;  &lt;p&gt;Prendendo ora come riferimento l’85% dell’utilizzo onde evitare evidenti accodamenti, i nostri valori diventano 309 e 283 nel primo caso e 139 e 128 nel secondo, con una media rispettivamente di 296 per l’accesso sequenziale e 133 per l’accesso random.&lt;/p&gt;  &lt;p&gt;Di seguito la tabella riassuntiva dei dati appena trovati:&lt;/p&gt;  &lt;div align="center"&gt;   &lt;table cellspacing="0" cellpadding="2" width="772" align="center" border="1"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td align="center" width="125"&gt;           &lt;h5&gt;Latenza di rotazione              &lt;br /&gt;(1/2 giro) = 2ms&lt;/h5&gt;         &lt;/td&gt;          &lt;td align="center" width="59"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td align="center" width="72"&gt;           &lt;h5&gt;Latenza totale&lt;/h5&gt;         &lt;/td&gt;          &lt;td align="center" width="121"&gt;Operazioni/Sec&lt;/td&gt;          &lt;td align="center" width="116"&gt;Overhead:20% random, 10% sequenziale&lt;/td&gt;          &lt;td align="center" width="118"&gt;Media per uso non continuativo&lt;/td&gt;          &lt;td align="center" width="86"&gt;85% per evitare code&lt;/td&gt;          &lt;td align="center" width="73"&gt;Media&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="124"&gt;           &lt;h5&gt;Lettura Sequenziale&lt;/h5&gt;         &lt;/td&gt;          &lt;td align="center" width="61"&gt;           &lt;h5&gt;0.2ms&lt;/h5&gt;         &lt;/td&gt;          &lt;td valign="top" align="center" width="73"&gt;           &lt;h5&gt;2.2ms&lt;/h5&gt;         &lt;/td&gt;          &lt;td align="center" width="122"&gt;455&lt;/td&gt;          &lt;td align="center" width="116"&gt;364&lt;/td&gt;          &lt;td align="center" width="118"&gt;348&lt;/td&gt;          &lt;td align="center" width="86"&gt;309&lt;/td&gt;          &lt;td align="center" width="73"&gt;&lt;strong&gt;296&lt;/strong&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="122"&gt;           &lt;h5&gt;Scrittura Sequenziale&lt;/h5&gt;         &lt;/td&gt;          &lt;td align="center" width="62"&gt;           &lt;h5&gt;0.4ms&lt;/h5&gt;         &lt;/td&gt;          &lt;td valign="top" align="center" width="73"&gt;           &lt;h5&gt;2.4ms&lt;/h5&gt;         &lt;/td&gt;          &lt;td align="center" width="123"&gt;417&lt;/td&gt;          &lt;td align="center" width="116"&gt;333&lt;/td&gt;          &lt;td valign="top" width="118"&gt;&amp;#160;&lt;/td&gt;          &lt;td align="center" width="86"&gt;283&lt;/td&gt;          &lt;td valign="top" width="72"&gt;&amp;#160;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="121"&gt;           &lt;h5&gt;Lettura Random&lt;/h5&gt;         &lt;/td&gt;          &lt;td align="center" width="63"&gt;           &lt;h5&gt;3.5ms&lt;/h5&gt;         &lt;/td&gt;          &lt;td valign="top" align="center" width="73"&gt;           &lt;h5&gt;5.5ms&lt;/h5&gt;         &lt;/td&gt;          &lt;td align="center" width="123"&gt;182&lt;/td&gt;          &lt;td align="center" width="116"&gt;164&lt;/td&gt;          &lt;td align="center" width="118"&gt;157&lt;/td&gt;          &lt;td align="center" width="85"&gt;139&lt;/td&gt;          &lt;td align="center" width="72"&gt;&lt;strong&gt;133&lt;/strong&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="123"&gt;           &lt;h5&gt;Scrittura Random&lt;/h5&gt;         &lt;/td&gt;          &lt;td align="center" width="64"&gt;           &lt;h5&gt;4.0ms&lt;/h5&gt;         &lt;/td&gt;          &lt;td valign="top" align="center" width="73"&gt;           &lt;h5&gt;6.0ms&lt;/h5&gt;         &lt;/td&gt;          &lt;td align="center" width="124"&gt;167&lt;/td&gt;          &lt;td align="center" width="116"&gt;150&lt;/td&gt;          &lt;td valign="top" width="118"&gt;&amp;#160;&lt;/td&gt;          &lt;td align="center" width="86"&gt;128&lt;/td&gt;          &lt;td valign="top" width="73"&gt;&amp;#160;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/div&gt;  &lt;p&gt;Vediamo ora i vari livelli di RAID come si comportano dal punto di vista delle operazioni di I/O richieste ad ogni disco che compone un Array.&lt;/p&gt;  &lt;h3&gt;RAID0&lt;/h3&gt;  &lt;p&gt;Alla base di tutti i livelli abbiamo il RAID0, un semplice striping che non offre caratteristiche di fault tolerance e naturalmente non è raccomandato per fornire storage a SQL Server, anche se rappresenta il massimo livello di performance. Il numero di operazioni gestite da ogni disco componente l’array è dato da:&lt;/p&gt;  &lt;p&gt;I/O per Disco = (Letture + Scritture) / Numero di dischi&lt;/p&gt;  &lt;h4&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/h4&gt;  &lt;h3&gt;RAID1&lt;/h3&gt;  &lt;p&gt;Rappresenta il “classico” mirroring in cui i il meccanismo di “fault tolerance” viene implementato replicando i dati un secondo disco. dal punto di vista del calcolo abbiamo:&lt;/p&gt;  &lt;p&gt;I/O per Disco = [Letture + (2 * Scritture)] / 2&lt;/p&gt;  &lt;p&gt;Si nota quindi come in questo caso le operazioni di scrittura siano più onerose, mentre nel caso delle letture grazie al supporto “Split seeks”, che permette di distribuire equamente il carico sui due dischi, si comporta come un RAID0&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;h3&gt;RAID5&lt;/h3&gt;  &lt;p&gt;E’ probabilmente il livello più utilizzato perché fornisce un buon livello “fault tolerance” unitamente ad un elevato rapporto numero di dischi/spazio disponibile, e in determinate condizione anche buone performance. Il RAID5 introduce il concetto di “parità” per potere ricostruire il dato nel caso in cui uno dei dischi componenti un array dovesse rompersi: il calcolo della parità risulta essere anche il “tallone d’Achille” per le performance di questa implementazione. Al momento della creazione di un volume di questo tipo la parte riservata ai dati viene inizializzata a 0 ed il bit di parità resettato: per questo motivo sono necessarie quattro operazioni, la prima per leggere il dato esistente, la seconda lo stato della parità, la terza per riscrivere il nuovo dato&amp;#160; e la quarta per la nuova parità&amp;#160; dopo che il processore del controller ne ha calcolato il valore. Abbiamo quindi:&lt;/p&gt;  &lt;p&gt;I/O per Disco = [Letture + (4 * Scritture)] / Numero di dischi&lt;/p&gt;  &lt;p&gt;dal momento che come abbiamo visto sopra per ogni operazione di scrittura ne occorrono 4&lt;/p&gt;  &lt;h3&gt;RAID10&lt;/h3&gt;  &lt;p&gt;E' l'unica vera alternativa al RAID5 nel momento in cui si vuole il massimo delle performance unitamente al migliore livello di “fault tolerance” ed è in sostanza un mirroring al quale viene aggiunta la funzionalità di stripe.&lt;/p&gt;  &lt;p&gt;Il calcolo presenta la stessa formula del RAID0 ma con il denominatore che diventa uguale al numero di dischi (sempre multiplo di 2) &lt;/p&gt;  &lt;p&gt;I/O per Disco = [Letture + (2 * Scritture)] / Numero di dischi&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Sono previsti anche altri livelli di RAID: 3,4, 6 (un 5 con doppia parità) e 7 ( 3 o 4 con caching), ma il loro impiego è limitato a casi sporadici.&lt;/p&gt;  &lt;h3&gt;LA DOMANDA FATIDICA: &lt;strong&gt;RAID5&lt;/strong&gt; o &lt;strong&gt;RAID10&lt;/strong&gt;?&lt;/h3&gt;  &lt;p&gt;Purtroppo molto spesso le esigenze di spazio dominano nei confronti delle performance ed il RAID5, a parità di dischi fornisce sempre una capacità di memorizzazione superiore, ma una volta che questo problema passa in secondo piano sarebbe opportuno scegliere praticamente sempre il RAID10 dal punto di vista delle performance. Il RAID5 nel momento in cui la percentuale delle scritture supera il 10% del totale inizia a imporre un maggior carico ai singoli dischi dell’array.&lt;/p&gt;  &lt;p&gt;Prendiamo ad esempio il nostro disco visto sopra, da 188 operazioni random al secondo prima di iniziare ad accodare, e vediamo cosa succede una volta inserito in un array composto da 6 unità (configurazione molto diffusa), che si trova a gestire 500 operazioni al secondo.&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;Confronto sul carico dei dischi&lt;/em&gt;&lt;/p&gt;  &lt;div align="center"&gt;   &lt;table cellspacing="0" cellpadding="2" width="498" align="center" border="1"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="239"&gt;           &lt;p&gt;&lt;b&gt;Rapporto Lettura/Scrittura&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="132"&gt;           &lt;p&gt;&lt;b&gt;RAID 5 I/Os&lt;/b&gt; &lt;/p&gt;            &lt;p&gt;&lt;b&gt;&lt;sup&gt;[a]&lt;/sup&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="125"&gt;           &lt;p&gt;&lt;b&gt;RAID 10 I/Os&lt;/b&gt; &lt;/p&gt;            &lt;p&gt;&lt;b&gt;&lt;sup&gt;[b]&lt;/sup&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="238"&gt;           &lt;h5&gt;100% letture; 0% scritture&lt;/h5&gt;         &lt;/td&gt;          &lt;td valign="top" width="132"&gt;           &lt;p&gt;(500 + 0) / 6              &lt;br /&gt;83 I/Os per disco&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="126"&gt;           &lt;p&gt;(500 + 0) / 6              &lt;br /&gt;83 I/Os per disco&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="238"&gt;           &lt;h5&gt;90% letture; 10% scritture&lt;/h5&gt;         &lt;/td&gt;          &lt;td valign="top" width="132"&gt;           &lt;p&gt;(450 + 200) / 6              &lt;br /&gt;108 I/Os per disco&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="126"&gt;           &lt;p&gt;(450 + 100) / 6              &lt;br /&gt;91 I/Os per disco&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="238"&gt;           &lt;h5&gt;75% letture; 25% scritture&lt;/h5&gt;         &lt;/td&gt;          &lt;td valign="top" width="132"&gt;           &lt;p&gt;(375 + 500) / 6              &lt;br /&gt;145 I/Os per disco&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="126"&gt;           &lt;p&gt;(375 + 250) / 6              &lt;br /&gt;104 I/Os per disco&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="238"&gt;           &lt;h5&gt;50% letture; 50% scritture&lt;/h5&gt;         &lt;/td&gt;          &lt;td valign="top" width="132"&gt;           &lt;p&gt;(250 + 1000) / 10              &lt;br /&gt;208 I/Os per disco&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="126"&gt;           &lt;p&gt;(250 + 500) / 6              &lt;br /&gt;125 I/Os per disco&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="238"&gt;           &lt;h5&gt;0% letture; 100% scritture&lt;/h5&gt;         &lt;/td&gt;          &lt;td valign="top" width="132"&gt;           &lt;p&gt;(0 + 2000) / 6              &lt;br /&gt;333 I/Os per disco&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="126"&gt;           &lt;p&gt;(0 + 1000) / 6              &lt;br /&gt;166 I/Os per disco&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="238"&gt;           &lt;h5&gt;&lt;a name="156"&gt;&lt;/a&gt;&lt;sup&gt;[&lt;/sup&gt;&lt;sup&gt;a&lt;/sup&gt;&lt;sup&gt;]&lt;/sup&gt; [Letture+ (4 * Scritture)] / N°Dischi &lt;/h5&gt;            &lt;h5&gt;&lt;a name="157"&gt;&lt;/a&gt;&lt;sup&gt;[&lt;/sup&gt;&lt;sup&gt;b&lt;/sup&gt;&lt;sup&gt;]&lt;/sup&gt; [Letture+ (2 * Scritture)] /N°Dischi&lt;/h5&gt;         &lt;/td&gt;          &lt;td valign="top" width="132"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="127"&gt;&amp;#160;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/div&gt;  &lt;p&gt;Come si vede già con il 10% di scritture il RAID5 impone più del 15% in più di carico su ogni disco, al 25% il confronto inizia a diventare molto sconveniente, e già prima del 50% supera il limite oltre il quale inizia l’accodamento. infine al 100% di scritture il RAID5 risulta evidentemente in difficoltà mentre il RAID10 si mantiene ancora entro le capacità del singolo disco. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/itasupport/pages/mauro-munzi.aspx"&gt;Mauro Munzi&lt;/a&gt;     &lt;br /&gt;Senior Support Engineer     &lt;br /&gt;Microsoft Enterprise SQL Support&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3199176" 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/Mauro+Munzi/default.aspx">Mauro Munzi</category><category domain="http://blogs.technet.com/itasupport/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.technet.com/itasupport/archive/tags/Disk+Management/default.aspx">Disk Management</category><category domain="http://blogs.technet.com/itasupport/archive/tags/SQL+Server/default.aspx">SQL Server</category></item></channel></rss>