mercredi 16 juin 2021

Un petit aperçu du fonctionnement de l'optimiseur

Le composant qui détermine le plus la performance d’un SGBDR est son optimiseur. Comme vous le savez sûrement déjà, le moteur de base de données adapte son plan d'exécution au contexte : il fait cela grâce à une estimation des cardinalités, ce qui lui permet de savoir approximativement quel nombre de ligne serait renvoyé pour chaque prédicat ou jointure de la requête.

Dans cet article, nous allons examiner son fonctionnement avec une requête simple.

Lire la suite...

mercredi 12 mai 2021

Installations rapides

Si comme moi vous déployez fréquemment des instances SQL Server pour des tests divers et que vous êtes pressé, le plus rapide est de le faire avec un fichier de configuration.

Dans cet article, un exemple de fichier de configuration compact pour une installation simple.

Lire la suite...

lundi 5 avril 2021

SSMS : copier sa liste de serveurs inscrits sur un autre ordinateur

Dans SQL Server Management Studio, la liste des serveurs inscrits est une fonctionnalité bien pratique. Ma propre liste comprend 260 serveurs : les miens et ceux de certains de mes clients. Maintenant que le travail à distance est une réalité quotidienne, j'ai besoin de transférer tout cela de mon ordinateur portable à mon ordinateur de bureau.

Il existe bien une fonction d'exportation et d'importation dans SSMS, le seul inconvénient est qu'il n'est pas possible de transférer les mots de passe (ceux pour les connexions SQL) : ils sont chiffrés avec la clé de l'utilisateur. En changeant d'ordinateur, l'importation d'un fichier embarquant les mots de passe chiffrés se passe mal (et d'importer un tel fichier peut même faire planter SSMS !).

Je n'ai pas vraiment envie de resaisir 200 mots de passe, et heureusement il existe une solution !

Lire la suite...

dimanche 4 avril 2021

Ménage de printemps

Il y a quelques tâches ménagères d'administration qui sont trop souvent oubliées : le nettoyage des journaux et des historiques !
Si ce n'est pas fait, on finira par se retrouver avec :

  • Une base de données msdb géante
  • Des problèmes de temps de réponse dès qu'il faut supprimer une base de données (avec son historique de backup géant...)
  • De mauvaises performances pour interroger l'historique des travaux ou des sauvegardes
  • Des milliers de fichiers dans le répertoire "log" de SQL Server
  • ...

Voici quelques requêtes, nous en profitons pour explorer quelques nouvelles DMV et procédures stockées étendues...

Lire la suite...

mardi 16 février 2021

SSMS InfoReports v7

La nouvelle version (v7) de mes custom reports pour SQL Server Management Studio est disponible sur Github : https://github.com/datafly/SSMSInfoReports

Elle intègre maintenant 13 rapports, dont les derniers en date qui étaient présentés ici : Always On AG et Jobs Planning History.

Tous les rapports ont fait l'objet de diverses améliorations.

Bon téléchargement !

jeudi 10 décembre 2020

Nouvelle vidéo : Data Masking avec SQL Server

Si vous utilisez SQL Server et vous vous sentez concerné par la protection des données personnelles (RGPD), regardez cette vidéo.
Vous verrez ici que la fonctionnalité de Dynamic Data Masking qui existe dans SQL Server, bien que facile à mettre en oeuvre, est facilement contournable par un utilisateur.
Et pour compléter, il y a aussi une petite démo de Static Data Masking avec l'outil Red-Gate Data Masker. Là c'est du sûr, mais c'est du lourd...

jeudi 10 septembre 2020

La vidéo du Power Saturday 2020

La video de ma présentation au Power Saturday 2020 est maintenant disponible : SQL Server 2019, de l'intelligence sous le capot. Le Power Saturday s'est tenu le 6 juin dernier, entièrement en virtuel cette année (Covid oblige).

Lors de cette session assez avancée, co-présentée par mon collègue Frédéric Brouard et moi-même, nous avons voulu montrer les améliorations de l'optimiseur de SQL Server dans ses versions 2017 et 2019. Et on y voit qu'il y gagne de l'intelligence, de quoi vous donner à réfléchir pour upgrader vers les dernières versions si ce n'est pas déjà fait. Les fonctionnalités suivantes sont expliquées et démontrées :

  • encapsulation des fonctions scalaires
  • feedback d'allocation mémoire
  • mode batch en row store
  • compilation différée des variables tables
  • jointures adaptatives
  • paramétrage automatique

La vidéo dure une heure, prévoyez une bière et des cacahuètes...

Le lien vers la présentation en pdf

Le lien vers les scripts (les bases de données utilisées sont trop volumineuses pour être disponibles en ligne)

samedi 25 juillet 2020

SSMS Custom Report : job history planning

Un nouvel ajout à ma collection de custom reports pour SSMS : l'historique des jobs de l'agent SQL sous forme de planning sur 24 heures, disponible ici (nouvelle version du 15/01/2021).

Il est bien utile d'avoir un outil visuel pour identifier rapidement quels sont les jobs particulièrement fréquents ou particulièrement longs, ou encore de savoir quels sont les jobs planifiés aux mêmes horaires. SSMS ne nous offre nativement rien de tel...

Pour utiliser le rapport dans SSMS, faire un clic droit sur l'instance SQL dans l'explorateur d'objets, menu contextuel "Rapports", puis "Rapports personnalisés", ici ouvrir le fichier .RDL.

Le rapport interroge la table msdb..sysjobhistory : n'oubliez pas que cette table doit être purgée régulièrement sinon elle risque d'enfler indéfiniment (et les performances du rapport s'en ressentir). La procédure stockée sp_purge_jobhistory permet d'effectuer cette opération, généralement une rétention de 30 jours est suffisante dans la plupart des cas.

Le rapport est plutôt compact, le but était d'avoir une vision globale sur 24 heures. Les jobs réussis s'affichent en vert, ceux en échec en rouge. En passant la souris sur la plage d'exécution d'un job, un tooltip s'affiche avec quelques informations. Il y a aussi un lien sur le nom de chaque job qui permet d'atteindre un rapport détaillé, cela si vous avez installé les autres custom reports que je propose.

Pour rappel, ces autres rapports sont disponibles au téléchargement sur github, et il y a en plus le rapport sur les groupes de disponibilité Always On, accessible ici.

J'ai l'intention de repackager tout cela dans une future version 7.0 : y intégrer les nouveaux rapports ainsi que les dernières corrections que j'ai faites sur les anciens.

Bonne exploration des custom reports...!

jeudi 16 juillet 2020

Isolation snapshot et version tag

Une question que posent souvent les développeurs : comment éviter les verrous bloquants à la lecture des données ?

Une des (mauvaises) solutions est d'utiliser la directive NOLOCK (ou isolation READ UNCOMMITTED) : c'est un faux ami car cela ne garantit pas la cohérence transactionnelle des données que l'on lit.

L'autre solution est d'utiliser un niveau d'isolation "optimiste", par versionning : SNAPSHOT ou READ COMMITTED SNAPSHOT (RCSI).

Le principe de l'isolation par versionning est le suivant : plutôt que de poser un verrou partagé pour lire les données (ce qui empêchera de lire des données en cours de modification), SQL Server va renvoyer la dernière version validée des données : il utilise pour cela le "Version Store", qui stocke de manière transparente cette version des données dans Tempdb.

Un effet de bord mal connu de l'isolation SNAPSHOT (ou RCSI) est qu'il ajoute un pointeur de 14 octets à chaque ligne de données dès qu'on la modifie, ce qui peut poser certains problèmes. Voyons cela de plus près.

Lire la suite...

lundi 29 juin 2020

Eliminer ou chercher les accents

Une question qui m'a été posée : comment savoir si la colonne d'une table contient des caractères accentués ou des minuscules et comment y éliminer les accents ? Cela avec SQL comme avec SSIS : voyons quelques astuces...

Lire la suite...

- page 2 de 17 -