-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Description
Environment
- Python version: 3.7
- NetBox version: 2.7.12, but issue exists on <= 2.8.1
Proposed Functionality
Improve the get_config_context serializer method that is observed to have slow performance that builds up as the number of fetched devices at a time increases.
I'm not sure exactly where the bottleneck is, but it does perform a very complex query that may be the cause of the overhead. I performed some profiling awhile back and noticed that the SQL queries used an acceptable amount of request time, but that it was mostly using CPU execution time. I'm not sure if this is still the case across the board, but it may be worthwhile to profile and optimize whatever calls are made under this get_config_context serializer method.
Use Case
Fetching 1000 devices by default takes ~60s. Without config context - using ?excludes=config_context - the response takes ~5 seconds. This large overhead was determined to be from the generation & merging of the config contexts that exist on devices / virtual machines. Reducing this performance overhead would make NetBox's usage much more friendly and acceptable.
Database Changes
This context is regenerated on every request on via this serialize. This then calls this complex query which either in the query, object generation, or serialization takes an enormous amount of time.
We would need to evaluate the performance of this query / method and determine where the bottleneck is occurring, and how to make it faster.
External Dependencies
N/A
Note that this is a revised version of #4544