Currently, when searching for a contraction, the code in the function my_uca_contraction_weight() simply iterates through all items in a MY_CONTRACTIONS array.
So the performance depends on where the searched contraction resides in the list:
it is fast for contractions which are in the very beginning of the list
it is slow for contractions which are in the end of the list
Some collations can have many contractions. For example, utf8mb4_thai_520_w2 has 231 contractions. Searching for contractions that are in the end of the list can be really slow.
In the future versions of UCA collations we're going to enable built-in DUCET contractions. It has near 900 built-in contractions. It's important to have this problem fixed.
Benchmarking utf8mb4_thai_520_w2
Let's check contractions from the array thai_contractions in ctype-uca.c.
This is a relevant snapshop from ctype-uca.c:
/* thai_contraction[0] */
{ /* <THAI CHARACTER SARA E, THAI CHARACTER KO KAI> */
{ 0x0E40, 0x0E01, 0 },
{ 0x1F70, 0x1FAA, 0 },
FALSE
},
...
/* thai_contraction[7] */
{ /* <THAI CHARACTER SARA O, THAI CHARACTER KHO KHAI> */
{ 0x0E42, 0x0E02, 0 },
{ 0x1F71, 0x1FAC, 0 },
FALSE
},
...
/* thai_contraction[229] */
{ /* <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER HO NOKHUK> */
{ 0x0E44, 0x0E2E, 0 },
{ 0x1F9D, 0x1FAE, 0 },
FALSE
},
Now let's check the pefromance of the above three contractions:
The very first one
The contraction on the 7th position in the array
The contraction on the 229th position (the previous before the very last one)
The SQL code below intentionally adds digits 1 and 2 in the end of the left and right strings, to make the two strings primarily different, to avoid the comparison function going to the secondary level.
SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
DO BENCHMARK(10000000,strcmp('เก1','เก2'));
Query OK, 0 rows affected (0.439 sec)
SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
DO BENCHMARK(10000000,strcmp('โข1','โข2'));
Query OK, 0 rows affected (0.940 sec)
SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
DO BENCHMARK(10000000,strcmp('ไฮ1','ไฮ2'));
Query OK, 0 rows affected (15.805 sec)
Summary:
Ord Contraction Time
--- ----------- ----
0 เก 0.439
7 โข 0.940
229 ไฮ 15.805
Notice:
The contraction on the 7th position is twice slower than the very first one.
The contraction on the 229th position is 36 times slower than the very fitst one!
Benchmarking utf8mb4_croatian_ci
This collation has 9th contractions. Let's check their performance in the order of their appearance in the tailoring:
SET NAMES utf8mb4 COLLATE utf8mb4_croatian_ci;
DO BENCHMARK(10000000,strcmp('dž1','dž2'));
DO BENCHMARK(10000000,strcmp('Dž1','Dž2'));
DO BENCHMARK(10000000,strcmp('DŽ1','DŽ2'));
DO BENCHMARK(10000000,strcmp('lj1','lj2'));
DO BENCHMARK(10000000,strcmp('Lj1','Lj2'));
DO BENCHMARK(10000000,strcmp('LJ1','LJ2'));
DO BENCHMARK(10000000,strcmp('nj1','nj2'));
DO BENCHMARK(10000000,strcmp('Nj1','Nj2'));
DO BENCHMARK(10000000,strcmp('NJ1','NJ2'));
This is the output:
MariaDB [test]> DO BENCHMARK(10000000,strcmp('dž1','dž2'));
Query OK, 0 rows affected (0.397 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Dž1','Dž2'));
Query OK, 0 rows affected (0.452 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('DŽ1','DŽ2'));
Query OK, 0 rows affected (0.500 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('lj1','lj2'));
Query OK, 0 rows affected (0.535 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Lj1','Lj2'));
Query OK, 0 rows affected (0.593 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('LJ1','LJ2'));
Query OK, 0 rows affected (0.647 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('nj1','nj2'));
Query OK, 0 rows affected (0.700 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Nj1','Nj2'));
Query OK, 0 rows affected (0.753 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('NJ1','NJ2'));
Query OK, 0 rows affected (0.811 sec)
The summary:
Ord Contraction Time
--- ----------- ----
0 dž 0.397
1 Dž 0.452
2 DŽ 0.500
3 lj 0.535
4 Lj 0.593
5 LJ 0.647
6 nj 0.700
7 Nj 0.753
8 NJ 0.811
Proposal
The code should be fixed to use a hash table for contractions instead of the simple list iteration.
Attachments
Issue Links
blocks
MDEV-25829Change default Unicode collation to uca1400_ai_ci
Closed
relates to
MDEV-27266Improve UCA collation performance for utf8mb3 and utf8mb4
Closed
MDEV-32340Improve performance of my_uca_level_booster_simple_prefix_cmp
Linux 5.13.0-52-generic #59-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux
memory 64GiB System Memory
processor 11th Gen Intel(R) Core(TM) i7-11850H @ 2.50GHz
Summary utf8mb4_thai_520_w2
Ord
A
B
Old time
New Time
% New/Old
0
เก1
เก2
1.437
1.537
107
7
โข1
โข2
2.138
1.517
71
229
ไฮ1
ไฮ2
28.365
1.506
5
utf8mb4_croatian_ci
Ord
A
B
Old time
New Time
% New/Old
0
dž
dž
1.131
1.363
120
1
Dž
Dž
1.220
1.318
108
2
DŽ
DŽ
1.337
1.321
99
3
lj
lj
1.407
0.558
40
4
Lj
Lj
1.499
0.558
37
5
LJ
LJ
1.598
0.562
35
6
nj
nj
1.719
0.561
33
7
Nj
Nj
1.808
0.559
31
8
NJ
NJ
1.906
0.561
29
On my laptop searching for a contraction has showed a slightly worse result, but the improvements are still observable.
I also checked new collation uca1400_a(i\s)_c(i\s). For thai is everything is good:
Ord
A
B
ai_ci
as_ci
ai_cs
as_cs
0
เก1
เก2
1.452
1.450
1.450
1.454
7
โข1
โข2
1.442
1.450
1.447
1.442
229
ไฮ1
ไฮ2
1.428
1.433
1.432
1.435
but for uca1400_croatian_a(i\s)_c(i\s) the time increses when accent sensitive or case sensitive is used:
Ord
A
B
ai_ci
as_ci
ai_cs
as_cs
0
dž
dž
1.216
2.144
2.144
3.193
8
NJ
NJ
0.511
2.090
2.070
3.107
This doesn't look like a defect of the current task, but it might be improved in the future.
Lena Startseva
added a comment - Environment:
Linux 5.13.0-52-generic #59-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux
memory 64GiB System Memory
processor 11th Gen Intel(R) Core(TM) i7-11850H @ 2.50GHz
Summary
utf8mb4_thai_520_w2
Ord
A
B
Old time
New Time
% New/Old
0
เก1
เก2
1.437
1.537
107
7
โข1
โข2
2.138
1.517
71
229
ไฮ1
ไฮ2
28.365
1.506
5
utf8mb4_croatian_ci
Ord
A
B
Old time
New Time
% New/Old
0
dž
dž
1.131
1.363
120
1
Dž
Dž
1.220
1.318
108
2
DŽ
DŽ
1.337
1.321
99
3
lj
lj
1.407
0.558
40
4
Lj
Lj
1.499
0.558
37
5
LJ
LJ
1.598
0.562
35
6
nj
nj
1.719
0.561
33
7
Nj
Nj
1.808
0.559
31
8
NJ
NJ
1.906
0.561
29
On my laptop searching for a contraction has showed a slightly worse result, but the improvements are still observable.
I also checked new collation uca1400_a(i\s)_c(i\s) . For thai is everything is good:
Ord
A
B
ai_ci
as_ci
ai_cs
as_cs
0
เก1
เก2
1.452
1.450
1.450
1.454
7
โข1
โข2
1.442
1.450
1.447
1.442
229
ไฮ1
ไฮ2
1.428
1.433
1.432
1.435
but for uca1400_croatian_a(i\s)_c(i\s) the time increses when accent sensitive or case sensitive is used:
Ord
A
B
ai_ci
as_ci
ai_cs
as_cs
0
dž
dž
1.216
2.144
2.144
3.193
8
NJ
NJ
0.511
2.090
2.070
3.107
This doesn't look like a defect of the current task, but it might be improved in the future.
MariaDB [test]> SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
Query OK, 0 rows affected (0.001 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('เก1','เก2'));
Query OK, 0 rows affected (0.432 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('โข1','โข2'));
Query OK, 0 rows affected (0.884 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('ไฮ1','ไฮ2'));
Query OK, 0 rows affected (15.566 sec)
MariaDB [test]> SET NAMES utf8mb4 COLLATE utf8mb4_croatian_ci;
Query OK, 0 rows affected (0.001 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('dž','dž'));
Query OK, 0 rows affected (0.366 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Dž','Dž'));
Query OK, 0 rows affected (0.425 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('DŽ','DŽ'));
Query OK, 0 rows affected (0.472 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('lj','lj'));
Query OK, 0 rows affected (0.509 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Lj','Lj'));
Query OK, 0 rows affected (0.561 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('LJ','LJ'));
Query OK, 0 rows affected (0.622 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('nj','nj'));
Query OK, 0 rows affected (0.673 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Nj','Nj'));
Query OK, 0 rows affected (0.727 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('NJ','NJ'));
Query OK, 0 rows affected (0.786 sec)
New (after the patch)
MariaDB [test]> SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
Query OK, 0 rows affected (0.001 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('เก1','เก2'));
Query OK, 0 rows affected (0.531 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('โข1','โข2'));
Query OK, 0 rows affected (0.530 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('ไฮ1','ไฮ2'));
Query OK, 0 rows affected (0.531 sec)
MariaDB [test]> SET NAMES utf8mb4 COLLATE utf8mb4_croatian_ci;
Query OK, 0 rows affected (0.001 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('dž','dž'));
Query OK, 0 rows affected (0.503 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Dž','Dž'));
Query OK, 0 rows affected (0.507 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('DŽ','DŽ'));
Query OK, 0 rows affected (0.501 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('lj','lj'));
Query OK, 0 rows affected (0.154 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Lj','Lj'));
Query OK, 0 rows affected (0.155 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('LJ','LJ'));
Query OK, 0 rows affected (0.152 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('nj','nj'));
Query OK, 0 rows affected (0.152 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Nj','Nj'));
Query OK, 0 rows affected (0.153 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('NJ','NJ'));
Query OK, 0 rows affected (0.151 sec)
Summary
utf8mb4_thai_520_w2
Ord A B Old time New Time % New/Old
--- --- --- -------- -------- ---------
0 เก1 เก2 0.432 0.531 122
7 โข1 โข2 0.884 0.530 59
229 ไฮ1 ไฮ2 15.566 0.531 3
utf8mb4_croatian_ci
Ord A B Old time New time % New/Old
--- --- --- -------- -------- ---------
0 dž dž 0.366 0.503 137
1 Dž Dž 0.425 0.507 119
2 DŽ DŽ 0.472 0.501 106
3 lj lj 0.509 0.154 30
4 Lj Lj 0.561 0.155 27
5 LJ LJ 0.622 0.152 24
6 nj nj 0.673 0.152 22
7 Nj Nj 0.727 0.153 21
8 NJ NJ 0.786 0.151 19
Observation:
After the change, the contraction search time does not depend on the contraction ordinal position in the tailoring (it only depends on "ASCII or not ASCII")
Searching for the very last (but one) contraction in utf8mb4_thai_520_w2 now takes 3% of the old search time (30 times faster!)
Searching for the very last contraction in utf8mb4_croatian_ci now takes 19% of the old search time (5 times faster)
Alexander Barkov
added a comment - - edited Benchmarking
Scripts
-- Warning up
SET NAMES utf8mb4 COLLATE utf8mb4_general_ci;
DO BENCHMARK(10000000,strcmp( 'xxxx' , 'xxxx' ));
-- Benchmarking
SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
DO BENCHMARK(10000000,strcmp( 'เก1' , 'เก2' ));
DO BENCHMARK(10000000,strcmp( 'โข1' , 'โข2' ));
DO BENCHMARK(10000000,strcmp( 'ไฮ1' , 'ไฮ2' ));
-- Warning up
SET NAMES utf8mb4 COLLATE utf8mb4_general_ci;
DO BENCHMARK(10000000,strcmp( 'xxxx' , 'xxxx' ));
-- Benchmarking
SET NAMES utf8mb4 COLLATE utf8mb4_croatian_ci;
DO BENCHMARK(10000000,strcmp( 'dž' , 'dž' ));
DO BENCHMARK(10000000,strcmp( 'Dž' , 'Dž' ));
DO BENCHMARK(10000000,strcmp( 'DŽ' , 'DŽ' ));
DO BENCHMARK(10000000,strcmp( 'lj' , 'lj' ));
DO BENCHMARK(10000000,strcmp( 'Lj' , 'Lj' ));
DO BENCHMARK(10000000,strcmp( 'LJ' , 'LJ' ));
DO BENCHMARK(10000000,strcmp( 'nj' , 'nj' ));
DO BENCHMARK(10000000,strcmp( 'Nj' , 'Nj' ));
DO BENCHMARK(10000000,strcmp( 'NJ' , 'NJ' ));
Old (before the patch)
MariaDB [test]> SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
Query OK, 0 rows affected (0.001 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('เก1','เก2'));
Query OK, 0 rows affected (0.432 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('โข1','โข2'));
Query OK, 0 rows affected (0.884 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('ไฮ1','ไฮ2'));
Query OK, 0 rows affected (15.566 sec)
MariaDB [test]> SET NAMES utf8mb4 COLLATE utf8mb4_croatian_ci;
Query OK, 0 rows affected (0.001 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('dž','dž'));
Query OK, 0 rows affected (0.366 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Dž','Dž'));
Query OK, 0 rows affected (0.425 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('DŽ','DŽ'));
Query OK, 0 rows affected (0.472 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('lj','lj'));
Query OK, 0 rows affected (0.509 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Lj','Lj'));
Query OK, 0 rows affected (0.561 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('LJ','LJ'));
Query OK, 0 rows affected (0.622 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('nj','nj'));
Query OK, 0 rows affected (0.673 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Nj','Nj'));
Query OK, 0 rows affected (0.727 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('NJ','NJ'));
Query OK, 0 rows affected (0.786 sec)
New (after the patch)
MariaDB [test]> SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
Query OK, 0 rows affected (0.001 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('เก1','เก2'));
Query OK, 0 rows affected (0.531 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('โข1','โข2'));
Query OK, 0 rows affected (0.530 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('ไฮ1','ไฮ2'));
Query OK, 0 rows affected (0.531 sec)
MariaDB [test]> SET NAMES utf8mb4 COLLATE utf8mb4_croatian_ci;
Query OK, 0 rows affected (0.001 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('dž','dž'));
Query OK, 0 rows affected (0.503 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Dž','Dž'));
Query OK, 0 rows affected (0.507 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('DŽ','DŽ'));
Query OK, 0 rows affected (0.501 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('lj','lj'));
Query OK, 0 rows affected (0.154 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Lj','Lj'));
Query OK, 0 rows affected (0.155 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('LJ','LJ'));
Query OK, 0 rows affected (0.152 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('nj','nj'));
Query OK, 0 rows affected (0.152 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Nj','Nj'));
Query OK, 0 rows affected (0.153 sec)
MariaDB [test]> DO BENCHMARK(10000000,strcmp('NJ','NJ'));
Query OK, 0 rows affected (0.151 sec)
Summary
utf8mb4_thai_520_w2
Ord A B Old time New Time % New/Old
--- --- --- -------- -------- ---------
0 เก1 เก2 0.432 0.531 122
7 โข1 โข2 0.884 0.530 59
229 ไฮ1 ไฮ2 15.566 0.531 3
utf8mb4_croatian_ci
Ord A B Old time New time % New/Old
--- --- --- -------- -------- ---------
0 dž dž 0.366 0.503 137
1 Dž Dž 0.425 0.507 119
2 DŽ DŽ 0.472 0.501 106
3 lj lj 0.509 0.154 30
4 Lj Lj 0.561 0.155 27
5 LJ LJ 0.622 0.152 24
6 nj nj 0.673 0.152 22
7 Nj Nj 0.727 0.153 21
8 NJ NJ 0.786 0.151 19
Observation:
After the change, the contraction search time does not depend on the contraction ordinal position in the tailoring (it only depends on "ASCII or not ASCII")
Searching for the very last (but one) contraction in utf8mb4_thai_520_w2 now takes 3% of the old search time (30 times faster!)
Searching for the very last contraction in utf8mb4_croatian_ci now takes 19% of the old search time (5 times faster)
People
Alexander Barkov
Alexander Barkov
Votes:
0Vote for this issue
Watchers:
5Start 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":1168.5,"ttfb":330.30000019073486,"pageVisibility":"visible","entityId":106005,"key":"jira.project.issue.view-issue","isInitial":true,"threshold":1000,"elementTimings":{},"userDeviceMemory":8,"userDeviceProcessors":64,"apdex":0.5,"journeyId":"df455c9d-179b-44b7-b54b-46af36a06c00","navigationType":0,"readyForUser":1275.2000002861023,"redirectCount":0,"resourceLoadedEnd":1763,"resourceLoadedStart":364,"resourceTiming":[{"duration":292.90000009536743,"initiatorType":"link","name":"https://jira.mariadb.org/s/2c21342762a6a02add1c328bed317ffd-CDN/lu2cib/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/css/_super/batch.css","startTime":364,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":364,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":656.9000000953674,"responseStart":0,"secureConnectionStart":0},{"duration":293,"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":364.30000019073486,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":364.30000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":657.3000001907349,"responseStart":0,"secureConnectionStart":0},{"duration":302.7000002861023,"initiatorType":"script","name":"https://jira.mariadb.org/s/0917945aaa57108d00c5076fea35e069-CDN/lu2cib/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/js/_super/batch.js?locale=en","startTime":364.5,"connectEnd":364.5,"connectStart":364.5,"domainLookupEnd":364.5,"domainLookupStart":364.5,"fetchStart":364.5,"redirectEnd":0,"redirectStart":0,"requestStart":364.5,"responseEnd":667.2000002861023,"responseStart":667.2000002861023,"secureConnectionStart":364.5},{"duration":389.2999997138977,"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":364.7000002861023,"connectEnd":364.7000002861023,"connectStart":364.7000002861023,"domainLookupEnd":364.7000002861023,"domainLookupStart":364.7000002861023,"fetchStart":364.7000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":364.7000002861023,"responseEnd":754,"responseStart":754,"secureConnectionStart":364.7000002861023},{"duration":393.59999990463257,"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":364.90000009536743,"connectEnd":364.90000009536743,"connectStart":364.90000009536743,"domainLookupEnd":364.90000009536743,"domainLookupStart":364.90000009536743,"fetchStart":364.90000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":364.90000009536743,"responseEnd":758.5,"responseStart":758.5,"secureConnectionStart":364.90000009536743},{"duration":393.8999996185303,"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":365.1000003814697,"connectEnd":365.1000003814697,"connectStart":365.1000003814697,"domainLookupEnd":365.1000003814697,"domainLookupStart":365.1000003814697,"fetchStart":365.1000003814697,"redirectEnd":0,"redirectStart":0,"requestStart":365.1000003814697,"responseEnd":759,"responseStart":759,"secureConnectionStart":365.1000003814697},{"duration":394.19999980926514,"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":365.2000002861023,"connectEnd":365.2000002861023,"connectStart":365.2000002861023,"domainLookupEnd":365.2000002861023,"domainLookupStart":365.2000002861023,"fetchStart":365.2000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":365.2000002861023,"responseEnd":759.4000000953674,"responseStart":759.4000000953674,"secureConnectionStart":365.2000002861023},{"duration":448.7000002861023,"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":365.5,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":365.5,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":814.2000002861023,"responseStart":0,"secureConnectionStart":0},{"duration":394.2999997138977,"initiatorType":"script","name":"https://jira.mariadb.org/rest/api/1.0/shortcuts/820016/47140b6e0a9bc2e4913da06536125810/shortcuts.js?context=issuenavigation&context=issueaction","startTime":365.6000003814697,"connectEnd":365.6000003814697,"connectStart":365.6000003814697,"domainLookupEnd":365.6000003814697,"domainLookupStart":365.6000003814697,"fetchStart":365.6000003814697,"redirectEnd":0,"redirectStart":0,"requestStart":365.6000003814697,"responseEnd":759.9000000953674,"responseStart":759.9000000953674,"secureConnectionStart":365.6000003814697},{"duration":448.5,"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":365.80000019073486,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":365.80000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":814.3000001907349,"responseStart":0,"secureConnectionStart":0},{"duration":395.09999990463257,"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":365.90000009536743,"connectEnd":365.90000009536743,"connectStart":365.90000009536743,"domainLookupEnd":365.90000009536743,"domainLookupStart":365.90000009536743,"fetchStart":365.90000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":365.90000009536743,"responseEnd":761,"responseStart":761,"secureConnectionStart":365.90000009536743},{"duration":906.2999997138977,"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":367.2000002861023,"connectEnd":367.2000002861023,"connectStart":367.2000002861023,"domainLookupEnd":367.2000002861023,"domainLookupStart":367.2000002861023,"fetchStart":367.2000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":367.2000002861023,"responseEnd":1273.5,"responseStart":1273.5,"secureConnectionStart":367.2000002861023},{"duration":1395.7999997138977,"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":367.2000002861023,"connectEnd":367.2000002861023,"connectStart":367.2000002861023,"domainLookupEnd":367.2000002861023,"domainLookupStart":367.2000002861023,"fetchStart":367.2000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":367.2000002861023,"responseEnd":1763,"responseStart":1763,"secureConnectionStart":367.2000002861023},{"duration":470.90000009536743,"initiatorType":"xmlhttprequest","name":"https://jira.mariadb.org/rest/webResources/1.0/resources","startTime":826.7000002861023,"connectEnd":826.7000002861023,"connectStart":826.7000002861023,"domainLookupEnd":826.7000002861023,"domainLookupStart":826.7000002861023,"fetchStart":826.7000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":826.7000002861023,"responseEnd":1297.6000003814697,"responseStart":1297.6000003814697,"secureConnectionStart":826.7000002861023},{"duration":661.2999997138977,"initiatorType":"script","name":"https://www.google-analytics.com/analytics.js","startTime":1151.1000003814697,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":1151.1000003814697,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1812.4000000953674,"responseStart":0,"secureConnectionStart":0}],"fetchStart":0,"domainLookupStart":0,"domainLookupEnd":0,"connectStart":0,"connectEnd":0,"requestStart":126,"responseStart":330,"responseEnd":357,"domLoading":360,"domInteractive":1814,"domContentLoadedEventStart":1814,"domContentLoadedEventEnd":1873,"domComplete":2433,"loadEventStart":2433,"loadEventEnd":2434,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[{"name":"bigPipe.sidebar-id.start","time":1765.3000001907349},{"name":"bigPipe.sidebar-id.end","time":1766.1000003814697},{"name":"bigPipe.activity-panel-pipe-id.start","time":1766.3000001907349},{"name":"bigPipe.activity-panel-pipe-id.end","time":1772.2000002861023},{"name":"activityTabFullyLoaded","time":1892.1000003814697}],"measures":[],"correlationId":"4156408284110a","effectiveType":"4g","downlink":9.5,"rtt":0,"serverDuration":128,"dbReadsTimeInMs":13,"dbConnsTimeInMs":23,"applicationHash":"9d11dbea5f4be3d4cc21f03a88dd11d8c8687422","experiments":[]}}
Ok to push