SQL Server 2008

Nouveautés

Randy Dyess

 

Vue d'ensemble:

  • Gestion plus puissante
  • Performances et évolutivité améliorées
  • Sécurité et disponibilité renforcées
  • Changements pour les développeurs

Microsoft a donc publié une nouvelle version de SQL Server qui promet de faire la joie des administrateurs de base de données. La dernière version est SQL Server 2008. Elle offre une grande variété de nouvelles

fonctionnalités qui faciliteront énormément les tâches administratives.

Les administrateurs de base de données qui sont familiers avec SQL Server® 2005 reconnaîtront plusieurs des fonctionnalités qu'ils utilisent dans leurs tâches quotidiennes, mais ils ne tarderont pas aussi à découvrir que ces outils familiers ont été améliorés dans SQL Server 2008. Les nouvelles fonctionnalités réduiront considérablement le nombre de solutions de contournement ou de personnalisation auxquelles il fallait faire appel pour utiliser diverses fonctionnalités dans les environnements de base de données complexes.

Les nouvelles fonctionnalités de SQL Server 2008 impliquent toute une gamme de rôles liés aux bases de données, ce qui les rend difficiles à classer. En classant les fonctionnalités par catégorie, je me rends compte que certains lecteurs se demanderont pourquoi j'ai placé la Fonctionnalité X sous la Catégorie Y alors qu'elle appartient clairement à la Catégorie Z. C'est une question de perspective, qui dépend également de la manière dont fonctionne votre entreprise.

Je sais que les administrateurs de bases de données se prennent souvent à effectuer d'autres tâches et à jouer d'autres rôles, mais j'essaierai de classer les nouvelles fonctionnalités dans les catégories génériques suivantes : gestion, évolutivité, performances, haute disponibilité, sécurité, développement et analyse décisionnelle.

Quoi de neuf dans la gestion ?

Pour les administrateurs de base de données (comme moi), la fonctionnalité de gestion supplémentaire fait de SQL Server 2008 un produit très intéressant. La nouvelle gestion de stratégies, la possibilité d'interroger plusieurs serveurs, les serveurs de configuration et le collecteur de données/entrepôt de gestion de données sont des fonctionnalités extrêmement utiles pour les administrateurs de base de données qui sont souvent responsables de la gestion d'environnements de bases de données aussi larges que complexes, avec souvent des centaines ou des milliers de bases de données et des dizaines ou même des centaines de serveurs.

La fonctionnalité de gestion de stratégies de SQL Server 2008, qui s'appelait DMF (Declarative Management Framework) dans les CTP (Community Technology Preview), vous permet de créer et exécuter des stratégies de configuration par rapport à un ou plusieurs serveurs bases de données. Ces stratégies vous permettent de veiller à ce que des paramètres de configuration standard soient appliqués et maintenus sur chacun des serveurs et des bases de données ciblés. Vous pouvez voir un exemple de cette fonctionnalité dans la figure 1.

Figure 1 Méthode recommandée pour l'emplacement des fichiers de données et des fichiers journaux

Figure 1** Méthode recommandée pour l'emplacement des fichiers de données et des fichiers journaux **(Cliquer sur l'image pour l'agrandir)

Les stratégies sont créées à partir d'une série de facettes prédéfinies. Chaque facette contient un sous-groupe de paramètres de configuration SQL Server 2008 et d'autres événements que vous pouvez contrôler. Vous associez ces facettes à des conditions afin de créer une stratégie. Les conditions sont les valeurs autorisées pour les propriétés d'une facette, les paramètres de configuration ou d'autres événements se trouvant dans cette facette.

Les conditions sont également des valeurs qui sont utilisées pour les filtres de stratégies. Supposons que vous souhaitiez que la stratégie soit exécutée seulement par rapport à une base de données précise. Dans ce cas, vous pouvez créer une condition renfermant le nom de la base de données et l'ajouter à la stratégie. Celle-ci ne s'appliquera désormais qu'à cette base de données. La gestion de stratégies de SQL Server 2008 peut sembler complexe, mais une fois que vous l'aurez essayée, vous vous rendrez compte qu'elle est très intuitive.

Les nouvelles capacités d'interaction et de configuration multiserveurs sont très utiles lorsque vous avez besoin d'exécuter des requêtes sur plusieurs serveurs en même temps. Vous pouvez enregistrer des serveurs dans Management Studio puis les classer sous un groupe. Lorsque vous avez besoin d'exécuter une stratégie ou une requête par rapport à tous les serveurs de ce groupe, il vous suffit de cliquer avec le bouton droit sur le groupe et le tour est joué.

Autre avantage, vous pouvez configurer cette fonctionnalité pour qu'elle renvoie un jeu de résultats par serveur ou qu'elle regroupe tout le jeu de résultats dans un seul grand jeu de résultats. Vous pouvez également spécifier si vous voulez que les noms des serveurs et bases de données fassent partie des résultats afin de pouvoir séparer les résultats individuels de chaque serveur. La possibilité d'enregistrer les serveurs enregistrés sur le serveur de configuration plutôt que dans chaque Management Studio est un grand avantage.

Le collecteur de données est une autre fonctionnalité de gestion que vous trouverez très utile. Les administrateurs de bases de données ont souvent besoin de recueillir des données de gestion de plusieurs serveurs, et bon nombre d'entre eux ont créé leur propre solution personnalisée pour effectuer cette opération. Le collecteur de données est un mécanisme intégré qui facilite la tâche consistant à recueillir des données de gestion. Il vous permet d'utiliser l'Agent SQL Server et les services SSIS (SQL Server Integration Services) pour créer une infrastructure qui recueille et enregistre vos données tout en vous proposant un historique de gestion d'erreurs, d'audit et de collecte de données.

Contrairement aux outils tiers et aux tâches personnalisées, le collecteur de données sera facilement maîtrisé par la plupart des administrateurs de bases de données puisqu'il utilise l'Agent SQL Server et SSIS pour créer une série de tâches et de packages servant à contrôler les connexions, la collecte et le stockage de données (comme l'illustre la figure 2). Une fois ces données enregistrées dans un emplacement central généralement appelé Entrepôt de gestion, elles peuvent être affichées et organisées par le biais d'une série d'instructions T-SQL et de rapports SQL Server 2008 Reporting Services. Ce magasin de données central facilite énormément l'analyse et l'affichage des métriques de gestion générale de l'environnement des bases de données.

Figure 2 Fichier journal d'utilisation de disque du collecteur de données

Figure 2** Fichier journal d'utilisation de disque du collecteur de données **(Cliquer sur l'image pour l'agrandir)

Quoi de neuf dans l'évolutivité ?

Avec le temps, les administrateurs de bases de données SQL Server ont vu leur environnement de bases de données devenir de plus en plus grand. À mesure que la taille de votre environnement de bases de données augmente, il vous faut de nouvelles méthodes et de nouveaux outils pour atteindre le niveau d'évolutivité que beaucoup d'entreprises requièrent. À cet effet, SQL Server 2008 a introduit plusieurs fonctionnalités utiles.

SQL Server 2008 est doté d'une fonctionnalité de compression intégrée qui vous permettra de compresser les fichiers de base de données et les fichiers journaux de transactions associés à la base de données compressée. SQL Server 2005 avait introduit la capacité de compresser des données sur un fichier ou un groupe de fichiers en lecture seule, mais cette forme de compression utilisait simplement la capacité de compression de Windows® NTFS. Avec SQL Server 2008, vous obtenez désormais une compression au niveau des lignes et des pages, ce qui vous donne des avantages que vous n'obtenez pas avec la compression au niveau des fichiers de données.

La compression au niveau des lignes et pages réduit la quantité d'espace de données nécessaire, tout en limitant également la quantité de mémoire nécessaire puisque les données demeurent compressées tant qu'elles sont en mémoire. Les données compressées en mémoire entraînent une utilisation de mémoire accrue, ce qui améliore l'évolutivité de nombreux systèmes.

SQL Server 2008 introduit également la compression au niveau de la sauvegarde. Bien que les sauvegardes de base de données n'enregistrent que la portion active de la base de données, elles représentent quand même des centaines de gigaoctets ou même des dizaines de téraoctets. Dans les environnements de bases de données qui possèdent plus d'une copie d'un fichier de sauvegarde de plusieurs téraoctets, l'espace de stockage pourrait être utilisé de manière plus efficace. En permettant aux administrateurs de bases de données de compresser leurs fichiers de sauvegarde, SQL Server 2008 libère une partie de cet espace qui peut ainsi être utilisé pour les données actives.

Nous arrivons à présent au gouverneur de ressources. Cette nouvelle fonctionnalité vous permet de définir les quantités de ressources que les groupes de charges de travail sont autorisés à utiliser pendant l'exécution. Avec le gouverneur de ressources, vous pouvez créer un environnement dans lequel différentes charges de travail coexistent sur un serveur sans avoir à craindre qu'une ou deux de ces charges ne submergent ce dernier, ce qui réduirait les performances des autres charges de travail.

L'avantage de cette fonctionnalité est que vous pouvez utiliser de manière plus efficace la quantité totale des ressources disponibles sur vos serveurs de bases de données. La figure 3 montre l'utilisation du gouverneur de ressources pour limiter l'activité sur un serveur.

Figure 3 Réduisez l'activité avec le gouverneur de ressources

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

Quoi de neuf dans les performances ?

Les performances générales des bases de données sont améliorées avec SQL Server 2008. Grâce à plusieurs nouvelles fonctionnalités de SQL Server 2008, vous pouvez contrôler et surveiller les performances de vos bases de données et les applications qui s'exécutent sur elles.

Lorsque de nombreuses transactions sont exécutées toutes les secondes, le verrouillage qui survient normalement durant ces transactions peut avoir un impact négatif sur les performances de vos applications de bases de données. SQL Server est conçu pour réduire le nombre total de verrous tenus par un processus en les escaladant des plus petits verrous de niveaux de ligne et de pages aux grands verrous de niveau de table. Il est toutefois important de savoir que cette escalade de verrous peut causer des problèmes. Par exemple, une seule transaction peut verrouiller une table entière et empêcher d'autres transactions de fonctionner avec cette table.

SQL Server 2008 fonctionne avec le mécanisme de partitionnement de table (qui a été introduit dans SQL Server 2005) pour permettre au moteur de SQL Server d'escalader les verrous au niveau des partitions avant de les faire passer au niveau des tables. Ce niveau de verrouillage intermédiaire peut réduire de façon spectaculaire les effets d'escalade de verrous sur les systèmes qui traitent des centaines et des milliers de transactions par seconde.

SQL Server 2008 apportent plusieurs améliorations au processeur de requêtes qui s'avèrent particulièrement utiles lorsque la requête interagit avec des tables partitionnées. L'optimiseur de requête peut désormais exécuter des recherches de requêtes par rapport aux partitions comme il le fait par rapport aux index individuels en utilisant seulement l'ID de partition et non pas le mécanisme de partitionnement au niveau des tables.

Quoi de neuf dans la haute disponibilité ?

À mesure que les environnements de bases de données deviennent plus complexes et que la taille des bases de données augmente, la capacité à assurer la disponibilité de ces bases de données devient de plus en plus difficile. Les fonctionnalités familières que vous avez utilisées par le passé pour atteindre une haute disponibilité sont toujours présentes dans SQL Server 2008. Mais certaines de ces fonctionnalités ont été améliorées dans SQL Server 2008 et d'autres ont été ajoutées.

Avec SQL Server 2005, beaucoup d'administrateurs ont commencé à implémenter la mise en miroir de bases de données pour atteindre une haute disponibilité. SQL Server 2008 offre de nombreuses améliorations pour les opérations de mise en miroir des bases de données. Par le passé, par exemple, la mise en miroir des bases de données était parfois sujette à des problèmes de performances liés au déplacement des données de journaux de transactions des bases de données principales aux bases de données miroir. En réponse à ce problème, SQL Server 2008 réduit désormais la quantité d'informations qui est déplacée sur le réseau du journal des transactions de la base de données principale au journal des transactions de la base de données miroir en compressant ces information avant de les envoyer au journal des transactions du miroir pour être renforcées.

Vous avez à présent la capacité de réparer des pages de données corrompues sur la base de données principale. Si une base de données principale connaît une corruption des pages de données provoquée par les erreurs 823 et 824, la base de données principale peut demander une nouvelle copie de ces pages de données aux serveurs miroir. Cette requête de bonnes pages de données est un processus automatisé qui est transparent pour n'importe quel utilisateur qui accède actuellement aux bases de données principales.

Une autre nouvelle fonctionnalité, l'Ajout d'un processeur à chaud, vous permet d'ajouter des processeurs à un serveur de bases de données sans affecter la disponibilité des bases de données résidant sur ce serveur. Cependant, vous devez savoir que l'ajout de processeur à chaud comporte des restrictions car elle n'est utile que lorsque vous exécutez Windows Server® 2008 Enterprise Edition ou Datacenter Edition pour les systèmes Itanium de 64 bits et il nécessite l'édition Enterprise de SQL Server 2008.

Quoi de neuf dans la sécurité ?

SQL Server 2005 a introduit la sécurité des données sous forme de chiffrement de données. Dans SQL Server 2008, le chiffrement est considérablement amélioré avec l'introduction de deux fonctionnalités : la gestion des clés extensible et le chiffrement de données transparent.

La gestion des clés extensible propose une structure améliorée servant à enregistrer en toute sécurité les clés utilisées dans l'infrastructure de chiffrement, non seulement dans la base de données elle-même mais également en dehors de la base de données, dans des modules de logiciels tiers ou avec un module de sécurité physique.

Le chiffrement de données transparent offre une meilleure flexibilité dans le chiffrement des données en permettant au chiffrement d'être une propriété de la base de données et non pas uniquement le résultat de fonctions dans une ligne de code. Il en résulte que les administrateurs n'ont pas à exécuter toutes les modifications requises pour la structure des bases de données et le code d'application lorsqu'ils exécutent le chiffrement au niveau des données. Le code de la figure 4 montre comment chiffrer une base de données avec le chiffrement de données transparent.

Figure 4 Utilisation du chiffrement de données transparent

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

Que deviennent les développeurs dans tout cela ?

Les administrateurs de bases de données ne sont pas les seuls à profiter directement des changements qui ont été apportés à SQL Server 2008. Il existe un certain nombre de nouvelles fonctionnalités qui ont été conçues pour aider les développeurs de bases de données. Parmi ces fonctionnalités, nous citerons les améliorations apportées à T-SQL et de nouveaux composants qui peuvent aider les développeurs à créer et utiliser des requêtes de base de données.

Beaucoup de développeurs de bases de données sont chargés de créer des requêtes servant à renvoyer les données nécessaires à leurs applications. Vous connaissez probablement l'outil LINQ ((Language Integrated Query) qui permet aux développeurs de bases de données de lancer des requêtes par rapport à une base de données en utilisant un langage de programmation de type Microsoft® .NET au lieu des instructions T-SQL normales. SQL Server 2008 a amélioré cet outil en offrant un nouveau fournisseur LINQ to SQL qui permet aux développeurs d'émettre des commandes LINQ directement par rapport aux tables et colonnes SQL Server. Ceci contribue à réduire le temps nécessaire pour créer de nouvelles requêtes de données.

En effectuant des tâches de développement par rapport aux bases de données, les développeurs utilisent des objets de plus haut niveau qu'ils associent aux tables et colonnes de bases de données individuelles. Ces objets, également appelés entités, représentent les données nécessaires aux applications de base de données et le développeur n'a donc pas besoin de comprendre la structure de stockage des données et le schéma de la base de données. Le nouveau ADO.NET Entity Framework permet désormais aux développeurs de créer des requêtes de base de données en utilisant ces entités. L'abstraction de la structure de base de données sous-jacente permet aux développeurs d'être plus productifs.

SQL Server 2008 offre plusieurs améliorations de T-SQL qui permettent aux développeurs de base de données d'être plus efficaces. Une de ces améliorations est la nouvelle instruction MERGE qui permet au développeur de vérifier l'existence de données avant de les insérer. Cette vérification qui s'effectue avant l'exécution de l'instruction INSERT permet aux données d'être mises à jour. Il n'est plus nécessaire de créer des jointures complexes afin de mettre à jour les données qui existent et d'insérer les données qui n'existent pas déjà, le tout lors d'une seule instruction.

En outre, la séparation des données heure/temps du type de données date/heure combiné est rendue plus facile. SQL Server 2008 introduit deux types de données séparés pour traiter les données liées à la date et à l'heure. Différents types de données auront des performances améliorées pour plusieurs requêtes puisqu'il n'y aura plus besoin d'effectuer une opération sur les données avant qu'elles ne puissent être utilisées dans la requête.

Lorsqu'ils créent de nouvelles structures de base de données, les développeurs de base de données ont souvent tendance à élargir la structure des bases de données afin d'implémenter les applications de mappage. SQL Server 2008 aide à résoudre ce problème avec de nouveaux types de données spatiales. Les deux types de données spatiales, GEOGRAPHY et GEOMETRY, permettent aux développeurs d'enregistrer des données spécifiques à un emplacement directement dans la base de données sans avoir à les diviser en formats convenant à d'autres types de données standard. Le code de la figure 5 est un exemple de table spatiale simple.

Figure 5 Une table spatiale simple

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 problème fréquemment rencontré par les développeurs de bases de données par le passé était de savoir comment enregistrer et utiliser les gros objets binaires tels que les documents et les fichiers multimédia. La méthode généralement utilisée était celle qui consistait à enregistrer les fichiers en dehors de la base de données et d'enregistrer seulement un pointeur vers le fichier externe dans la base de données. Avec cette méthode, toutefois, vous ne devez pas oublier de mettre à jour le pointeur lorsque vous déplacez le fichier.

SQL Server 2008 résout ce problème grâce au nouveau type de données FILESTREAM. Avec ce type de données, les fichiers peuvent toujours être enregistrés à l'extérieur de la base de données, mais les données sont considérées comme faisant partie de la base de données pour des raisons de cohérence transactionnelle. Ceci permet d'utiliser les opérations de fichiers courantes tout en maintenant les avantages de performances et de sécurité de la base de données.

Et qu'en est-il de l'analyse décisionnelle ?

L'adoption de stratégies d'analyse décisionnelle a contribué en grande partie à une utilisation accrue de SQL Server durant ces dernières années. Les capacités d'analyse décisionnelle ne constituent pas une nouveauté pour SQL Server, mais SQL Server 2008 propose de nouvelles fonctionnalités pour la table.

Par exemple, l'enregistrement de données dans des entrepôts de données provoque souvent une perte d'espace en raison de la présence de valeurs NULL. Les colonnes qui enregistrent des valeurs NULL occupent l'espace de la plus grande taille des données qui soit autorisée et qui est définie dans la colonne. Cela signifie qu'une colonne comportant des milliers de valeurs NULL peut consommer plusieurs Mo d'espace sans en fait stocker de données.

SQL Server 2008 introduit des colonnes éparses qui permettent d'enregistrer les valeurs NULL sans occuper d'espace physique sur le disque. Parce que les colonnes éparses ne consomment pas d'espace, les tables qui renferment ce type de colonnes peuvent dépasser en fait la limite de 1 024 colonnes.

SQL Server 2008 introduit également une nouvelle fonctionnalité appelée Capture de données modifiées pour gérer les modifications incrémentielles qui doivent être chargées dans l'entrepôt de données. Cette fonctionnalité capture et place les données modifiées dans une série de tables de modification. La capture de données mises à jour, supprimées et insérées dans un schéma de stockage aisément consommé permet de charger de manière incrémentielle des entrepôts de données depuis ces tables, au lieu d'avoir à créer des instructions d'insertion personnalisées qui essaient de deviner les modifications apportées aux lignes de données existantes avant de mettre à jour l'entrepôt de données.

Conclusion

Ceci est un bref aperçu de ce que vous propose SQL Server 2008. Ce dernier apporte toute une gamme d'améliorations et mises à jour des fonctionnalités existantes qui feront la joie des administrateurs et développeurs de base de données. Enfin, il garantit aux bases de données d'aujourd'hui de meilleures performances et une meilleure évolutivité.

Randy Dyess est le mentor de Solid Quality Mentors. Il se spécialise dans les systèmes OLTP SQL Server. Randy est l'auteur de TransactSQL Language Reference Guide (Guide de référence du langage TransactSQL) et le coauteur de MCTS Self-Paced Training Kit: Microsoft SQL Server 2005 Implementation and Maintenance (Kit de formation MCTS : Implémentation et maintenance de Microsoft SQL Server 2005) (Examen 70-431). Il a également écrit de nombreux articles pour divers magazines et revues. Randy est également Directeur de programmes pour le groupe d'utilisateurs SQL Server du nord du Texas et MVP SQL Server. Consultez son blog à l'adresse blogs.solidq.com/EN/rdyess/default.aspx.

© 2008 Microsoft Corporation et CMP Media, LLC. Tous droits réservés. Toute reproduction, totale ou partielle, est interdite sans autorisation préalable.