Articles

Une fonction en CLR embarqué dans SQL Server

Image
IntroductionObservant les performances de mon site Web de gestion de courses à pied, j’ai constaté qu’une procédure d’importation de données consommait plus que de raison.Comme souvent en SQL, la consommation était bien localisée sur une seule requête qui a pour objet de transformer les noms et prénoms des coureurs selon un certain format :Les blancs de début et fon sont éliminésTous les caractères accentués sont transformés en équivalent sans accentLes tirets sont transformés en espace (Jean-Paul devient Jean Paul)Les noms sont forcés en majusculesLes prénoms ont leur 1ère lettre en majuscule , la suite en minusculeTous les autres caractères (;,@…) sont ignorésEn bref… des manipulations de chaines de caractères.Détection du problème et solutionJe le dis souvent dans les formations que j’anime : Transact SQL fait merveille pour ce qui est de manipuler des données en base, par contre il fait piètre figure dans le domaine des calculs et des fonctions.Voici donc la requête en question et…

SQL Server : les performances ?

Image
Vous les connaissez peut-être déjà :Nous serons présents chez ORSYS du 20 au 24 mars 2017 pour animer un séminaire exceptionnel sur SQL Server du point de vue des performances.Lundi : Frédéric BROUARD : Modéliser pour la performance et l'optimisation sémantiqueMardi : Christophe LAPORTE : Choisir le matériel, réaliser une installation efficace et réussir la virtualisationMercredi : Arian PAPILLON : Maîtriser l'indexation, les statistiques et la supervisionJeudi : Rudi BRUCHEZ : Comprendre et analyser les plans d'exécution, tracer avec les événements étendusVendredi : Dominique VERRIERE : Programmer efficacement, optimiser Entity Framework et comprendre le verrouillageTous les détails et inscriptions ici : Master class SQL Server

Enfin !

Voilà des années que je constatais que Microsoft dédiait les fonctionnalités avancées à la seule édition Enterprise (qui vaut tout de même 9 fois le prix de la standard), le SP1 de la version 2016 remet les choses en place !EnterpriseStandardColumn storeIllimitéLimité à 32 GoPartitionnementOUIOUICompression de donnéesOUIOUIOk le column store est limité à 32 Go, mais cela permettra toutefois de faire des maquettes et autres ‘Pokes’…Le partitionnement est trés intéressant car il n’est plus rare de trouver des tables avec plus de 100 millions de lignes (mes clients se reconnaitront!)Quand à la compression de données cela permettra à certains consultants pressés (ce n’est pas mon cas ) de cacher la misère d’une base de données vraiment trop mal conçue …En bref que des bonnes nouvelles !

Gestion des pools de connexions, étude de problèmes

Image
Qu’est ce que le pool de connexions ?Les applications Web se caractérisent par leur aspect ‘fugitiff’ par rapport à la base de données, au contraire des applications en client lourd qui peuvent maintenir une connexion sur une longue période.Afin de garantir les meilleures performances ADO.Net gère un pool de connexions tournantes : en effet ouvrir une connexion peut être une opération longue.Les paramètres de ce pool peuvent être forcés dans la chaine de connexion sous la forme (Clé,Valeur)Nous avons principalement :Max Pool Size : la valeur par défaut est de 100Min Pool Size ; la valeur par défaut est de 0.Pourquoi changer ces valeurs ?Sur un site très chargé, on peut considérer que 100 est une valeur un peu faible.A l’inverse, le minimum à 0 fera que l’on perdra la dernière connexion après une certaine inactivité : le temps de réponse de la 1ère requête pourrait s’en ressentir.Comment voir ce qui est en cours ?Le plus simple est de lancer une requête sur le serveur SQL pour connaitr…

Prise en main de Power Bi Desktop

Image
Voici plusieurs mois déjà que Microsoft a sorti ce composant d’analyse des données. Il est temps pour moi de regarder un peu ce qui s’y passe … Comme dans PowerPivot (dont il hérite sur pas mal d’aspects) tout commence par la connexion aux sources de données : Impressionnant ! Un très grand nombre de connecteurs est disponible… Extraction des donnéesMes données venant d’un bon vieux serveur SQL , c’est ce connecteur que je vais utiliser. Où l’on voit qu’il y a du PowerPivot derrière : Je choisis ici de stocker mes propres données… ce qui chacun en conviendra a des avantages et des inconvénients (notamment la sécurité) On reconnait le process de PowerPivot : Il est possible de revenir à mes requêtes (je n’ose pas dire à ma DSV mais c’est bien de cela dont il s’agit) On pourra notamment y faire le ménage et renommer les choses telles que nécessaire : J’ai ainsi pu alléger beaucoup la table produit : On note que, en fonction des relations héritées du modèle relationnel, l’outil…

MDX : comptages à la volée

Image
Un des participants d’une session de formation (Gaël se reconnaitra) me pose la question d’aouter un membre calculé de nombre de clients sur un cube classique de suivi des ventes.Dans les modèles multi-dimensionnels, une mesure doit être associée à une table de faits (contrairement au modèle tabulaire) … c’est pourquoi je pense qu’il  y a une bonne solution et des moins bonnes…La bonne solution :Il suffit de créer une mesure de comptage distinct sur un identifiant significatif, ici IDClient.Classiquement, cela crée un groupe de mesure séparé (les count distinct ne sont pas additifs).L’usage est alors très simple et performant :// La bonne solution
// Requête sans l'axe client
select {
[Measures].[Montant Ventes Internet],
[Measures].NbeClients
} on 0,
[Produit].[Categorie].[Categorie] * [Date Commande].[Mois].[Mois]
on 1
from [AnalyseVentes]
where [Date Commande].[Annee].&[2003]
;// Requête avec l'axe client
select {
[Measures].[Montant Ventes Internet],
[Measures].NbeClients
} on 0,
no…