BI experience

13 mars 2018
par maryam khiali
0 Commentaires

Report Server : audit d’utilisation

Dans cet article, j’avais envie de partager une requête simple pour auditer l’utilisation de votre plateforme reportServer :

« select
exe.UserName,
exe.TimeStart,
exe.Format,
cat.Path,
cat.Name
from
[ReportServer].[dbo].[ExecutionLogStorage] exe,
[ReportServer].[dbo].[Catalog] cat
where
cat.ItemID = exe.ReportID  »

Avec ces tables systèmes SSRS, 60 jours de logs sont disponibles par défaut. En vous connectant à l’instance SSRS et en faisant un clique droit> propriétés vous pourrez modifier le nombre de jours assez facilement et le fait qu’il y ait ces logs.

Utilisez vous d’autres requêtes pour bien cerner l’utilisation de votre plateforme de rapports ?

 

 

6 mars 2018
par maryam khiali
0 Commentaires

En quoi cette nouvelle option : Adaptive Query Processing peut m’aider?

Cette nouvelle option présente dans SQL server 2017, nous permet de mettre en place des requêtes plus performantes. Pour ce faire 3 options s’offrent à nous :

  • batch mode adaptive joins
  • batch mode memory grant feedback
  • interleaved execution for multi-statement table valued functions

Pour activer cette option ALTER DATABASE [mon_datawarehouse] SET COMPATIBILITY_LEVEL = 140;

Rappel rapide du fonctionnement d’SQL server sur l’exécution des requêtes :

  • Etape 1 : Liste de divers scénarios de plan d’exécution.
  • Etape 2 : estimation en coût (nb de lignes, en % CPU) de ces divers scénarios => ce coût calculé peut-être faux si les dernières statistiques ne sont pas à jour par exemple. Pour en savoir plus sur ces coûts, voici un petit article sympa
  • Etape 3 : selection du scénario  le plus faible en coût d’exécution
  • Etape 4 : exécution de la requête en fonction de ce plan d’exécution sélectionné

 

Détaillons maintenant chaque option :

le batch mode adaptive joins :

SQL server utilise actuellement 3 algorithmes pour procéder à une jointure :  »nested loop », « merge », et  « hash match ». Pour choisir le plus approprié, SQL server se base sur les coûts estimés.

Grâce à cette nouvelle option voici comment va fonctionner SQL server 2017 : si nb lignes de l’entrée de la jointure  <= au seuil défini par cette option alors « nested loop » sinon « hash match ». Cette analyse est faite dynamiquement lors de l’exécution de la requête.

Note : La jointure  »hash match » est utilisée dans ce cas lorsqu’

  • un index columnstore est présent dans la requête globale
  • ou quand la jointure référence directement la table d’index columnstore

le batch mode memory grant feedback :

Cette option permet de calculer pour chaque requête la mémoire nécessaire à l’exécution de cette dernière et de mettre à jour le  « cached plan » (l’endroit ou les plans d’exécution sont mis en cache pour réutilisation si une requête similaire venait à être exécutée). La gestion de la mémoire nécessaire à l’exécution des requêtes est mieux gérée. Une trop grande allocation mémoire bloquante pour d’autres requêtes ou une allocation mémoire trop juste ralentissant les performances de la requête ne seront plus possibles. Cette option nécessite l’utilisation des « columnstore indexes  »

voici un exemple bien mené pour comprendre avec ou sans cette option

Interleaved execution for multi-statement table valued functions :

Ce genre de fonction existait déjà sur les versions précédentes SQL. Elle a été améliorée dans SQL server 2017 afin d’augmenter son efficacité. Les couts d’exécution sont calculés sur chaque sous requête de la fonction et donc propose un plan d’exécution plus précis et plus performant sur le nombre de lignes à prendre en compte et donc la mémoire à allouée.

Avez vous déjà activées et utilisées ces options?

Voici ma source de données

5 mars 2018
par maryam khiali
0 Commentaires

La puisssance du « real time operational analytics »

Depuis SQL server 2016, Microsoft nous met à disposition un nouveau système d’analyse. Ce système a pour objectif de plugger, en temps réel, un cube directement sur les tables opérationnelles d’une source unique que peut être par exemple l’ERP aussi sous SQL server . Plus besoin, pour ce genre d’analyse opérationnelle de traitement ETL, ni de datawarehouse.

La BI traditionnelle n’en sera pas évincée pour autant car le croisement de divers sources d’informations fait qu’un datawarehouse et des traitements d’agrégations aux préalables seront toujours nécessaires. Ce nouveau système nous permet juste, d’avoir une souplesse en plus, une nouvelle possibilité de satisfaire les demandes opérationnelles de nos utilisateurs.

L’analytique en temps réel utilise principalement les « columnstore index »  modifiables sur une table rowstore. Sur le site de Microsoft cette partie est vraiment bien forumlée : « Le « columnstore index » gère une copie des données pour que les charges de travail OLTP et analytiques soient exécutées sur des copies distinctes des données. Cela réduit l’impact sur les performances de ces deux charges de travail en cours d’exécution en même temps. SQL Server gère automatiquement les modifications d’index pour que les changements OLTP soient toujours à jour pour l’analytique. Grâce à cette conception, il est possible et pratique d’exécuter l’analytique en temps réel sur des données à jour. Cela fonctionne aussi bien pour les tables sur disque que pour les tables optimisées en mémoire. »

Que pensez vous de cette super option?

voici ma source

5 mars 2018
par maryam khiali
0 Commentaires

Peut-on en savoir plus sur le « In memory column store »?

Grâce à un indexe particulier qu’est le « columnstore index », le stockage et le traitement des requêtes est optimisé pour :

  • les chargements  et le stockage en masse : une compression des données 10 fois supérieure à la taille des données non compressées. Ces taux de compression améliorent les performances des requêtes en utilisant moins de mémoire et donc en permettant à SQL Server d’exécuter davantage d’opérations.
  • les requêtes en lecture seule : des requêtes 10 fois plus performantes  en comparaison à un stockage orienté lignes traditionnel

Détails techniques intéressants :

  • le « cluster columnstore index » est modifiable et accompagnera tous les traitements massifs d’insertions, mises à jour  et suppressions.
  • un nouveau mécanisme d’exécution de requête, appelé « exécution en mode batch » a été ajouté à SQL Server pour réduire considérablement l’utilisation de l’UC

Scénarios BI :

Cas où cela peut être intéressant :

  • pour le stockage de grandes « tables de faits » ou « tables de dimensions »
  • pour les requêtes qui utilisent des analyses de table complètes

Cas où cela ne convient pas :

  • pour les requêtes qui effectuent des opérations de recherche de données sur une valeur particulière par exemple.

L’avez vous déjà mis en œuvre? Et dans quel cas?

Voici mes sources :
source 1
source 2
 

 

2 mars 2018
par maryam khiali
0 Commentaires

C’est quoi le In Memory OLTP ?

Sur les deux articles précédents, nous avons décrit les options présentes ou pas aux niveaux des différentes versions et éditions d’SQL server.
Encore faut-il comprendre à quoi servent ces options afin de savoir si dans notre cas client elles pourraient nous être indispensables…

Je vous propose lors des articles à venir de décrire ces options en restant sur un angle BI pour une lecture plus facile et orientée.

Commençons donc par l’option « In Memory OLTP ». Cette option apporte performance pour les traitements transactionnels en :
- supprimant des verrous entre les transactions exécutées simultanément.
- optimisant en mémoire, les algorithmes de stockage des données, les accès et les traitements des données.

Les objets qui permettent de bénéficier de ces performances sont :

  • Les « Memory optimized tables » : ces types de tables sont utilisées par exemple
    • pour les « table-valued parameters » : permettant de faire du chargement en bulk de plusieurs lignes de données en une fois.
    • dans les procédures stockées, pour les jeux de données intermédiaires stockés dans des tables de type de « Memory optimized tables » . Ces dernières hériteront des avantages des « non durable memory optimized tables  » : accès efficace aux données et absence d’E/S

Ce type d’objet ne réduit pas l’utilisation du processeur.
(si la plupart des requêtes effectuent des opérations d’agrégation sur de grandes plages de données  : utiliser plutôt des index columnstore)

  • Les « non durable tables memory optimized tables » : Le stockage principale de ces tables est la mémoire principale. Les modifications apportées à ces tables n’entraînent aucune E/S
  • Les « natively compiled T-SQL modules » (procédures stockées, déclencheurs et fonctions scalaires ) permettent d’accélérer encore plus l’exécution d’une transaction individuelle en réduisant les cycles processeur requis pour traiter les opérations.

Les scénarios BI qui peuvent nous intéresser :

Use case 1 : Remplacer certains objets standards de la tempdb :
- les « tables temporaires » (#temp) par les « Non durable tables memory optimized tables » qui réduisent généralement l’utilisation du processeur
- ou encore les « variables de table » par les « table-valued parameters » qui suppriment complètement les E/S de journal.

Use case 2 : au niveau de l’ETL

- Pour charger et mettre à jour d’importants volumes de données provenant de nombreuses sources différentes : utiliser des « non durable tables memory optimized tables » pour la mise en lots des données. Elles suppriment complètement les E/S et optimisent l’efficacité de l’accès aux données.

-Pour accélérer les transformations sur la table de mise en lots : utiliser des « natively compiled T-SQL modules« . De plus pour toujours plus de performance, il sera possible de paralléliser ces transformations.

J’espère que ce point est un peu plus clair…Dites moi ce que vous en pensez…Si vous avez déjà utilisés ces options…