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 Regola: Alcuni dei thread eseguiti in parallelo possono impiegare più tempo per terminare l esecuzione e rallentano l intera query 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