<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.dafne.bi-services.sk/index.php?action=history&amp;feed=atom&amp;title=Analysing_processing_performance</id>
	<title>Analysing processing performance - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dafne.bi-services.sk/index.php?action=history&amp;feed=atom&amp;title=Analysing_processing_performance"/>
	<link rel="alternate" type="text/html" href="https://wiki.dafne.bi-services.sk/index.php?title=Analysing_processing_performance&amp;action=history"/>
	<updated>2026-10-23T19:24:59Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.4</generator>
	<entry>
		<id>https://wiki.dafne.bi-services.sk/index.php?title=Analysing_processing_performance&amp;diff=56&amp;oldid=prev</id>
		<title>Dafne: Documentation import</title>
		<link rel="alternate" type="text/html" href="https://wiki.dafne.bi-services.sk/index.php?title=Analysing_processing_performance&amp;diff=56&amp;oldid=prev"/>
		<updated>2026-08-06T13:36:40Z</updated>

		<summary type="html">&lt;p&gt;Documentation import&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[File:dashboard_overview.png|thumb|right|Dashboard]]&lt;br /&gt;
This page covers the situation where processing completes correctly but too late. The aim is to find out where the time goes and which changes will actually shorten the run.&lt;br /&gt;
&lt;br /&gt;
Occasional lateness caused by a failure is an operational matter — see [[Handling failed tasks]]. This page is about structural lateness that recurs.&lt;br /&gt;
&lt;br /&gt;
== Where to look ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tool !! Answers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039; || Is the run on track right now? Which errors keep recurring? How does parallelism develop over the run?&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Critical path&amp;#039;&amp;#039;&amp;#039; || Which chain of tasks determines when a given task can finish?&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Stats&amp;#039;&amp;#039;&amp;#039; || How long does this scenario normally take, and is it getting slower?&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Task statistics&amp;#039;&amp;#039;&amp;#039; || How does one task&amp;#039;s runtime behave over time?&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Visualization&amp;#039;&amp;#039;&amp;#039; || How is the task graph shaped?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Dashboard is only present when it is enabled for the installation.&lt;br /&gt;
&lt;br /&gt;
== Dashboard ==&lt;br /&gt;
The Dashboard gives the overall picture in one screen.&lt;br /&gt;
&lt;br /&gt;
=== Status chips ===&lt;br /&gt;
The chips along the top show the task counts by status group — Error, Running, Success, Manual and Waiting. Clicking a chip filters the view to that status group.&lt;br /&gt;
&lt;br /&gt;
Note that &amp;#039;&amp;#039;&amp;#039;Success&amp;#039;&amp;#039;&amp;#039; here aggregates both &amp;#039;&amp;#039;Finished&amp;#039;&amp;#039; and &amp;#039;&amp;#039;Warning&amp;#039;&amp;#039;. A run with many warnings will still look entirely green on this row; check the warnings separately.&lt;br /&gt;
&lt;br /&gt;
=== Recent errors ===&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;Recent errors&amp;#039;&amp;#039;&amp;#039; panel lists error messages with the processing, the task, the message text, a &amp;#039;&amp;#039;&amp;#039;count&amp;#039;&amp;#039;&amp;#039; and the time of the last attempt. Clicking the task name opens it in the Monitor.&lt;br /&gt;
&lt;br /&gt;
The count is the useful column. A task failing once is an incident; a task failing repeatedly across runs is a configuration problem, and the retries themselves may be a significant part of why the processing is late.&lt;br /&gt;
&lt;br /&gt;
=== Parallelism ===&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;Parallelism&amp;#039;&amp;#039;&amp;#039; panel charts the number of concurrently running tasks over the course of a processing.&lt;br /&gt;
&lt;br /&gt;
This is the most informative single view for tuning. Read it against the resource usage recorded on the database server and operating system over the same period:&lt;br /&gt;
* a &amp;#039;&amp;#039;&amp;#039;flat plateau&amp;#039;&amp;#039;&amp;#039; at a constant value means a limit is being hit — the global parallelism limit, or a group or connection limit&lt;br /&gt;
* a &amp;#039;&amp;#039;&amp;#039;long thin tail&amp;#039;&amp;#039;&amp;#039; means the run finishes on a small number of long tasks; adding capacity will not help, and the critical path is what matters&lt;br /&gt;
* a &amp;#039;&amp;#039;&amp;#039;deep trough&amp;#039;&amp;#039;&amp;#039; in the middle means the flow is serialising on a dependency&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;high parallelism combined with poor throughput&amp;#039;&amp;#039;&amp;#039; means overload — the tasks are competing rather than progressing&lt;br /&gt;
&lt;br /&gt;
Overload is defined as a combination of concurrently running tasks completing more slowly than they would have with less parallelism. Where this is happening, reducing parallelism will make the run faster, not slower. See [[Resource management]].&lt;br /&gt;
&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
[[File:dashboard_milestone.png|thumb|right|Milestone card]]&lt;br /&gt;
A milestone tracks progress towards a specific deliverable. Each card shows:&lt;br /&gt;
* the milestone name, its date and current status&lt;br /&gt;
* a &amp;#039;&amp;#039;&amp;#039;Reference&amp;#039;&amp;#039;&amp;#039; progress bar — progress against the normal profile for this run&lt;br /&gt;
* an &amp;#039;&amp;#039;&amp;#039;Actual&amp;#039;&amp;#039;&amp;#039; progress bar — progress achieved so far&lt;br /&gt;
* the &amp;#039;&amp;#039;&amp;#039;Deadline&amp;#039;&amp;#039;&amp;#039;, the &amp;#039;&amp;#039;&amp;#039;Reference finish&amp;#039;&amp;#039;&amp;#039; and the &amp;#039;&amp;#039;&amp;#039;Estimated finish&amp;#039;&amp;#039;&amp;#039;, with the estimate highlighted when it is late&lt;br /&gt;
&lt;br /&gt;
Comparing Reference against Actual shows not just that a run is late but &amp;#039;&amp;#039;&amp;#039;when&amp;#039;&amp;#039;&amp;#039; it fell behind. Clicking the card opens it in the Monitor; where a blocking task can be identified, the card links to it directly.&lt;br /&gt;
&lt;br /&gt;
== Critical path ==&lt;br /&gt;
For a scheduled task, &amp;#039;&amp;#039;&amp;#039;Show critical path&amp;#039;&amp;#039;&amp;#039; in the [[Monitor console]] detail panel identifies the chain of predecessor tasks that determines when that task can finish. It is enabled only where a path can be computed.&lt;br /&gt;
&lt;br /&gt;
This is the tool to use when a specific output is late. Optimising a task that is not on the critical path will not move the finish time; optimising one that is will. The usual outcomes are to tune the SQL of a task on the path, or to split a long task so that its successors can start earlier.&lt;br /&gt;
&lt;br /&gt;
== Statistics ==&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;Stats&amp;#039;&amp;#039;&amp;#039; screen shows runtime history. For a scenario, select it and set the number of &amp;#039;&amp;#039;&amp;#039;history days&amp;#039;&amp;#039;&amp;#039; to view. The chart plots the trend, and the table lists each run with:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Column !! Content&lt;br /&gt;
|-&lt;br /&gt;
| Date || Processing date&lt;br /&gt;
|-&lt;br /&gt;
| Iteration || Iteration code, where one is used&lt;br /&gt;
|-&lt;br /&gt;
| Task count || Number of tasks in the processing&lt;br /&gt;
|-&lt;br /&gt;
| Try count || Number of execution attempts&lt;br /&gt;
|-&lt;br /&gt;
| Processing time || Time attributable to task execution&lt;br /&gt;
|-&lt;br /&gt;
| Duration || Elapsed time of the processing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Two comparisons are worth making:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Try count against task count.&amp;#039;&amp;#039;&amp;#039; A try count well above the task count means work is being repeated. Repeated retries consume capacity that successful tasks could have used.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Processing time against duration.&amp;#039;&amp;#039;&amp;#039; A duration much larger than the processing time means the run spent its time waiting rather than working — on dependencies, on limits, or on nothing at all. That is a scheduling problem, not a SQL problem, and no amount of query tuning will fix it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Task statistics&amp;#039;&amp;#039;&amp;#039;, reached from the task detail panel in the Monitor, shows the same kind of history for a single task. Use it to confirm whether a task has genuinely become slower or simply ran late because it started late.&lt;br /&gt;
&lt;br /&gt;
== What to change ==&lt;br /&gt;
Once the bottleneck is identified, the available levers are:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Weights.&amp;#039;&amp;#039;&amp;#039; Where several tasks compete for the same resource, assign a weight reflecting the load each imposes, so that too many heavy tasks are not started together. Weights are set on the task and are not adjusted automatically — if a task&amp;#039;s resource demands change, the weight must be updated by hand. See [[Resource management]].&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Priority.&amp;#039;&amp;#039;&amp;#039; Raising the priority of a task that feeds a required output brings it forward. This works only if the task is not near the end of the dependency graph; if it needs most of the processing to complete first, priority will not help. Remember that priority is inherited through &amp;#039;&amp;#039;&amp;#039;task&amp;#039;&amp;#039;&amp;#039; dependencies only, not through group dependencies. See [[Prioritization]].&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Exclusive dependencies.&amp;#039;&amp;#039;&amp;#039; Where two tasks regularly cause lock waits or deadlocks when run together, make the dependency between them exclusive so they cannot run concurrently. See [[Dependencies]].&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Parallelism and load limits.&amp;#039;&amp;#039;&amp;#039; Set limits at the global, group or connection level. Where a group limit and a connection limit both apply, the stricter one applies.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Multiday modes.&amp;#039;&amp;#039;&amp;#039; For catch-up runs, the multiday mode determines how much can be done concurrently. A task set to &amp;#039;&amp;#039;Fully processed&amp;#039;&amp;#039; serialises everything behind it. See [[Parallelism]].&lt;br /&gt;
&lt;br /&gt;
== A note on parallelism ==&lt;br /&gt;
Raising parallelism is the intuitive response to a slow run and frequently the wrong one. In practice a level of parallelism that is too high exhausts the database engine&amp;#039;s resources, which then produces poor execution plans, and the whole run slows down.&lt;br /&gt;
&lt;br /&gt;
Change one limit at a time and compare the parallelism chart and the run duration before and after. Tuning several settings at once makes it impossible to attribute the result.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Resource management]]&lt;br /&gt;
* [[Prioritization]]&lt;br /&gt;
* [[Parallelism]]&lt;br /&gt;
* [[Monitor console]]&lt;/div&gt;</summary>
		<author><name>Dafne</name></author>
		
	</entry>
</feed>