SQL 2008 KATMAI : le novità per Sistemisti e Database Administrator.

Di Gianluca Busiello - SysAdmin.it

SQL Server 2008 è l'evoluzione del precedente RDBMS di Microsoft; il suo rilascio, inizialmente previsto per fine Febbraio 2008 in un evento cumulativo, è stato poi ripianificato per il terzo trimestre 2008. Con questo articolo si intende fornire, a tutti i sistemisti e DBA, una panoramica sul prodotto (in questo momento in versione CTP6 -Febbraio) al fine di farne conoscere le caratteristiche e i miglioramenti apportati rispetto alla versione precedente.

L' articolo è stato redatto basandosi su alcuni test effettuati in laboratorio utilizzando Windows Server 2008 Enterprise x64 RC1 e la versione CTP6 x64 di SQL2008 che, rispetto alla CTP5, presenta le nuove feature di Auditing e Compression dei dati. Nell'articolo verranno trattati i nuovi miglioramenti e le novità caratterizzanti il prodotto che ritengo al momento più significativi rispetto alla versione SQL2005, per tutto il resto si rimanda alla documentazione ufficiale che sarà poi rilasciata con il prodotto.

La CTP6 è liberamente scaricabile dal sito Microsoft Connect.

In questa pagina

Informazioni generali e installazione del prodotto Informazioni generali e installazione del prodotto
I miglioramenti introdotti in SQL2008 I miglioramenti introdotti in SQL2008
SQL2008: le nuove caratteristiche SQL2008: le nuove caratteristiche
Compressione Compressione
Tracking features in SQL2008 Tracking features in SQL2008
Change Data Capture - (CDC) Change Data Capture - (CDC)
SQL 2008 Policy SQL 2008 Policy
Nuove soluzioni per i blob file: File Stream Storage Nuove soluzioni per i blob file: File Stream Storage
Conclusioni Conclusioni

Informazioni generali e installazione del prodotto

SQL 2008 (ed i relativi tools) utilizza, così come nella versione precedente, il Framework.NET in versione 3.5 che rappresenta un prerequisito software per l'installazione del prodotto. Tutti i dettagli riguardanti i requisiti hardware e software per l'installazione di SQL2008 sono reperibili a questo link :https://msdn2.microsoft.com/en-us/library/ms143506(SQL.100).aspx

Dopo aver lanciato il setup e selezionato l'installazione dei componenti server compare la nuova schermata "SQL Server Installation Center" dalla quale è possibile scegliere "New Installation".

In seguito il wizard effettuerà un controllo sul sistema per verificare che siano soddisfatti i requisiti hardware & software per l'installazione. Durante questa fase viene verificato anche la presenza del FrameWork .NET 3.5 se sul sistema,  nel caso mancasse il wizard chiede di scaricarlo e poi installarlo.

Durante l'installazione è possibile specificare anche i nominativi degli utenti windows che dovranno amministrare SQLServer e che non appartengono direttamente al gruppo "Administrator". Inoltre già in questa fase è possibile scegliere se abilitare e configurare una della nuove feature, il "FileStream", di cui si parlerà in seguito.

Terminata l'installazione sarà possibile avviare SQL Server Management Studio che, a primo impatto, ricorderà la versione utilizzata con SQL2005.

I miglioramenti introdotti in SQL2008

In considerazione del fatto che sono sempre più ricorrenti scenari nei quali la perdita di dati equivale ad una perdita di business, nella nuova versione di SQL sono stati introdotti diversi e significativi miglioramenti in termini di alta affidabilità e scalabilità.

In particolare, per le funzionalità di "Mirroring" in SQL2008 viene ora utilizzato un checksum per validare le pagine di dati scritte; questa funzionalità permette il recupero, dal server mirror, di pagine dati inconsistenti limitando così le casistiche in cui, nella versione precedente di SQL,  si potevano presentare errori del tipo:

823,824, soft-IO e hard-IO errors... 829 restore needed

In pratica in una configurazione in "Mirroring" se il server "Principal" riconosce una pagina di dati corrotta richiede automaticamente la stessa pagina di dati al server "Mirror" e la sostituisce; inoltre se il server "Mirror" individua una pagina dati corrotta logicamente interrompere il mirroring. Nella versione 2008 i dati scambiati tra i 2 server in mirror possono essere anche compressi in modo da velocizzare tutt le comunicazioni.

Per l'implementazione delle funzionalità di replica Transazionale, risultata ora più agevolata grazie alla "Graphical topology viewer"; con la versione SQL2008 possono essere aggiunti nuovi nodi alla replica senza necessariamente fermare lo stesso processo di replicazione.
 
Diversi sono anche i miglioramenti apportati a SQL in soluzione cluster se installato su Windows Server 2008.

Qualche tempo fa infatti, nell’ ipotizzare  una soluzione di Disaster Recovery & Business Continuity per un applicazione web-based, in cui la perdita di transazioni (RPO) di una base dati SQL doveva essere pari a zero, (soluzione che prevedeva un cluster MSCS geografico con dei nodi in siti differenti) mi scontrai con  una problematica relativa alle interfacce di heartbeat che dovevano necessariamente risiedere sulla stessa rete; ora questa limitazione è stata finalmente rimossa ed ora è possibile avere interfacce di heartbeat anche su subnet differenti.
Per lo stesso progetto alla fine scelsi di provare una soluzione di "Mirroring" della base dati; funzionalità, all'epoca, resa disponibile per la prima volta con la versione SQL2005.

Sempre in tema di cluster, anche se non strettamente correlato al  SQL2008, un’altra novità è rappresentata dal fatto di poter utilizzare (per i servizi cluster) nodi con caratteristiche hardware differenti; la cosa importante è che l'utility "Cluster Validation Tool" presente in Windows Server 2008 passi tutti i test e visualizzi delle relative "bandierine verdi".
Questa novità consente, ad esempio in caso di problematiche successive alla messa in produzione, di essere supportati dal PSS nell'identificazione del malfunzionamento cosa che in precedenza non era assolutamente possibile.

E’ stata migliorata anche al scalabilità dei SQL che ora, in soluzioni cluster che utilizzano Windows 2008, supporta fino a 16 nodi e più di 25 istanze sullo stesso server. Inoltre, è possibile aggiungere anche CPU a "caldo" oltre alla memoria RAM cosa, peraltro, già possibile in SQL2005.

SQL2008: le nuove caratteristiche

A mio avviso, una delle novità più importanti di SQL2008 è il Resource Governor.

Questa nuova funzionalità, molto utile sopratutto in caso di database server condivisi, permette  di porre dei limiti all'utilizzo delle risorse hardware come RAM e CPU da parte di query e/o applicazioni. In SQL Server 2005 tutto il carico di lavoro (motore di SQL, operazioni OLTP, Job SQL) girava in un unico "Resource Pool" e questo significava che se, ad esempio, partiva un task di backup oppure un job che effettuava una serie di operazioni sul database ed a causa di una query scritta male o di un indice mancante consumava diversi cicli di CPU,  le performance di tutto il database server e attività OLTP degradavano notevolmente.

Ora in SQL Server 2008 è possibile allocare "Resource Pool" (tipicamente percentuali di memoria e CPU) ai differenti carichi di lavoro (Workload).


 
L’assegnazione di “Resource Pool” può essere effettuata anche in funzione dell’importanza dei workload; a tal fine questi ultimi possono essere catalogati in :

- Low
- Medium
- High

Allo stato attuale il "Resource Governor" non può, però, limitare l' i/o su disco. Da alcuni rumors sembra che questa funzionalità possa essere disponibile in una prossima versione di SQL o attraverso la distribuzione di una service pack.

Il “Resource Governor”, riuscendo a discriminare in base alla username con la quale viene effettuata la connessione al database piuttosto che il nome delle applicazione stessa, riesce ad allocare le relative risorse in funzione dei carichi di lavoro.
 

 
Il “Resource Governor”, disabilitato di default,  può essere attivato attraverso T-SQL oppure tramite la SQL Server Management Studio, di seguito chiamata SSMS, (tasto destro > enable sul folder); una volta abilitato il “Resource Governor” ha effetto su tutta l'istanza; successivamente all’abilitazione è possibile poi definire i Resource Pool.

Il “Resource Governor” sarà presente nella versione Enterprise di SQL Server 2008, altre informazioni circa questa funzionalità e come abilitarla sono reperibili al seguente indirizzo :

https://msdn2.microsoft.com/en-us/library/bb895389(SQL.100).aspx

Altra novità per tutti i DBA è il "Performance data collection", una sorta di data warehouse grazie al quale è possibile collezionare informazioni (counter SQL, counter OS,T-SQL, Blocking scripts etc...) relativi ai diversi database per poi storicizzarle in un databse centralizzato di modo da poter successivamente produrre report utili in caso di troubleshooting o tuning.
Il tool è estremamente personalizzabile ed il tutto viene implementato tramite una serie di Jobs SQL.

Sempre in tema di collezionamento delle informazioni, nella nuova versione di SQL è stata migliorata anche la "Performance Dashboard" che, rispetto alla versione precedente, oggi fornisce molte più informazioni.

La Performance DashBoard non è presente nella CTP6 ma sarà inclusa nella versione RTM di SQL2008.

Compressione

Negli ultimi anni molti DBA hanno spesso individuato nei colli di bottiglia dovuti all' I/O su disco la causa del degrado delle performance dei propri database.

A tal proposito la funzionalità di "Compression" consente proprio di alleggerire il carico di lavoro sui dischi riducendo le dimensioni del 30% 50%; in questo modo è possibile avere più dati in cache e quindi meno I/O sui dischi ovvero esecuzione più veloce delle query.

Per abilitarle questa funzionalità si può utilizzare sempre la SSMS cliccando con il tasto destro sulla tabella e scegliendo "Manage Compression".

 
Nella versione SQL2005 SP2 era già presente, anche se solo per alcuni tipi di dati numerici (VarDecimal), una strategia di compressione dei dati; in SQL Server 2008 questa logica è estesa a tutti i tipi di dato a lunghezza fissa (intger, big-integer etc..).

E' importante chiarire che, lo scopo di questa funzionalità, NON è quello di ridurre lo spazio su disco occupato dai database bensì ridurre l' I/O sui dischi.

Esistono due tipi di compressioni : "Prefix Compression" e "Dictionary Compression".

Con il primo tipo di compressione dei dati (Prefix Compression) vengono identificati dei prefissi nei dati e vengono rimpiazzati; in ogni pagina viene incluso un headear con le informazioni ricorrenti.

  
Altre informazioni circa la "prefix compression" sono reperibili sul blog di Sunil Agarwal :

https://blogs.msdn.com/sqlserverstorageengine/archive/2008/01/18/what-is-page-compression.aspx

 

Con il secondo tipo di compressione dei dati (Dictionary Compression) vengono associati/accorpati stringhe ricorrenti; in ogni pagina viene incluso un headear o modificato l'esistente.

Ulteriori informazioni sulla "dictionary compression" si possono trovare sempre sul blog di Sunil Agarwal:

https://blogs.msdn.com/sqlserverstorageengine/archive/2008/01/18/details-on-page-compression-page-dictionary.aspx

Il fattore di compressione dipende dal tipo di dato memorizzato (text o altro); è possibile effettuare una stima della possibile compressione tramite SSMS (tasto desto sulla tabella> Compression), oppure utilizzando la stored procedure:

sp_esimate_data_compresion_saving

 
Una volta abilitata questa funzionalità SQL 2008 inizia a comprimere i dati quando deve effettuare un operazione di scrittura dei dati (insert,update,delete) o meglio quando deve effettuare un operazione di "page split" della pagina di dati; la funzionalità di Compression dovrebbe essere presente solo nella versione Enterprise.
 
Abilitare la Compression non richiede cambiamenti alle applicazioni custom che utilizzano il database, inoltre l'operazione di compressione è reversibile.

Sempre in tema di compressione in SLQ2008 ora è possibile comprimere anche i backup dei database utilizzando la clausala T-SQL backup..... "with compression"....

La compressione dei backup è disabilitata di default e può essere attivata tramite la stored procedure :

sp_configure 'backup compression default', 1

Questa funzionalità, se abilitata, ha efficacia a livello di istanza e si utilizzano repliche che si basano sul Transaction Log di SQL (Log shipping , Mirror)  ne trarrano logicamente beneficio

Tracking features in SQL2008

In SQL2008 è presente una soluzione di Auditing che è possibile configurare tramite delle policy e lo strumento "Audit Configuration Wizard".

Le policy prevedono tre ruoli :

-System Administrators
  Pieno potere per l'installazione e il deploy delle regole di Audit

-Operations
  Monitoraggio del funzionamento dell' Audit

-Auditors
  Visione dei report relativi ai dati di Audit, non hanno accessibilità ai dati di produzione

Tramite le funzionalità di Auditing si possono tracciare eventi relativi all’ autenticazione (es. login failed) oppure eventi relativi al database (update, select, etc.); gli eventi possono essere tracciati  nei logs del sistema operativo (Application Logs e Security Logs) oppure in file su file system.

Cosa importante è che i DBA possono solo leggere e non modificare i files di auditing mentre i SysAdmin della macchina hanno il pieno controllo su questi ultimi e quindi possono anche modificarli.

Con queste nuove funzionalità ora SQL2008 è di fatto in linea con le normative : PCIm SoX, HIPAA per quanto riguarda la segretezza delle informazioni.

Change Tracking

Il Change Tracking, abilitato a livello di database e successivamente a livello di singola tabella, è una soluzione che permette di tracciare il cambiamento dei dati all' interno di una tabella restituendo di fatto i numeri di riga per i quali i dati sono cambiati (non i dati cambiati); a tal fine è necessario che sulla tabella per la quale viene abilitato sia presente una primary key (requisito anche per abilitare la feature).

Come detto in precedenza il Change Tracking  può restituire le righe dei dati cambiati in un determinato range orario (net-changes) ma non gli stessi dati prima del cambiamento o tutti i cambiamenti ai dati nel range orario specificato.

Gli scenari d'applicazione di questa funzionalità vanno dalla popolazione di data warehouse alle applicazioni per smartphone che lavorano off-line e sincronizzano i dati occasionalmente; in quest’ultimo caso i client sincronizzano solo le colonne per le quali di dati sono cambiati (insert,update o delete);

Altre informazioni riguardanti il "Change Tracking" sono reperibili a questo indirizzo :

https://msdn2.microsoft.com/en-us/library/bb964727(SQL.100).aspx

Change Data Capture - (CDC)

La funzionalità di CDC può essere abilitata allo stesso modo del "Change Tracking" ovvero sul database e poi sulle singole tabelle.

Il CDC però, a differenza del "Change Tracking", mantiene lo storico di tutti i cambiamenti avvenuti nel tempo oppure solo gli ultimi cambiamenti (net-changes); può, altresì, indicare quali colonne sono state cambiate e se il cambiamento è la conseguenza di una insert o update.

Per il suo funzionamento il CDC utilizza il Transaction Log e tutti i cambiamenti ai dati sono memorizzati in tabelle d' appoggio con politiche di cleanup e retention che possono essere configurate; l' overhead stimato è di circa il 10%.

La funzionalità di CDC sarà presente unicamente nella versione Enterprise.

Altre informazioni riguardanti il CDC sono reperibili sul blog di Ravi Maniam :

https://blogs.msdn.com/manisblog/archive/2008/03/30/sql-server-2008-change-data-capture-part-i.aspx

e al seguente indirizzo:

https://msdn2.microsoft.com/en-us/library/bb522489(SQL.100).aspx

SQL 2008 Policy

Nella versione 2008 di SQL un’altra funzionalità interessante è rappresentata dalle policy.

Questa funzionalità grazie al nuovo "Declarative Management Framework" (DMF), permette di definire dei template per la configurazione e l’amministrazione di database farm SQL.

E’ possibile impostare parametri di configurazione del motore SQL piuttosto che policy che prevedano, ad esempio, che tutte le tabelle utenti create rispettino una determinata naming convention.

Es. tutte le tabelle utenti devono iniziare con il prefisso "TBL_" etc...

Per determinati aspetti la nuova funzionalità di policy in SQL 2008 può essere assimilata alle Group Policy Object (GPO) di Windows Server.
 
Le policy possono essere attivate on demand dai DBA oppure schedulate (tramite Job SQL) e si possono implementare:
 
- in modalità "Prevent out-of-compliance change" dove i cambiamenti che non rispettano le policy non vengono di fatto applicati, un un trigger DDL ne garantisce il rollback;
- in modalità "Log out-of-compliance" dove, invece, i cambiamenti che non rispettano le policy vengono solo loggati e notificati.
 

Le policy si basano sui concetti di Facets, Conditions, Category e Target; nel dettaglio :

Facets  
rappresentano le proprietà relative all'oggetto (Targets). Ad esempio il nome delle tabelle utenti

Conditions  
è l'espressione booleana (vero/falso) relativa alla proprietà dell'oggetto (Facets)

Policies  
contengono le Conditions che sono applicate ai Targets. Ad esempio la naming convention per la creazione delle tabelle utenti.

Category
rappresentano le diverse categorie alle quali associare le policy e Server; tutti i database server sottoscrivono automaticamente la categoria di default.

Targets
rappresentano gli oggetti sui quali vengono applicate le policy. Ad esempio: database, tabelle, user etc...
 

Il processo d' applicazione delle policy segue il seguente flusso :

Facets > Conditions > Policies > Categories > Targets
 
Nella figura sopra rappresentata è stata creata una policy (Policies) applicata a tutte le tabelle utenti (Targets) la quale prevede che il nome (Facets) debba sempre iniziare con la stringa "tbl_" (Conditions).

Sempre nell' esempio in figura la policy viene applicata, in modalità "Prevent out-of-compliance change", a tutti i database che fanno parte della categoria di default (Categories). La gestione delle policy per i diversi database server può anche essere centralizzata; in questo caso le policy sono propagate, da un server centrale, a tutti gli altri server.

Nuove soluzioni per i blob file: File Stream Storage

Altra novità di SQL 2008 è il File Stream Storage.
 
Con questa nuova funzionalità non  è più necessario scrivere del codice per gestire i puntamenti ai files blob su filesytem oppure per gestire l’aggiornamento degli stessi; ora infatti è possibile gestire i blob file tramite T-SQL (select, insert,update,delete) così come se fossero normali dati varchar, char etc...

I file blob vengono caricati in SQL2008 e poi lo stesso SQL Server che, con un kernel drive, si fa carico di tutto il lavoro.

Sempre utilizzando questa funzionalità si evita anche di dover gestire separatamente i backup dei file blob su filesystem; infatti tramite il normale backup del database fatto con SQL verrano vengono backuppati anche i dati BLOB su filesystem di modo da rendere il backup consistente.

Di seguito vengono indicati gli step necessari per abilitare questa funzionalità:

1- abilitare il filestream per l'istanza SQL: EXEC sp_filestream:configure @enable\_level=3;
2- creare un filegroup separato per la gestione dei filestream;
3- creare la tabella con la colonna di tipo filestream.

In questo caso i dati blob saranno memorizzati su un disco (locale o di rete) e saranno gestiti direttamente da SQL Server.
 

Altri miglioramenti che caratterizzano SQL 2008 rispetto a SQL2005 sono:
 
Trasparent Ecription:
ora è possibile cifrare con chiavi asimmetriche i dati; una volta cifrato il database, la cifratura avrà effetto anche su eventuali mirroring o backup/restore.

Full Text Search:
Il servizio (IFTS) Full Text Search ora è integrato in SQL2008 e può indicizzare anche files in formato xml.

Query plan Freezing:
utilizzando SQL2005 qualche volta mi è capitato che query plan in ambiente di collaudo producessero, per determinate query, prestazioni migliori di query plan in ambiente di produzione; ora , all' occorrenza è possibile esportare query plan da ambienti differenti e importali su un altro ambiente forzandone l'uso.

Conclusioni

Nonostante le prove siano state effettuate sulla versione CTP 6, SQL 2008 propone una serie di novità interessanti ad uso e consumo di molti DBA; se, in termini di sicurezza, venissero raggiunti gli stessi risultati di SQL 2005, SQLServer potrebbe consolidare la sua posizione di database server per applicazioni mission-critical nei confronti di altri competitor.