api: fix /eval/X/builds requiring 5*len(builds)+1 SQL queries#1335
Draft
delroth wants to merge 1 commit intoNixOS:masterfrom
Draft
api: fix /eval/X/builds requiring 5*len(builds)+1 SQL queries#1335delroth wants to merge 1 commit intoNixOS:masterfrom
delroth wants to merge 1 commit intoNixOS:masterfrom
Conversation
Prefetch related tables that get fetched as part of serialization to JSON. Drop the `jobsetevals` field since making it efficient is trickier (due to not using DBIx native relationships but instead a many_to_many through a custom table). There is likely a way we could keep it and make it efficient, but I'm not fluent enough in DBIx to know.
d4c8344 to
cb10eef
Compare
Contributor
Author
|
Tested on hydra.nixos.org, fetching /builds for haskell-updates eval ID 1798805. Without change: times out after 15min. Still too slow / too much data for a nixpkgs/trunk eval unfortunately. |
Member
|
The |
Member
Tried this out on my personal instance with query log being activated and that works fine 👍 |
Member
|
Breaks the nixos-channel-scripts which depend on the https://github.com/NixOS/nixos-channel-scripts/blob/master/mirror-nixos-branch.pl#L103 |
Ma27
added a commit
to Ma27/hydra
that referenced
this pull request
Mar 16, 2024
That way it's possible to observe which queries are fired against the DB from DBIx. This is particularly useful to find out if DBIx correctly prefetches everything it needs or if too much / too few things are loaded, see e.g. NixOS#1335.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Prefetch related tables that get fetched as part of serialization to JSON. Drop the
jobsetevalsfield since making it efficient is trickier (due to not using DBIx native relationships but instead a many_to_many through a custom table). There is likely a way we could keep it and make it efficient, but I'm not fluent enough in DBIx to know.More context in NixOS/infra#270 . This used to """""work""""" (painfully inefficiently) but stopped working once the hydra.nixos.org got moved to a separate machine, inducing higher latency costs for each of the hundreds of thousands of SQL queries that need to run to generate the JSON output for this API endpoint.