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