Performance fixes - limit block search space and filter blocks earlier in query #114
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Mainnet usage of this API has exposed a performance issue where a simple request for events or actions on an account will scan the entire history of the blockchain by default. This creates a postgres query that takes quite some time (several minutes) to execute. At scale, this can turn into a database which is using all available read connections to process expensive queries and cannot accept a new connection event to execute a cheaper query.
Solution
This PR sets a maximum block range size and moves that filter to the top of the query so that the rest of the queries and graphQL resolver code is operating over a small set.