Performance
Request dequeueing
As discussed in previous sections, the QR provides the checkQueue
parameter to allow applications define how they would like to clear request queues. The default implementation provided uses a first-in, first-out (FIFO) approach. A table of queued requests is the input to this analytic. As the number of requests in the queue grows, the lookup of data for each can become a latency bottleneck. To improve this, a useFIFO
parameter has been added to the QR template. When enabled, the QR still implements FIFO but in a more performant way and bypasses checkQueue
hook.
Customized checkQueue
hook
The new FIFO mode will not be enabled if the QR has a custom analytic specified for the checkQueue
hook. To enable FIFO, ensure the analytic is set to dxQRCheckQueue
and set useFIFO=true
.
Logging
The QR logging has been made configurable. By default it uses the Platform version but can be configured to use a slimmer mode. This mode shortens the message text and simply pushes to STDOUT
.
This is set using the .qr.logmode
parameter:
platform Platform logging APIs (default)
slim new slim logging APIs
none disable QR-specific logging
4.5.0 improvements
For the 4.5.0 release, QR performance was improved in comparison to previous releases. The focus of the improvements is within the QR process itself, receiving and dispatching requests. This section details the improvements under three scenarios:
- Immediate – client sends requests for available database, immediately dispatched
- Queued – database unavailable, requests get queued
- Dequeued – queue of requests, requests dispatched when DB becomes available.
These scenarios are compared between 4.5.0 and 4.4.0.
4.5.0 release is running in FIFO mode.
By version
Base performance improvement between the two versions is shown in the table below. During the investigations, performance was shown to be linked to the number of processed requests or the size of the request queue. Two sets of tests were run to examine performance under different conditions; small and large numbers of queued/processed requests.
scenario | small | large |
---|---|---|
Immediate | 27% | 75% |
Queued | 35% | 42% |
Dequeued | 73% | 98% |
The results indicate that performance degradation was a significant issue in the 4.4.0 QR. Each of the test scenarios was also investigated on small and large numbers of processed and queued requests. In the immediate scenario, performance is linked to the number of requests. For the queue and dequeue cases, it is linked to the queue size. The table indicates the degradation for each version with the corresponding number of requests.
scenario | requests | 4.4.0 | 4.5.0 |
---|---|---|---|
Immediate | 100,000 | 64% | (negligible) |
Queued | 10,000 | (negligible) | (negligible) |
Dequeued | 10,000 | 94% | (negligible) |
In 4.5.0 FIFO mode, the QR shows negligible performance degradation as the number of requests grows.
Request dequeuing
Comparing the performance of FIFO mode against a simple custom dequeue analytic for the Dequeued scenario. The test is the same as before with a small and large number of queued requests. Using a queue size of 10,000 requests for the large case and less than 100 for the small case, the custom dequeue analytic performs 98% worse.
mode | degradation |
---|---|
FIFO | (negligible) |
Custom | 98% |
The other two scenarios are unaffected by this mode.
Logging
- Slim logging mode is 5-10% faster than the platform mode
- No QR logging is 20-30% faster than platform