Join optimizer can be very slow when the join has many tables and join prefix pruning feature doesn't manage to prune join prefixes.
An important special case is when a subset of join tables are joined with an equi-join condition on a primary key, and so can be joined using eq_ref in any order. Then, query plans that use different permutations of these tables have the same cost. The optimizer will consider all possible permutations. This can take a lot of CPU but provide little benefit.
The fix for MDEV-28073 addresses these issues to some extent and was pushed into 10.6. This MDEV is about more comprehensive fix.
Join prefix pruning is now controlled by @@optimizer_prune_level variable. The new pruning is done when @@optimizer_prune_level=2, which is the new default. One can disable certain aspects (TODO elaborate) of the new behavior by setting @@optimizer_prune_level=1 (the default before 10.10).
I have no arguments against pushing the feature as of bb-10.10-mdev28929-v4 ac3b3807cc into 10.10 main and releasing with 10.10.1.
Minority report
As discussed on different occasions before, I disagree with the line our optimizer takes for distinguishing use cases of interest from ignorable ones, bug-wise. There is a lot of confusion in regard to what is a "realistic" use case, and it becomes especially extreme when performance is concerned.
We do run lots of truly unrealistic queries in our tests, like when a bit column would be compared to a timestamp, or a meaningless chain of functions would be used, and so on. But I'm not talking about those.
What optimizer tends to demand for "realistic", when the data is nearly normally distributed, all tables are populated with a suitable number of rows, all needed indexes exist, and all join conditions are fulfilled, is not a realistic use case, it is an ideal use case. They do exist of course, but in the real world, for every ideal setup there will probably be hundreds of non-ideal ones. There are plenty of empty tables out there, the data is distributed in all possible ways, indexes are missing or misused, statistics aren't up-to-date, and filtering conditions miss the mark. It doesn't make them unrealistic or corner cases.
While it is totally fine to limit new improvements and fine-tuning to as narrow of a scope as we want, and use the ideal setup for demonstrating our superiority, it cannot be applied the same way to regression considerations. Small regressions can probably be tolerated, or at least it can be reasonably argued that if an application is so sensitive to performance fluctuations, it should be first of all optimized itself. But if an application had been doing the same things the same way for years and was performing reasonably well, and suddenly the latency of its query jumps from milliseconds to tens of minutes, there is no justification which can convince the affected users that it's not a bug but their fault. As we would consider a new crash or a wrong result on such a query to be a real regression and wouldn't claim that the user needs to rewrite the query, severe performance degradations should be treated the same way.
So, while officially testing the feature for wrong results and stability regressions, I was also taking sideline notes in regard to the performance (latency) comparison between the feature tree and the baseline. Unlike official benchmark and other "good" test configurations, mine is in no way tuned to highlight the strengths of the optimizer, if anything it's the contrary.
The good news is that even on my unfriendly test input, the supermajority of measurable results have shown improvement in the feature tree vs the baseline.
However, there has been a noticeable number of cases where the latency on the feature tree was dozens, hundreds or thousands times worse than on the baseline. A few samples provided for investigation were disqualified as non-bugs, because the optimizer isn't capable of handling them due to their deviations from the criteria for realistic queries, as described above, and thus they are not cases of interest.
Examples: MDEV-29072, MDEV-29073 (I stopped filing after that; a few more were discussed outside JIRA and ruled out on the same reasons).
I expect this approach to backfire when/if similar problems start affecting real users, but since that's the reality – the cases are not going to be fixed at least until real users complain – and the new feature seems to be doing more good than harm on average, I see no valid reasons to object against releasing it. Performance testing is not my specialty anyway, I cannot claim any expertise and have a decisive opinion on the subject.
Elena Stepanova
added a comment - I have no arguments against pushing the feature as of bb-10.10-mdev28929-v4 ac3b3807cc into 10.10 main and releasing with 10.10.1.
Minority report
As discussed on different occasions before, I disagree with the line our optimizer takes for distinguishing use cases of interest from ignorable ones, bug-wise. There is a lot of confusion in regard to what is a "realistic" use case, and it becomes especially extreme when performance is concerned.
We do run lots of truly unrealistic queries in our tests, like when a bit column would be compared to a timestamp, or a meaningless chain of functions would be used, and so on. But I'm not talking about those.
What optimizer tends to demand for "realistic", when the data is nearly normally distributed, all tables are populated with a suitable number of rows, all needed indexes exist, and all join conditions are fulfilled, is not a realistic use case, it is an ideal use case. They do exist of course, but in the real world, for every ideal setup there will probably be hundreds of non-ideal ones. There are plenty of empty tables out there, the data is distributed in all possible ways, indexes are missing or misused, statistics aren't up-to-date, and filtering conditions miss the mark. It doesn't make them unrealistic or corner cases.
While it is totally fine to limit new improvements and fine-tuning to as narrow of a scope as we want, and use the ideal setup for demonstrating our superiority, it cannot be applied the same way to regression considerations. Small regressions can probably be tolerated, or at least it can be reasonably argued that if an application is so sensitive to performance fluctuations, it should be first of all optimized itself. But if an application had been doing the same things the same way for years and was performing reasonably well , and suddenly the latency of its query jumps from milliseconds to tens of minutes, there is no justification which can convince the affected users that it's not a bug but their fault. As we would consider a new crash or a wrong result on such a query to be a real regression and wouldn't claim that the user needs to rewrite the query, severe performance degradations should be treated the same way.
So, while officially testing the feature for wrong results and stability regressions, I was also taking sideline notes in regard to the performance (latency) comparison between the feature tree and the baseline. Unlike official benchmark and other "good" test configurations, mine is in no way tuned to highlight the strengths of the optimizer, if anything it's the contrary.
The good news is that even on my unfriendly test input, the supermajority of measurable results have shown improvement in the feature tree vs the baseline.
However, there has been a noticeable number of cases where the latency on the feature tree was dozens, hundreds or thousands times worse than on the baseline. A few samples provided for investigation were disqualified as non-bugs, because the optimizer isn't capable of handling them due to their deviations from the criteria for realistic queries, as described above, and thus they are not cases of interest.
Examples: MDEV-29072 , MDEV-29073 (I stopped filing after that; a few more were discussed outside JIRA and ruled out on the same reasons).
I expect this approach to backfire when/if similar problems start affecting real users, but since that's the reality – the cases are not going to be fixed at least until real users complain – and the new feature seems to be doing more good than harm on average, I see no valid reasons to object against releasing it. Performance testing is not my specialty anyway, I cannot claim any expertise and have a decisive opinion on the subject.
one customer, impacted by same issue when there are good no. of tables to join then queries are stuck in "statistics" state and take long to generate EXPLAIN output. Lowering optimizer_search_depth to small value worked well and setting optimizer_search_depth=0 result as good workaround.
Muhammad Irfan
added a comment - one customer, impacted by same issue when there are good no. of tables to join then queries are stuck in "statistics" state and take long to generate EXPLAIN output. Lowering optimizer_search_depth to small value worked well and setting optimizer_search_depth=0 result as good workaround.
https://mariadb.com/kb/en/server-system-variables/#optimizer_search_depth
"Note that the value 0 (zero) is a special case where the optimiser chooses and sets the optimal search depth for each query, thus adding a bit of overhead to the optimisation process."
One of our customers, also having this problem at 10.6.10 release. Locally, I can repro this case, with their shared data and query.
The query looks to be having many tables involved in the join, executing this query getting stuck in the STATISTIC state forever.
For now, asked to set optimizer_search_depth=0 as a workaround, which made the query to execute faster though.
suresh ramagiri
added a comment - One of our customers, also having this problem at 10.6.10 release. Locally, I can repro this case, with their shared data and query.
The query looks to be having many tables involved in the join, executing this query getting stuck in the STATISTIC state forever.
For now, asked to set optimizer_search_depth=0 as a workaround, which made the query to execute faster though.
MDEV-28073 Query performance degradation in newer MariaDB versions when using many tables
The issue was that best_extension_by_limited_search() had to go through
too many plans with the same cost as there where many EQ_REF tables.
Fixed by shortcutting EQ_REF (AND REF) when the result only contains one
row. This got the optimization time down from hours to sub seconds.
Then, there were a series of commits pushed into 10.10.1+:
commit b3c74bdc1f09b2b8babd7f2bd9d52df2749ddcc3
Author: Monty <monty@mariadb.org>
Date: Tue May 31 17:36:32 2022 +0300
Improve pruning in greedy_search by sorting tables during search
MDEV-28073 Slow query performance in MariaDB when using many tables
...
... a few more related commits follow, until this one:
commit 515b9ad05a6de9dac3871ef2769dde1b5834c6e3
Author: Monty <monty@mariadb.org>
Date: Thu Jun 2 19:47:23 2022 +0300
Added EQ_REF chaining to the greedy_optimizer
MDEV-28073 Slow query performance in MariaDB when using many table
The idea is to prefer and chain EQ_REF tables (tables that uses an
unique key to find a row) when searching for the best table combination.
This significantly reduces row combinations that has to be examined.
This is optimization is enabled when setting optimizer_prune_level=2
(which is now default).
Implementation:
- optimizer_prune_level has a new level, 2, which enables EQ_REF
optimization in addition to the pruning done by level 1.
...
Then, there is this commit (also in 10.10.1+) which is a fix for patch for this MDEV and is the only one mentioning MDEV-28929:
commit 8c2faad576d6a77314e92755a389de2c41e21242
Author: Sergei Petrunia <sergey@mariadb.com>
Date: Tue Jul 19 14:13:17 2022 +0300
MDEV-28929: Plan selection takes forever with MDEV-28852 ...
Part #2: Extend heuristic pruning to use multiple tables as the
"Model tables".
The commits that fix this MDEV are b3c74bdc1f09b2b8babd7f2bd9d52df2749ddcc3..515b9ad05a6de9dac3871ef2769dde1b5834c6e3 , endpoints inclusive.
Sergei Petrunia
added a comment - ralf.gebhardt , I've checked.
There were multiple commits pushed that were marked with MDEV-28073 .
The fix for MDEV-28073 , pushed into 10.6+:
commit b729896d00e022f6205399376c0cc107e1ee0704
Author: Monty <monty@mariadb.org>
Date: Tue May 10 11:47:20 2022 +0300
MDEV-28073 Query performance degradation in newer MariaDB versions when using many tables
The issue was that best_extension_by_limited_search() had to go through
too many plans with the same cost as there where many EQ_REF tables.
Fixed by shortcutting EQ_REF (AND REF) when the result only contains one
row. This got the optimization time down from hours to sub seconds.
Then, there were a series of commits pushed into 10.10.1+:
commit b3c74bdc1f09b2b8babd7f2bd9d52df2749ddcc3
Author: Monty <monty@mariadb.org>
Date: Tue May 31 17:36:32 2022 +0300
Improve pruning in greedy_search by sorting tables during search
MDEV-28073 Slow query performance in MariaDB when using many tables
...
... a few more related commits follow, until this one:
commit 515b9ad05a6de9dac3871ef2769dde1b5834c6e3
Author: Monty <monty@mariadb.org>
Date: Thu Jun 2 19:47:23 2022 +0300
Added EQ_REF chaining to the greedy_optimizer
MDEV-28073 Slow query performance in MariaDB when using many table
The idea is to prefer and chain EQ_REF tables (tables that uses an
unique key to find a row) when searching for the best table combination.
This significantly reduces row combinations that has to be examined.
This is optimization is enabled when setting optimizer_prune_level=2
(which is now default).
Implementation:
- optimizer_prune_level has a new level, 2, which enables EQ_REF
optimization in addition to the pruning done by level 1.
...
Then, there is this commit (also in 10.10.1+) which is a fix for patch for this MDEV and is the only one mentioning MDEV-28929 :
commit 8c2faad576d6a77314e92755a389de2c41e21242
Author: Sergei Petrunia <sergey@mariadb.com>
Date: Tue Jul 19 14:13:17 2022 +0300
MDEV-28929: Plan selection takes forever with MDEV-28852 ...
Part #2: Extend heuristic pruning to use multiple tables as the
"Model tables".
The commits that fix this MDEV are b3c74bdc1f09b2b8babd7f2bd9d52df2749ddcc3..515b9ad05a6de9dac3871ef2769dde1b5834c6e3 , endpoints inclusive.
People
Sergei Petrunia
Sergei Petrunia
Votes:
1Vote for this issue
Watchers:
8Start 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":854.3000001907349,"ttfb":260.30000019073486,"pageVisibility":"visible","entityId":111937,"key":"jira.project.issue.view-issue","isInitial":true,"threshold":1000,"elementTimings":{},"userDeviceMemory":8,"userDeviceProcessors":64,"apdex":1,"journeyId":"a8a1c059-bef5-4139-ba15-8546f1d342a7","navigationType":0,"readyForUser":973.7000002861023,"redirectCount":0,"resourceLoadedEnd":1016.4000000953674,"resourceLoadedStart":265.80000019073486,"resourceTiming":[{"duration":60.90000009536743,"initiatorType":"link","name":"https://jira.mariadb.org/s/2c21342762a6a02add1c328bed317ffd-CDN/lu2cib/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/css/_super/batch.css","startTime":265.80000019073486,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":265.80000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":326.7000002861023,"responseStart":0,"secureConnectionStart":0},{"duration":61,"initiatorType":"link","name":"https://jira.mariadb.org/s/7ebd35e77e471bc30ff0eba799ebc151-CDN/lu2cib/820016/12ta74/494e4c556ecbb29f90a3d3b4f09cb99c/_/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&whisper-enabled=true","startTime":266.1000003814697,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":266.1000003814697,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":327.1000003814697,"responseStart":0,"secureConnectionStart":0},{"duration":115.80000019073486,"initiatorType":"script","name":"https://jira.mariadb.org/s/0917945aaa57108d00c5076fea35e069-CDN/lu2cib/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/js/_super/batch.js?locale=en","startTime":266.40000009536743,"connectEnd":266.40000009536743,"connectStart":266.40000009536743,"domainLookupEnd":266.40000009536743,"domainLookupStart":266.40000009536743,"fetchStart":266.40000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":266.40000009536743,"responseEnd":382.2000002861023,"responseStart":382.2000002861023,"secureConnectionStart":266.40000009536743},{"duration":244.80000019073486,"initiatorType":"script","name":"https://jira.mariadb.org/s/2d8175ec2fa4c816e8023260bd8c1786-CDN/lu2cib/820016/12ta74/494e4c556ecbb29f90a3d3b4f09cb99c/_/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&whisper-enabled=true","startTime":266.5,"connectEnd":266.5,"connectStart":266.5,"domainLookupEnd":266.5,"domainLookupStart":266.5,"fetchStart":266.5,"redirectEnd":0,"redirectStart":0,"requestStart":266.5,"responseEnd":511.30000019073486,"responseStart":511.30000019073486,"secureConnectionStart":266.5},{"duration":248.69999980926514,"initiatorType":"script","name":"https://jira.mariadb.org/s/a9324d6758d385eb45c462685ad88f1d-CDN/lu2cib/820016/12ta74/c92c0caa9a024ae85b0ebdbed7fb4bd7/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en","startTime":266.7000002861023,"connectEnd":266.7000002861023,"connectStart":266.7000002861023,"domainLookupEnd":266.7000002861023,"domainLookupStart":266.7000002861023,"fetchStart":266.7000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":266.7000002861023,"responseEnd":515.4000000953674,"responseStart":515.4000000953674,"secureConnectionStart":266.7000002861023},{"duration":249,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":266.90000009536743,"connectEnd":266.90000009536743,"connectStart":266.90000009536743,"domainLookupEnd":266.90000009536743,"domainLookupStart":266.90000009536743,"fetchStart":266.90000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":266.90000009536743,"responseEnd":515.9000000953674,"responseStart":515.9000000953674,"secureConnectionStart":266.90000009536743},{"duration":249.09999990463257,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":267.1000003814697,"connectEnd":267.1000003814697,"connectStart":267.1000003814697,"domainLookupEnd":267.1000003814697,"domainLookupStart":267.1000003814697,"fetchStart":267.1000003814697,"redirectEnd":0,"redirectStart":0,"requestStart":267.1000003814697,"responseEnd":516.2000002861023,"responseStart":516.2000002861023,"secureConnectionStart":267.1000003814697},{"duration":259.90000009536743,"initiatorType":"link","name":"https://jira.mariadb.org/s/b04b06a02d1959df322d9cded3aeecc1-CDN/lu2cib/820016/12ta74/a2ff6aa845ffc9a1d22fe23d9ee791fc/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":267.2000002861023,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":267.2000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":527.1000003814697,"responseStart":0,"secureConnectionStart":0},{"duration":249.40000009536743,"initiatorType":"script","name":"https://jira.mariadb.org/rest/api/1.0/shortcuts/820016/47140b6e0a9bc2e4913da06536125810/shortcuts.js?context=issuenavigation&context=issueaction","startTime":267.40000009536743,"connectEnd":267.40000009536743,"connectStart":267.40000009536743,"domainLookupEnd":267.40000009536743,"domainLookupStart":267.40000009536743,"fetchStart":267.40000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":267.40000009536743,"responseEnd":516.8000001907349,"responseStart":516.8000001907349,"secureConnectionStart":267.40000009536743},{"duration":259.59999990463257,"initiatorType":"link","name":"https://jira.mariadb.org/s/3ac36323ba5e4eb0af2aa7ac7211b4bb-CDN/lu2cib/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":267.6000003814697,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":267.6000003814697,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":527.2000002861023,"responseStart":0,"secureConnectionStart":0},{"duration":249.59999990463257,"initiatorType":"script","name":"https://jira.mariadb.org/s/5d5e8fe91fbc506585e83ea3b62ccc4b-CDN/lu2cib/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":267.80000019073486,"connectEnd":267.80000019073486,"connectStart":267.80000019073486,"domainLookupEnd":267.80000019073486,"domainLookupStart":267.80000019073486,"fetchStart":267.80000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":267.80000019073486,"responseEnd":517.4000000953674,"responseStart":517.4000000953674,"secureConnectionStart":267.80000019073486},{"duration":288.5,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-js/jira.webresources:bigpipe-js.js","startTime":274.2000002861023,"connectEnd":274.2000002861023,"connectStart":274.2000002861023,"domainLookupEnd":274.2000002861023,"domainLookupStart":274.2000002861023,"fetchStart":274.2000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":274.2000002861023,"responseEnd":562.7000002861023,"responseStart":562.7000002861023,"secureConnectionStart":274.2000002861023},{"duration":359.19999980926514,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-init/jira.webresources:bigpipe-init.js","startTime":274.6000003814697,"connectEnd":274.6000003814697,"connectStart":274.6000003814697,"domainLookupEnd":274.6000003814697,"domainLookupStart":274.6000003814697,"fetchStart":274.6000003814697,"redirectEnd":0,"redirectStart":0,"requestStart":274.6000003814697,"responseEnd":633.8000001907349,"responseStart":633.8000001907349,"secureConnectionStart":274.6000003814697},{"duration":65.09999990463257,"initiatorType":"xmlhttprequest","name":"https://jira.mariadb.org/rest/webResources/1.0/resources","startTime":539.1000003814697,"connectEnd":539.1000003814697,"connectStart":539.1000003814697,"domainLookupEnd":539.1000003814697,"domainLookupStart":539.1000003814697,"fetchStart":539.1000003814697,"redirectEnd":0,"redirectStart":0,"requestStart":539.1000003814697,"responseEnd":604.2000002861023,"responseStart":604.2000002861023,"secureConnectionStart":539.1000003814697},{"duration":205.10000038146973,"initiatorType":"link","name":"https://jira.mariadb.org/s/d5715adaadd168a9002b108b2b039b50-CDN/lu2cib/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&whisper-enabled=true","startTime":803.5,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":803.5,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1008.6000003814697,"responseStart":0,"secureConnectionStart":0},{"duration":202.7000002861023,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/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&whisper-enabled=true","startTime":804.4000000953674,"connectEnd":804.4000000953674,"connectStart":804.4000000953674,"domainLookupEnd":804.4000000953674,"domainLookupStart":804.4000000953674,"fetchStart":804.4000000953674,"redirectEnd":0,"redirectStart":0,"requestStart":804.4000000953674,"responseEnd":1007.1000003814697,"responseStart":1007.1000003814697,"secureConnectionStart":804.4000000953674},{"duration":201.80000019073486,"initiatorType":"script","name":"https://www.google-analytics.com/analytics.js","startTime":847.9000000953674,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":847.9000000953674,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1049.7000002861023,"responseStart":0,"secureConnectionStart":0},{"duration":211.5,"initiatorType":"script","name":"https://jira.mariadb.org/s/097ae97cb8fbec7d6ea4bbb1f26955b9-CDN/lu2cib/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&whisper-enabled=true","startTime":804.9000000953674,"connectEnd":804.9000000953674,"connectStart":804.9000000953674,"domainLookupEnd":804.9000000953674,"domainLookupStart":804.9000000953674,"fetchStart":804.9000000953674,"redirectEnd":0,"redirectStart":0,"requestStart":804.9000000953674,"responseEnd":1016.4000000953674,"responseStart":1016.4000000953674,"secureConnectionStart":804.9000000953674}],"fetchStart":0,"domainLookupStart":0,"domainLookupEnd":0,"connectStart":0,"connectEnd":0,"requestStart":87,"responseStart":260,"responseEnd":272,"domLoading":263,"domInteractive":1052,"domContentLoadedEventStart":1052,"domContentLoadedEventEnd":1114,"domComplete":1506,"loadEventStart":1506,"loadEventEnd":1507,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[{"name":"bigPipe.sidebar-id.start","time":1013.9000000953674},{"name":"bigPipe.sidebar-id.end","time":1014.7000002861023},{"name":"bigPipe.activity-panel-pipe-id.start","time":1014.9000000953674},{"name":"bigPipe.activity-panel-pipe-id.end","time":1018.1000003814697},{"name":"activityTabFullyLoaded","time":1134.5}],"measures":[],"correlationId":"325f4a609eb54d","effectiveType":"4g","downlink":10,"rtt":0,"serverDuration":117,"dbReadsTimeInMs":17,"dbConnsTimeInMs":27,"applicationHash":"9d11dbea5f4be3d4cc21f03a88dd11d8c8687422","experiments":[]}}
The branch is preview-10.10-optimizer