Skip to content

Conversation

@Yukang-Lian
Copy link
Collaborator

What problem does this PR solve?

Issue Number: close #xxx

Related PR: #xxx

Problem Summary:

• Background
The current cumulative compaction pick logic can fail to select any rowsets in a corner case (large head rowsets + high min/max config + many empty rowsets), causing
compaction to stall.

Key Changes

  • Collect all candidate rowsets without stopping at max_compaction_score
  • Use DEFER to trim on all return paths, ensuring final score ≤ max (keep at least 1 rowset)
  • Preserve level_size fallback behavior; no‑overlap fallback now trims before return
  • Cloud empty-rowset compaction early return skips trimming to preserve its semantics

Behavior Changes

  • promotion_size/delete early returns are now trimmed; total_size may drop below promotion_size but compaction still proceeds
  • Trimming happens after min check, so score may fall below min after trimming

Testing

  • Added test scenarios for the bug case (with/without empty rowsets), trimming behavior, fallbacks, and edge cases
  • Covers both SizeBased and Cloud-specific branches

Release note

None

Check List (For Author)

  • Test

    • Regression test
    • Unit Test
    • Manual test (add detailed scripts or steps below)
    • No need to test or manual test. Explain why:
      • This is a refactor/code format and no logic has been changed.
      • Previous test can cover this change.
      • No code files have been changed.
      • Other reason
  • Behavior changed:

    • No.
    • Yes.
  • Does this need documentation?

    • No.
    • Yes.

Check List (For Reviewer who merge this PR)

  • Confirm the release note
  • Confirm test cases
  • Confirm document
  • Add branch pick label

@hello-stephen
Copy link
Contributor

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

@Yukang-Lian Yukang-Lian marked this pull request as draft December 22, 2025 12:12
@Yukang-Lian Yukang-Lian force-pushed the fix/compaction-pick-rowsets-max-score branch from 07bd493 to 8ed5c9d Compare December 22, 2025 17:10
@Yukang-Lian Yukang-Lian marked this pull request as ready for review December 22, 2025 17:11
@Yukang-Lian Yukang-Lian requested a review from w41ter as a code owner December 22, 2025 17:11
@Yukang-Lian
Copy link
Collaborator Author

run buildall

@doris-robot
Copy link

TPC-H: Total hot run time: 34725 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 8ed5c9de5bf0e49a9f06ee49d6e0a4588a7aee48, data reload: false

------ Round 1 ----------------------------------
q1	17618	4256	4044	4044
q2	2023	362	229	229
q3	10207	1334	742	742
q4	10222	873	305	305
q5	7522	2129	1955	1955
q6	183	167	135	135
q7	989	855	693	693
q8	9351	1407	1146	1146
q9	7010	5394	5351	5351
q10	6858	2392	1993	1993
q11	516	338	307	307
q12	661	710	588	588
q13	17821	3636	3015	3015
q14	292	283	283	283
q15	590	517	502	502
q16	676	674	622	622
q17	682	836	483	483
q18	7452	7152	7014	7014
q19	1097	966	580	580
q20	399	358	245	245
q21	4206	3872	3512	3512
q22	1037	1014	981	981
Total cold run time: 107412 ms
Total hot run time: 34725 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4065	4041	4030	4030
q2	326	417	320	320
q3	2080	2632	2269	2269
q4	1380	1762	1305	1305
q5	4236	4352	4719	4352
q6	223	172	133	133
q7	2096	1913	1876	1876
q8	2698	2534	2540	2534
q9	7618	7767	7639	7639
q10	3213	3254	2908	2908
q11	620	560	531	531
q12	679	884	675	675
q13	3525	3988	3321	3321
q14	308	326	314	314
q15	556	508	507	507
q16	696	760	652	652
q17	1172	1512	1386	1386
q18	7813	7768	7551	7551
q19	860	883	886	883
q20	2093	2123	1850	1850
q21	4624	4219	4141	4141
q22	1115	1075	992	992
Total cold run time: 51996 ms
Total hot run time: 50169 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 179418 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 8ed5c9de5bf0e49a9f06ee49d6e0a4588a7aee48, data reload: false

query5	4370	581	454	454
query6	344	240	222	222
query7	4218	471	276	276
query8	301	257	246	246
query9	8766	2537	2550	2537
query10	509	371	324	324
query11	15234	15057	15381	15057
query12	177	119	123	119
query13	1269	507	395	395
query14	5656	2989	2717	2717
query14_1	2645	2610	2609	2609
query15	222	197	176	176
query16	876	457	482	457
query17	1141	730	596	596
query18	2460	453	346	346
query19	243	234	207	207
query20	120	148	113	113
query21	216	141	119	119
query22	4027	4010	3901	3901
query23	16552	16200	16020	16020
query23_1	16293	16114	16075	16075
query24	7386	1633	1208	1208
query24_1	1249	1210	1241	1210
query25	545	469	402	402
query26	1241	276	163	163
query27	2759	462	343	343
query28	4424	2112	2093	2093
query29	802	536	450	450
query30	310	248	211	211
query31	799	715	627	627
query32	78	73	70	70
query33	556	341	291	291
query34	905	899	538	538
query35	788	812	719	719
query36	863	902	810	810
query37	151	98	77	77
query38	2975	3122	3026	3026
query39	793	726	718	718
query39_1	710	732	693	693
query40	218	138	119	119
query41	70	62	65	62
query42	110	106	102	102
query43	434	439	402	402
query44	1304	734	731	731
query45	188	191	182	182
query46	870	976	596	596
query47	1697	1727	1605	1605
query48	320	327	247	247
query49	625	429	358	358
query50	661	289	223	223
query51	3782	3883	3799	3799
query52	106	111	100	100
query53	318	360	288	288
query54	297	255	248	248
query55	79	75	73	73
query56	301	298	287	287
query57	1183	1154	1110	1110
query58	269	266	252	252
query59	2407	2528	2446	2446
query60	311	304	287	287
query61	163	160	156	156
query62	774	704	704	704
query63	336	308	304	304
query64	5021	1398	1006	1006
query65	4017	3965	3945	3945
query66	1485	435	321	321
query67	15178	15086	14898	14898
query68	3771	1049	729	729
query69	496	338	307	307
query70	1072	997	974	974
query71	355	299	278	278
query72	6350	4943	4985	4943
query73	682	602	302	302
query74	8829	8981	8664	8664
query75	3171	3146	2796	2796
query76	3792	1138	731	731
query77	525	404	292	292
query78	9407	9552	8889	8889
query79	1030	876	613	613
query80	1064	659	545	545
query81	536	267	234	234
query82	202	137	104	104
query83	272	253	234	234
query84	250	122	107	107
query85	961	517	460	460
query86	337	294	302	294
query87	3206	3249	3214	3214
query88	3114	2300	2289	2289
query89	464	417	401	401
query90	1856	161	154	154
query91	177	161	145	145
query92	73	66	68	66
query93	947	911	568	568
query94	459	302	278	278
query95	573	374	312	312
query96	587	461	208	208
query97	2284	2335	2247	2247
query98	214	199	191	191
query99	1332	1364	1251	1251
Total cold run time: 253884 ms
Total hot run time: 179418 ms

@doris-robot
Copy link

ClickBench: Total hot run time: 27.09 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 8ed5c9de5bf0e49a9f06ee49d6e0a4588a7aee48, data reload: false

query1	0.06	0.05	0.05
query2	0.10	0.06	0.05
query3	0.25	0.08	0.08
query4	1.61	0.12	0.11
query5	0.26	0.25	0.25
query6	1.17	0.64	0.63
query7	0.04	0.02	0.03
query8	0.05	0.04	0.05
query9	0.57	0.50	0.50
query10	0.55	0.56	0.54
query11	0.15	0.11	0.10
query12	0.14	0.11	0.12
query13	0.61	0.61	0.61
query14	0.99	0.98	0.98
query15	0.81	0.79	0.81
query16	0.40	0.41	0.41
query17	1.06	1.06	0.98
query18	0.23	0.22	0.21
query19	1.95	1.76	1.80
query20	0.02	0.01	0.02
query21	15.43	0.28	0.14
query22	4.91	0.05	0.05
query23	16.05	0.30	0.10
query24	1.74	0.53	0.30
query25	0.12	0.06	0.06
query26	0.15	0.13	0.14
query27	0.08	0.06	0.05
query28	3.57	1.23	1.02
query29	12.59	4.04	3.16
query30	0.27	0.14	0.11
query31	2.81	0.61	0.40
query32	3.23	0.54	0.45
query33	2.97	2.99	3.10
query34	16.89	5.22	4.53
query35	4.63	4.55	4.55
query36	0.64	0.50	0.48
query37	0.10	0.07	0.06
query38	0.07	0.04	0.04
query39	0.05	0.03	0.03
query40	0.17	0.14	0.13
query41	0.09	0.03	0.02
query42	0.04	0.03	0.03
query43	0.03	0.04	0.03
Total cold run time: 97.65 s
Total hot run time: 27.09 s

@doris-robot
Copy link

BE UT Coverage Report

Increment line coverage 100.00% (22/22) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 53.42% (18929/35433)
Line Coverage 39.31% (175526/446534)
Region Coverage 33.86% (135834/401136)
Branch Coverage 34.77% (58548/168368)

@hello-stephen
Copy link
Contributor

BE Regression && UT Coverage Report

Increment line coverage 100.00% (22/22) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 73.82% (25566/34635)
Line Coverage 61.24% (272679/445257)
Region Coverage 56.41% (228633/405328)
Branch Coverage 58.08% (98127/168946)

@Yukang-Lian
Copy link
Collaborator Author

run buildall

@doris-robot
Copy link

BE UT Coverage Report

Increment line coverage 100.00% (23/23) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 53.46% (18942/35434)
Line Coverage 39.33% (175612/446503)
Region Coverage 33.86% (135817/401126)
Branch Coverage 34.79% (58572/168369)

@hello-stephen
Copy link
Contributor

BE Regression && UT Coverage Report

Increment line coverage 100.00% (23/23) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 72.15% (25030/34690)
Line Coverage 58.88% (262792/446303)
Region Coverage 53.88% (218737/405946)
Branch Coverage 55.28% (93669/169433)

@Yukang-Lian
Copy link
Collaborator Author

run performance

@doris-robot
Copy link

TPC-H: Total hot run time: 34772 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit c6b2246969e8ebf97dc5d9af0c6ca5583a0bfdc7, data reload: false

------ Round 1 ----------------------------------
q1	17631	4267	4050	4050
q2	2013	347	272	272
q3	10172	1309	759	759
q4	10208	845	312	312
q5	7528	2170	1906	1906
q6	185	164	137	137
q7	1024	880	714	714
q8	9348	1440	1118	1118
q9	6948	5288	5375	5288
q10	6831	2399	1981	1981
q11	510	334	314	314
q12	659	724	556	556
q13	17774	3688	3000	3000
q14	307	288	271	271
q15	592	511	509	509
q16	679	675	629	629
q17	702	872	450	450
q18	7399	7247	7167	7167
q19	1100	947	581	581
q20	388	348	255	255
q21	4227	3941	3565	3565
q22	1035	1020	938	938
Total cold run time: 107260 ms
Total hot run time: 34772 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4079	4016	4026	4016
q2	312	387	317	317
q3	2169	2637	2259	2259
q4	1348	1706	1276	1276
q5	4189	4473	4837	4473
q6	221	170	132	132
q7	2020	1995	1825	1825
q8	2675	2499	2507	2499
q9	7540	7411	7390	7390
q10	3140	3264	2798	2798
q11	642	536	525	525
q12	683	885	641	641
q13	3573	3892	3392	3392
q14	312	315	277	277
q15	560	505	504	504
q16	690	698	642	642
q17	1203	1380	1360	1360
q18	7981	7778	7682	7682
q19	896	843	847	843
q20	1876	1953	1814	1814
q21	4644	4405	4282	4282
q22	1111	1044	988	988
Total cold run time: 51864 ms
Total hot run time: 49935 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 179918 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit c6b2246969e8ebf97dc5d9af0c6ca5583a0bfdc7, data reload: false

query5	4978	604	444	444
query6	349	229	210	210
query7	4215	469	272	272
query8	294	257	240	240
query9	8771	2554	2557	2554
query10	538	373	325	325
query11	15737	15129	14791	14791
query12	176	118	115	115
query13	1270	506	382	382
query14	6265	3027	2839	2839
query14_1	2735	2693	2676	2676
query15	210	199	183	183
query16	915	458	447	447
query17	1149	716	611	611
query18	2549	442	345	345
query19	236	235	216	216
query20	123	117	112	112
query21	229	144	119	119
query22	3977	3914	3842	3842
query23	16778	16123	15987	15987
query23_1	16082	16314	16093	16093
query24	7327	1641	1264	1264
query24_1	1258	1248	1257	1248
query25	575	513	476	476
query26	1260	284	169	169
query27	2731	480	311	311
query28	4466	2143	2145	2143
query29	842	581	475	475
query30	322	244	213	213
query31	836	721	624	624
query32	84	74	77	74
query33	559	350	301	301
query34	897	908	536	536
query35	766	803	727	727
query36	875	904	823	823
query37	133	102	130	102
query38	2985	3103	2980	2980
query39	752	733	720	720
query39_1	697	685	709	685
query40	229	139	120	120
query41	76	65	64	64
query42	106	108	103	103
query43	438	444	418	418
query44	1320	747	761	747
query45	192	189	183	183
query46	872	981	618	618
query47	1688	1697	1608	1608
query48	311	324	248	248
query49	638	454	347	347
query50	674	304	221	221
query51	3969	3808	3878	3808
query52	107	116	97	97
query53	325	346	299	299
query54	293	255	258	255
query55	76	78	78	78
query56	298	306	294	294
query57	1171	1157	1091	1091
query58	277	265	257	257
query59	2428	2572	2404	2404
query60	320	309	298	298
query61	167	196	167	167
query62	721	733	676	676
query63	330	301	308	301
query64	4947	1335	1012	1012
query65	4024	3958	3970	3958
query66	1443	428	315	315
query67	15311	14932	14986	14932
query68	7868	1012	731	731
query69	496	344	307	307
query70	1044	981	988	981
query71	375	313	283	283
query72	6005	4975	5043	4975
query73	691	612	318	318
query74	8868	9007	8733	8733
query75	3211	3159	2824	2824
query76	3899	1133	745	745
query77	524	398	295	295
query78	9488	9649	8937	8937
query79	1725	896	630	630
query80	730	661	571	571
query81	530	267	230	230
query82	396	132	104	104
query83	262	257	240	240
query84	261	122	123	122
query85	953	525	478	478
query86	383	305	287	287
query87	3182	3204	3003	3003
query88	3303	2302	2283	2283
query89	469	425	394	394
query90	2068	164	163	163
query91	176	168	145	145
query92	76	71	66	66
query93	1469	954	565	565
query94	483	317	275	275
query95	593	380	323	323
query96	604	474	212	212
query97	2274	2324	2289	2289
query98	235	198	194	194
query99	1319	1348	1287	1287
Total cold run time: 261469 ms
Total hot run time: 179918 ms

@doris-robot
Copy link

ClickBench: Total hot run time: 27.39 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit c6b2246969e8ebf97dc5d9af0c6ca5583a0bfdc7, data reload: false

query1	0.06	0.05	0.05
query2	0.11	0.05	0.04
query3	0.26	0.09	0.09
query4	1.60	0.12	0.11
query5	0.27	0.26	0.25
query6	1.17	0.64	0.63
query7	0.03	0.02	0.03
query8	0.05	0.04	0.05
query9	0.57	0.49	0.49
query10	0.54	0.55	0.54
query11	0.15	0.11	0.12
query12	0.16	0.11	0.11
query13	0.62	0.59	0.61
query14	1.00	0.99	0.99
query15	0.80	0.79	0.80
query16	0.38	0.42	0.40
query17	1.00	1.05	1.06
query18	0.24	0.22	0.22
query19	1.92	1.85	1.85
query20	0.02	0.02	0.01
query21	15.44	0.33	0.14
query22	4.54	0.05	0.05
query23	16.07	0.29	0.10
query24	0.96	0.56	0.27
query25	0.07	0.08	0.08
query26	0.13	0.14	0.13
query27	0.08	0.08	0.04
query28	3.40	1.24	1.02
query29	12.59	3.95	3.31
query30	0.27	0.14	0.13
query31	2.81	0.63	0.38
query32	3.24	0.55	0.45
query33	2.97	3.02	2.98
query34	16.80	5.17	4.54
query35	4.60	4.56	4.60
query36	0.66	0.50	0.49
query37	0.10	0.06	0.07
query38	0.07	0.04	0.04
query39	0.05	0.03	0.03
query40	0.18	0.14	0.13
query41	0.09	0.03	0.02
query42	0.04	0.03	0.03
query43	0.04	0.04	0.03
Total cold run time: 96.15 s
Total hot run time: 27.39 s

@github-actions github-actions bot added the approved Indicates a PR has been approved by one committer. label Dec 28, 2025
@github-actions
Copy link
Contributor

PR approved by at least one committer and no changes requested.

@github-actions
Copy link
Contributor

PR approved by anyone and no changes requested.

@gavinchou gavinchou merged commit 886d578 into apache:master Dec 30, 2025
28 of 30 checks passed
github-actions bot pushed a commit that referenced this pull request Dec 30, 2025
github-actions bot pushed a commit that referenced this pull request Dec 30, 2025
yiguolei pushed a commit that referenced this pull request Dec 31, 2025
…to trim by max score after filtering #59268 (#59475)

Cherry-picked from #59268

Co-authored-by: Jimmy <[email protected]>
Hastyshell pushed a commit to Hastyshell/doris that referenced this pull request Jan 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by one committer. dev/3.1.x dev/4.0.3-merged reviewed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants