Vidéos des sessions Data Frogs

Après un long moment d’absence, je suis revenu en animant une session parmi d’autres, sur le Query Store. Voici le menu :

David Barbarin – Maintenance des statistiques avec SQL Server
Nicolas Souquet – Tout savoir sur le Query Store
Amar Adghar – Azure, quelle architecture pour moi ?
Arian Papillon and Julien Pierre – Les fausses bonnes idées SQL Server
Christophe Laporte – Configurer SQL Server pour un dépannage efficace
Hugo Kornelis – T-SQL User-Defined Functions, or: How to kill performance in one, easy step
Frédéric Brouard – Passer de SQL Server à PostGreSQL … ou l’inverse ?

Les vidéos sont disponibles ici.
Retrouvez également les scripts que j’ai utilisés pour les démos ici.

Bonne visualisation ;)

Sortie de SQL Server 2017 : installation !

La sortie de SQL Server 2017 marque un tournant majeur pour Microsoft, puisque SQL Server est maintenant disponible sous Linux. Jusqu’ici, ce n’était pas le cas, et c’était très probablement le dernier rempart à l’adoption de SQL Server dans les entreprises où l’infrastructure logicielle de Linux/Unix est prépondérante.

Il y a bien d’autres éléments qui ont été ajoutés aux fonctionnalités de SQL Server avec ce nouvel opus, que l’on peut télécharger à partir de cette page. Plus bas dans celle-ci, on trouve également les téléchargements de SQL Server Management Studio 2017, SQL Server Data Tools, et les connecteurs pour faire interagir une application avec SQL Server en .NET, Java, mais aussi Python et Ruby.

Notons que depuis SQL Server 2014, l’édition Developer de SQL Server est gratuite, ce qui fait qu’on peut la télécharger sur nos PCs et commencer à bricoler après quelques minutes d’installation, en faisant appel à toutes les possibilités et fonctionnalités du moteur de base de données : l’édition Developer, est, en termes de fonctionnalités, équivalente à l’édition Enterprise, qui les offre toutes.

Voyons donc ce qu’il en est :
Lire la suite

Variables de type table, statistiques et drapeau de trace 2453

M’étant arrêté d’écrire pendant un certain temps, mais certainement pas de lire, me voilà de retour au clavier pour partager sur mon sujet préféré : l’optimiseur de requêtes, et plus particulièrement l’estimation de cardinalités. En butinant des billets de blog ici et là à propos de SQL Server, je trouvais un billet détaillant le comportement des requêtes spécifiant des variables de type TABLE.

Qu’est-ce que l’estimation de cardinalités ? Pour faire très court, c’est l’ensemble des règles mathématiques qui permettent à SQL Server d’avoir une idée assez précise du nombre de lignes qu’il aura à traiter lors de l’exécution d’une requête. C’est avec ce calcul-là qu’il sélectionne les algorithmes de jointure, de regroupement, l’ordre et la façon d’accéder aux tables, et bien d’autres choses encore. Bien sûr, ces choix varient suivant le volume de données à traiter. On le comprend donc, c’est un sujet très important, puisqu’il impacte directement les performances de l’exécution de nos chères (parfois en IO et temps CPU !) requêtes.

Alors vous allez me dire, crevant d’impatience : « bon d’accord, mais il le sort de son chapeau magique ce calcul ? » : au risque de vous décevoir, non. Dès lors qu’on soumet une requête qui filtre une table par une colonne, ou l’utilise dans une jointure, un regroupement, alors par défaut, le moteur crée automatiquement des objets de statistique. C’est à dire qu’il va échantillonner les données des colonnes des tables participant à la requête pour évaluer la distribution des données dans les colonnes (et index) de ces tables. Fort de ces informations, il peut alors réaliser le fameux calcul. Bref, ce sont des mathématiques :)

L’auteur du billet en question partageait sur le fait que par défaut, SQL Server estime qu’il n’y a qu’une seule ligne dans une variable de type TABLE. Ceci s’explique par le fait que SQL Server ne maintient pas d’objet de statistique sur les variables de type TABLE (pour les curieux, il le fait néanmoins sur les tables temporaires). Quand on sait l’usage qui est fait des variables de type TABLE dans les applications, il est évident qu’il arrive rarement que ces tables ne soient en charge que d’une seule ligne; de là des performances qui ne sont pas toujours en adéquation avec le volume de données à traiter.

Voyons le comportement par défaut du moteur à l’aide de la base de données AdventureWorks2012 :
Lire la suite

Résoudre les problèmes les plus communs de connexion à SQL Server

Qui n’a jamais eu le message d’erreur suivant ?

  • A network-related or instance-specific error occurred while establishing a connection to SQL Server
  • Login failed for user DOMAIN\user

Microsoft vient de publier un guide de résolution de ces erreurs, qui indique les sources du problème et les étapes de résolution.

Bonne connexion(s) !

Redémarrer la trace par défaut

SQL Server fournit de nombreux outils de monitoring d’arrière-plan par défaut, comme le journal SQL Server, la session d’événements étendus system_health, mais aussi une trace SQL Profiler. Cette dernière est enregistrée dans un fichier dans le répertoire des journaux, et SQL Server conserve 6 fichiers de cette trace.

Elle capture, entre autres, les événements d’échec d’authentification, la création d’objets dans TempDB, les warnings sur Hash et Sort, les grossissements de fichiers, et de nombreux autres événements. Ceux-ci peuvent aider à comprendre, a posteriori, ce qui a causé une grande consommation de CPU, des latences disque, …

Comme cette trace est écrite sur disque, il peut malencontreusement arriver que ce dernier devienne plein, provoquant alors l’arrêt automatique et forcé de la trace. Ce léger incident (l’arrêt de la trace, pas l’absence d’espace disque libre !) n’empêche aucunement l’instance de fonctionner, ou au moins d’être accessible. Cependant, comment peut-on redémarrer cette trace sans redémarrer l’instance SQL Server ?

Lire la suite

Retrouver les séquences attachées à des contraintes de valeur par défaut

SQL Server 2012 a introduit les objets SEQUENCE.
Ils permettent, en outre, de spécifier des contraintes de valeur par défaut. Ils vont aussi remplacer la propriété d’auto-incrémentation typiquement utilisée pour les colonnes supportant des contraintes de clé primaire subrogée.

Dès lors, comment retrouver les séquences référencées par de telles contraintes ? Voici un exemple et une petite requête pour nous y aider …
Lire la suite

SQL Server 2016 Service Pack 1 : monumentale mise à jour !

La sortie du Service Pack 1 pour SQL Server 2016 est venue avec une annonce pour le moins inattendue : de nombreuses fonctionnalités jusqu’ici réservées à l’édition Enterprise le sont maintenant dans les éditions Standard, Express, et même LocalDB.

Lire la suite

SQL Sentry Plan Explorer Pro maintenant entièrement gratuit

On ne présente plus l’incontournable outil SQL Sentry Plan Explorer, que j’avais introduit ici et détaillé là.

SQL Sentry a annoncé hier que le fabuleux outil qui facilite grandement la lecture de plans de requête, SQL Sentry Plan Explorer, est maintenant gratuit dans son édition Pro.
Jusqu’ici, l’édition Express était déjà un bel outil, qui est maintenant complété par :

  • L’ouverture de plusieurs documents de plan de requête (fichiers .sqlplan, .queryanalysis, .pesession)
  • L’historique et ses commentaires au fur et à mesure du processus d’optimisation
  • L’ouverture des graphes décrivant un deadlock (fichiers de type .xdl)
  • La comparaison de l’impact des index pour une même requête
  • L’aide à l’analyse de la distribution des valeurs dans un objet de statistique

Bonne analyse de plans !

sys.dm_exec_query_profiles : la DMV qui détaille les noeuds d’un plan d’exécution réel

La lecture du plan d’exécution réel peut s’avérer être une tâche laborieuse, surtout lorsque le plan contient de nombreux opérateurs ou nÅ“uds.

Introduite avec SQL Server 2014, la vue de gestion dynamique sys.dm_exec_query_profiles nous permet de voir quel(s) nÅ“ud(s) d’un plan d’exécution réel consomme le plus de ressources et /ou de temps. C’est donc un formidable outil qui peut faire largement diminuer la recherche des points noueux d’une requête à l’étude.

Lire la suite

Les nouveautés de l’optimiseur de SQL Server 2016

Avec la sortie de SQL Server 2016, sous le mode de compatibilité des bases de données à 130, les corrections et ajouts sont listés dans ce billet officiel.

On notera comme très bienvenues :

  • le fait de ne plus avoir à activer le drapeau de trace 2371 pour voir le ré-échantillonnage des statistiques de colonnes et d’index se faire lorsque la table a subi 20% du nombre de ses lignes en affectation
  • le drapeau de trace est l’un de ceux qu’on n’ose pas activer, parce qu’il peut être bénéfique à certaines requêtes et pas à d’autres : sous le mode de compatibilité 130, ce sera le cas par défaut
  • la parallélisation de la mise à jour des statistiques échantillonnées, qui vient compléter avantageusement celles qui ne l’étaient pas (FULLSCAN)

Bonne lecture et optimisation de requêtes !