Plan de maintenance SQL Server et bonnes pratiques

Il m’arrive souvent lors de mes audits de trouver des plans de maintenance qui ne sont pas en adéquation avec le business des clients soit parce que les personnes de l’IT n’ont pas les connaissances nécessaires pour le faire correctement soit parce que cette phase est souvent négligée. Dans ce billet, j’essaierai de répertorier sans aucune prétention l’ensemble des problèmes ou maladresses que j’ai pu rencontré au cours de ces audits et les bonnes pratiques  à appliquer en sachant qu’il n’existe pas une seule solution. En effet, bien souvent c’est le contexte client qui fera pencher la balance.

Lire la suite

Mise à jour des statistiques avec échantillonnage (WITH SAMPLE) sur les tables à faible volumétrie

Comme vous le savez certainement la mise à jour des statistiques peut s’effectuer de différentes manières. Une d’entre elle est d’utiliser la commande UPDATE STATISTICS avec l’option WITH SAMPLE qui permet de mettre à jour les statistiques selon une méthode d’échantillonnage en prenant en compte un certain nombre de lignes ou en se basant sur un certain pourcentage. Cette méthode est très utilisée dans les VLDB avec des tables volumineuses. Cependant quelle est le comportement de cette option sur les tables à faible volumétrie ?

Lire la suite

Index Scan et Allocation Order Scans : Quesaco ?

Les opérations d’analyses d’un index (opérations logiques) peuvent engendrer 2 types d’opérations physiques appelés : Index Scans ou les Allocation Order Scans pour reprendre les termes anglophones. Chaque type d’opération est exécuté dans un contexte bien précis. C’est le moteur de stockage SQL Server qui décide de la stratégie à employer. Nous verrons cela dans un exemple très simple.

Lire la suite

SQL Cluster : Comment savoir par requête quel nœud SQL est actif dans une topologie en cluster ?

Ceux qui ont eu a gérer des instances SQL Server en cluster se sont forcément posés la question de savoir quel noeud était actif sans avoir à regarder la console de gestion des clusters. La variable système @@servername indique le nom virtuel du cluster et non le noeud actif !

Heureusement la fonction système SERVERPROPERTY nous permet de connaitre cette information en utilisant la propriété ComputerNamePhysicalNetBIOS :

SELECT SERVERPROPERTY(‘ComputerNamePhysicalNetBIOS’);

David BARBARIN (Mikedavem)
Elève ingénieur CNAM 
MVP SQL Server

Histoire de stockage : colonnes sparses avec SQL Server 2008

Les colonnes fragmentées ou SPARSE sont apparues avec la version 2008 de SQL Server. Celles-ci permettent d’optimiser le stockage pour les tables ayant une majorité de colonnes avec une absence de valeurs (NULL). Cependant ce type de colonne n’est réellement efficace que si une table possède une majorité de valeurs NULL pour les colonnes concernées. Pourquoi une telle condition ? C’est ce que nous verrons dans ce billet.

Lire la suite

Histoire de stockage : Modifications internes relative au changement de longueur d’une colonne de table

La modification de la longueur d’une colonne de table est une opération plutôt courante dans la vie d’un administrateur de bases de données mais qu’en est il du stockage interne ? Beaucoup de gens pensent par exemple que diminuer la longueur d’une colonne permet de récupérer de l’espace de stockage ou que d’augmenter la longueur d’une colonne n’a que très peu d’impact. Rien de ceci n’est vrai et nous le verrons dans la suite de ce billet.

Lire la suite

SQLProfiler : Analyse avancée de traces

La création d’une trace profiler est un passage quasi obligatoire lorsqu’il s’agit d’auditer les performances et les ressources monopolisées  des requêtes, lots de requêtes ou des procédures stockées qui s’exécutent sur le serveur de bases de données lors d’un audit. Bien qu’il existe les DMV depuis la version 2005, celles-ci ne peuvent être réellement utilisées qu’après une période significative de fonctionnement du serveur. Par conséquent il est plus intéressant de les utiliser dans un contexte de production que dans celui d’un audit ponctuel.

De plus, il peut exister plusieurs exécutions d’une même requête ou procédure dans une trace profiler mais avec des paramètres différents. Une question peut alors se poser : comment connaître les durées et consommations globales des différents modèles de requêtes (indépendamment de la valeur des paramètres utilisés) et pouvoir ainsi mettre l’accent sur l’optimisation de certains modèles de requêtes ?

Lors de mon dernier audit, j’ai également dû répondre à la problématique suivante : le serveur de bases de données comportait plusieurs instances SQL Server. Dans un tel cas, comment connaitre le ratio entre la consommation d’une requête exécutée sur une instance et celle de l’ensemble des instances présentes sur ce même serveur ? Cela peut être utile pour cibler les requêtes ou procédures les plus consommatrices à l’échelle du serveur et pour lesquelles il est utile de revoir la conception.

Le script suivant permet de répondre aux deux problématiques décrites ci-dessus.

Lire la suite

Histoire de journal : Fichiers multiples et journal des transactions

Dans la plupart des cas, une base de données comporte un seul fichier journal. Il peut arriver qu’il soit nécessaire de rajouter un ou plusieurs fichiers au journal des transactions à cause d’un manque d’espace libre sur une partition par exemple. Comment se remplit le journal dans ce cas ? Comment s’effectue l’allocation de nouveaux VLF dans plusieurs fichiers ? C’est ce que nous verrons dans ce billet.

Lire la suite

Log shipping : Comment déplacer les fichiers journaux d’une base de données ?

Il est parfois nécessaire de déplacer certains fichiers journaux d’une base de données. Les causes peuvent être multiples : changement dans l’architecture du sous-système disque, espace disque insuffisant . Cette opération est, dans un cas classique, relativement simple mais lorsqu’il s’agit d’une topologie log-shipping cela peut compliquer un peu les choses. Nous verrons dans ce billet comment déplacer les fichiers journaux d’une base de données selon si l’on se trouve sur le primaire ou le secondaire.

Lire la suite