There have been several bug reports about how the background encryption threads can use a lot of CPU. Prior analysis suggested those this is primarily caused by the operations that check for key rotation. As part of MDEV-11738, the innodb_encryption_rotate_key_age system variable's special 0 value was added to disable these checks, and this does seem to help most users.
The default value of innodb_encryption_rotate_key_age is 1, so key rotation checks will be enabled by default. The problem is that many encryption users will be using {file_key_management}} plugin, which doesn't even support key rotations. Many of these users are not aware that they should set innodb_encryption_rotate_key_age to 0, so their background threads will be using more CPU than is necessary.
Would it be possible to automatically disable key rotation checks for file_key_management plugin (and maybe other plugins that don't support key rotation)?
Attachments
Issue Links
causes
MDEV-35558fil_crypt_must_default_encrypt() is being called even if ENCRYPTION=NO
Open
is duplicated by
MDEV-17757MariaDB 10.1 encryption threads consume CPU 100%
Closed
relates to
MDEV-14398When innodb_encryption_rotate_key_age=0 is set, server won't encrypt tablespaces
Closed
MDEV-29652data-at-rest enabled high CPU use for long times
Closed
MDEV-20713Implement key rotation for file_key_management plugin
Open
MDEV-24426fil_crypt_thread keep spinning even if innodb_encryption_rotate_key_age=0
As far as I can see, there is no need to do key rotation if innodb-encryption-rotate-key-age=1 and latest key version is 1 (which is always the case with file_key_management plugin).
There is a need to encrypt existing tables, but I suppose MDEV-11738 already solves that.
Sergei Golubchik
added a comment - As far as I can see, there is no need to do key rotation if innodb-encryption-rotate-key-age=1 and latest key version is 1 (which is always the case with file_key_management plugin).
There is a need to encrypt existing tables, but I suppose MDEV-11738 already solves that.
This is not as easy as it sounds. To find out does table need to be encrypted or not when innodb-encryption-rotate-key-age=1 requires that we read at least page 0 from table tablespace. That is required to be done for every tablespace i.e. for big db's that could mean we are reading 10k-100k pages. Secondly, InnoDB does not really know what encryption plugin we are using, thus this would require a change to encryption plugin interface e.g. encryption_supports_key_rotation() function that we could call. Do not really know if you can say key_version = 1 ==> file_key_management_plugin is used?
Jan Lindström (Inactive)
added a comment - This is not as easy as it sounds. To find out does table need to be encrypted or not when innodb-encryption-rotate-key-age=1 requires that we read at least page 0 from table tablespace. That is required to be done for every tablespace i.e. for big db's that could mean we are reading 10k-100k pages. Secondly, InnoDB does not really know what encryption plugin we are using, thus this would require a change to encryption plugin interface e.g. encryption_supports_key_rotation() function that we could call. Do not really know if you can say key_version = 1 ==> file_key_management_plugin is used?
I mean, normally, if innodb-encryption-rotate-key-age=1, innodb needs to scan the tablespace to see if any of the pages is encrypted with the old key.
But "old" means "more than innodb-encryption-rotate-key-age behind the current key version".
So if the current key version is 1, there is no need to scan the tablespace.
This optimization does not require changing defaults and does not require extending the encryption API. InnoDB does not need to know what encryption plugin is used either.
Sergei Golubchik
added a comment - I mean, normally, if innodb-encryption-rotate-key-age=1, innodb needs to scan the tablespace to see if any of the pages is encrypted with the old key.
But "old" means "more than innodb-encryption-rotate-key-age behind the current key version".
So if the current key version is 1, there is no need to scan the tablespace.
This optimization does not require changing defaults and does not require extending the encryption API. InnoDB does not need to know what encryption plugin is used either.
Generally if current key version is less or equal than innodb-encryption-rotate-key-age, there is no need to scan. But innodb-encryption-rotate-key-age=key_version=1 is the most important practical use case.
Sergei Golubchik
added a comment - Generally if current key version is less or equal than innodb-encryption-rotate-key-age, there is no need to scan. But innodb-encryption-rotate-key-age=key_version=1 is the most important practical use case.
This is not a fully ready version and intentionally contains only xtradb implementation. I commit this for feedback as it uses quite radical idea but in my understanding there is not very good alternatives. Using fil_system list has a problem that already processed tablespaces can't be removed causing periodic check also for tablespaces not needing any operation anymore.
Jan Lindström (Inactive)
added a comment - This is not a fully ready version and intentionally contains only xtradb implementation. I commit this for feedback as it uses quite radical idea but in my understanding there is not very good alternatives. Using fil_system list has a problem that already processed tablespaces can't be removed causing periodic check also for tablespaces not needing any operation anymore.
https://github.com/MariaDB/server/commit/1a29767cd9a78ac396c4f1b4ae2f570cc3289c1f
I sent a few comments. Here are some more generic comments:
The title of the commit message is truncated, and there are some grammatical errors, such as writing "unnecessary" instead of "unnecessarily".
Apparently, the call to encryption_can_rotate() will determine if key rotation is supported. I would suggest to use a global variable for this instead, to be set when the encryption plugin is initialized. That should not require any changes to the encryption plugin function interface.
I am confused by the commit message. Where exactly does the following take place:
At startup, add all those tablespaces to key rotation list that need state change (i.e. unencrypted => encrypted or encrypted => uncenrypted). This is needed for ENCRYPTED=DEFAULT tables.
We do not want to read the first page of each data file at startup, to determine encryption status. Users would for sure be hurt by that. See MDEV-18733 for the latest fix in this area.
I feel that there is some overlap between your changes and MDEV-14398. Could you try to minimize the changes? I do not think that we need to change the function interface of encryption plugins.
Marko Mäkelä
added a comment - - edited I sent a few comments . Here are some more generic comments:
The title of the commit message is truncated, and there are some grammatical errors, such as writing "unnecessary" instead of "unnecessarily".
Apparently, the call to encryption_can_rotate() will determine if key rotation is supported. I would suggest to use a global variable for this instead , to be set when the encryption plugin is initialized. That should not require any changes to the encryption plugin function interface.
I am confused by the commit message. Where exactly does the following take place:
At startup, add all those tablespaces to key rotation list that need state change (i.e. unencrypted => encrypted or encrypted => uncenrypted). This is needed for ENCRYPTED=DEFAULT tables.
We do not want to read the first page of each data file at startup, to determine encryption status. Users would for sure be hurt by that. See MDEV-18733 for the latest fix in this area.
I feel that there is some overlap between your changes and MDEV-14398 . Could you try to minimize the changes? I do not think that we need to change the function interface of encryption plugins.
Idea is not to read the first page of each data file at startup, nothing is changed on that area. Whenever a new database is used e.g. in use db1; InnoDB will open all tables on that database and on fil_node_open_file we do read page 0 and there I added also insert that tablespace to key rotation list.
Can you explain how how we can avoid change the function interface of encryption plugins ? Actually we could avoid it with innodb_encryption_rotate_key_age=0 but that does not solve the default configuration case.
Jan Lindström (Inactive)
added a comment - Idea is not to read the first page of each data file at startup, nothing is changed on that area. Whenever a new database is used e.g. in use db1; InnoDB will open all tables on that database and on fil_node_open_file we do read page 0 and there I added also insert that tablespace to key rotation list.
Can you explain how how we can avoid change the function interface of encryption plugins ? Actually we could avoid it with innodb_encryption_rotate_key_age=0 but that does not solve the default configuration case.
Sorry, my comment was truncated. I edited it to clarify how exactly we can avoid changing the function interface.
I do not think that executing use db1 will invoke anything in InnoDB. The mysql client can execute additional statements behind the scenes unless it is invoked as mysql --no-auto-rehash.
Marko Mäkelä
added a comment - Sorry, my comment was truncated. I edited it to clarify how exactly we can avoid changing the function interface.
I do not think that executing use db1 will invoke anything in InnoDB. The mysql client can execute additional statements behind the scenes unless it is invoked as mysql --no-auto-rehash .
Also add system tablespace on key rotation list when it is created or opened after restart if it requires state change.
In my opinion there is no need to protect srv_encrypt_tables with fil_system or other mutex, concurrent global variable changes are already protected
Tests are not updated
Make sure that tablespaces are added to key rotation list only when they are first time accessed i.e. on create and open.
Jan Lindström (Inactive)
added a comment - Branch: bb-10.1- MDEV-14180
TODO:
Also add system tablespace on key rotation list when it is created or opened after restart if it requires state change.
In my opinion there is no need to protect srv_encrypt_tables with fil_system or other mutex, concurrent global variable changes are already protected
Tests are not updated
Make sure that tablespaces are added to key rotation list only when they are first time accessed i.e. on create and open.
origin/bb-10.6-MDEV-14180_1 703d69c2a89c57905c47bd9708f6356bbeb9028d 2021-03-03T17:27:31+05:30
worked well in RQG testing.
Matthias Leich
added a comment - origin/bb-10.6- MDEV-14180 _1 703d69c2a89c57905c47bd9708f6356bbeb9028d 2021-03-03T17:27:31+05:30
worked well in RQG testing.
Thank you. I posted some review comments. I would like to know how you tested this with both types of encryption plugins (with regard to supporting multiple key versions).
Marko Mäkelä
added a comment - Thank you. I posted some review comments. I would like to know how you tested this with both types of encryption plugins (with regard to supporting multiple key versions).
People
Thirunarayanan Balathandayuthapani
Geoff Montee (Inactive)
Votes:
1Vote for this issue
Watchers:
10Start watching this issue
Dates
Created:
Updated:
Resolved:
Git Integration
Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.
{"report":{"fcp":1775.1999998092651,"ttfb":852.1999998092651,"pageVisibility":"visible","entityId":63805,"key":"jira.project.issue.view-issue","isInitial":true,"threshold":1000,"elementTimings":{},"userDeviceMemory":8,"userDeviceProcessors":64,"apdex":0.5,"journeyId":"73ed564a-c80f-4e08-9718-95557f918106","navigationType":0,"readyForUser":1858.3999996185303,"redirectCount":0,"resourceLoadedEnd":1893.3000001907349,"resourceLoadedStart":857.1999998092651,"resourceTiming":[{"duration":283.8999996185303,"initiatorType":"link","name":"https://jira.mariadb.org/s/2c21342762a6a02add1c328bed317ffd-CDN/lu2bv2/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/css/_super/batch.css","startTime":857.1999998092651,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":857.1999998092651,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1141.0999994277954,"responseStart":0,"secureConnectionStart":0},{"duration":284.5999994277954,"initiatorType":"link","name":"https://jira.mariadb.org/s/7ebd35e77e471bc30ff0eba799ebc151-CDN/lu2bv2/820016/12ta74/2380add21a9a1006587582385952de73/_/download/contextbatch/css/jira.browse.project,project.issue.navigator,jira.view.issue,jira.general,jira.global,atl.general,-_super/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":857.5,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":857.5,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1142.0999994277954,"responseStart":0,"secureConnectionStart":0},{"duration":341.6000003814697,"initiatorType":"script","name":"https://jira.mariadb.org/s/e9b27a47da5fb0f74a35acd57e9847fb-CDN/lu2bv2/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/js/_super/batch.js?locale=en","startTime":857.5999994277954,"connectEnd":857.5999994277954,"connectStart":857.5999994277954,"domainLookupEnd":857.5999994277954,"domainLookupStart":857.5999994277954,"fetchStart":857.5999994277954,"redirectEnd":0,"redirectStart":0,"requestStart":857.5999994277954,"responseEnd":1199.1999998092651,"responseStart":1199.1999998092651,"secureConnectionStart":857.5999994277954},{"duration":472.8999996185303,"initiatorType":"script","name":"https://jira.mariadb.org/s/c32eb0da7ad9831253f8397e6cc26afd-CDN/lu2bv2/820016/12ta74/2380add21a9a1006587582385952de73/_/download/contextbatch/js/jira.browse.project,project.issue.navigator,jira.view.issue,jira.general,jira.global,atl.general,-_super/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en&slack-enabled=true","startTime":857.8000001907349,"connectEnd":857.8000001907349,"connectStart":857.8000001907349,"domainLookupEnd":857.8000001907349,"domainLookupStart":857.8000001907349,"fetchStart":857.8000001907349,"redirectEnd":0,"redirectStart":0,"requestStart":857.8000001907349,"responseEnd":1330.6999998092651,"responseStart":1330.6999998092651,"secureConnectionStart":857.8000001907349},{"duration":476.69999980926514,"initiatorType":"script","name":"https://jira.mariadb.org/s/bc0bcb146314416123c992714ee00ff7-CDN/lu2bv2/820016/12ta74/c92c0caa9a024ae85b0ebdbed7fb4bd7/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en","startTime":858,"connectEnd":858,"connectStart":858,"domainLookupEnd":858,"domainLookupStart":858,"fetchStart":858,"redirectEnd":0,"redirectStart":0,"requestStart":858,"responseEnd":1334.6999998092651,"responseStart":1334.6999998092651,"secureConnectionStart":858},{"duration":477.19999980926514,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bv2/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":858.1999998092651,"connectEnd":858.1999998092651,"connectStart":858.1999998092651,"domainLookupEnd":858.1999998092651,"domainLookupStart":858.1999998092651,"fetchStart":858.1999998092651,"redirectEnd":0,"redirectStart":0,"requestStart":858.1999998092651,"responseEnd":1335.3999996185303,"responseStart":1335.3000001907349,"secureConnectionStart":858.1999998092651},{"duration":477.5,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bv2/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":858.3999996185303,"connectEnd":858.3999996185303,"connectStart":858.3999996185303,"domainLookupEnd":858.3999996185303,"domainLookupStart":858.3999996185303,"fetchStart":858.3999996185303,"redirectEnd":0,"redirectStart":0,"requestStart":858.3999996185303,"responseEnd":1335.8999996185303,"responseStart":1335.8999996185303,"secureConnectionStart":858.3999996185303},{"duration":512.8000001907349,"initiatorType":"link","name":"https://jira.mariadb.org/s/b04b06a02d1959df322d9cded3aeecc1-CDN/lu2bv2/820016/12ta74/a2ff6aa845ffc9a1d22fe23d9ee791fc/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":858.5,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":858.5,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1371.3000001907349,"responseStart":0,"secureConnectionStart":0},{"duration":477.5999994277954,"initiatorType":"script","name":"https://jira.mariadb.org/rest/api/1.0/shortcuts/820016/47140b6e0a9bc2e4913da06536125810/shortcuts.js?context=issuenavigation&context=issueaction","startTime":858.8000001907349,"connectEnd":858.8000001907349,"connectStart":858.8000001907349,"domainLookupEnd":858.8000001907349,"domainLookupStart":858.8000001907349,"fetchStart":858.8000001907349,"redirectEnd":0,"redirectStart":0,"requestStart":858.8000001907349,"responseEnd":1336.3999996185303,"responseStart":1336.3999996185303,"secureConnectionStart":858.8000001907349},{"duration":512.5,"initiatorType":"link","name":"https://jira.mariadb.org/s/3ac36323ba5e4eb0af2aa7ac7211b4bb-CDN/lu2bv2/820016/12ta74/d176f0986478cc64f24226b3d20c140d/_/download/contextbatch/css/com.atlassian.jira.projects.sidebar.init,-_super,-project.issue.navigator,-jira.view.issue/batch.css?jira.create.linked.issue=true","startTime":859,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":859,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1371.5,"responseStart":0,"secureConnectionStart":0},{"duration":478,"initiatorType":"script","name":"https://jira.mariadb.org/s/719848dd97ebe0663199f49a3936487a-CDN/lu2bv2/820016/12ta74/d176f0986478cc64f24226b3d20c140d/_/download/contextbatch/js/com.atlassian.jira.projects.sidebar.init,-_super,-project.issue.navigator,-jira.view.issue/batch.js?jira.create.linked.issue=true&locale=en","startTime":859.0999994277954,"connectEnd":859.0999994277954,"connectStart":859.0999994277954,"domainLookupEnd":859.0999994277954,"domainLookupStart":859.0999994277954,"fetchStart":859.0999994277954,"redirectEnd":0,"redirectStart":0,"requestStart":859.0999994277954,"responseEnd":1337.0999994277954,"responseStart":1337.0999994277954,"secureConnectionStart":859.0999994277954},{"duration":917.5999994277954,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bv2/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-js/jira.webresources:bigpipe-js.js","startTime":870.8000001907349,"connectEnd":870.8000001907349,"connectStart":870.8000001907349,"domainLookupEnd":870.8000001907349,"domainLookupStart":870.8000001907349,"fetchStart":870.8000001907349,"redirectEnd":0,"redirectStart":0,"requestStart":870.8000001907349,"responseEnd":1788.3999996185303,"responseStart":1788.3999996185303,"secureConnectionStart":870.8000001907349},{"duration":916.6999998092651,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bv2/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-init/jira.webresources:bigpipe-init.js","startTime":884.1999998092651,"connectEnd":884.1999998092651,"connectStart":884.1999998092651,"domainLookupEnd":884.1999998092651,"domainLookupStart":884.1999998092651,"fetchStart":884.1999998092651,"redirectEnd":0,"redirectStart":0,"requestStart":884.1999998092651,"responseEnd":1800.8999996185303,"responseStart":1800.8000001907349,"secureConnectionStart":884.1999998092651},{"duration":144.9000005722046,"initiatorType":"xmlhttprequest","name":"https://jira.mariadb.org/rest/webResources/1.0/resources","startTime":1407.5999994277954,"connectEnd":1407.5999994277954,"connectStart":1407.5999994277954,"domainLookupEnd":1407.5999994277954,"domainLookupStart":1407.5999994277954,"fetchStart":1407.5999994277954,"redirectEnd":0,"redirectStart":0,"requestStart":1407.5999994277954,"responseEnd":1552.5,"responseStart":1552.5,"secureConnectionStart":1407.5999994277954},{"duration":208.69999980926514,"initiatorType":"link","name":"https://jira.mariadb.org/s/d5715adaadd168a9002b108b2b039b50-CDN/lu2bv2/820016/12ta74/be4b45e9cec53099498fa61c8b7acba4/_/download/contextbatch/css/jira.project.sidebar,-_super,-project.issue.navigator,-jira.general,-jira.browse.project,-jira.view.issue,-jira.global,-atl.general,-com.atlassian.jira.projects.sidebar.init/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":1684.5,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":1684.5,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1893.1999998092651,"responseStart":0,"secureConnectionStart":0},{"duration":208.30000019073486,"initiatorType":"link","name":"https://jira.mariadb.org/s/50bc9be5bfead1a25e72c1a9338c94f6-CDN/lu2bv2/820016/12ta74/e108c7645258ccb43280ed3404e3e949/_/download/contextbatch/css/com.atlassian.jira.plugins.jira-development-integration-plugin:0,-_super,-jira.view.issue,-jira.global,-jira.general,-jira.browse.project,-project.issue.navigator,-atl.general/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":1685,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":1685,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1893.3000001907349,"responseStart":0,"secureConnectionStart":0},{"duration":200,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bv2/820016/12ta74/e65b778d185daf5aee24936755b43da6/_/download/contextbatch/js/browser-metrics-plugin.contrib,-_super,-project.issue.navigator,-jira.view.issue,-atl.general/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":1685.8000001907349,"connectEnd":1685.8000001907349,"connectStart":1685.8000001907349,"domainLookupEnd":1685.8000001907349,"domainLookupStart":1685.8000001907349,"fetchStart":1685.8000001907349,"redirectEnd":0,"redirectStart":0,"requestStart":1685.8000001907349,"responseEnd":1885.8000001907349,"responseStart":1885.8000001907349,"secureConnectionStart":1685.8000001907349},{"duration":204.5999994277954,"initiatorType":"script","name":"https://jira.mariadb.org/s/53a43b6764f587426c7bb9a150184c00-CDN/lu2bv2/820016/12ta74/be4b45e9cec53099498fa61c8b7acba4/_/download/contextbatch/js/jira.project.sidebar,-_super,-project.issue.navigator,-jira.general,-jira.browse.project,-jira.view.issue,-jira.global,-atl.general,-com.atlassian.jira.projects.sidebar.init/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en&slack-enabled=true","startTime":1686.3000001907349,"connectEnd":1686.3000001907349,"connectStart":1686.3000001907349,"domainLookupEnd":1686.3000001907349,"domainLookupStart":1686.3000001907349,"fetchStart":1686.3000001907349,"redirectEnd":0,"redirectStart":0,"requestStart":1686.3000001907349,"responseEnd":1890.8999996185303,"responseStart":1890.8999996185303,"secureConnectionStart":1686.3000001907349},{"duration":205.9000005722046,"initiatorType":"script","name":"https://jira.mariadb.org/s/630dda803a823fdd5771c4338338e018-CDN/lu2bv2/820016/12ta74/e108c7645258ccb43280ed3404e3e949/_/download/contextbatch/js/com.atlassian.jira.plugins.jira-development-integration-plugin:0,-_super,-jira.view.issue,-jira.global,-jira.general,-jira.browse.project,-project.issue.navigator,-atl.general/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en&slack-enabled=true","startTime":1686.5999994277954,"connectEnd":1686.5999994277954,"connectStart":1686.5999994277954,"domainLookupEnd":1686.5999994277954,"domainLookupStart":1686.5999994277954,"fetchStart":1686.5999994277954,"redirectEnd":0,"redirectStart":0,"requestStart":1686.5999994277954,"responseEnd":1892.5,"responseStart":1892.5,"secureConnectionStart":1686.5999994277954},{"duration":140.4000005722046,"initiatorType":"script","name":"https://www.google-analytics.com/analytics.js","startTime":1768.0999994277954,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":1768.0999994277954,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1908.5,"responseStart":0,"secureConnectionStart":0}],"fetchStart":0,"domainLookupStart":0,"domainLookupEnd":0,"connectStart":0,"connectEnd":0,"requestStart":617,"responseStart":853,"responseEnd":884,"domLoading":856,"domInteractive":2013,"domContentLoadedEventStart":2013,"domContentLoadedEventEnd":2099,"domComplete":2317,"loadEventStart":2317,"loadEventEnd":2318,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[{"name":"bigPipe.sidebar-id.start","time":1917.5999994277954},{"name":"bigPipe.sidebar-id.end","time":1918.5},{"name":"bigPipe.activity-panel-pipe-id.start","time":1918.6999998092651},{"name":"bigPipe.activity-panel-pipe-id.end","time":1922.3999996185303},{"name":"activityTabFullyLoaded","time":2127.699999809265}],"measures":[],"correlationId":"5f3b4fc5a5d09d","effectiveType":"4g","downlink":10,"rtt":0,"serverDuration":141,"dbReadsTimeInMs":25,"dbConnsTimeInMs":35,"applicationHash":"9d11dbea5f4be3d4cc21f03a88dd11d8c8687422","experiments":[]}}
As far as I can see, there is no need to do key rotation if innodb-encryption-rotate-key-age=1 and latest key version is 1 (which is always the case with file_key_management plugin).
There is a need to encrypt existing tables, but I suppose
MDEV-11738already solves that.