Ajouter les index manquants pour les clés étrangères

Dans la suite de l’article Index manqants pour les clés étrangères, il convient de prendre en main la liste (éventuellement longue) des clés étrangères listées et de chercher à constituer des index autour de ce besoin. Voici un petit complément à l’article, qui présente un script donnant en plus des instructions de création d’index.

Continuer la lecture

Comment traîter des chaînes de caractères UTF-8 ?

De nombreux articles évoquent le fait que SQL Server ne supporte pas l’encodage UTF-8 mais uniquement l’encodage UTF-16. Ce support a d’ailleurs été amélioré à partir de SQL Server 2012 avec de nouveaux classements (voir Prise en charge d’Unicode sous SQL Server).

Mais l’expérience nous montre que de nombreuses données que l’on cherche à traiter sont en UTF-8, et on n’a pas nécessairement envie de sortir la grosse artillerie (par exemple un import via SQL Server Integration Service). Je vous propose donc une manière simple d’importer correctement dans un script T-SQL un fichier encodé en UTF-8.

Continuer la lecture

Plan de maintenance et tables sans index clustered

Même si certains oublient de les mettre en place (et s’étonnent ensuite de voir les performances de leur application se dégrader au fil du temps …), des plans de maintenance sont généralement implémentés sur les serveurs SQL Server, et intègrent notamment une défragmentation des index. Mais dans certains cas, ce type de tâches n’est pas suffisant … Continuer la lecture

SSIS : Insérer une ligne dans une table avec IDENTITY et récupérer l’identifiant

Dans les bases de données relationnelles, il est courant d’avoir des identifiants techniques au niveau de chaque table s’appuyant sur la notion d’IDENTITY, c’est-à-dire de compteur auto-incrémenté. Lorsque l’on cherche à remplir des tables via SQL Server Integration Services (SSIS), il convient donc de récupérer cet auto-incrément lors des insertions pour pouvoir les utiliser dans les tables filles. Continuer la lecture

Tester si on a des enregistrements

Il m’est assez souvent arrivé de voir des développeurs qui, pour savoir si leur programme avait des informations à traiter, comptaient le nombre d’enregistrement vérifiant leurs critères et lançaient leur traitement si ce nombre était différent de zéro. Mais en pratique, et surtout du point de vue des performances, cette façon de développer est plutôt catastrophique. Continuer la lecture

Reconstruction de tous les index d’une base

En environnement de développement (en espérant que vous ne le faites pas en production …), il arrive assez souvent de lancer des compactages (SHRINK) de bases de données. Mais ce type d’action a tendance à fragmenter tous les index, chose qu’il convient de réparer rapidement si l’on souhaite garder des performances acceptables.

Or il n’existe pas d’instruction Transact-SQL ou de commande (menu) sous SSMS permettant de reconstruire rapidement tous les index d’une base. Continuer la lecture

Vues obsolètes

Par défaut, les vues créées sous SQL Server sont uniquement des alias, c’est-à-dire que le code qu’elles contiennent (les tables et colonnes utilisées, …) est évalué à chaque exécution. Mais avec ce paramétrage par défaut, il est possible que les tables sous-jacentes évoluent et que l’on obtienne une vue qui, bien que définie, ne peut plus être utilisée.

Voici un petit papier au sujet des vues, et plus particulièrement autour d’une méthode permettant de détecter ces vues “fantômes”. Continuer la lecture

Via quels logins suis-je connecté ?

Les différentes habilitations attribuées à un compte se connectant à une instance SQL Server se font via la notion de logins. Un login peut notamment être un compte Windows ou un groupe Windows.

Mais lorsque l’on se connecte, on le fait via un compte, qui peut lui-même appartenir à un ou plusieurs groupes. Alors que se passe-t-il, et quel login faut-il regarder pour connaitre nos habilitations ? Continuer la lecture

Défragmentation conditionnelle des index

Même si cela n’est malheureusement pas suffisamment mis en place dans la pratique, il est rappelé qu’il est très important d’avoir des plans de maintenance des bases de données SQL Server, avec notamment une étape liées à la défragmentation des index.

Mais il ne faut pas trop en faire et faire chauffer le serveur pendant toutes les plages “hors production” pour simplement refaire des index qui n’ont presque pas évolué depuis la dernière fois.

Une bonne pratique consiste à s’appuyer sur le taux de fragmentation effectif des index afin de décider quelle type d’opération appliquer : rien du tout s’il n’est pas nécessaire d’intervenir, une petite réorganisation des données au sein des pages ou bien une reconstruction totale de l’index. Voici un script permettant de réaliser cette défragmentation conditionnelle. Continuer la lecture