The UNION ALL is to get the parallelism from the producer operator side.
When sending the rows to the consumer operator (the Update operator in your case), the data is not sent in a round robin fashion to the instances. That would hurt performance due to the context switching.
Instead, we send the data to the first instance. And if that first instance can keep up with the rate at which the data is going through the data streams, it will get all of the work.
When the first instance cannot keep up, we will begin to send data to the 2nd instance.
As you can see, the 3rd instance got no work, meaning you do not need 3 instances for that job.
In fact, you really do not need the 2nd instance either because it did so little. If you take away the 3rd instance, more sessions will be distributed to the other 2 instances and you will probably notice that the 2nd instance will get no rows.
In other words, the bottleneck is still with your pipes. A single instance of the Update operator can keep up with the rate that the data from those 6 pipes is feeding data to it.
↧