Avant la mise en production d’une base SSAS, il faut s’attarder sur la question du paramétrage de l’instance. Nous présenterons donc les principales optimisations de configuration d’une instance SSAS que l’on déterminera à partir de relevés issus d’un monitoring efficace. Nous attacherons une importance particulière au modèle de gestions des threads. Il faut avoir une relative bonne connaissance des modes de fonctionnement du moteur AS (SE et FE) afin de pouvoir appréhender cette session. Session présentée lors du SQLSaturday Paris 2014
7. Plan
Le processeur
La mémoire
Conclusion
SQLSaturday 323 – Paris 2014
8. Le processeur – les threads
Principe du thread pool
Utilisés pour
Exécuter une commande (parser)
Les calculs (FE)
Accéder aux données (SE)
Types de thread pool
Short command parsing
Long command parsing
Query execution
IO Process (depuis SSAS 2012)
Processing
SQLSaturday 323 – Paris 2014
9. Le processeur – les threads
Thread pool, I/O Completion Port
Thread pool
Job
Low
Normal
High
5 - Retourne
3- Fournit
SQLSaturday 323 – Paris 2014
I/O
Completion
1 - Demande Port
4 - Utilise
2 – En file
Propriétés SSAS importantes
MinThreads
MaxThreads
Concurrency
PriorityRatio
10. Le processeur – les threads
Un exemple d’exécution
MDX
Query Execution Pool
1 threads
SQLSaturday 323 – Paris 2014
Propriétés SSAS importantes
CoordinatorQueryMaxThreads
CoordinatorExecutionMode
CoordinatorQueryMaxThreads
CoordinatorBuildMaxThreads
IO Process Pool
Formula
Engine
Partitions
Segments
Storage
Engine
CoordinatorExecutionMode
CoordinatorQueryMaxThreads
11. Le processeur – les threads
Environnement multi-utilisateurs
Requête A
Scan de 30
segments
Requête B
En attente
de threads Requête C
Requête …
SQLSaturday 323 – Paris 2014
Propriétés SSAS importantes
CoordinatorQueryBalancingFactor
CoordinatorQueryBoostPriorityLevel
12. Le processeur – configuration de l’instance
2005
Process MaxThreads
64
Query MaxThreads
10
SQLSaturday 323 – Paris 2014
< 2005
Process MaxThreads
64 ou 10x cores
Query MaxThreads
10 ou 2x cores
Toutes versions
CoordinatorQueryBalancingFactor
De -1 à 1
CoordinatorQueryBoostPriorityLevel
De 3 à 0
14. Le processeur – monitoring
Les compteurs de performance
Busy, Idle, QueueLength
Short, Long, Query, IO Process, Non IO Process Pools
% Processor Time
Proc Indexes / Current Partitions
SQLSaturday 323 – Paris 2014
15. Le processeur – Interro
ThreadQueueLength>0
& IdleThreads=0
ThreadQueueLength>0
& IdleThreads>0
&CPU<>100%
SQLSaturday 323 – Paris 2014
16. La mémoire : Le prix à payer
Le Memory Manager de SSAS gère sa mémoire
selon un Modèle économique
Pour chaque structure de donnée il y a fixation d’un
Prix à payer / KB de mémoire
… au début c’est gratuit jusqu’à un certain niveau
Ensuite, plus l’espace mémoire est occupé plus le
prix du loyer augmente
Si une structure de données est utilisée pour une
commande elle gagne un revenu
Tant que son compte est créditeur elle peut payer
son loyer, sinon elle est vidée de la mémoire
SQLSaturday 323 – Paris 2014
17. La mémoire : Les types
SSAS scinde sa
mémoire en 2 types :
Shrinkable : contient
des objets qui
peuvent être nettoyés
Nonshrinkable :
contient des objets
non concernés par le
processus de
nettoyage
SQLSaturday 323 – Paris 2014
18. La mémoire : Les limites
Elles sont définies dans la configuration de
l’instance SSAS (msmdsrv.ini)
Exprimées en % par défaut / en octet si > 100
Ce sont les seuils de tolérances qui servent à
activer/désactiver le processus de nettoyage de
la mémoire
Le prix varie en fonction de l’évolution de la
mémoire entre ces bornes Il tient aussi
compte d’un seuil de prix intérmédiaire à partir
duquel il augmente plus vite (MidMemoryPrice)
SQLSaturday 323 – Paris 2014
19. La mémoire : LowMemoryLimit
Seuil en dessous duquel, la mémoire est
allouée en fonction des besoins
Un fois atteint, le prix augmente en partant de
zéro et les taxes sont prélevées
le processus de nettoyage démarre et libère
de l’espace mémoire en supprimant des
objets shrinkable dont le revenu est nul
NB : Un nettoyage agressif peut ramener la
mémoire largement en dessous de celui-ci
SQLSaturday 323 – Paris 2014
20. La mémoire : TotalMemoryLimit
Seuil à partir duquel le processus de
nettoyage est en mode crise
Prix = sa valeur max (HighMemoryPrice)
Passage des threads de nettoyage en
priorité haute. Ils bloquent les autres threads
tant que la mémoire utilisée n'est pas
redescendue sous le seuil
Les objets shrinkables doivent libérer la
mémoire même si leur solde est > 0
SQLSaturday 323 – Paris 2014
21. La mémoire : HardMemoryLimit
Seuil à partir duquel le processus de
nettoyage passe en Mode « sauve-qui-peut »
Dans un premier temps : Vidage de
l'ensemble de la mémoire Shrinkable
Si ce n'est pas suffisant : Annulation des
commandes de traitement et des requêtes
Valeur par défaut = (TotalMemoryLimit + min
(system physical memory, system total
available virtual memory))/2.
SQLSaturday 323 – Paris 2014
22. La mémoire : La face cachée
Le Memory Manager de SSAS gère
uniquement la mémoire du processus
msmdsrv.exe
Les fichiers de données peuvent être aussi
dans le WindowsFileSystemCache et monter
plus rapidement dans la mémoire de SSAS
en cas de besoin
La propriété LimitSystemFileCacheSizeMB
permet de limiter l’utilisation de ce cache
mémoire
Prendre en compte aussi le StandbyCache
SQLSaturday 323 – Paris 2014
24. Mémoire : Les compteurs du PerfMon
SQLSaturday 323 – Paris 2014
PerfMon permet de
monitorer des
compteurs des entrèes:
Mémoire (système)
MSOLAP$Instance
(SSAS)
Processus msmdsrv
(SSAS)
Ni pratique, ni
ergonomique
25. Monitorer et tester (ou inversement)
AS Performance WorkBench
Projet sur Codeplex
https://asperfwb.codeplex.com/
Permet de surveiller
plusieurs compteurs
Permet aussi de
lancer des requêtes
pour simuler un test
de charge simple
SQLSaturday 323 – Paris 2014
26. Collecter les données de monitoring
Depuis SSAS 2008
existent les DMV…
…mais c’est pas très
simple et funky à utiliser
Projet Codexplex
ResMon = base AS
dediée à la collecte de
ces données
C’est pas plus funky…
…mais au moins c’est plus
simple à mettre en place
http://tinyurl.com/kxyq92w
SQLSaturday 323 – Paris 2014
…à vous de jouer pour faire
mieux que moi avec Excel…
27. Microsoft SQL Server 2008 Analysis
Services Unleashed
Irina Gorbach, Alexander Berger, Edward Melomed
http://tinyurl.com/nsv2scu
Microsoft SQL Server Analysis
Services Multidimensional
Performance and Operations Guide
Thomas Kejser and Denny Lee
http://tinyurl.com/ohx87q2
SQLSaturday 323 – Paris 2014
Hinweis der Redaktion
Pool de thread :
- Par instance SSAS, donc dans le fichier de configuration
- Parallélisation des tâches
- Dépendant du processeur et de la mémoire (max 640 CPU : limitation Windows Server)
Utilisé pour :
- exécuter une commande
- Les calculs : définition des sous espaces (subcube), optimisation de l’espace (NonEmpty), plan d’exécution
- Processing : lecture des données sur le disque, indexation, agrégations
MinThreads : nombre de thread à l’initialisation du thread pool
MaxThreads : nombre de threads max, mais peut être dépassé (exemple de cas de threads alloués mais bloqués et considérés comme non actifs)
Concurrency : détermine un algorithme qui clacul le nombre de threads max actifs par CPU
PriorityRatio : détermine un ratio d’exécution des job de niveau de priorité inférieur
Une allocation de threads = 1Mo
Cas des threads crées alors que leur nombre excède le MaxThreads : temps d’allocation plus long (AS préfère attendre la désallocation d’autres threads plutôt que de surcharger le CPU et provoquer des changements de contexte)
Préciser que le FE est mono thread
Evoquer les astuces qui permettent de simuler le multi threads
CoordinatorExecutionMode :
- valeur par défaut -4 ce qui veut dire 4 threads par core donc 4 scanne de partitions (valable pour les queries et le processing)
- 0 : SSAS décide selon un algo interne
- valeur positive : nombre de thread pour l’instance
CoordinatorQueryMaxThreads :
- valeur par défaut 16 ce qui indique 16 threads de lecture de segment par partition