L'installazione di SQL Server consente di preparare rapidamente un server, ma la configurazione di default non è ottimale. In questa sessione vediamo come preparare una macchina per SQL Server nel migliore dei modi, con un occhio alle performance e alla scalabilità.
4. 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
6. 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
7. Separare i dischi
§ Utilizzare dischi separati per:
§ File dati di SQL Server (mdf, ndf)
§ Transaction logs
§ Incluso il tempdb
§ Tempdb
§ Backups
8. 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
9. 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
10. 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
11. 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)
13. Server Max Memory
§ Che cos’è:
§ Indica a SQL Server il limite di memoria da
utilizzare
§ Default:
§ 2147483647 MB
14. 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)
15. 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
16. 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.
17. 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
18. 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)
19. 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
20. MAXDOP (continua)
§ Casi particolari
§ Licensing errato
§ licenza SQL Server 200x Ent.Edition Server + CAL à
licenza SQL Server 2012 Ent. con 20 logical CPU
22. 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
23. 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)
24. 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
25. 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
26. 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
28. 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
29. Configurazione del TEMPDB (continua)
§ Regola:
§ Utilizzare la stessa dimensione per tutti i data file
§ Preallocare lo spazio
30. 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
32. 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
33. 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
34. 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/
35. 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
40. 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