<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog BI Microsoft de Patrice Harel &#187; SSAS</title>
	<atom:link href="https://blog.developpez.com/patriceharel/pcategory/ssas/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/patriceharel</link>
	<description></description>
	<lastBuildDate>Wed, 05 Jan 2011 10:01:30 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Changer la base SSAS par défaut</title>
		<link>https://blog.developpez.com/patriceharel/p9588/ssas/changer_la_base_ssas_par_defaut</link>
		<comments>https://blog.developpez.com/patriceharel/p9588/ssas/changer_la_base_ssas_par_defaut#comments</comments>
		<pubDate>Fri, 17 Dec 2010 16:29:53 +0000</pubDate>
		<dc:creator><![CDATA[patriceharel]]></dc:creator>
				<category><![CDATA[SSAS]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Voici le problème auquel j’ai été confronté : des utilisateurs requêtant AS via Excel, disposent d’une chaîne de connexion sur cette instance AS sans avoir précisé la base de données (mot clé Catalog absent de la connection string : à éviter). Après quelques heures d’utilisation, ils se rendent compte que leurs chiffres ne sont pas bons et pour cause. La veille, de nouvelles versions de leurs bases de données avaient été livrées dans un ordre [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Voici le problème auquel j’ai été confronté : des utilisateurs requêtant AS via Excel, disposent d’une chaîne de connexion sur cette instance AS sans avoir précisé la base de données (mot clé <strong>Catalog absent de la connection string</strong> : à éviter). Après quelques heures d’utilisation, ils se rendent compte que leurs chiffres ne sont pas bons et pour cause. La veille, de  nouvelles versions de leurs bases de données avaient été livrées dans un ordre qui, je ne sais pas pourquoi, a fait changer la <strong>base dite par défaut</strong>. Du coup, leurs requêtes attaquaient la mauvaise base de données (le Catalog n’étant pas précisé, la base par défaut est utilisée).</p>
<p><strong>Ma question</strong> : comment déterminer la base qui est utilisée par défaut par notre instance ? Sur SQL, une requête du type <em>Exec sp_defaultdb @loginame=&rsquo;monLogin&rsquo;, @defdb=&rsquo;maBase&rsquo;</em> permet de modifier ce paramètre facilement. Je n’ai pas trouvé l’équivalent sur SSAS, en tous les cas pas en 2005 (je n’ai pas regardé pour 2008 et 2008R2).</p>
<p><span id="more-9"></span></p>
<p>En fouillant un peu dans les fichiers xml d’AS, j’ai trouvé la solution. Chaque base de données possède un fichier qualifié de « référence » pour l’ensemble de l’instance. Le nom de ce fichier est de la forme NomDeMaBaseAS.db.xml. Il contient entre autre le nom et l’ID de la base, les paramètres de traduction, les annotations, etc. Il contient également une propriété qui se nomme <strong>Ordinal</strong>, et qui précise justement la place de la base de données parmi les autres via un numéro. Si l’ordinal est 0, cette base sera la première, 1 la seconde et ainsi de suite. La base possédant le plus petit ordinal sera celle qui sera considérée comme étant celle par défaut. Il suffit donc de s’arranger pour que la base que vous souhaitez définir comme étant celle par défaut possède le plus petit ordinal. Fastidieux quand il y a beaucoup de base de données (une petite astuce pour éviter d&rsquo;avoir à parcourir tous les fichiers pour trouver le plus petit ordinal consiste à donner une valeur négative à l&rsquo;ordinal de la base par défaut : ça marche). C’est pour cela que si jamais vous connaissez une autre solution, je suis preneur. Autre précision, je ne sais pas comment sont déterminés ces ordinaux au moment des déploiements.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extraire votre script XMLA de création de base SSAS en AMO</title>
		<link>https://blog.developpez.com/patriceharel/p9495/ssas/extraire_votre_script_xmla_de_creation_d</link>
		<comments>https://blog.developpez.com/patriceharel/p9495/ssas/extraire_votre_script_xmla_de_creation_d#comments</comments>
		<pubDate>Tue, 16 Nov 2010 10:37:10 +0000</pubDate>
		<dc:creator><![CDATA[patriceharel]]></dc:creator>
				<category><![CDATA[SSAS]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[On m’a demandé il n’y a pas longtemps s’il était possible de récupérer le script de création d’une base AS. Bien entendu, Managment Studio permet de le faire simplement. Mais dans le cas qui nous intéresse, le script de création devait être récupéré lors des backups, donc de manière automatisée. Pour cela, il y a des classes en AMO qui permettent de le faire assez facilement. Un code du genre de celui-ci-dessous vous en donne [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>On m’a demandé il n’y a pas longtemps s’il était possible de récupérer le script de création d’une base AS. Bien entendu, Managment Studio permet de le faire simplement. Mais dans le cas qui nous intéresse, le script de création devait être récupéré lors des backups, donc de manière automatisée.<br />
Pour cela, il y a des classes en AMO qui permettent de le faire assez facilement. Un code du genre de celui-ci-dessous vous en donne un exemple :</p>
<p><span id="more-8"></span></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; srv.Connect(&quot;MonServeur\MonInstanceAS&quot;); <br />
&nbsp; Database db = srv.Databases.FindByName(&quot;MaBaseAS&quot;); <br />
&nbsp; Scripter scripter = new Scripter(); <br />
&nbsp; System.Xml.XmlTextWriter xmlWriter = new System.Xml.XmlTextWriter(&quot;C:\\MonScript.xml&quot;, Encoding.UTF8); <br />
&nbsp; Scripter.WriteCreate (xmlWriter ,srv,db,true, true); <br />
&nbsp; xmlWriter.Close();</div></div>
<p>Les deux derniers paramètres de la méthode WriteCreate de votre Scripter sont :</p>
<p><strong>fullExpanded :</strong></p>
<ul>
<li>false :le script ne contriendra que la création de la base</li>
<li>true : il incluera tous les objets de votre base (dimensions, cubes, etc.)</li>
</ul>
<p><strong>allowOverwrite :</strong></p>
<ul>
<li>false : lors de l’exécution du script, si la base existe, elle ne sera pas écrasée</li>
<li>true : c’est l’inverse</li>
</ul>
<p>L’objet Scripter possède bien d’autres méthodes que vous pouvez retrouver sur le net ou dans le livre MS SQL Server Analysis Services Unleashed.</p>
<p>Si jamais il y en a qui aime se prendre la tête, vous pouvez aussi « parser » le résultat d’une requête XMLA comme DISCOVER_XML_METADATA qui contient lui aussi toute la description de votre base (je dis ça parce que c’est ce que je cherchais à faire au début).</p>
<p>Source :<br />
MS SQL Server Analysis Services Unleashed (chapitre 34, p 694)</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HardMemoryLimit sur SSAS 2008</title>
		<link>https://blog.developpez.com/patriceharel/p9331/ssas/hardmemorylimit_sur_ssas_2008</link>
		<comments>https://blog.developpez.com/patriceharel/p9331/ssas/hardmemorylimit_sur_ssas_2008#comments</comments>
		<pubDate>Tue, 28 Sep 2010 12:19:18 +0000</pubDate>
		<dc:creator><![CDATA[patriceharel]]></dc:creator>
				<category><![CDATA[SSAS]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Si comme moi vous faites (encore) du tunning d&#8217;instances SSAS 2005, vous connaissez certainement les propriétés LowMemoryLimit (LML) et TotalMemoryLimit (TML). L&#8217;objet de ce billet n&#8217;est donc pas de présenter la fonction de ces deux éléments : pour cela vous trouverez des informations ici (page 92). Edit du 08/10/2010 : Je viens de tomber sur un post du très bon blog de François Jehl qui explique les subtilités de ce paramétrage : voir ici AS [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Si comme moi vous faites (encore) du tunning d&rsquo;instances SSAS 2005, vous connaissez certainement les propriétés LowMemoryLimit (LML) et TotalMemoryLimit (TML). L&rsquo;objet de ce billet n&rsquo;est donc pas de présenter la fonction de ces deux éléments : pour cela vous trouverez des informations <a href="http://sqlcat.com/whitepapers/archive/2007/11/19/analysis-services-2005-performance-guide.aspx">ici</a> (page 92).</p>
<p><ins>Edit du 08/10/2010 : Je viens de tomber sur un post du très bon blog de François Jehl qui explique les subtilités de ce paramétrage : <a href="http://fjehl.blogspot.com/2009/12/ssas-les-reglages-de-memoire.html">voir ici</a></ins></p>
<p>AS 2008 introduit une nouvelle propriété pour son modèle de gestion de la mémoire : le HardMemoryLimit (HML). Peu de documents parlent de cette propriété. J&rsquo;ai trouvé une référence <a href="http://sqlcat.com/technicalnotes/archive/2010/02/08/microsoft-sql-server-2008-analysis-services-consolidation-best-practices.aspx">ici</a> (merci Thomas).<br />
Le HML se paramètre de la même manière que le LML et le TML. Il permet de rentrer dans un mode encore plus agressif de nettoyage de la mêmoire : si besoin l&rsquo;ensemble de la mémoire shrinkable pourra être vidée, de même que les commandes en cours (processing et requête) pourront être annulées.<br />
Attention cependant, de manière analogue aux LML et TML, le HML ne constitue pas une limite physique de consommation de la mémoire, ce qui nous fait d&rsquo;ailleurs penser que son nom est mal choisi.</p>
<p>Source :</p>
<p><a href="http://msdn.microsoft.com/en-us/library/ee301976.aspx">BOL</a> (d&rsquo;ailleurs il y a une erreur sur cette page car le HardMemoryLimit n&rsquo;existe pas en 2005)<br />
<a href="http://connect.microsoft.com/SQLServer/feedback/details/533716/ssas-2008-hardmemorylimit-units">Connect</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Une opération de processing semble bloquée sur mon instance AS 2005</title>
		<link>https://blog.developpez.com/patriceharel/p9363/ssas/une_operation_de_processing_semble_bloqu_1</link>
		<comments>https://blog.developpez.com/patriceharel/p9363/ssas/une_operation_de_processing_semble_bloqu_1#comments</comments>
		<pubDate>Fri, 08 Oct 2010 15:23:29 +0000</pubDate>
		<dc:creator><![CDATA[patriceharel]]></dc:creator>
				<category><![CDATA[SSAS]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[J&#8217;ai récemment constaté un problème de blocage des processing de cube AS. Dans un premier temps, on a tendance à penser que le processing dure juste plus longtemps qu&#8217;à l&#8217;accoutumé. Mais quand ça fait 12h que ça tourne pour une opération qui prend en temps normal 1h, y’a quand même de quoi se poser des questions. En observant les compteurs de performance, on constate que, dans mon cas, l’instance est toujours en train de calculer [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>J&rsquo;ai récemment constaté un problème de blocage des processing de cube AS. Dans un premier temps, on a tendance à penser que le processing dure juste plus longtemps qu&rsquo;à l&rsquo;accoutumé. Mais quand ça fait 12h que ça tourne pour une opération qui prend en temps normal 1h, y’a quand même de quoi se poser des questions.</p>
<p><span id="more-7"></span></p>
<p>En observant les compteurs de performance, on constate que, dans mon cas, l’instance est toujours en train de calculer les indexes de mes partitions, et ça fait longtemps que ça dure :</p>
<p><img src="http://blog.developpez.com/media/New Picture.JPG" width="813" height="247" alt="" /><br />
<em>Courbe verte : nombre de lignes lues<br />
Courbe bleue : nombre de lignes &laquo;&nbsp;processées&nbsp;&raquo;<br />
Courbe verte : nombre de lignes écrites<br />
Courbe jaune : Nombre de partitions pour lesquelles les indexes et les agrégations sont en cours de calcul (axe des ordonnées de droite)</em></p>
<p>Et dans le même temps, au niveau de la consommation processeur, on constate que plus grand chose ne se passe, ce qui n&rsquo;est absolument pas normal étant donné que généralement, les étapes d&rsquo;indexation/agrégation sont les plus consommatrices de ressources CPU au cours du processing :</p>
<p><img src="http://blog.developpez.com/media/ssas2_01.JPG" width="713" height="144" alt="" /><br />
<em>Courbe verte : conso CPU en %</em></p>
<p>Ce cas de figure se présente surtout sur les grosses configurations serveur en 64 bits. Un article de Wayne Robertson <a href="http://blogs.msdn.com/b/psssql/archive/2007/01/16/processing-appears-to-stall-or-become-sluggish-on-multi-processor-machines-running-analysis-services-2005.aspx">ici</a> explique parfaitement le pourquoi du comment.</p>
<p>C&rsquo;est en fait un problème d&rsquo;attribution de threads à AS lorsque leur nombre dépasse la valeur de la propriété <strong>ThreadPool Process Max</strong>. Il existe une manière empirique pour calculer la valeur à imposer à cette propriété, et elle est également expliquée dans l&rsquo;article ci-dessus. Je vais quand même la rappeller ici :</p>
<p>Faire la somme des valeurs des compteurs de performance suivants (valeurs relevées pendant le hang du processing) :</p>
<ul>
<li>Processing Pool Idle Threads</li>
<li>Processing Pool Busy Threads</li>
<li>Processing Pool Job Queue Length</li>
</ul>
<p><strong>Remarque</strong> : attention toute fois à la modification de ce paramètre. D&rsquo;autres propriétés d&rsquo;AS sont à prendre en compte afin de maintenir l&rsquo;équilibre du système. Des infos sont disponibles dans le célébrissime livre blanc Performance guide que vous trouverez <a href="http://sqlcat.com/whitepapers/archive/2007/11/19/analysis-services-2005-performance-guide.aspx">ici</a> (cf page 65 : Executing Processing jobs).</p>
<p>Et pour aller plus loin, un chapitre tout entier est consacré à la gestion des threads dans le livre SQL Server 2008 Analysis Services Unleashed (chapitre 28, p 521).</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Modifier le rôle administrateur en XMLA</title>
		<link>https://blog.developpez.com/patriceharel/p9305/ssas/modifier_les_server_role_en_xmla</link>
		<comments>https://blog.developpez.com/patriceharel/p9305/ssas/modifier_les_server_role_en_xmla#comments</comments>
		<pubDate>Tue, 21 Sep 2010 17:09:27 +0000</pubDate>
		<dc:creator><![CDATA[patriceharel]]></dc:creator>
				<category><![CDATA[SSAS]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans la série &#171;&#160;c&#8217;est toujours bon de savoir comment faire autrement&#160;&#187;, voici une brève présentation de la manière de modifier les rôles serveurs sur SSAS autrement que par Management Studio. Pour rappel, le rôle serveur est celui qui permet d&#8217;être administrateur de l&#8217;instance AS (attention, pas du service AS, mais juste de la partie management des données, les droits sur le service sont au niveau de l&#8217;OS). Sur SSMS, nous procédons de la sorte : [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Dans la série &laquo;&nbsp;c&rsquo;est toujours bon de savoir comment faire autrement&nbsp;&raquo;, voici une brève présentation de la manière de modifier les rôles serveurs sur SSAS autrement que par Management Studio.<br />
Pour rappel, le rôle serveur est celui qui permet d&rsquo;être administrateur de l&rsquo;instance AS (attention, pas du service AS, mais juste de la partie management des données, les droits sur le service sont au niveau de l&rsquo;OS).<br />
Sur SSMS, nous procédons de la sorte : clic droit sur l&rsquo;instance, <strong>Properties</strong> puis <strong>Security</strong>.</p>
<p>Avec ASCMD, un XMLA avec cette tête permet de se passer de Management Studio (un vraie plaie de temps en temps) :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;Alter AllowCreate=&quot;true&quot; ObjectExpansion=&quot;ObjectProperties&quot; xmlns=&quot;http://schemas.microsoft.com/analysisservices/2003/engine&quot;&gt; <br />
&nbsp; &lt;Object&gt; <br />
&nbsp; &nbsp; &lt;RoleID&gt;Administrators&lt;/RoleID&gt; <br />
&nbsp; &lt;/Object&gt; <br />
&nbsp; &lt;ObjectDefinition&gt; <br />
&nbsp; &nbsp; &lt;Role xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;ID&gt;Administrators&lt;/ID&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;Name&gt;Administrators&lt;/Name&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;Members&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Name&gt;Domaine\Nom&lt;/Name&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/Member&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;/Members&gt; <br />
&nbsp; &nbsp; &lt;/Role&gt; <br />
&nbsp; &lt;/ObjectDefinition&gt; <br />
&lt;/Alter&gt;</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Changer l&#8217;emplacement du fichier de configuration d&#8217;AS (msmdsrv.ini)</title>
		<link>https://blog.developpez.com/patriceharel/p9289/ssas/changer_l_emplacement_du_fichier_de_conf</link>
		<comments>https://blog.developpez.com/patriceharel/p9289/ssas/changer_l_emplacement_du_fichier_de_conf#comments</comments>
		<pubDate>Wed, 15 Sep 2010 08:36:03 +0000</pubDate>
		<dc:creator><![CDATA[patriceharel]]></dc:creator>
				<category><![CDATA[SSAS]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Voici une astuce permettant la modification de l&#8217;emplacement du fichier de configuration de votre instance SSAS. Pour rappel ce fichier de configuration contient les propriétés de votre instance SSAS (les MemoryLimit, le chemin de vos fichiers de données, les paramètres du FlightRecorder, etc.). La modification de son emplacement se fait via l&#8217;éditeur de registre. Il faut modifier la valeur d&#8217;ImagePath située dans HKLM-SYSTEM-CurrentControlSet-Services puis MSSQLServerOLAPService (pour une instance par défaut) ou MSOLAP$InstanceName (pour une instance [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Voici une astuce permettant la modification de l&rsquo;emplacement du fichier de configuration de votre instance SSAS.<br />
Pour rappel ce fichier de configuration contient les propriétés de votre instance SSAS (les MemoryLimit, le chemin de vos fichiers de données, les paramètres du FlightRecorder, etc.).</p>
<p>La modification de son emplacement se fait via l&rsquo;éditeur de registre. Il faut modifier la valeur d&rsquo;ImagePath située dans <strong>HKLM-SYSTEM-CurrentControlSet-Services</strong> puis <strong>MSSQLServerOLAPService</strong> (pour une instance par défaut) ou <strong>MSOLAP$<em>InstanceName</em></strong> (pour une instance nommée). Le chemin du msmdsrv.ini se trouve après l&rsquo;option -s</p>
<p>Petit conseil, la manipulation doit se faire avec l&rsquo;instance AS éteinte.</p>
<p><strong>Remarque</strong> : si jamais l&rsquo;emplacement spécifié dans la clé de registre n&rsquo;est pas le bon (une faute de frappe est si vite arrivée), SSAS va quand même démarré et va créer un fichier de configuration tout neuf à l&rsquo;emplacement spécifié, mais avec <strong>tous les paramètres par défaut</strong>. Prudence donc si vous avez customisé votre fichier, car dans ce cas, les valeurs de vos paramètres seront celles que nous trouvons à l&rsquo;installation de l&rsquo;instance.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Freeze d&#8217;AS : Concurrence entre Processing et MDX</title>
		<link>https://blog.developpez.com/patriceharel/p9151/ssas/freeze_d_as_concurrence_entre_processing</link>
		<comments>https://blog.developpez.com/patriceharel/p9151/ssas/freeze_d_as_concurrence_entre_processing#comments</comments>
		<pubDate>Mon, 26 Jul 2010 14:23:53 +0000</pubDate>
		<dc:creator><![CDATA[patriceharel]]></dc:creator>
				<category><![CDATA[SSAS]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[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 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Voici un problème récurrent de <strong>freeze </strong>constaté sur une instance SSAS 2005 auquel j’ai été confronté un certain nombre de fois (attention, ce problème <strong>n’a pas été constaté sur 2008</strong>).</p>
<p><span id="more-3"></span></p>
<p>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.</p>
<p>Vous avez donc une instance SSAS qui tourne bien jusqu’à ce que vous constatiez que :</p>
<ul>
<li>Vous avez une opération de processing en cours sur l’une de vos bases qui ne se termine pas</li>
<li>Une partie de vos utilisateurs se plaignent car ils ne parviennent plus à obtenir des données de leur cube</li>
<li>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</li>
</ul>
<p>Voilà pour les symptômes de base. Maintenant, regardons ce qui se passe sur nos outils de monitoring (ici Performance Monitor et SQL Profiler).</p>
<p><img src="http://blog.developpez.com/media/PROFILERPROCESS.PNG" width="824" height="238" alt="" /></p>
<p>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).</p>
<p>Sur le Perfmon, nous pouvons observer qu’il y’a un problème d’utilisation du CPU (<strong>plateau </strong>à 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.</p>
<p><img src="http://blog.developpez.com/media/CPUPROCESS1.PNG" width="700" height="142" alt="" /><br />
<em>Note : Courbe Verte : Utilisation CPU du serveur/Courbe violette : Utilisation CPU par AS<br />
       Ordonnées: % d&rsquo;utilisation<br />
       Abscisses: Heure</em></p>
<p>Le blocage quasi complet de l’instance est donc dû à deux facteurs :</p>
<ul>
<li>Une opération de processing <strong>en cours</strong></li>
<li>Une requête dont le temps d’annulation est extrêmement long : dans notre cas, c’est lors du calcul des cellules <strong>NON EMPTY</strong> que le rollback prend beaucoup de temps. Ce comportement a été modifié avec 2008 et l’apparition du <strong>Subspace Computation</strong> (ou Block Computation). Voilà pourquoi pour le moment ce problème  n’a été observé que sous 2005</li>
</ul>
<p>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 <strong>phase de commit</strong>. Il les place dans sa file d’attente.</p>
<p>Si vous vous trouvez dans cette situation, il existe deux solutions :</p>
<ul>
<li>Attendre l’annulation effective de la requête</li>
<li>Ou redémarrer l’instance AS</li>
</ul>
<p>Le constat est que ces deux propositions ne sont pas du tout satisfaisantes. Attendre plusieurs minutes/heures, ou redémarrer l&rsquo;instance. Heureusement, il existe des moyens de contournement de ce problème :</p>
<ul>
<li>L’utilisation du NON EMPTY BEHAVIOUR pour l’optimisation des ordres NON EMPTY (attention à son utilisation sur 2008)</li>
<li>La réécriture des MDX (pas toujours possible, cela dépend de l’outil client)</li>
<li>Le passage à 2008 (et oui)</li>
</ul>
<p><strong>Voici quelques documents</strong> :</p>
<p>Subspace/Block Computing :<br />
<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=3be0488d-e7aa-4078-a050-ae39912d2e43&amp;displaylang=en">SSAS 2008 Performance Guide</a>, paragraphe 2.3.2.1</p>
<p>NON EMPTY BEHAVIOUR :<br />
<a href="http://sqlblog.com/blogs/marco_russo/archive/2006/12/25/clarification-on-non-empty-behavior-property-in-ssas-2005-sp2.aspx">Blog de Marco Russo</a><br />
<em>SSAS Unleashed</em>, chapitre 12, p196-197, chapitre 29 p 541</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilité du ForceCommitTimeout</title>
		<link>https://blog.developpez.com/patriceharel/p9140/ssas/utilite_du_forcecommittimeout</link>
		<comments>https://blog.developpez.com/patriceharel/p9140/ssas/utilite_du_forcecommittimeout#comments</comments>
		<pubDate>Thu, 22 Jul 2010 09:06:31 +0000</pubDate>
		<dc:creator><![CDATA[patriceharel]]></dc:creator>
				<category><![CDATA[SSAS]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Voici un petit cas d’utilisation permettant de montrer l’utilité du paramètre ForceCommitTimeout d’AS : Lorsque vous lancez un process de vos données (Cube ou Dimension), AS va d’abord écrire dans des fichiers différents de ceux qui existent actuellement dans son système de fichiers. La raison à cela, c’est de pouvoir permettre par exemple aux MDX lancées avant le début du process de se terminer correctement. Pour visualiser ce phénomène simplement, allez par exemple dans le [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Voici un petit cas d’utilisation permettant de montrer l’utilité du paramètre ForceCommitTimeout d’AS :</p>
<p><span id="more-2"></span></p>
<ul>
<li>Lorsque vous lancez un process de vos données (Cube ou Dimension), AS va d’abord écrire dans des fichiers différents de ceux qui existent actuellement dans son système de fichiers. La raison à cela, c’est de pouvoir permettre par exemple aux MDX lancées avant le début du process de se terminer correctement.<br />
Pour visualiser ce phénomène simplement, allez par exemple dans le répertoire contenant les données de faits de la partition 2001 du  groupe de mesure Internet Sales de votre base Adventure Works préférée, puis faites un Process de la partition. Vous devriez voir apparaître dans votre répertoire  des fichiers supplémentaires avec dans leur nom,  un numéro incrémenté de un par rapport au nom de la version des fichiers existants avant le process (en fonction du type de process utilisé, tous les fichiers ne sont pas obligatoirement modifiés).</li>
</ul>
<p><img src="http://blog.developpez.com/media/New Picture.png" width="496" height="115" alt="" /></p>
<ul>
<li>Une fois que ces nouveaux fichiers sont prêts à être publiés (« commités » en bon franglais), AS va vouloir poser des locks sur ceux contenant les anciennes données afin d’être sûre que plus aucun job ne les utilisera.</li>
<li>Imaginons justement qu&rsquo;AS ne puisse pas vérouiller ces fichiers, car ils sont actuellement utilisés par le moteur pour satisfaire une requête. C’est à ce moment que le ForceCommitTimeout entre en jeu. AS va attendre l’expiration de ce Timeout (par défaut à 30 secondes sur AS 2005 SP3 et AS 2008 SP1) avant de commencer à annuler les jobs des requêtes utilisant ces fichiers.</li>
<li>Une fois les requêtes annulées, AS pose ses verroux, supprime  les anciens fichiers et référence les nouveaux.</li>
</ul>
<p>Si vous êtes un adepte du SQL Profiler, vous pouvez voir l&rsquo;effet du ForceCommit de cette manière. Pour vous facilliter les choses, changez sa valeur dans les propriétés de votre instance de manière à être sûre d&rsquo;annuler une requête : 4 secondes c&rsquo;est pas mal, 4000 ms dans le fichier de configuration (c&rsquo;est vrai que je ne l&rsquo;ai pas précisé, mais le ForceCommit est applicable à l&rsquo;ensemble de votre instance).<br />
Lancez une requête bien sale, arrangez vous pour que son temps d&rsquo;exécution soit supérieure à 5-6 secondes (videz le Cache d&rsquo;AS). Voici le résultat sur le Profiler :</p>
<ul>
<li>Lignes 1 à 3 : AS a fini d&rsquo;écrire dans ses nouveaux fichiers</li>
<li>Ligne 4 à 11 : tentative d&rsquo;annulation de la requête en cours. Notons le session ID auquel appartient la transaction : 162150 dans la seonde colonne (TextData). Notons maintenant le SPID qui a lancé l&rsquo;ordre : 161355 dans la troisième colonne (SPID)</li>
<li>Ligne 12 : La requête est terminée, son SPID : 162150</li>
<li>Ligne 13 : Confirmation que la requête s&rsquo;est terminée, mais avec une erreur : l&rsquo;opération a été annulée par le serveur. C&rsquo;est le ForceCommit</li>
<li>Ligne 14 : Confirmation de la part d&rsquo;AS que les fichiers ont bien été mis à jour et sont disponibles</li>
<li>Ligne 15 : Fin du Process</li>
</ul>
<p><img src="http://blog.developpez.com/media/New Picture (2)_04.png" width="802" height="255" alt="" /></p>
<p>On peut donc dire que le ForceCommit a pour objectif de <strong>prioriser</strong> plus ou moins fortement les opérations de process par rapport aux opérations de requêtage (ce qui est logique dans la plupart des cas).</p>
<p>On comprend qu’un ForceCommit avec une valeur trop importante pourra entraîner un délai de process plus long car AS laissera plus de temps aux jobs pour se terminer avant de les annuler.</p>
<p>A l’inverse, un ForceCommit trop faible pourra potentiellement annuler les requêtes trop rapidement et vous attirer les foudres de vos utilisateurs.</p>
<p><strong>Attention donc</strong> : il faut lui donner une valeur en adéquation avec vos contraintes business, en fonction du nombre de process lancé dans une journée et du temps moyen d’exécution de vos requêtes.</p>
<p>Et pour finir, je précise, car certains font parfois une erreur d&rsquo;interprétation, que le ForceCommit sert à définir un Timeout sur les requêtes en cours d&rsquo;exécution <strong>pendant </strong>un process et non pas de manière générale.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vider le cache des objets SSAS</title>
		<link>https://blog.developpez.com/patriceharel/p9155/ssas/vider_le_cache_des_objets_ssas</link>
		<comments>https://blog.developpez.com/patriceharel/p9155/ssas/vider_le_cache_des_objets_ssas#comments</comments>
		<pubDate>Tue, 27 Jul 2010 10:52:31 +0000</pubDate>
		<dc:creator><![CDATA[patriceharel]]></dc:creator>
				<category><![CDATA[SSAS]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Je remets ici un morceau de code bien pratique qui permet de vider le cache de quelques objets sur SSAS. Au niveau de la base : &#60;ClearCache xmlns=&#34;http://schemas.microsoft.com/analysisservices/2003/engine&#34;&#62; &#160; &#60;Object&#62; &#160; &#160; &#60;DatabaseID&#62;Adventure Works DW 2008&#60;/DatabaseID&#62; &#160; &#60;/Object&#62; &#60;/ClearCache&#62; Au niveau du cube d’une base : &#60;ClearCache xmlns=&#34;http://schemas.microsoft.com/analysisservices/2003/engine&#34;&#62; &#160; &#60;Object&#62; &#160; &#160; &#60;DatabaseID&#62;Adventure Works DW 2008&#60;/DatabaseID&#62; &#160; &#160; &#60;CubeID&#62;Adventure Works&#60;/CubeID&#62; &#160; &#60;/Object&#62; &#60;/ClearCache&#62; Pour un groupe de mesure : &#60;ClearCache xmlns=&#34;http://schemas.microsoft.com/analysisservices/2003/engine&#34;&#62; &#160; &#60;Object&#62; &#160; &#160; [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Je remets ici un morceau de code bien pratique qui permet de vider le cache de quelques objets sur SSAS.</p>
<p>Au niveau de la base :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;ClearCache xmlns=&quot;http://schemas.microsoft.com/analysisservices/2003/engine&quot;&gt; <br />
&nbsp; &lt;Object&gt; <br />
&nbsp; &nbsp; &lt;DatabaseID&gt;Adventure Works DW 2008&lt;/DatabaseID&gt; <br />
&nbsp; &lt;/Object&gt; <br />
&lt;/ClearCache&gt;</div></div>
<p><span id="more-4"></span></p>
<p>Au niveau du cube d’une base :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;ClearCache xmlns=&quot;http://schemas.microsoft.com/analysisservices/2003/engine&quot;&gt; <br />
&nbsp; &lt;Object&gt; <br />
&nbsp; &nbsp; &lt;DatabaseID&gt;Adventure Works DW 2008&lt;/DatabaseID&gt; <br />
&nbsp; &nbsp; &lt;CubeID&gt;Adventure Works&lt;/CubeID&gt; <br />
&nbsp; &lt;/Object&gt; <br />
&lt;/ClearCache&gt;</div></div>
<p>Pour un groupe de mesure :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;ClearCache xmlns=&quot;http://schemas.microsoft.com/analysisservices/2003/engine&quot;&gt; <br />
&nbsp; &lt;Object&gt; <br />
&nbsp; &nbsp; &lt;DatabaseID&gt;Adventure Works DW 2008&lt;/DatabaseID&gt; <br />
&nbsp; &nbsp; &lt;CubeID&gt;Adventure Works&lt;/CubeID&gt; <br />
&nbsp; &nbsp; &lt;MeasureGroupID&gt;Internet Orders&lt;/MeasureGroupID&gt; <br />
&nbsp; &lt;/Object&gt; <br />
&lt;/ClearCache&gt;</div></div>
<p>Attention, ces commandes XMLA nécessitent bien l’<strong>ID</strong> des objets, et non leur nom. Sous Management Studio, pour les bases de données et les cubes, on retrouve l’information dans les propriétés de ces objets (<strong>clic droit-Properties</strong>).<br />
En revanche, cette manipulation n’est pas possible pour les groupes de mesures. Dans ce cas, on peut le faire de cette manière : <strong>clic droit sur le groupe de mesure-Script Measure Group As-Create To</strong> et récupérer l’ID dans le script de création. D’ailleurs, si jamais vous avez une autre solution, je suis preneur : celle-ci ne me satisfait pas.</p>
<p>Et pour ne pas avoir à rechercher par la suite ces scripts, nous pouvons les intégrer aux templates déjà présents sur Management Studio (merci Romuald). Pour cela, allez dans le menu <strong>View-Template Explorer</strong> pour afficher le volet Template Explorer, puis cliquez sur le cube de la fenêtre pour visualiser les modèles.</p>
<p><img src="http://blog.developpez.com/media/SSMS.PNG" width="228" height="476" alt="" /></p>
<p>Sources :<br />
<a href="http://www.ssas-info.com/analysis-services-faq/27-mdx/133-mdx-how-do-i-clear-analysis-services-ssas-database-cache">SSAS-info : Vidas Matelis</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
