Histoire d’index : Importance du choix d’un index cluster avec SQL Server

Le choix d’un index cluster est important pour une table de données. Des bonnes pratiques existent et permettent d’orienter ce choix. Dans ce billet je tenterais d’en expliquer la raison tout en expliquant le fonctionnement interne de ces index et les conséquences d’une mauvaise stratégie de ce type d’indexation. Je ne prétends pas donner la liste exhaustive des bonnes pratiques sur ce point mais d’en donner une première analyse :-)

Lire la suite

Auditer l’espace physique et utile de l’ensemble des fichiers d’une base de données

Une des tâches d’un administrateur de bases de données consiste à surveiller la taille des données dans un fichier d’une ou plusieurs bases de données. Un fichier de données dimensionné pour une durée d’exploitation conséquente contient de l’espace inutilisé. Dans ce cas là comment surveiller l’évolution des données à l’intérieur de ce fichier ? Un script proposé par Elsuket permet de surveiller les fichiers d’une base de données en particulier. Le code qui suit est une évolution du précédent : vous pouvez auditer l’ensemble des fichiers d’une base de données.

Lire la suite

Connaître les types de pages gérées par SQL Server

Pour bien commencer cette nouvelle 2010, j’ai envie de commencer par un billet concernant les types de pages que l’on peut rencontrer sur SQL Server. Depuis quelques temps, je m’intéresse beaucoup au fonctionnement interne de SQL Server. Etant amateur de voiture, je ferais une brève analogie. Il n’est pas indispensable de connaître en détail le fonctionnement d’une voiture pour pouvoir la conduire. Cependant si vous êtes passionné ou tout simplement curieux, vous aurez envie un jour ou l’autre de soulever le capot… Il en va de même pour SQL Server. Administrer SQL Server ne demande pas de connaître précisément le comportement interne du moteur. Cependant « maîtriser » le fonctionnement des processus internes du moteur ne peut qu’aider dans la maîtrise et le perfectionnement dans l’administration et la conception des bases de données avec SQL Server. J’en suis intimement convaincu. Dans ce billet je commencerais par aborder le thème suivant : Les types de pages que gèrent SQL Server. Nous verrons par la même occasion les différentes commandes permettant d’en visualiser le détail des pages comme DBCC PAGE, DBCC IND ou DBCC EXTENTINFO .

Lire la suite

Comprendre le fonctionnement des snapshots avec SQL Server

Il est possible depuis SQL Server 2005 de créer des captures instantanées de base de données. Cependant je me suis aperçu que cette fonctionnalité était plutôt méconnue. Dans ce billet, j’essaierais d’expliquer au mieux le fonctionnent des captures instantanées et d’exposer les avantages et les inconvénients quant à leur utilisation.

Lire la suite

Fonctionnement et utilisation des options de boot /3GB et /PAE avec SQL Server

Après avoir effectué des audits sur 2 serveurs de bases de données chez mon client, j’ai constaté qu’il y avait quelques confusions concernant les options bien connus /3GB et /PAE qui permettent d’étendre la mémoire vue et utilisée par le système d’exploitation et les applications. Les questions qui reviennent souvent sont les suivantes : Quand utiliser l’option /3GB ? Quand utiliser l’option /PAE ? Peux t’on utiliser les 2 options en même temps ? Nous allons y répondre .

Lire la suite

SQL Server 2008, transtypage de date et optimiseur de requête

Avant SQL Server 2008, écrire une requête comportant un prédicat sur une date bien précise sans notion d’heures était plutôt fastidieux pour des requêtes sur des dates de transactions de stock par exemple où l’on désire un résultat à la journée . (Je prends l’exemple simple WHERE date =  ‘20091001’). Dans ce cas là il fallait procéder à une transformation de la colonne de type DATETIME. Cependant, le nettoyage ou suppression des heures de cette colonne pouvait poser un inconvénient majeur car cela nécessitait un transtypage (je pense aux fonctions CAST et FLOOR qui donnent le résultat 20090101 00:00:00 par exemple). Hors le seul fait de transtyper une valeur de colonne empêche l’optimiseur de  requêtes d’utiliser un index associé à cette même colonne. Cela obligeait par conséquent à écrire cette même requête avec un prédicat de date par intervalles (avec BETWEEN date AND date .).

Lire la suite

Recréer un mappage rompu entre un compte de connexion SQL Server avec l’authentifcation Windows et un utilisateur de bases de données

Vous avez déjà sans doute eu le cas où un administrateur système par mégarde, a supprimé un compte Windows utilisé par votre serveur SQL et qui est mappé à un ou plusieurs utilisateurs de vos bases de données . Vous avez sans doute maudit ce pauvre et malchanceux administrateur système car le problème dans ce cas est que le nouveau compte Windows recréé avec les mêmes paramètres ne possèdent pas le même SID et que le mappage avec les différents utilisateurs de bases de données existants est rompu. La question évidente ici est comment allons nous faire pour pouvoir revenir à une situation normale ?

Lire la suite

Comprendre les enregistrements fantômes (Ghost records) avec SQL Server

En utilisant la vue dynamique système sys.dm_db_index_physical_stats, vous avez sans doute remarqué la présence d’une colonne ghost_record_count que je traduirais par nombre d’enregistrement fantômes. Cette colonne est incrémentée à chaque fois qu’un enregistrement est supprimé d’une table comportant au moins un index.

Lire la suite

Database Tuning Advisor (DTA) et ses limites d’utilisation

Vous avez sans doute, comme moi, utilisé l’outil de performance livré depuis la version 2005 de SQL Server et qui se nomme DTA (Database Tuning Advisor). Chez mon client actuel qui possède une base de données volumineuse en nombre d’objets (environ 15 000 entre les tables, les vues, les index et les statistiques) nous avons rencontré un problème quant à l’utilisation de cet outil en mode console.

Lire la suite

Alertes SQL Server et WMI

Dans le cadre de la gestion des incidents et de la gestion de la capacité d’un service informatique, il peut être intéressant de définir des alertes de fonctionnement de SQL Server et de son environnement pour anticiper d’éventuels problèmes de fonctionnement. En effet, rien n’est plus désagréable pour une équipe de production par exemple d’être mis au courant par un utilisateur qu’un de ses serveurs est en panne ou que le système d’information ne fonctionne pas. La qualité de service de cette équipe s’en retrouverait affectée.

Lire la suite