<?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>Oracle - Concepts et Exemples &#187; Cary Millsap</title>
	<atom:link href="https://blog.developpez.com/pachot/category/traductions/cary-millsap/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/pachot</link>
	<description>Les fonctionalités et concepts d&#039;Oracle à partir de traductions et de démos</description>
	<lastBuildDate>Sun, 03 Apr 2016 20:36:21 +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>Performance: Temps de réponse vs. Débit, par Cary Millsap</title>
		<link>https://blog.developpez.com/pachot/cm_throughput_versus_response_time/</link>
		<comments>https://blog.developpez.com/pachot/cm_throughput_versus_response_time/#comments</comments>
		<pubDate>Tue, 25 May 2010 22:42:19 +0000</pubDate>
		<dc:creator><![CDATA[pachot]]></dc:creator>
				<category><![CDATA[Cary Millsap]]></category>
		<category><![CDATA[Traductions]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Cet article est la traduction d&#8217;un article de Cary Millsap publié sur son blog. L&#8217;article original en anglais est:Throughput versus Response Time. C&#8217;est un commentaire sur l&#8217;article de Doug Burns Time Matters: Throughput vs. Response Time. Cary Millsap est un &#8230; <a href="https://blog.developpez.com/pachot/cm_throughput_versus_response_time/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<blockquote><p><ins>Cet article est la traduction d&rsquo;un article de Cary Millsap publié sur son blog. L&rsquo;article original en anglais est:<a href="http://carymillsap.blogspot.com/2009/02/throughput-versus-response-time.html">Throughput versus Response Time</a>. C&rsquo;est un commentaire sur l&rsquo;article de Doug Burns <a href="http://blog.developpez.com/pachot/p8917/auteurs/doug-burns/db-throughput/">Time Matters: Throughput vs. Response Time</a>. Cary Millsap est un spécialiste de la performance, du tuning Oracle et a beaucoup écrit sur les files d&rsquo;attentes.<br />
</ins></p></blockquote>
<p>J&rsquo;ai apprécié le post de Doug Burns <a href="http://blog.developpez.com/pachot/db_throughput//" id="f2jr" title="Performance: Mesurer le temps de réponse ou le débit">Performance: Mesurer le temps de réponse ou le débit</a> sur son blog. Si vous ne l&rsquo;avez pas encore lu, vous devriez. L&rsquo;article et les commentaires sont excellents.<br />
La <strong>courbe de rendement</strong> (<strong>temps de réponse</strong> en fonction de la <strong>charge du système</strong>) fait un coude, au point où le temps de réponse, presque constant, devient tout d&rsquo;un coup exponentiel lorsque le système atteint une certaine charge. </p>
<blockquote><p><strong>Exemple de courbe de rendement tiré de <a href="http://books.google.com/books?id=mvJW6t7mYU0C&amp;lpg=PT256&amp;ots=p3vqPpiak9&amp;dq=knee%20M%2FM%2Fm%20queueing&amp;pg=PT285#v=onepage&amp;q=knee%20&amp;f=false">Optimizing Oracle performance</a></strong><br />
 &#8211; En abscisse (&#961;): la charge (ou utilisation),<br />
 &#8211; En ordonnée (R): le temps de réponse.<br />
 &#8211; Les 3 courbes correspondent à un degré de parallélisme de 1,2 et 8</p>
<p><img src="http://blog.developpez.com/media/knee.png" width="502" height="268" alt="Courbe charge/temps de réponse" /></p>
<p>Le &lsquo;coude&rsquo; (&lsquo;<em>knee</em>&lsquo;), est le point correspondant à la charge pour laquelle le rapport <strong>temps de réponse / utilisation</strong> est minimal.<br />
Il peut être déterminé aussi par la tangente à la courbe, passant par le point d&rsquo;origine des axes.<br />
Ce &lsquo;coude&rsquo; se décale vers la droite lorsque le degré de parallélisme augmente.</p></blockquote>
<p><span id="more-43"></span></p>
<p>Ce que Doug a observé, c&rsquo;est le fait que ce coude est le point où le rapport temps de réponse/débit est minimal. C&rsquo;est ce rapport qui est important ici. Ce n&rsquo;est pas le point où le temps de réponse est le plus rapide. Parce ce que, comme Doug l&rsquo;a fait remarquer, ce point serait là où il n&rsquo;y a pas d&rsquo;autre charge en dehors de la votre sur le système &#8230; ce qui est formidable pour vous, mais pas si bon pour les affaires.</p>
<p>Je voudrais insister sur quelques points. </p>
<p><strong>Batch ou transactionnel.</strong></p>
<p>Tout d&rsquo;abord, les exigences de performance sont complètement différentes pour du batch (traitement par lots, de nuit, &lsquo;<i>offline</i>&lsquo;,&#8230;) ou pour de l&rsquo;interactif (IHM, GUI, &lsquo;<i>online</i>&lsquo;, transactionnel,&#8230;), comme l&rsquo;on noté plusieurs commentaires sur le post de Doug.<br />
Pour les <code class="codecolorer text default"><span class="text">batch</span></code>, les gens cherchent normalement à avoir le <strong>débit maximum(<i>throughput</i>)</strong>.<br />
Avec un programmes <strong>interactif</strong>, les individus se soucient surtout de leur propre <strong>temps de réponse</strong>, et non pas du débit global de l&rsquo;ensemble des utilisateurs. Même si les managers de ces personnes, eux, vont se soucier du débit général. Les individus se préoccupent sans doute du débit du groupe aussi, mais pas au point de rester travailler plus tard quand leurs tâches individuelles s&rsquo;exécutent si lentement qu&rsquo;ils ne peuvent pas les achever au cours de la journée de travail.</p>
<p>Il n&rsquo;y a pas que les exigences de performance qui sont différentes pour un batch, mais l&rsquo;<strong>ordonnancement</strong> des batch va être différent aussi. Si vous êtes chanceux, vous pouvez planifier votre charge <strong>batch</strong> de manière <strong>déterministe</strong>. Par exemple, vous pouvez peut-être employer un Workload Manager qui alimente la charge du système au compte goutte, en maintenant l&rsquo;utilisation du système à 100% tout en faisant en sorte que la file d&rsquo;attente (<i>runqueue</i>) ne dépasse pas 1. Mais les charges du <strong>transactionnel</strong> (<i>online</i>) sont presque toujours <strong>non-déterministes</strong> , ce qui veut dire qu&rsquo;on ne peut pas les planifier du tout. C&rsquo;est pour cette raison que vous devez garder à portée de main une <strong>marge de ressource inutilisée</strong>. Parce que sinon la charge du système va dépasser le point où la courbe fait ce coude exponentiel. Et alors, même si l&rsquo;augmentation de charge est microscopique, le temps de réponse utilisateur va augmenter exponentiellement, ce qui entraîne douleurs et de souffrances&#8230;</p>
<p><strong>Le profiling.</strong></p>
<p>Le deuxième point que je veux aborder, et qui à mon avis n&rsquo;est souvent pas très bien compris: Il est essentiel, même lorsqu&rsquo;on cherche à optimiser le débit, de s&rsquo;interresser aux temps de réponses individuels, comme dans le <em>profiling</em>, en isolant une unité de tâche fonctionnelle particulière. Il y a de bonnes pratiques pour rendre une tâche plus rapide, et il y en a aussi de mauvaises. </p>
<ul>
<li>Les bonne pratiques sont celles qui cherchent à éliminer de la tâche tout le travail inutile, sans que cela ne cause des effets secondaires négatifs sur les autres tâches (sur celles que vous n&rsquo;êtes pas en train d&rsquo;analyser aujourd&rsquo;hui). </li>
<li>
Les mauvaises pratiques, elles, vont dégrader accidentellement les performances des autres tâches, de celles que vous êtes en train d&rsquo;analyser.</li>
</ul>
<p>Si vous restez dans les bonnes pratiques, vous ne verrez pas l&rsquo;effet &lsquo;en dents de scie&rsquo; auquel on pense souvent lorsqu&rsquo;on parle d&rsquo;optimiser une tâche à la fois. Vous savez: l&rsquo;idée qu&rsquo;en améliorant une unité de tâche A, on va dégrader une autre unité de tâche B, et que lorsqu&rsquo;on va faire le tuning de B, on va casser à nouveau ce qui a été fait sur A. Ces résultats en dents de scie vont arriver lorsqu&rsquo;on essaie de résoudre des problèmes de performance en modifiant des paramètres systèmes qui ont une portée globale. Par contre, si l&rsquo;on essaie d&rsquo;éliminer le travail inutile, alors le bénéfice est partagé, parce qu&rsquo;il va permettre aux tâches concurrentes de s&rsquo;exécuter plus vite aussi, puisque la tâche que vous avez optimisé utilise maintenant moins de ressources. Cela va permettre à tout le reste d&rsquo;accéder plus simplement, et à un moindre coût, aux ressources nécessaires, sans avoir à être en file d&rsquo;attente (<em>queue</em>) pour les obtenir.</p>
<p>C&rsquo;est là que les choses sérieuses commencent: lorsqu&rsquo;on essaie de comprendre comment éliminer ce travail inutile.<br />
Une grande partie des tâches que nous voyons peuvent souvent s&rsquo;améliorer en changeant <strong>juste quelques lignes de code</strong>. Par exemple la requête qui ne consomme plus que 9098 latches au lieu de 2142103, des choses comme ça (référence à <a href="http://karenmorton.blogspot.com/2008/07/analytics-to-rescue-followup.html">cet article</a> en anglais).<br />
Et beaucoup d&rsquo;autres tâches s&rsquo;améliorent simplement en faisant une <strong>collecte de statistiques</strong> (<i>analyze</i> ou plutôt <em>dbms_stats</em>) correcte (référence à <a href="http://method-r.com/downloads/doc_details/11-managing-statistics-for-optimal-query-performance-karen-morton">cet article</a> de Karen Morton en anglais).<br />
D&rsquo;autres fois cela nécessite un ajustement de la <strong>stratégie d&rsquo;indexation</strong>, ce qui peut paraître complexe lorsque vous avez besoin d&rsquo;optimiser un tout un ensemble de requêtes SQL (c&rsquo;est là qu&rsquo;il y a une possibilité de dents de scie). Mais même cela est plus ou moins un problème résolu si vous comprenez le travail de <a href="http://www.amazon.com/gp/product/0471719994?ie=UTF8&amp;tag=methodrcom-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0471719994">Tapio Lahdenmäki</a> </p>
<p>Mais revenons à l&rsquo;idée de départ de l&rsquo;article de Doug: je trouve tout a fait normal de vouloir optimiser à la fois le débit (<em>throughput</em>) et temps de réponse. C&rsquo;est la maîtrise d&rsquo;ouvrage, le métier, doit décider du bon compromis. Et je suis persuadé que si vous voulez avoir un quelconque espoir d&rsquo;optimiser quoi que ce soit (temps de réponse ou débit), il est essentiel de se concentrer sur cette <strong>élimination du travail inutile</strong>, individuellement pour chacune des tâches qui tournent en parallèle. </p>
<p>On peut voir cela de la manière suivante. Une tâche ne peut fonctionner à sa vitesse optimale que si elle est efficace. Vous ne pouvez pas savoir si une tâche est efficace sans avoir mesuré sa durée. Et je veux dire avoir mesuré la durée de cette tâche précisément, pas seulement une partie de cette tâche, ni l&rsquo;ensemble de cette tâche avec d&rsquo;autres autour d&rsquo;elle. C&rsquo;est cela le <i>profiling</i>: la mesure d&rsquo;une tâche précise, afin de déterminer exactement où elle passe son temps, et donc de savoir si cette tâche dépense efficacement le temps système et les ressources qu&rsquo;elle utilise.</p>
<p>Vous pouvez améliorer un système sans <i>profiling</i>, et même peut-être le rendre optimal. Mais sans savoir si ses tâches sont efficaces, vous ne saurez jamais si le système est optimal. Et sans faire du <i>profiling</i>, vous ne saurez pas si une tâche donnée est efficace. Et dans ce cas, vous perdez du temps et d&rsquo;argent. C&rsquo;est pourquoi j&rsquo;insiste sur le fait que le profiling d&rsquo;une tâche individuelle est absolument indispensable à quiconque veut optimiser les performances. </p>
<blockquote>
<table>
<tr>
<td>
<a href="http://www.amazon.com/dp/059600527X?tag=seainoradbaon-20&amp;camp=14573&amp;creative=327641&amp;linkCode=as1&amp;creativeASIN=059600527X&amp;adid=1NX72SDF7F46MAT586FP&amp;" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51Fqod0RczL._SL110_.jpg" /><br />
</a>
</td>
<td>
Optimizing Oracle Performance<br />
Par Cary Millsap et Jeff Holt<br />
<br />
<ins><br />
Plusieurs points évoqués ici sont détaillés dans ce livre:<br />
Courbe de rendement, profiling, théorie des files d&rsquo;attentes,&#8230;</p>
<p></ins>
</td>
</tr>
</table>
</blockquote>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
