-
Notifications
You must be signed in to change notification settings - Fork 3.8k
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
release-23.2: ttljob: add hint to use PK in delete/select query #118337
Conversation
e31ba0f
to
9720131
Compare
Thanks for opening a backport. Please check the backport criteria before merging:
If your backport adds new functionality, please ensure that the following additional criteria are satisfied:
Also, please add a brief release justification to the body of your PR to justify this |
It looks like your PR touches production code but doesn't add or edit any test code. Did you consider adding tests to your PR? 🦉 Hoot! I am a Blathers, a bot for CockroachDB. My owner is dev-inf. |
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.
Reviewed 1 of 1 files at r1, all commit messages.
Reviewable status: complete! 0 of 0 LGTMs obtained (waiting on @annrpom and @michae2)
I do have a minor nit: IIUC this change makes it so that we apply the index hint to both DELETE and SELECT queries, right? The commit title is a bit misleading then. |
I don't think the intent is to apply it to the SELECT. That should use a secondary index on the TTL column, correct @rafiss? Are there any tests we should add for this? |
this was not intended to change the SELECT query. that change seems reasonable, but should be done separately to keep the impact of the backport minimal.
well, not quite - the code does not assume the presence or absence of a secondary index on the TTL column. the SELECT query is crafted by constraining the query to each span's start/end primary key and filtering additionally by the expiration expression. the SELECT query bounds are tested extensively here:
These tests were recently updated to address #116845 |
I guess I'm confused. How do we know what PKs are ready to expire without looking them up by the TTL column? |
for each span of the table, the job executes queries of the form:
then it will run a DELETE query for the primary keys that are returned. |
But this PR modifies SELECT {pk column names}
FROM table@pkey
AS OF SYSTEM TIME '-30s'
WHERE {ttl expiration expression} < {~now}
AND <pk column names> >= {span start key}
AND <pk column names < {span end key} (in addition to DELETE query using the PK too). I thought it was desired but based on Rafi's comments this is unexpected? |
oohh i see, i missed that this relationName is used in both SelectQueryParams and DeleteQueryParams. that was my mistake. er well, i do think it's fine, but for the sake of a more minimal backport i can make it apply to only the DELETE. the initial intention when implementing TTL in crafting the SELECT and DELETE in this way was for it to always read from the primary index, so on the other hand, maybe i should just clarify the commit message as you originally suggested. wdyt? |
I think it makes sense that we'd apply the index hint to both SELECT and DELETE queries - indeed, the intention was always to fully specify PK values for both. So to me only adjusting the commit message seems good. Curious what Marcus thinks though. |
This will help avoid choosing a plan that scans a secondary index, which can lead to many KV rows being scanned and also lead to contention. This updates the query used for both SELECTs and DELETEs so that they use the primary index. Release note (bug fix): Fixed a bug that could cause DELETE queries sent by the row-level TTL job to use a secondary index rather than the primary index to find the rows to delete. This could lead to some DELETE operations taking a much longer time than they should. This bug was present since v22.2.0.
9720131
to
5cd0b04
Compare
SGTM. |
Backport 1/1 commits from #118318 on behalf of @rafiss.
/cc @cockroachdb/release
This will help avoid choosing a plan that scans a secondary index, which can lead to many KV rows being scanned and also lead to contention.
This updates the query used for both SELECTs and DELETEs so that they
use the primary index.
informs #82140
Release note (bug fix): Fixed a bug that could cause DELETE queries sent by the row-level TTL job to use a secondary index rather than the primary index to find the rows to delete. This could lead to some DELETE operations taking a much longer time than they should. This bug was present since v22.2.0.
Release justification: bug fix