Ca fait un petit moment que je n’avais pas parlé de mon projet SQL MiM. Je n’ai pas fais de mise à jour du projet CodePlex depuis un bail, et pour cause, j’ai tout cassé, et j’ai tout refais !

Le fonctionnel reste le même mais je trouvais l’interface trop fade, j’ai donc décidé de refaire tout ça en m’inspirant du thème Metro et de l’interface Zune.

Alors certes, c’est pas encore fini (je ne sais pas si ça le sera un jour d’ailleurs Smile) mais voilà déjà quelques screens de la version Avant / Aprés :

 

Informations générales, Avant : Informations générale, Aprés :
SQL_MiM_ServerStats image

Index fragmentés, Avant :

Index fragmentés, Aprés :
SQL_MiM_FragIndexes image
Taille des fichiers, Avant : Taille des fichiers, Aprés :
SQL_MiM_FileSizes image

Bon je n’ai pas fais que des arrangements graphiques, j’ai aussi implémentés quelques nouveautés Smile

Comme par exemple, la monitoring des pools de connexion :

image

Et quelques autres surprises en cours de chantier Smile

Voilà je viens de publier ma mallette Renault du parfait petit consultant SQL SERVER en vadrouille :)

Vous trouverez le tout sur http://sqlmim.codeplex.com

Update : Si l’application plante au lancement, c’est que vous devez avoir l’UAC activée. Démarrez l’exe en mode Administrateur. Promis à la prochaine version, j’inclus le manifest qui permettra à l’UAC de vous demander ‘ou non’ l’autorisation de lancer l’exécutable…

Bon pour être honnête, la mallette est loin d’être terminée, c’est plus une démonstration de ce que ça pourrait être qu’un outil final !

Mais quand même; en l’état, elle m’a permis récemment de résoudre un problème de goulet d’étranglement sur une File Group pas bien dimensionné :) (Et je vous raconte pas la tête de mon client)

Ah y’a pas à dire, une application “jolie”, ça vaut toutes les prouesses techniques pour un utilisateur final !

Qui a dit qu’on ne pouvait pas allier l’utile à l’agréable (à regarder :) )

SQL_MiM_ServerStats[1]

SQL_MiM_FragIndexes[1]

Voilà n’hésitez pas à me faire quelques retours dessus, vous pouvez me contacter à l’adresse '(enlevez le NO_SPAM )

sebatient[NO_SPAM].pertus@bewise[NO_SPAM].fr

Suite suite !

Voici une nouvelle tache à ajouter à ma malette :) L’analyse des index fragmentés d’une base de données.

Evidemment, savoir qu’un index est fragmenté ne suffit pas ! Est 'il utilisé ? Quel est son niveau de fragmentation, quel est sa taille ? son nombre de pages ? Est il cluster non cluster ? Est il bien utilisé (Seek ou Scans) ?

Voilà donc un nouvel écran résumant toutes ses informations :

  • Nom de l’index
  • % de fragmentation
  • Taille (MO)
  • Nombre de seeks
  • Dernière opération de seek
  • Nombre de scans
  • Dernière opération de scan
  • Dernier update
  • Nombre de pages
  • Nombre de lignes

Attention. Ces statistiques n’ont de valeur que depuis le dernier redémarrage du serveur. Vous pouvez avoir un index en apparence peu utilisé, mais il se peut que son “cycle de vie” ne soit qu’à peine entamé :)

Voici une copie d’écran de cette nouvelle fonctionnalité :

image

 

Ah oui, une dernière chose, rien à voir avec SQL Server sur ce coup, mais en rapport avec l’application. Un collègue a soulevé le fait que le noir y’a mieux (enfin c’est lui qui dit ça hein, pas moi :) )

Allez hop, mise en place des thèmes, à la volée monsieur ! (Bon faut faire l’écran d’options …)

image image

Voilà, apparition du Dark Theme et du Light Theme

Vous en pensez quoi ? :)

Je continue dans ma série “Malette etc ….” :)

Aujourd’hui, je me suis dis qu’il serait peut être intéressant d’avoir un écran qui résume l’ensemble des informations essentielles sur un serveur donné.

Outre les infos de bases (nom du serveur, édition, service pack, classement, mémoire dispo  etc…) j’ai rajouté le nombre de sessions en cours ainsi que les transactions actives. Puis le nb de connexions utilisateurs et le nombre de connexions logiques.

Enfin, j’ai rajouté une série de camemberts représentant le total I/O par base (le grand sur le screenshot suivant), le total de reads par base et enfin le total de writes par base (les deux petits camemberts, donc. )

Voilà, de quoi donner un bon aperçu de l’activité d’un serveur, enfin du moins coté I/O. Disons que c’est un bon début !

image

Bon je continue dans ma série ” Malette Renault du parfait petit consultant itinérant

Je viens de finir l’écran présentant l’activité globale des bases de données :

Depuis le dernier démmarrage de SQL SERVER, je récupère le nombre de Mo qu’a généré en Read et en Write la base de données, puis le nombre total de Reads et le nombre total de Writes :

Voici en substance le script utilisé :

Declare @OneMo float = cast ((1024 * 1024) as float);
 
SELECT  vfs.sample_ms  as EllapsedTimeMs 
    , db_name(vfs.database_id) as DatabaseName  
    , vfs.database_id 
    , sum(vfs.num_of_bytes_read / @OneMo) as [ReadsMo] 
    , sum(vfs.num_of_reads) as [Reads] 
    , sum(vfs.num_of_bytes_written / @OneMo) as [WritesMo] 
    , sum(vfs.num_of_writes) as [Writes] 
    , sum(vfs.num_of_bytes_read + num_of_bytes_written) / @OneMo as [TotalIoMo] 
    , sum(vfs.num_of_writes + num_of_reads) as [TotalIo] 
From sys.dm_io_virtual_file_stats(null, null)  vfs
Where vfs.file_id <> (Select mf.file_id from sys.master_files mf where mf.type = 1 and mf.database_id = vfs.database_id) 
And vfs.database_id > 4 
Group by vfs.sample_ms, vfs.database_id 
Order By DatabaseName asc

En en couleur, ça donne ça :

CaptureTotalReadWrite

On peut voir par exemple que la première base génère pas mal de trafic : 750 Mo de Reads pour 206 Mo de Writes.

Ce qui est remarquable c’est qu’il y a peu de Reads en comparaison des Writes : 3577 Reads pour 22255 Writes

On peut donc conclure que les Select qui sont fait sont peu nombreux mais ramènent un volume de données important à contrario des opérations CUD (Create Update Delete) qui eux génèrent bcp de trafics sur peu de volume de données.

D’une manière générale, ça c’est bien ! Les opérations CUD doivent toujours être rapides, pour éviter au maximum les Locks…

Pour la deuxième base : Peu de Writes, Beaucoup de Reads : Normal, c’est mon blog et quelques internautes égarés viennent (beaucoup :) ) lire, alors que je fais en comparaison, peu d’opérations CUD !

Enfin, pour la dernière base, on peut remarquer qu’il n’y a que des Reads, pratiquement pas de Writes : Normal c’est base de données est en lecture seulement (sauf exception)

Ah tiens, allons quand même vérifier comment est réparti la taille des fichiers sur cette dernière :

image

Ah, peu d’espace libre sur le seul FileGroup PRIMARY : Normal, pour une base de données où seul des récupérations de données sont faites ;)

Voilà une bonne analyse non ?

Stay Tuned !

J’utilise régulièrement des scripts pour effectuer des audits sur mes bases SQL.

J’en trouve même pas mal sur le net, d’autres administrateurs qui ont eux même la même habtiude.

Je me suis toujours dis qu’un jour il faudrait mettre tout ça un peu plus en relief, tout aggréger dans une application, une sorte de Malette-Renault–J’arrive-J’épate-J’analyse-Et-J’Répare .

C’est vrai que lire des lignes et des colonnes de données, c’est intéressant, mais voir ces même données sous une forme plus conviviale, ça peut aussi changer la vie.

Bref, cette idée me trote dans la tête depuis un bon moment et je me suis finalement lancé aprés avoir utilisé un script pondu par Christophe qui se prète trés bien au jeu.

Ce script a pour vocation de mettre en évidence sur toutes vos bases de données la répartition des tailles des fichiers de chaque filegroups.

A l’exécution, le Script de Christophe donne ça :

image

Alors certes ça suffit, mais une vue plus  … “visuelle” me semble une bonne idée.

Allez hop, un coup de Visual Studio, un projet WPF, développée avec le Patern MVVM et voilà ce que donne la Béta 1 :

image

Oui, C’est plus clair :)

Surtout l’analyse est beaucoup plus rapide à faire pour des administrateurs système, on va dire, moins expérimentés que Christophe ;)

Biensur l’analyse de chaque filegroup sur chaque base va dépendre du contexte : Base de données en lecture seule, trafic important, opérations CUD élevées, Lecture des données stratégique etc …

Bref, un exemple simple, volontairement exagéré pour l’occasion : Si je prend ma première base, répartie sur 4 filegroups, on voit clairement que les filegroups sont mal partitionnés.

image

Un contient 99,9 % des données et deux autres sont vides … La répartition des données est donc à revoir ;)

Voilà pour une première mise en oeuvre.

Je compte bien ne pas m’arréter en si bon chemin, j’ai déjà pas mal d’idées, comme l’intégration d’un compteur de performances fait maison en WPF avec les compteurs que j’utilise le plus souvent

image

Alors oui, certains me diront que ce genre de compteurs existent via le moniteur d’activité de SSMS 2008, mais aussi faut il l’avoir à disposition sur le serveur que l’on veut auditer ! Et ça c’est loin d’être gagné :)

Bref, je fourmille d’idées, la prochaine étape va consister à rendre sous forme plus visuelle, un script de visualisation des index, et de leur fragmentation (encore une fois, un petit script de la maison Christophe )

Et si biensûr vous avez des idées de scripts à intégrer, n’hésitez pas à m’en faire part !