Improve performance of epics discussion.json endpoint
For the example epic &3003 (closed) the discussions.json
endpoint takes over 2 seconds to load and issues 243 SQL Queries.
The time taken to render issuable discussions seems to have a linear relationship with the number and length of discussions, which is to be expected.
The endpoint does allocate a lot of objects and is expensive in memory and CPU.
Stats
- The endpoint is handled by Groups::EpicsController#Discussions
- This ultimately inherits from the
IssuebleActions#discussions
action.
The example epic &3003 (closed):
- Allocates 900k objects
- Uses 130MB of memory
- Spends 1.5-2s of CPU time
A comparable issue is #288811 (closed)
- Allocates 825k Objects
- 144MB of memory
- Spends 1.5-2s of CPU time
Reproducing the issue
- Go to &3003 (closed) with Performance bar enabled,
- Select
discussions.json
from the PB dropdown, - Observe the length of the query time in network tab of developer tools,
- Use the
x-request-id
header to investigate the discussions.json` request in the performance bar.
Contribution to error budgets
This endpoint is the primary contributor to the groupproduct planning error budget, with about 1,000 requests per day having an unsatisfactory Apdex score. Any reduction in request duration will have a measurable effect on error budgets.
Proposal
- Investigate any way to reduce the top-percentile request duration on this endpoint, through:
- Caching
- Improved efficiency of banzai rendering
- Other reductions in memory and CPU use
- Other reduction in view rendering time
- Query tuning (there may be room for further improvement here)
- Other?
Edited by John Hope