-
Notifications
You must be signed in to change notification settings - Fork 275
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
do not hash the entire schema on every query plan cache lookup #5374
Conversation
This comment has been minimized.
This comment has been minimized.
CI performance tests
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On this PR, I think it's reasonable to check the "Changes are compatible" checkbox but not the introduction of new tests, so long as manual testing can be done — mostly because I think this might be complicated to test. And of course, "Performance impact assessed and acceptable" should be checked, if that is indeed true since this performance related.
Overall, it looks good to me, and thank you for taking care to make sure it matches our existing schema ID.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since schema_id()
is now precomputed and kept in the Schema
struct it’s tempting to make its other use (inject_schema_id
) take it from Schema
rather than compute it, but Schema
is not created by that point. It’s something we can refactor later (potentially easier after removing Deno entirely?) but doesn’t need to block this PR.
I'd like to have |
the perf tests have run and they're ok, but I suspect we would only see an effect on a huge schema |
@@ -261,7 +261,7 @@ where | |||
query: query.clone(), | |||
operation: operation.clone(), | |||
hash: doc.hash.clone(), | |||
sdl: Arc::clone(&self.schema.raw_sdl), | |||
schema_id: Arc::clone(&self.schema.hash), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: if schema_id
contains schema.hash
maybe it should be called schema_hash
.
just thinking out loud 💭
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I renamed it to schema_id
everywhere in fa19613 since we were already naming it that way elsewhere
Ok sounds good. Can you indicate that in the PR checklist? And check manual tests? |
Manual tests show on 500kB schema that schema hashing and cache lookup could account for up to 15% of CPU time, while now it is down to less than 1%, with a 20% improvement in requests per second |
We have a similar fix running in prod right now that showed similar improvements on real workloads 👍 |
This is causing performance issues on big schemas
Checklist
Complete the checklist (and note appropriate exceptions) before the PR is marked ready-for-review.
Exceptions
Note any exceptions here
Notes
Footnotes
It may be appropriate to bring upcoming changes to the attention of other (impacted) groups. Please endeavour to do this before seeking PR approval. The mechanism for doing this will vary considerably, so use your judgement as to how and when to do this. ↩
Configuration is an important part of many changes. Where applicable please try to document configuration examples. ↩
Tick whichever testing boxes are applicable. If you are adding Manual Tests, please document the manual testing (extensively) in the Exceptions. ↩