Build a SQL Server machine The right way Danilo Dominici SolidQ Sponsors Organizers Chi sono • Consulente, Trainer, Speaker, Autore • Uso SQL Server dalla versione 6.5 • Microsoft MVP, MCT • Mentor @ SolidQ • DBA SQL Server e VMWare admin @ Regione Marche • Co-leader del PASS Global Italian Virtual Chapter http://globalitalian.sqlpass.org CONSIDERAZIONI GENERALI RAID § Almeno RAID 1 per tutti i dischi § Anche il sistema operativo § RAID 10 per massimizzare le performance § Test prima di andare in produzione § SQLIO § CrystalDiskMark Separare i dischi § Utilizzare dischi separati per: § File dati di SQL Server (mdf, ndf) § Transaction logs § Incluso il tempdb § Tempdb § Backups Formattazione dischi § Il disco C: dove risiede il sistema operativo può usare il default (4K) § I dischi di SQL Server (dati, log, tempdb) dovrebbero essere formattati con cluster size di 64K § Verificare che lo storage sia allineato § Da Windows 2008 è automatico § Stesse regole se stiamo preparando una VM Risparmio energetico § Il server fisico su cui gira SQL Server o la VM che ospita SQL Server deve avere le impostazioni per usare la massima potenza del processore § Verificare che anche il Power plan di Windows sia impostato su High Performance § Tool: CPU-Z Antivirus § Impostare le esclusioni per § Directory di SQL Server § Estensioni dei files di SQL Server § Mdf, ndf, ldf, bak § Cataloghi full-text § Trace files § SQL Audit files § Extended events files SQL Server service accounts § Utilizzare un account di dominio senza privilegi elevati § L’account non dovrebbe essere amministratore del server su cui è installato SQL Server § Utilizzare un account di dominio separato per SQL Server Agent § Più in generale un account per ogni servizio (SSRS, SSIS, etc) PARAMETRI DI DEFAULT Server Max Memory § Che cos’è: § Indica a SQL Server il limite di memoria da utilizzare § Default: § 2147483647 MB Server Max Memory (continua) § Perché modificarlo: § SQL Server tende ad occupare tutta la RAM § può diventare un problema se la memoria disponibile diventa insufficiente per il S.O. o se ci sono altre applicazioni in uso sul server (es. SSRS, SSIS) § Regola: § Se il server usa solo SQL Server, si può iniziare con il 10% (o 2GB, dipende dal valore più grande) § Va ottimizzato in funzione dei programmi che girano sul server (anche SSMS in RDP J) Server Max Memory (continua) § Approfondimenti: § How much memory does my SQL Server actually need? https://goo.gl/6csFqd § Memory Manager Configuration changes in SQL Server 2012 http://goo.gl/2dLJTx Cost Threshold for Parallelism § Che cos’è § Indica il limite stimato, in secondi, oltre il quale il Query Optimizer considera l’esecuzione di una query in parallelo § Default: 5 secondi § E’ rimasto invariato da SQL Server 2005. Con l’hardware attuale non ha più senso. Cost Threshold for Parallelism (continua) § Perché modificarlo: § Per ridurre le attese (CXPACKET) dovute all’esecuzione in parallelo § Alcuni dei thread eseguiti in parallelo possono impiegare più tempo per terminare l’esecuzione e rallentano l’intera query § Regola: § Non c’è un numero “magico” § Iniziare da 30 o 40 secondi ed eventualmente tararlo misurandone l’impatto sul sistema MAXDOP § Che cos’è § Indica il numero di processori utilizzati nell’esecuzione delle query in parallelo § Default: 0 § Vengono utilizzati TUTTI i processori (se SQL Server decide di eseguire la query in parallelo) MAXDOP (continua) § Perché modificarlo: § In combinazione con il parametro cost threshold for parallelism per ridurre il valore di CXPACKET § Perché ce lo chiede l’applicazione (Es. Sharepoint vuole MAXDOP=1) § Regola: § Solitamente si imposta pari al numero di core fisici MAXDOP (continua) § Casi particolari § Licensing errato § licenza SQL Server 200x Ent.Edition Server + CAL à licenza SQL Server 2012 Ent. con 20 logical CPU MAXDOP (continua) § Casi particolari § NUMA (Non-Uniform Memory Access) DEMO § MAXDOP=0 SELECT I.CustomerID, C.FirstName , ad.City FROM Person.Contact c JOIN Sales.Individual i ON C.ContactID = I.ContactID JOIN Sales.CustomerAddress ca ON CA.CustomerID = I.CustomerID JOIN Person.Address ad ON ad.AddressID = CA.AddressID ORDER BY i.CustomerID DEMO § MAXDOP=2 SELECT I.CustomerID, C.FirstName , ad.City FROM Person.Contact c JOIN Sales.Individual i ON C.ContactID = I.ContactID JOIN Sales.CustomerAddress ca ON CA.CustomerID = I.CustomerID JOIN Person.Address ad ON ad.AddressID = CA.AddressID ORDER BY i.CustomerID OPTION (MAXDOP 2) Backup compression § Che cos’è § Consente (SQL 2008+) di comprimere i backup nativamente § Default: non compresso § Perché modificarlo § Minor tempo e spazio necessari per il backup § Ha un costo in termini di maggiore utilizzo di CPU Instant File Initialization § Che cos’è § Inizializzazione istantanea dei files dati (mdf/ndf) § NON funziona per il transaction log § Tecnicamente è un permesso di Windows § Default: § Dipende dall’account usato per l’account di servizio di SQL Server § Per default solo i membri del gruppo locale Administrators Instant File Initialization § Perché modificarlo: § Rende praticamente istantanee le operazioni di: § Creazione di un nuovo database o file di database § Autogrowth § Restore di un database § Come si modifica § Assegnando all’utente di servizio di SQL Server il permesso “Perform Volume Maintenance Tasks” nelle Local Security Policy del server DEMO INSTANT FILE INITIALIZATION Configurazione del TEMPDB § Default: un singolo file § Perché non va bene: § Si crea contesa di accesso sulle pagine PFS e SGAM § Regola: § Se il numero di processori logici è <= 8 à numero di files = numero di processori logici § Altrimenti iniziare con 8 files e aggiungere in multipli di 4 se c’è ancora contesa Configurazione del TEMPDB (continua) § Regola: § Utilizzare la stessa dimensione per tutti i data file § Preallocare lo spazio Configurazione del TEMPDB (continua) § Approfondimenti § Inside The Storage Engine: GAM, SGAM, PFS and other allocation maps http://goo.gl/2GSohV § Analyzing Tempdb Contention http://goo.gl/v5n5p1 DEMO TEMPDB CONTENTION Trace flags § 1118 § Allocazione di extent uniformi per il tempdb § 2371 § Modifica la soglia usata da SQL Server (2012+) per il ricalcolo automatico delle statistiche Configurare operatori ed avvisi § Per tutti i messaggi di errore con severity da 17 a 25 § Fa eccezione l’errore 825 che rientra tra gli errori gravi, ma ha severity 16 § Per tutti i job Database maintenance § I piani di manutenzione sono competi, ma... § Non consentono un controllo “fine” delle attività § Esistono soluzioni (free) fatte da SQL MVPs § Maintenance Solution di Ola Hallengren § http://ola.hallengren.com § Minion Reindex di Jen McCown § http://www.midnightsql.com/Minion/ Management Data Warehouse § Consente di monitorare una o più istanze di SQL Server § E’ un insieme di jobs e package SSIS § Può essere customizzato aggiungendo dei data collector custom § Molto più complesso, ma si può aggiungere anche un custom collector type § Es. http://extendedtsqlcollector.codeplex.com/ di Gianluca Sartori b | t Management Data Warehouse Enable DAC § Default: disabilitata § Perché non va bene: § E’ l’ultima spiaggia per connettersi ad un SQL Server che non risponde ai comandi… Enable DAC (continua) § Come si abilita: § Da T-SQL sp_configure 'remote admin connections', 1 GO RECONFIGURE WITH OVERRIDE GO Enable DAC (continua) § Da GUI Proprietà del database MODEL § Essendo il “modello”, i parametri impostati ed il suo contenuto verranno utilizzati per i nuovi database § Parametri da verificare ed ottimizzare: § Autogrowth; impostare in MB, non in %, con dimensione adeguata § Auto close e auto shrink: OFF § Auto create e auto update statistics: ON § Recovery model: dipende J Q&A #sqlsatTorino #sqlsat400 SPEAKERSCORE http://speakerscore.com/MK1T #sqlsatTorino #sqlsat400 Valutazione evento: http://goo.gl/gwhs8O Valutazione speaker: http://goo.gl/oju41k