domain, session: Add new sysvarcache to replace global values cache (#24359) #26030
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.
cherry-pick #24359 to release-4.0
You can switch your code base to this Pull Request by using git-extras:
# In tidb repo: git pr https://github.com/pingcap/tidb/pull/26030
After apply modifications, you can push your change to this PR via:
What problem does this PR solve?
Issue Number: close #24326
Problem Summary:
The existing global vars cache only caches for 2 seconds, and does not perform notification to other servers when cache is invalid. This PR changes the design to be basically the same as the privileges system cache.
It fixes two immediate bugs:
SHOW VARIABLES
for the first time in a session previously took 1 second in some cases(!). It should now read the values from memory.What is changed and how it works?
What's Changed:
mysql.global_variables
.This opens the door, but does not fix some remaining issues - the session cache should be populated with a copy of all session vars when the session starts. Currently there is a lazy loading mechanism which is not MySQL compatible. It also caches some global variables in the session
systems[]
which is incorrect. In a followup PR I hope to remove the arraybuiltinGlobalVariable
and simplifyloadCommonGlobalVariablesIfNeeded
to just copy session vars.Related changes
Check List
Tests
I manually verified that behavior is correct with multiple servers receiving notice from etcd.
Side effects
SET GLOBAL
statement is run on the older version, it will not send an etcd notification to newer servers that their cache is stale. I think this behavior is acceptable, since the cache will be refreshed within a few minutes, but it should be made clear in the release notes.Release note