août
2010
Voici un problème récurrent de freeze constaté sur une instance SSAS 2005 auquel j’ai été confronté un certain nombre de fois (attention, ce problème n’a pas été constaté sur 2008).
Je commence par préciser que les freeze AS peuvent être dû à une multitude de sources, je n’exposerai ici que l’une d’entre elles, clairement identifiée.
Vous avez donc une instance SSAS qui tourne bien jusqu’à ce que vous constatiez que :
- Vous avez une opération de processing en cours sur l’une de vos bases qui ne se termine pas
- Une partie de vos utilisateurs se plaignent car ils ne parviennent plus à obtenir des données de leur cube
- Toute nouvelle connexion à l’instance est impossible, cependant, les connexions établies avant le freeze restent actives, mais comme vu ci-dessus, une partie des requêtes ne passe plus
Voilà pour les symptômes de base. Maintenant, regardons ce qui se passe sur nos outils de monitoring (ici Performance Monitor et SQL Profiler).
On constate sur le Profiler qu’une transaction est en train d’être annulée par AS : pourquoi cela ? Parce qu’un processing est sur le point de se finir et tente d’annuler les requêtes en cours qui utilisent les fichiers que ce processing tente de modifier (voir le ForceCommitTimeout).
Sur le Perfmon, nous pouvons observer qu’il y’a un problème d’utilisation du CPU (plateau à partir de 13h40 généré par la non libération des ressources par le processing en cours et par l’annulation des requêtes). D’ailleurs, si on contrôle la valeur du nombre de thread accordé à AS, nous remarquons qu’il évolue peu ou pas du tout.
Note : Courbe Verte : Utilisation CPU du serveur/Courbe violette : Utilisation CPU par AS
Ordonnées: % d’utilisation
Abscisses: Heure
Le blocage quasi complet de l’instance est donc dû à deux facteurs :
- Une opération de processing en cours
- Une requête dont le temps d’annulation est extrêmement long : dans notre cas, c’est lors du calcul des cellules NON EMPTY que le rollback prend beaucoup de temps. Ce comportement a été modifié avec 2008 et l’apparition du Subspace Computation (ou Block Computation). Voilà pourquoi pour le moment ce problème n’a été observé que sous 2005
Pourquoi les nouvelles connexions à l’instance ne peuvent aboutir ? Simplement parce qu’AS n’établit pas de nouvelles connexions/requêtes quand une opération de processing est dans sa phase de commit. Il les place dans sa file d’attente.
Si vous vous trouvez dans cette situation, il existe deux solutions :
- Attendre l’annulation effective de la requête
- Ou redémarrer l’instance AS
Le constat est que ces deux propositions ne sont pas du tout satisfaisantes. Attendre plusieurs minutes/heures, ou redémarrer l’instance. Heureusement, il existe des moyens de contournement de ce problème :
- L’utilisation du NON EMPTY BEHAVIOUR pour l’optimisation des ordres NON EMPTY (attention à son utilisation sur 2008)
- La réécriture des MDX (pas toujours possible, cela dépend de l’outil client)
- Le passage à 2008 (et oui)
Voici quelques documents :
Subspace/Block Computing :
SSAS 2008 Performance Guide, paragraphe 2.3.2.1
NON EMPTY BEHAVIOUR :
Blog de Marco Russo
SSAS Unleashed, chapitre 12, p196-197, chapitre 29 p 541