SQL Server 2008:

novità

Randy Dyess

 

Panoramica:

  • Gestione più efficace
  • Prestazioni e scalabilità ottimizzate
  • Maggiore sicurezza e disponibilità
  • Modifiche per gli sviluppatori

Microsoft ha rilasciato ancora una volta una nuova versione di SQL Server che promette una vita più facile per gli amministratori dei database. La versione più recente, SQL Server 2008, offre un'ampia gamma di nuove

caratteristiche e funzionalità che consentiranno di migliorare considerevolmente le attività di amministrazione.

Gli amministratori di database che hanno utilizzato SQL Server® 2005 per un certo periodo di tempo si imbatteranno in molte delle stesse funzionalità che utilizzano per lo svolgimento delle relative attività quotidiane. Tuttavia, nel giro di poco tempo scopriranno che questi strumenti familiari sono stati migliorati in SQL Server 2008. Le nuove funzionalità basate sulle funzionalità esistenti contribuiscono in modo significativo alla riduzione del numero di soluzioni alternative o personalizzazioni in precedenza necessarie per utilizzare diverse funzionalità nei complessi ambienti di database.

Le nuove funzionalità in SQL Server 2008 coinvolgono un'ampia gamma di ruoli specifici dei database, rendendone difficoltosa la classificazione. Poiché le funzionalità vengono organizzate in base ad argomenti differenti, è possibile che alcuni lettori si domandino perché la Funzionalità X sia stata classificata sotto la Categoria Y, quando invece è evidente che appartiene alla Categoria Z. Questa classificazione può essere affrontata da diverse prospettive ed è influenzata dalla modalità di gestione delle attività commerciali da parte dell'azienda.

Non vi è alcun dubbio che gli amministratori dei database spesso svolgono diversi ruoli, ma tenterò di suddividere le nuove funzionalità nelle seguenti categorie generiche: gestione, scalabilità, prestazioni, disponibilità elevata, sicurezza, sviluppo e Business Intelligence.

Novità per la gestione

Per gli amministratori di database (come me), la funzionalità di gestione aggiuntiva rende SQL Server 2008 un prodotto molto interessante. La nuova gestione dei criteri, l'esecuzione di query su più server, i server di configurazione e il warehouse di gestione/raccolta dati offrono nuove e potenti funzionalità per gli amministratori dei database, responsabili, in genere, della gestione di ambienti di database grandi e complessi con centinaia o migliaia di database su decine o persino centinaia di server.

La nuova funzionalità Gestione criteri di SQL Server 2008, denominata Declarative Management Framework nelle versioni CTP (Community Technology Preview), consente di creare ed eseguire i criteri di configurazione su uno o più server di database. Con questi criteri, è possibile garantire che le impostazioni di configurazione standard vengano applicate e gestite su ciascuno dei server e dei database di destinazione. Un esempio di questa funzionalità viene illustrato nella Figura 1.

Figura 1 Criterio relativo alle procedure consigliate per la posizioni di file di log e dati

Figura 1** Criterio relativo alle procedure consigliate per la posizioni di file di log e dati **(Fare clic sull'immagine per ingrandirla)

I criteri vengono creati da una serie predefinita di facet. Ogni facet contiene un sottogruppo di impostazioni di configurazione di SQL Server 2008 e altri eventi che è possibile controllare. Per creare un criterio, è necessario associare questi facet a determinate condizioni. Le condizioni rappresentano i valori consentiti per le proprietà di un facet, le impostazioni di configurazione o altri eventi contenuti all'interno del facet.

Le condizioni rappresentano inoltre i valori utilizzati per i filtri di criteri. Si supponga che si desideri eseguire il criterio solo su un determinato database. In questo caso, è possibile creare una condizione che contiene il nome del database e aggiungerla al criterio. In tal modo, il criterio sarà applicabile solo al database in questione. Sebbene la funzionalità Gestione criteri di SQL Server 2008 possa sembrare complessa, una volta provata, si scoprirà che in realtà è piuttosto intuitiva.

Quando è necessario eseguire query su più server contemporaneamente, particolarmente utili si rivelano le nuova funzionalità di interazione con più server e dei server di configurazione. È possibile registrare i server in Management Studio e riunirli in un unico raggruppamento. Quando occorre eseguire un criterio o una query su tutti i server nel raggruppamento, fare semplicemente clic con il pulsante destro del mouse sul raggruppamento.

Un ulteriore vantaggio è rappresentato dalla possibilità di configurare questa funzionalità per la restituzione di un unico set di risultati per ciascun server o per la fusione di tutti i risultati in un unico grande set di risultati. È possibile inoltre specificare se si desidera che i nomi dei server e dei database vengano restituiti come parte dei risultati in modo da poter separare i singoli risultati da ciascun server. La possibilità di archiviare i server registrati sul server di configurazione anziché nel Management Studio di ciascun utente rappresenta un enorme vantaggio.

Un'altra interessante funzionalità di gestione è rappresentata dall'agente di raccolta dati. Gli amministratori di database hanno in genere la necessità di raccogliere i dati di gestione da numerosi server; pertanto, molti di questi DBA hanno creato una soluzione personalizzata per l'esecuzione di questa attività. L'agente di raccolta dati è un meccanismo incorporato che semplifica l'attività di raccolta dei dati correlati alla gestione. Consente di utilizzare SQL Server Agent e SQL Server Integration Services (SSIS) per creare un framework che raccoglie e archivia i dati, fornendo al tempo stesso gestione di errori, controllo e cronologia dei dati raccolti.

A differenza degli strumenti di terze parti e dei processi personalizzati, l'agente di raccolta dati sarà compreso con facilità dalla maggior parte degli amministratori di database, in quanto prevede l'utilizzo di SQL Server Agent e SSIS per creare un insieme di processi e pacchetti per la gestione delle connessioni, della raccolta e dell'archiviazione dei dati, come illustrato nella Figura 2. Una volta archiviati i dati in una posizione centrale, definita warehouse di gestione, è possibile visualizzarli e classificarli tramite un insieme di istruzioni T-SQL e i report di Reporting Services di SQL Server 2008. Questo archivio di dati centrale semplifica notevolmente l'analisi e la visualizzazione delle metriche di gestione globali dell'ambiente di database.

Figura 2 File di log relativo all'utilizzo del disco dell'agente di raccolta dati

Figura 2** File di log relativo all'utilizzo del disco dell'agente di raccolta dati **(Fare clic sull'immagine per ingrandirla)

Novità per la scalabilità

Nel corso degli anni, gli amministratori di database di SQL Server hanno assistito a un costante aumento delle dimensioni dei relativi ambienti di database. Questo aumento delle dimensioni dell'ambiente di database implica la necessità di utilizzare nuovi metodi e strumenti per raggiungere il livello di scalabilità richiesto dalla maggior parte delle aziende. SQL Server 2008 ha introdotto diverse nuove e utili funzionalità.

SQL Server 2008 dispone di una funzionalità di compressione incorporata che consente di comprimere i file di database e i file di log delle transazioni associati al database compresso. Con SQL Server 2005 è stata introdotta la capacità di comprimere i dati su un file di sola lettura o un filegroup, ma questa forma di compressione prevedeva semplicemente l'utilizzo della funzionalità di compressione di Windows® NTFS. SQL Server 2008 ora offre la funzionalità di compressione a livello di riga e a livello di pagina, fornendo vantaggi che non è possibile ottenere con la compressione a livello di file di dati.

La compressione a livello di riga e di pagina consente di ridurre la quantità di spazio di archiviazione dei dati e la quantità di memoria necessarie, in quanto i dati restano compressi mentre sono in memoria. I dati compressi in memoria determinano un maggiore utilizzo della memoria, il che garantisce un miglioramento della scalabilità di molti sistemi.

SQL Server 2008 introduce inoltre la compressione a livello di backup. Sebbene i backup dei database prevedano solo il backup della parte attiva del database, questo comporta comunque la necessità di utilizzare centinaia di gigabyte o persino decine di terabyte. Negli ambienti di database che prevedono più copie di un file di backup di svariati terabyte, questi backup in genere occupano una quantità preziosa di spazio di archiviazione che potrebbe essere utilizzato in modo più efficiente. Consentendo agli amministratori di database di comprimere i relativi file di backup, SQL Server 2008 libera parte di questo spazio, che può essere quindi utilizzato per i dati attivi.

Un'altra interessante funzionalità è rappresentata da Resource Governor. Questa nuova funzionalità consente di definire la quantità di risorse che può essere utilizzata da un singolo o da diversi carichi di lavoro durante l'esecuzione. Con Resource Governor, è possibile creare un ambiente in cui diversi carichi di lavoro coesistono su un singolo server, senza il timore che questi carichi di lavoro possano sopraffare il server e ridurre le prestazioni degli altri carichi di lavoro.

Il vantaggio di questa funzionalità è rappresentato dalla possibilità di utilizzare in modo più efficace la quantità totale di risorse disponibili sui server di database. Nella Figura 3 viene illustrato un esempio di utilizzo della funzionalità Resource Governor per limitare l'attività su un server.

Figure 3 Limitazione dell'attività con Resource Governor

USE master
go

--Drop function
IF OBJECT_ID('rgclassifier_demo','Function') IS NOT NULL
DROP FUNCTION rgclassifier_demo
go

--Create a classifier function for report group
CREATE FUNCTION rgclassifier_demo() RETURNS SYSNAME 
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @group_name AS SYSNAME
  IF (USER_NAME() LIKE '%Launch_Demo%')
         SET @group_name = 'demogroup'
    RETURN @group_name
END
GO

--Drop workload group for anything coming from Management Studio
IF EXISTS (SELECT name FROM sys.resource_governor_workload_groups 
  WHERE name = 'demogroup')
BEGIN
  DROP WORKLOAD GROUP demogroup
END
GO

--Create workload group
CREATE WORKLOAD GROUP demogroup
GO

--Register the classifier function with 
--Resource Governor
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.rgclassifier_demo)
GO

--Alter the dbogroup workload group to only 
--allow 10% of CPU for each workload request 
ALTER WORKLOAD GROUP demogroup
WITH (REQUEST_MAX_CPU_TIME_SEC = 10)
GO

--Create a new resource pool and set a maximum CPU limit for all workloads.
IF EXISTS (SELECT name FROM sys.resource_governor_resource_pools
  WHERE name = 'pooldemo')
DROP RESOURCE POOL pooldemo
GO
  
CREATE RESOURCE POOL pooldemo
WITH (MAX_CPU_PERCENT = 40)
GO

--Configure the workload group so it uses the 
--new resource pool. 
ALTER WORKLOAD GROUP demogroup
USING pooldemo
GO

--Apply the changes to the Resource Governor
--in-memory configuration.
ALTER RESOURCE GOVERNOR RECONFIGURE
GO

Novità per le prestazioni

Le prestazioni generali dei database risultano migliorate con SQL Server 2008. Grazie a diverse nuove funzionalità disponibili in SQL Server 2008, è possibile controllare e monitorare le prestazioni dei database e le applicazioni eseguite su di essi.

In situazioni in cui ogni secondo viene eseguito un numero elevato di transazioni, il blocco che in genere si verifica durante queste transazioni può avere un impatto negativo sulle prestazioni delle applicazioni di database. SQL Server è progettato per ridurre il numero totale di blocchi che un processo mantiene effettuando l'escalation dai blocchi a livello di riga e a livello di pagina di piccole dimensioni ai blocchi a livello di tabella di grandi dimensioni. Tuttavia, è importante comprendere che questa escalation di blocchi può causare problemi. Ad esempio, una singola transazione può bloccare un'intera tabella e impedire che la tabella venga utilizzata da altre transazioni.

SQL Server 2008 prevede l'utilizzo del meccanismo di partizionamento delle tabelle, introdotto in SQL Server 2005, per consentire che il motore di SQL Server esegua l'escalation dei blocchi prima a livello di partizione e successivamente a livello di tabella. Questo livello intermedio di blocco può ridurre in modo significativo gli effetti dell'escalation dei blocchi sui sistemi che devono elaborare centinaia di migliaia di transazioni al secondo.

SQL Server 2008 offre diversi nuovi miglioramenti al processore delle query per le situazioni in cui la query interagisce con le tabelle partizionate. Query Optimizer ora è in grado di eseguire ricerche tramite query sulle partizioni allo stesso modo in cui vengono eseguite nei singoli indici, utilizzando solo l'ID di partizione anziché il meccanismo di partizionamento a livello di tabella.

Novità per la disponibilità elevata

In conseguenza dell'aumento della complessità degli ambienti di database e dell'incremento delle dimensioni dei database, è sempre più difficile garantire la disponibilità dei database. I noti meccanismi utilizzati in passato per ottenere un livello elevato di disponibilità sono ancora presenti in SQL Server 2008. Tuttavia, alcune di queste funzionalità sono state migliorate in SQL Server 2008 e ne sono state aggiunte altre.

Con SQL Server 2005, per ottenere la disponibilità elevata, molti amministratori hanno iniziato a implementare il mirroring del database. SQL Server 2008 offre numerosi miglioramenti per l'attività di mirroring del database. Ad esempio, in passato, il mirroring del database presentava occasionalmente problemi di prestazioni correlati al trasferimento dei dati del log delle transazioni dal database principale al database con mirroring. In risposta, SQL Server 2008 ora consente di ridurre la quantità di informazioni trasferite in rete dal log delle transazioni del database principale al log delle transazioni del mirror comprimendo le informazioni prima di inviarle al log delle transazioni del database mirror per la protezione avanzata.

Ora è possibile ripristinare le pagine di dati danneggiate sul database principale. Se un database principale presenta pagine di dati danneggiate a causa degli errori 823 e 824, il database principale può richiedere una copia aggiornata di tali pagine ai server con mirroring. Questa richiesta di pagine di dati aggiornate è un processo automatico che avviene in modo trasparente per qualsiasi utente che acceda ai database principali.

Un'altra nuova funzionalità, l'aggiunta di CPU a caldo, consente di aggiungere ulteriori CPU a un server di database senza influire sulla disponibilità dei database che risiedono su tale server. Tuttavia, tenere presente che l'aggiunta di CPU a caldo presenta alcune limitazioni, in quanto è utile solo quando si esegue Windows Server® 2008 Enterprise Edition o Datacenter Edition per sistemi basati su Itanium a 64 bit e richiede l'utilizzo di SQL Server 2008 Enterprise Edition.

Novità per la sicurezza

Con SQL Server 2005 è stato introdotto il supporto per la crittografia dei dati a garanzia della sicurezza dei dati. Con SQL Server 2008, la crittografia è stata notevolmente migliorata con l'introduzione di due funzionalità: Extensible Key Management e Transparent Data Encryption.

Extensible Key Management offre una struttura avanzata per archiviare in sicurezza le chiavi utilizzate nell'infrastruttura di crittografia, non solo all'interno del database ma anche all'esterno del database nei moduli software di terze parti o con un modulo di sicurezza hardware.

Transparent Data Encryption offre maggiore flessibilità per la crittografia dei dati facendo sì che la crittografia sia una proprietà del database e non solo il risultato di funzioni in una riga di codice. Ne consegue che gli amministratori non devono effettuare le numerose modifiche necessarie per la struttura del database e il codice dell'applicazione quando eseguono la crittografia a livello di dati. Nel codice nella Figura 4 viene illustrato come crittografare un database con Transparent Data Encryption.

Figure 4 Utilizzo di Transparent Data Encryption

USE master;
GO

--Create a master key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YouWillNeedToCreateAStrongPassword';
GO

--Create a certificate to use with TDE
CREATE CERTIFICATE TDECERT WITH SUBJECT = 'TDECert'
GO

--Change to the database to encrypt
USE AdventureWorks
GO

--Create your database master key
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128 --Use a strong algorithm
ENCRYPTION BY SERVER CERTIFICATE TDECERT
GO

--Alter the database to encrypt it with the
--master database key
ALTER DATABASE AdventureWorks
SET ENCRYPTION ON
GO

Novità relative agli sviluppatori

Gli amministratori di database non sono i soli a usufruire direttamente dei vantaggi delle modifiche introdotte in SQL Server 2008. Sono infatti disponibili numerose nuove funzionalità progettate per semplificare il lavoro degli sviluppatori di database. Queste funzionalità spaziano dai nuovi miglioramenti alle istruzioni T-SQL ai nuovi componenti che consentono agli sviluppatori di semplificare le attività di creazione e utilizzo delle query di database.

Molti sviluppatori di database sono responsabili della creazione delle query necessarie per restituire i dati richiesti per le relative applicazioni. Probabilmente, si conosce già lo strumento LINQ (Language Integrated Query), che consente agli sviluppatori di database di eseguire query su un database mediante un linguaggio di programmazione basato su Microsoft® .NET anziché utilizzare le normali istruzioni T-SQL. In SQL Server 2008 lo strumento LINQ è stato migliorato, in quanto viene fornito un nuovo provider LINQ to SQL che consente agli sviluppatori di database di eseguire i comandi LINQ direttamente su tabelle e colonne SQL Server. Questo consente di ridurre la quantità di tempo necessaria per creare nuove query di dati.

Quando eseguono lo sviluppo a fronte di database, gli sviluppatori utilizzano oggetti di livello più elevato che vengono mappati alle singole tabelle e colonne del database. Questi oggetti, noti anche come entità, rappresentano i dati necessari per le applicazioni di database e, pertanto, lo sviluppatore non ha la necessità di comprendere la struttura di archiviazione effettiva dei dati e dello schema del database. La nuova funzionalità Entity Framework di ADO.NET ora consente agli sviluppatori di creare le query di database utilizzando queste entità. L'astrazione della struttura di database sottostante consente di incrementare la produttività degli sviluppatori.

Con SQL Server 2008 numerosi miglioramenti sono stati apportati alle istruzioni T-SQL, che garantiscono una maggiore efficienza degli sviluppatori di database. Un esempio è rappresentato dall'istruzione MERGE, che consente allo sviluppatore di controllare l'esistenza di dati prima di tentare di inserire i dati. Questa verifica prima dell'esecuzione dell'istruzione INSERT consente di aggiornare i dati. Non è più necessario creare join complessi per aggiornare i dati esistenti e per inserire nuovi dati; ora si ha la possibilità di eseguire queste attività con un'unica istruzione.

Inoltre, la separazione dei dati relativi a data e ora dal tipo di dati combinato di data/ora è stata semplificata. In SQL Server 2008 sono stati introdotti due tipi di dati separati per la gestione dei dati relativi a data e ora. L'introduzione di diversi tipi di dati garantirà un miglioramento in termini di prestazioni delle query, in quanto non sarà più necessario eseguire un'operazione sui dati prima che possano essere utilizzati nella query.

Quando si creano nuove strutture di database, gli sviluppatori di database si trovano spesso nella necessità di estendere la struttura dei database al fine di implementare le applicazioni di mapping. SQL Server 2008 consente di risolvere questo problema con nuovi tipi di dati spaziali. I due tipi di dati spaziali, GEOGRAPHY e GEOMETRY, consentono agli sviluppatori di archiviare i dati specifici delle posizioni direttamente nel database senza dover suddividere questi elementi di dati in formati adatti ad altri tipi di dati standard. Il codice nella Figura 5 è un esempio di semplice tabella spaziale.

Figure 5 Una semplice tabella spaziale

IF OBJECT_ID ( 'Demo_SpatialTable', 'Table' ) IS NOT NULL 
    DROP TABLE Demo_SpatialTable
GO

--Create table to hold spatial data
CREATE TABLE Demo_SpatialTable 
    ( SpatialID int IDENTITY (1,1),
    SpatialInputCol geography, 
    SpatialOutputCol AS SpatialInputCol.STAsText() )
GO

--Insert data into table
INSERT INTO Demo_SpatialTable (SpatialInputCol)
VALUES (geography::STGeomFromText('LINESTRING(47.656 -122.360, 47.656 -122.343)', 4326));

INSERT INTO Demo_SpatialTable (SpatialInputCol)
VALUES (geography::STGeomFromText('POLYGON((47.653 -122.358, 47.649 -122.348, 47.658 -122.348, 47.658 -122.358, 47.653 -122.358))', 4326));
GO

--View data to see that data has been converted and stored in col2
SELECT * FROM Demo_SpatialTable

Un problema molto comune per gli sviluppatori di database in passato riguardava le modalità di archiviazione e di utilizzo di oggetti binari di grandi dimensioni, come documenti e file multimediali. Il metodo in genere utilizzato prevedeva l'archiviazione dei file all'esterno del database e l'archiviazione di un puntatore del database nel file esterno. Con questo metodo, tuttavia, quando si spostano il file, occorre ricordarsi di aggiornare anche il puntatore.

In SQL Server 2008 questo problema viene gestito con il nuovo tipo di dati FILESTREAM. Con questo tipo di dati, i file possono essere comunque archiviati all'esterno del database, ma, per garantire la coerenza delle transazioni, i dati vengono considerati parte del database. Questo consente l'utilizzo di operazioni di file comuni, mantenendo nello stesso tempo i vantaggi del database in termini di prestazioni e sicurezza.

Novità per le funzionalità di Business Intelligence

Il maggior utilizzo di SQL Server negli ultimi anni è stato guidato in larga parte dall'adozione delle strategie di Business Intelligence. Le strategie di Business Intelligence non sono una novità in SQL Server, ma SQL Server 2008 introduce nuove funzionalità.

Ad esempio, quando i dati vengono archiviati in data warehouse, gran parte dello spazio viene in genere sprecata a causa dei valori NULL. Le colonne in cui vengono archiviati i valori NULL occupano lo spazio delle massime dimensioni di dati consentite definite nella colonna. Ne consegue che una colonna con migliaia di valori NULL può utilizzare effettivamente molti MB di spazio senza archiviare alcun dato.

Con SQL Server 2008 vengono introdotte le colonne di tipo sparse, il che consente di archiviare i valori NULL senza occupare lo spazio fisico sul disco. Poiché le colonne di tipo sparse non prevedono l'utilizzo dello spazio effettivo, le tabelle contenenti tali colonne possono superare il limite di 1.024 colonne.

Con SQL Server 2008 viene introdotto inoltre un nuovo meccanismo, Change Data Capture, per la gestione di modifiche incrementali che devono essere caricate nel data warehouse. Questo consente di acquisire e posizionare i dati modificati in un insieme di tabelle di modifiche. L'acquisizione di dati aggiornati, eliminati e inseriti in uno schema di archiviazione di facile utilizzo consente il caricamento incrementale dei data warehouse da tali tabelle, eliminando la necessità di creare istruzioni di inserimento personalizzate per determinare le modifiche apportate alle righe di dati esistenti prima di aggiornare il data warehouse.

Conclusioni

In questo articolo è stata presentata solo una breve panoramica delle novità introdotte in SQL Server 2008. SQL Server 2008 fornisce un'ampia gamma di nuove funzionalità e una serie di aggiornamenti alle funzionalità esistenti che promettono una vita più facile per gli amministratori e gli sviluppatori di database. In definitiva, SQL Server 2008 offrirà prestazioni e scalabilità notevolmente migliorate per i database attuali sempre più esigenti.

Randy Dyess è mentore presso Solid Quality Mentors ed è specializzato nei sistemi OLTP di SQL Server. Randy è autore di TransactSQL Language Reference Guide, coautore di MCTS Self-Paced Training Kit: Microsoft SQL Server 2005 Implementation and Maintenance (Exam 70-431) e ha scritto numerosi articoli di riviste e newsletter. Randy è inoltre Program Director per il gruppo SQL Server Users nel Texas del Nord ed è un MVP di SQL Server. È possibile consultare il suo blog all'indirizzo blogs.solidq.com/EN/rdyess/default.aspx.

© 2008 Microsoft Corporation e CMP Media, LLC. Tutti i diritti riservati. È vietata la riproduzione completa o parziale senza autorizzazione.