Skip to content
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-24.1: opt: don't apply huge cost for full scans of virtual tables #123893

Merged
merged 1 commit into from
May 15, 2024

Conversation

blathers-crl[bot]
Copy link

@blathers-crl blathers-crl bot commented May 9, 2024

Backport 1/1 commits from #123780 on behalf of @yuzefovich.

/cc @cockroachdb/release


This commit fixes - what I believe is - an oversight where we applied the huge cost to the plans with full scans of virtual tables when disallow_full_table_scans variable is set. The intent behind this penalty is to make plans with full scans prohibitively expensive so that other plans (without full scans) would be preferred, and if there is no other plan, then the query would error out. Implementation of this approach was incomplete for virtual tables: namely, we'd apply the cost penalty, but then we would not actually error out the query. Additionally, given that we don't have stats on virtual tables, we would apply the cost penalty to all full scans of virtual tables.

As a result, we would either pick a plan without the full scan (that might actually be worse) or would allow the plan with the full scan to get executed still. We would also favor plans with fewer full scans of virtual tables (which might also be worse than had we not applied the cost penalty). This commit adjusts the code to not apply the cost penalty to full scans of virtual tables.

This change is gated based on the new session variable optimizer_apply_full_scan_penalty_to_virtual_tables which defaults to false on master. We can discuss on the backport PRs whether it should be default to true there to require users to opt in for this PR to have an effect.

Fixes: #122708.

Release note: None


Release justification: bug fix.

This commit fixes - what I believe is - an oversight where we applied
the huge cost to the plans with full scans of virtual tables when
`disallow_full_table_scans` variable is set. The intent behind this
penalty is to make plans with full scans prohibitively expensive so
that other plans (without full scans) would be preferred, and if
there is no other plan, then the query would error out. Implementation
of this approach was incomplete for virtual tables: namely, we'd apply
the cost penalty, but then we would not actually error out the query.
Additionally, given that we don't have stats on virtual tables, we
would apply the cost penalty to all full scans of virtual tables.

As a result, we would either pick a plan without the full scan (that
might actually be worse) or would allow the plan with the full scan to
get executed still. We would also favor plans with fewer full scans of
virtual tables (which might also be worse than had we not applied the
cost penalty). This commit adjusts the code to not apply the cost
penalty to full scans of virtual tables.

This change is gated based on the new session variable
`optimizer_apply_full_scan_penalty_to_virtual_tables` which defaults to
`false` on master. We can discuss on the backport PRs whether it should
be default to `true` there to require users to opt in for this PR to
have an effect.

Release note: None
@blathers-crl blathers-crl bot force-pushed the blathers/backport-release-24.1-123780 branch from e0a3b56 to 99caaa8 Compare May 9, 2024 17:41
@blathers-crl blathers-crl bot requested a review from a team as a code owner May 9, 2024 17:41
@blathers-crl blathers-crl bot requested review from DrewKimball and removed request for a team May 9, 2024 17:41
@blathers-crl blathers-crl bot added blathers-backport This is a backport that Blathers created automatically. O-robot Originated from a bot. labels May 9, 2024
Copy link
Author

blathers-crl bot commented May 9, 2024

Thanks for opening a backport.

Please check the backport criteria before merging:

  • Backports should only be created for serious
    issues
    or test-only changes.
  • Backports should not break backwards-compatibility.
  • Backports should change as little code as possible.
  • Backports should not change on-disk formats or node communication protocols.
  • Backports should not add new functionality (except as defined
    here).
  • Backports must not add, edit, or otherwise modify cluster versions; or add version gates.
  • All backports must be reviewed by the owning areas TL and one additional
    TL. For more information as to how that review should be conducted, please consult the backport
    policy
    .
If your backport adds new functionality, please ensure that the following additional criteria are satisfied:
  • There is a high priority need for the functionality that cannot wait until the next release and is difficult to address in another way.
  • The new functionality is additive-only and only runs for clusters which have specifically “opted in” to it (e.g. by a cluster setting).
  • New code is protected by a conditional check that is trivial to verify and ensures that it only runs for opt-in clusters. State changes must be further protected such that nodes running old binaries will not be negatively impacted by the new state (with a mixed version test added).
  • The PM and TL on the team that owns the changed code have signed off that the change obeys the above rules.
  • Your backport must be accompanied by a post to the appropriate Slack
    channel (#db-backports-point-releases or #db-backports-XX-X-release) for awareness and discussion.

Also, please add a brief release justification to the body of your PR to justify this
backport.

@blathers-crl blathers-crl bot added the backport Label PR's that are backports to older release branches label May 9, 2024
@cockroach-teamcity
Copy link
Member

This change is Reviewable

@yuzefovich yuzefovich requested a review from mgartner May 9, 2024 17:52
Copy link
Collaborator

@DrewKimball DrewKimball left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:lgtm:

Reviewed 17 of 17 files at r1, all commit messages.
Reviewable status: :shipit: complete! 1 of 0 LGTMs obtained (waiting on @mgartner, @michae2, @rytaft, and @yuzefovich)

Copy link
Collaborator

@michae2 michae2 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:lgtm:

Reviewed 17 of 17 files at r1, all commit messages.
Reviewable status: :shipit: complete! 2 of 0 LGTMs obtained (waiting on @mgartner, @rytaft, and @yuzefovich)

@yuzefovich yuzefovich merged commit 905462e into release-24.1 May 15, 2024
19 of 20 checks passed
@yuzefovich yuzefovich deleted the blathers/backport-release-24.1-123780 branch May 15, 2024 17:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport Label PR's that are backports to older release branches blathers-backport This is a backport that Blathers created automatically. O-robot Originated from a bot.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants