fix: optimize sql query used for the signer_state_count
metric
#73
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.
Closes #72
The sql query used for the
signer_state_count
prometheus metric was taking several minutes. This PR reduces it down to less than 1000ms, even for bucket ranges in the thousands.The main problem was caused by the size of the block_responses table, which is ~16 million rows. This is too slow to query using only
(block_hash, signer_key)
, even with an optimal composite index and query planner hinting.The solution in this PR is simple: first filter for the latest N block_responses responses using a fast
receive_at
timestamp comparison. A buffer time of 1 hour is used in the filter to account for timing discrepancies between block_proposal and block_response receipt times.