-
Notifications
You must be signed in to change notification settings - Fork 5.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
*: support prepared plan cache for cached table #32139
*: support prepared plan cache for cached table #32139
Conversation
[REVIEW NOTIFICATION] This pull request has been approved by:
To complete the pull request process, please ask the reviewers in the list to review by filling The full list of commands accepted by this bot can be found here. Reviewer can indicate their review by submitting an approval review. |
Code Coverage Details: https://codecov.io/github/pingcap/tidb/commit/5ece89b572983d6cb8c0fde084a3aa2c65e914be |
/merge |
This pull request has been accepted and is ready to merge. Commit hash: 12ece11
|
@tiancaiamao: Your PR was out of date, I have automatically updated it for you. At the same time I will also trigger all tests for you: /run-all-tests If the CI test fails, you just re-trigger the test that failed and the bot will merge the PR for you after the CI passes. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the ti-community-infra/tichi repository. |
/merge |
/run-unit-test |
What problem does this PR solve?
Issue Number: close #32003
Problem Summary:
Make the cached table been able to use prepared plan cache.
Without plan cache, the performance decrease too much and counteract the benefit from table caching.
What is changed and how it works?
In the past, whether to read from table cache is decided in the logical plan optimize phase.
If the cache data is available, a
UnionScan
is added as the parent plan.The problem of that implementation is, with / wo table cache, the generated plan is different.
That means the plan can't be reused (the shape of the plan may change)
In this PR, to leverage prepared plan cache, I defer the
UnionScan
generation to the executor phase.In executor.build(), if table cache is available,
TableReader
will be changed toUnionScan->TableReader
.Most of the test code changes are unrelated...
Before this PR, we use "explain select ..." and check the
UnionScan
to verify that the table cache data is used.Now we can't do that because there will be no
UnionScan
in explain result any more.So the test code is updated.
Another unrelated change is that the "Cannot use IndexMerge on TableCache." warning is gone.
I don't mean to do that but since the code logic change, the restriction is temporarily removed.
There is already an issue for it #29682 and I'll fix later.
Check List
Tests
Side effects
Documentation
Release note