Skip to content

[fix](filecache) Support memory file cache resource management#65722

Open
freemandealer wants to merge 1 commit into
apache:masterfrom
freemandealer:task-master-memstorage-commits-cherry-pick
Open

[fix](filecache) Support memory file cache resource management#65722
freemandealer wants to merge 1 commit into
apache:masterfrom
freemandealer:task-master-memstorage-commits-cherry-pick

Conversation

@freemandealer

Copy link
Copy Markdown
Member

What problem does this PR solve?

Issue Number: None

Related PR: None

Problem Summary: Memory file cache storage still followed disk-oriented LRU persistence behavior and skipped capacity-based resource limit monitoring. This could leave unused LRU records without a consumer, access disk persistence paths in memory mode, and fail to enter capacity pressure modes. Adapt the required parts of the SelectDB fixes to current Doris master, while retaining the newer sharded memory storage duplicate-key handling already present on master.

Release note

Improve memory file cache capacity monitoring and avoid disk-only LRU persistence work.

Check List (For Author)

  • Test: Unit Test
    • BlockFileCacheMemModeTest.* (11 tests passed)
    • BE compilation with ./build.sh --be
  • Behavior changed: Yes. Memory file cache now uses capacity percentage for pressure modes and skips disk-only LRU persistence.
  • Does this need documentation: No

@freemandealer

Copy link
Copy Markdown
Member Author

/review

@freemandealer

Copy link
Copy Markdown
Member Author

run buildall

@hello-stephen

Copy link
Copy Markdown
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?

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Request changes. I found eight distinct correctness, lifecycle, compatibility, and test-validity issues in the inline comments.

Critical checkpoint conclusions:

  • Goal and proof: The PR correctly identifies that memory storage should use capacity pressure and skip disk-oriented LRU persistence, and it adds focused unit coverage, but the end-to-end goal is not yet met: the production reset route bypasses the memory implementation, clear still touches LRU files, and the pressure transitions/tests are not synchronized.
  • Scope and parallel paths: The source diff is mostly focused, but the unchanged factory/HTTP reset and clear paths are required parallel entry points. The reset loop also has an eventual holder-release effect not captured by its immediate accounting.
  • Concurrency: Memory mode now has monitor, request, and advance-eviction threads concurrently accessing plain pressure flags without a happens-before relationship. The new monitor test also mutates cache size and observes flags without synchronization.
  • Lifecycle and persistence: Skipping restore, recorder replay/dump threads, and explicit dumps for memory storage is directionally correct; clear-time dump deletion remains, and marking held blocks while evicting the full releasable target causes later double eviction.
  • Configuration and compatibility: No FE/BE protocol or storage-format change is involved, and the disk LRU path is otherwise preserved. However, equal disk-resource thresholds were previously coherent/accepted and are now silently rewritten to unrelated fallback values.
  • Test coverage and validation: Eleven BE unit tests are added, but factory/HTTP reset, memory clear, grow-from-pressure convergence, normal holder destruction, and deterministic LRU replay are not validly covered. Per the automated-review contract, I did not run builds or tests locally; this review is based on the authoritative diff and static control-flow/lifecycle analysis.
  • Observability and performance: The new storage-type/size stats and transition logs are useful. Stale pressure flags after capacity growth and double eviction can nevertheless discard valid cache data and sharply reduce hit rate.
  • Transactions, data visibility, and protocol transport: Not applicable to this cache-management-only change; no transaction/EditLog, MoW visibility, or new FE-BE variable path is modified.
  • User focus: No additional user-provided focus was supplied; the full PR was reviewed.

Comment thread be/src/io/cache/block_file_cache.cpp Outdated
if (is_memory_storage()) {
bool is_size_insufficient = is_insufficient(cast_set<int>(size_percentage));
if (is_size_insufficient) {
_disk_resource_limit_mode = true;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Synchronize the pressure-mode flags

For memory storage the monitor now writes _disk_resource_limit_mode and _need_evict_cache_in_advance here without _mutex, while request threads read the first flag in try_reserve()/is_overflow(), the advance worker reads the second before taking _mutex, and get_stats() reads both unlocked. A reader-side lock does not synchronize with this writer, so a request arriving as the cache crosses 90% has a C++ data race and can miss or inconsistently observe the new mode. Please make these cross-thread signals atomic with consistent loads/stores, or protect every read and write with the same lock.

static_cast<double>(_capacity) * 100);
}

std::string BlockFileCache::reset_capacity(size_t new_capacity) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Route memory resets around disk validation

The production reset path does not reliably reach this new memory-aware implementation. HTTP RESET calls FileCacheFactory::reset_capacity(), and that function first runs statfs() on every cache key. A memory cache is keyed by the literal memory path and no directory is created for it, so path=memory normally returns before this method; if such a directory happens to exist, RAM capacity is clamped against an unrelated filesystem. The all-cache branch can also reset earlier disk entries before failing on memory. Please branch validation by storage type and prevalidate every target before applying an all-cache reset, with factory/HTTP-path coverage.

Comment thread be/src/io/cache/block_file_cache.cpp
Comment thread be/src/io/cache/block_file_cache.cpp
Comment thread be/src/io/cache/block_file_cache.cpp
Comment thread be/src/io/cache/block_file_cache.cpp Outdated
Comment thread be/test/io/cache/block_file_cache_mem_storage_mode_test.cpp
Comment thread be/test/io/cache/block_file_cache_mem_storage_mode_test.cpp Outdated
@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17625	4107	4094	4094
q2	2040	332	205	205
q3	10254	1440	848	848
q4	4686	482	340	340
q5	7524	852	584	584
q6	190	174	140	140
q7	788	827	611	611
q8	9381	1603	1618	1603
q9	5608	4371	4310	4310
q10	6801	1746	1507	1507
q11	517	359	340	340
q12	770	590	447	447
q13	18109	3411	2771	2771
q14	273	262	234	234
q15	q16	790	782	710	710
q17	1037	948	1117	948
q18	7042	5779	5475	5475
q19	1192	1297	1116	1116
q20	805	667	580	580
q21	5623	2621	2470	2470
q22	438	358	302	302
Total cold run time: 101493 ms
Total hot run time: 29635 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4575	4317	4365	4317
q2	292	319	209	209
q3	4638	4978	4374	4374
q4	2038	2140	1349	1349
q5	4377	4266	4246	4246
q6	230	179	130	130
q7	1718	1960	1854	1854
q8	2581	2333	2165	2165
q9	8035	8265	7766	7766
q10	4672	4656	4285	4285
q11	593	423	392	392
q12	747	765	558	558
q13	3277	3696	3006	3006
q14	288	300	270	270
q15	q16	753	730	625	625
q17	1397	1346	1338	1338
q18	8025	7406	7214	7214
q19	1210	1142	1103	1103
q20	2196	2210	1937	1937
q21	5295	4599	4370	4370
q22	525	480	407	407
Total cold run time: 57462 ms
Total hot run time: 51915 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 178203 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 b62d21ea4916101ef8d4936eb91eb29f56498901, data reload: false

query5	4340	624	481	481
query6	481	236	214	214
query7	4874	663	340	340
query8	343	193	171	171
query9	8751	4149	4129	4129
query10	473	364	336	336
query11	5909	2319	2134	2134
query12	166	104	100	100
query13	1248	556	435	435
query14	6254	5309	4948	4948
query14_1	4364	4315	4411	4315
query15	218	203	182	182
query16	1059	496	482	482
query17	960	743	590	590
query18	2458	500	351	351
query19	227	196	157	157
query20	112	112	108	108
query21	238	166	134	134
query22	13622	13544	13396	13396
query23	17523	16553	16056	16056
query23_1	16309	16285	16256	16256
query24	7534	1813	1303	1303
query24_1	1333	1296	1317	1296
query25	584	482	399	399
query26	1382	388	228	228
query27	2540	609	388	388
query28	4456	1987	2021	1987
query29	1081	634	502	502
query30	350	268	239	239
query31	1120	1093	983	983
query32	127	63	62	62
query33	548	334	274	274
query34	1204	1144	644	644
query35	768	798	686	686
query36	1178	1195	1052	1052
query37	163	115	144	115
query38	1877	1698	1647	1647
query39	871	901	852	852
query39_1	832	838	849	838
query40	251	159	142	142
query41	67	65	64	64
query42	95	93	92	92
query43	337	334	292	292
query44	1501	790	759	759
query45	196	188	174	174
query46	1084	1200	738	738
query47	2061	2103	1969	1969
query48	400	422	306	306
query49	580	417	295	295
query50	1034	421	352	352
query51	10769	10935	10417	10417
query52	86	87	76	76
query53	261	291	202	202
query54	279	245	229	229
query55	77	74	70	70
query56	309	295	296	295
query57	1285	1259	1172	1172
query58	293	262	262	262
query59	1628	1707	1489	1489
query60	306	269	265	265
query61	157	159	157	157
query62	535	500	429	429
query63	245	203	208	203
query64	2882	1076	875	875
query65	4698	4576	4649	4576
query66	1841	507	386	386
query67	29272	29341	29099	29099
query68	3353	1483	1019	1019
query69	411	299	289	289
query70	1088	983	958	958
query71	388	359	322	322
query72	3187	2736	2471	2471
query73	871	815	431	431
query74	5090	4898	4703	4703
query75	2556	2491	2131	2131
query76	2337	1225	819	819
query77	373	383	292	292
query78	11912	11817	11226	11226
query79	1414	1173	764	764
query80	1287	561	477	477
query81	523	334	282	282
query82	1223	188	124	124
query83	417	349	301	301
query84	330	165	132	132
query85	1019	618	551	551
query86	421	300	277	277
query87	1832	1829	1753	1753
query88	3819	2797	2792	2792
query89	460	379	335	335
query90	1942	202	201	201
query91	203	188	164	164
query92	63	63	55	55
query93	1681	1604	971	971
query94	799	359	321	321
query95	791	610	463	463
query96	1037	806	365	365
query97	2613	2593	2534	2534
query98	213	214	201	201
query99	1096	1114	977	977
Total cold run time: 265568 ms
Total hot run time: 178203 ms

@hello-stephen

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

query1	0.01	0.00	0.01
query2	0.09	0.05	0.05
query3	0.27	0.14	0.14
query4	1.61	0.14	0.14
query5	0.24	0.23	0.22
query6	1.30	1.07	1.11
query7	0.04	0.00	0.00
query8	0.05	0.04	0.03
query9	0.40	0.32	0.33
query10	0.60	0.65	0.57
query11	0.20	0.14	0.14
query12	0.19	0.13	0.13
query13	0.48	0.48	0.48
query14	1.05	1.03	1.04
query15	0.64	0.61	0.60
query16	0.32	0.33	0.32
query17	1.13	1.16	1.13
query18	0.23	0.22	0.22
query19	2.07	2.00	1.95
query20	0.02	0.01	0.01
query21	15.44	0.23	0.15
query22	4.85	0.05	0.05
query23	16.15	0.32	0.12
query24	3.04	0.44	0.36
query25	0.12	0.05	0.03
query26	0.72	0.21	0.14
query27	0.04	0.03	0.04
query28	3.52	0.98	0.56
query29	12.52	4.23	3.33
query30	0.26	0.14	0.15
query31	2.77	0.60	0.33
query32	3.22	0.61	0.52
query33	3.25	3.28	3.27
query34	15.59	4.32	3.57
query35	3.53	3.56	3.59
query36	0.58	0.44	0.41
query37	0.09	0.07	0.07
query38	0.05	0.04	0.03
query39	0.04	0.03	0.03
query40	0.18	0.17	0.15
query41	0.09	0.02	0.03
query42	0.04	0.03	0.03
query43	0.05	0.04	0.03
Total cold run time: 97.08 s
Total hot run time: 25.48 s

### What problem does this PR solve?

Issue Number: None

Related PR: None

Problem Summary: Memory file cache storage still followed disk-oriented LRU persistence behavior and skipped capacity-based resource limit monitoring. The adapted monitor also crashed when a memory cache had zero capacity, its pressure-mode flags were accessed concurrently without synchronization, and the production reset path validated the literal memory cache path with statfs. An all-cache reset could therefore partially mutate disk caches before failing on a memory or invalid target. Adapt the required SelectDB fixes to current Doris master, preserve the newer sharded memory storage duplicate-key handling already present on master, make cross-thread pressure signals atomic, handle zero-capacity statistics safely, and prevalidate storage-aware reset targets before applying any capacity changes.

### Release note

Improve memory file cache resource monitoring and capacity reset behavior while avoiding disk-only persistence and validation work.

### Check List (For Author)

- Test: Unit Test
    - `BlockFileCacheMemModeTest.*:FileCacheActionTest.reset_memory_capacity_without_memory_directory` (15 tests passed)
    - BE compilation with `./build.sh --be`
    - BE clang-format and clang-tidy checks
- Behavior changed: Yes. Memory file cache uses capacity percentage for pressure modes, synchronizes pressure signals, safely handles zero capacity, skips disk-only LRU persistence, and resets capacity without filesystem validation.
- Does this need documentation: No
@freemandealer
freemandealer force-pushed the task-master-memstorage-commits-cherry-pick branch from b62d21e to 05b1324 Compare July 17, 2026 04:05
@freemandealer

Copy link
Copy Markdown
Member Author

run buildall

@freemandealer

Copy link
Copy Markdown
Member Author

/review

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Request changes. I found five additional distinct correctness and cache-policy issues in the inline comments; the five unresolved comments from the prior review also remain applicable.

Critical checkpoint conclusions:

  • Goal and proof: Capacity-based pressure for memory storage and suppression of disk-oriented LRU persistence are directionally correct, but the end-to-end goal is not yet met. The new memory pressure paths can delete a replacement payload, terminate the monitor after a legal tiny shrink, violate query-LRU size accounting, and evict far below both exit watermarks.
  • Scope and parallel paths: The diff is focused. I traced request admission, query accounting, monitor and advance workers, async GC, holder destruction, factory/HTTP reset, clear, and disk LRU compatibility. Five earlier comments remain unresolved: held-block eventual over-eviction, post-reset stale modes, equal-threshold rewriting, memory clear touching LRU files, and dump-before-replay test ordering.
  • Concurrency and lifecycle: Converting the policy flags to atomics fixes the earlier flag race, but it does not make the cached policies self-refreshing. The monitor, request, advance, and GC actors still have the logical state/lifecycle failures described inline; lock order itself is unchanged.
  • Configuration and compatibility: No new configuration definition, FE/BE protocol, persisted storage format, authentication boundary, or transaction path is introduced. Disk recording/replay/dump behavior is otherwise preserved, subject to the existing equal-threshold and replay-test comments.
  • Test coverage and validation: Fifteen focused BE tests are added, but none covers generation-safe advance deletion, tiny held-block shrink through both pressure checks, real-block exit-watermark capping, sustained request misses between monitor ticks, or pressure with query limiting. Per the automated-review contract I did not run local builds or tests; .worktree_initialized and thirdparty/installed are absent, so this conclusion is based on the authoritative patch and static control-flow/lifecycle analysis.
  • Observability and performance: The new storage-type/percentage stats and transition logs are useful. The two watermark failures can still drain valid cache contents and sharply reduce hit rate, while the query-accounting mismatch can reject useful admissions.
  • Transactions, MoW visibility, EditLog, and FE/BE variable transport: Not applicable to this BE cache-management change.
  • User focus: No additional user-provided focus was supplied; the full PR was reviewed.

const bool previous_mode = _disk_resource_limit_mode.load(std::memory_order_relaxed);
bool current_mode = previous_mode;
if (is_memory_storage()) {
bool is_size_insufficient = is_insufficient(cast_set<int>(size_percentage));

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Keep the computed pressure percentage wide

A valid reset can leave _cur_cache_size far above the new capacity while readers still hold blocks. For example, three held 10 MiB blocks plus RESET capacity=1 (accepted because it is positive) yields 3,145,728,000%; cast_set<int> throws above INT_MAX. This runs from the uncaught monitor-thread entry, so the next check terminates the BE. Compare the size_t percentage against a safely converted threshold (or clamp it) without narrowing, and add a held-block tiny-shrink case that runs both pressure checks.

if (is_memory_storage()) {
bool is_size_insufficient = is_insufficient(cast_set<int>(size_percentage));
if (is_size_insufficient) {
current_mode = true;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P2] Stop five-times memory eviction below the exit watermark

This newly lets cache-size pressure enable the disk resource-limit policy for memory storage, but requests only consume the cached flag; they never refresh it after their own eviction. With 95/100 MiB cached, successive 1 MiB misses can evict 5 MiB then admit 1 MiB, taking usage 95 -> 91 -> 87. Although that is already below the 88% exit watermark, more requests keep evicting five-for-one until the 5-second monitor runs, potentially draining all releasable cache or returning SKIP_CACHE. This is distinct from the reset-growth thread because no reset is involved. Recheck/clear the memory policy from the locked current size before applying the enlarged eviction target, while preserving the real request size for query accounting, and cover sustained misses between monitor ticks.

size_percentage < config::file_cache_exit_disk_resource_limit_mode_percent) {
current_mode = false;
}
_disk_resource_limit_mode.store(current_mode, std::memory_order_relaxed);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Keep query accounting at the actual block size

This newly enables resource-limit mode for memory caches, but try_reserve() multiplies its local size by five before passing it to QueryFileCacheContext::reserve(). The caller still creates the cell with the original current_size, so a 10 MiB block is recorded as 50 MiB in the query LRU. The next over-limit admission hits DCHECK(iter->size == cell_size) (or, without checks, evicts/rejects using inconsistent byte counts). Keep the real block size for query accounting and use a separate enlarged eviction target, then cover memory pressure with enable_file_cache_query_limit=true.

size_percentage < config::file_cache_exit_need_evict_cache_in_advance_percent) {
current_mode = false;
}
_need_evict_cache_in_advance.store(current_mode, std::memory_order_relaxed);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Prevent a stale memory recycle from deleting a replacement

This newly enables the advance-eviction worker for memory storage, but that worker removes metadata with sync=false and queues only the block's hash/offset for GC. Before GC consumes the entry, a request for the same block can create a new cell and replace the still-present payload in ShardMemHashTable; the old queued remove() then erases that replacement by the same key. The new cell remains DOWNLOADED, so its next read fails with key not found in in-memory cache map. Make memory advance deletion synchronous, or give queued deletions a generation/identity check, and cover pause-GC -> evict -> redownload -> resume-GC deterministically.


// Skip if eviction not needed or too many pending recycles
if (!_need_evict_cache_in_advance ||
if (!_need_evict_cache_in_advance.load(std::memory_order_relaxed) ||

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P2] Stop memory advance eviction at the exit watermark

This worker now consumes the memory-capacity flag, but its fixed batch ignores the exit watermark and only the 5-second monitor clears the flag. With the defaults, a 90/100 MiB memory cache needs to release only 5 MiB to reach the 85% exit point, yet the first 1-second worker pass can evict 30 MiB and fall to 60 MiB; later passes can continue toward empty before the monitor refreshes the flag. This is distinct from the existing reset-growth thread because no reset is involved. Under _mutex, cap each memory pass to the bytes above the exit watermark and clear/skip when already at or below it, then cover first-pass capping and later-pass termination with real blocks.

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17591	4055	4049	4049
q2	2022	330	200	200
q3	10374	1385	827	827
q4	4679	484	343	343
q5	7567	847	577	577
q6	191	175	140	140
q7	757	833	622	622
q8	9358	1597	1584	1584
q9	5790	4325	4295	4295
q10	6795	1725	1484	1484
q11	508	352	338	338
q12	713	577	453	453
q13	18211	3367	2772	2772
q14	269	263	254	254
q15	q16	783	775	701	701
q17	1040	1021	1031	1021
q18	6989	5977	5516	5516
q19	1192	1159	1045	1045
q20	792	697	586	586
q21	5588	2581	2471	2471
q22	428	365	297	297
Total cold run time: 101637 ms
Total hot run time: 29575 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4369	4351	4300	4300
q2	285	322	215	215
q3	4596	5001	4450	4450
q4	2079	2141	1376	1376
q5	4386	4273	4254	4254
q6	230	182	129	129
q7	1733	1800	1915	1800
q8	2602	2203	2323	2203
q9	8006	8016	7737	7737
q10	4674	4651	4255	4255
q11	562	413	381	381
q12	772	775	569	569
q13	3241	3638	2934	2934
q14	299	309	299	299
q15	q16	719	753	651	651
q17	1332	1329	1371	1329
q18	7962	7422	7192	7192
q19	1193	1126	1138	1126
q20	2230	2211	1954	1954
q21	5262	4593	4396	4396
q22	525	462	405	405
Total cold run time: 57057 ms
Total hot run time: 51955 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 177379 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 05b13249fac917bfe00efc94f2dc3d55091a9e4e, data reload: false

query5	4326	645	483	483
query6	481	243	219	219
query7	4894	596	340	340
query8	339	193	173	173
query9	8795	4131	4134	4131
query10	498	357	341	341
query11	5883	2342	2144	2144
query12	164	104	105	104
query13	1253	624	447	447
query14	6847	5215	4897	4897
query14_1	4262	4255	4232	4232
query15	221	209	185	185
query16	1036	522	520	520
query17	1228	736	591	591
query18	2748	512	354	354
query19	224	192	179	179
query20	117	108	110	108
query21	238	160	138	138
query22	13618	13590	13319	13319
query23	17584	16609	16193	16193
query23_1	16279	16329	16163	16163
query24	7567	1780	1294	1294
query24_1	1311	1312	1264	1264
query25	579	475	391	391
query26	1317	339	221	221
query27	2571	584	394	394
query28	4438	1985	1975	1975
query29	1083	636	496	496
query30	341	265	239	239
query31	1172	1093	968	968
query32	109	60	59	59
query33	519	315	242	242
query34	1176	1130	640	640
query35	755	788	671	671
query36	1213	1215	1048	1048
query37	152	109	92	92
query38	1882	1704	1649	1649
query39	870	862	857	857
query39_1	850	825	847	825
query40	245	162	142	142
query41	65	63	63	63
query42	93	90	91	90
query43	319	323	279	279
query44	1448	767	759	759
query45	193	184	172	172
query46	1060	1196	745	745
query47	2142	2128	1968	1968
query48	400	392	305	305
query49	566	420	307	307
query50	1037	418	326	326
query51	10794	10746	10603	10603
query52	85	86	76	76
query53	262	277	194	194
query54	289	243	228	228
query55	78	71	65	65
query56	290	297	281	281
query57	1322	1277	1201	1201
query58	287	274	239	239
query59	1594	1658	1448	1448
query60	342	275	253	253
query61	152	149	151	149
query62	551	503	445	445
query63	241	197	204	197
query64	2786	1017	854	854
query65	4738	4617	4585	4585
query66	1773	497	375	375
query67	29340	29329	29280	29280
query68	3375	1515	969	969
query69	416	312	266	266
query70	1087	925	959	925
query71	379	342	311	311
query72	3019	2709	2279	2279
query73	855	772	429	429
query74	5080	4937	4705	4705
query75	2559	2496	2130	2130
query76	2362	1141	793	793
query77	351	370	277	277
query78	11927	11854	11388	11388
query79	1420	1145	730	730
query80	1281	546	451	451
query81	506	333	294	294
query82	585	160	118	118
query83	397	316	297	297
query84	273	161	131	131
query85	977	644	521	521
query86	433	283	283	283
query87	1814	1818	1762	1762
query88	3662	2825	2742	2742
query89	426	378	334	334
query90	1957	190	197	190
query91	202	189	162	162
query92	61	62	53	53
query93	1598	1439	935	935
query94	696	331	310	310
query95	795	495	479	479
query96	1027	794	363	363
query97	2615	2629	2497	2497
query98	211	203	204	203
query99	1086	1105	995	995
Total cold run time: 265242 ms
Total hot run time: 177379 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
ClickBench: Total hot run time: 24.98 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 05b13249fac917bfe00efc94f2dc3d55091a9e4e, data reload: false

query1	0.01	0.01	0.01
query2	0.13	0.05	0.05
query3	0.25	0.14	0.14
query4	1.60	0.14	0.14
query5	0.23	0.22	0.22
query6	1.25	1.05	1.12
query7	0.04	0.01	0.01
query8	0.05	0.04	0.04
query9	0.39	0.31	0.30
query10	0.56	0.54	0.52
query11	0.19	0.14	0.14
query12	0.18	0.14	0.15
query13	0.47	0.47	0.46
query14	1.01	1.00	1.01
query15	0.61	0.59	0.59
query16	0.31	0.35	0.32
query17	1.13	1.09	1.13
query18	0.22	0.20	0.21
query19	2.02	1.91	1.94
query20	0.01	0.02	0.01
query21	15.47	0.24	0.14
query22	4.79	0.06	0.05
query23	16.14	0.31	0.12
query24	2.92	0.41	0.31
query25	0.10	0.05	0.04
query26	0.75	0.20	0.15
query27	0.04	0.03	0.04
query28	3.53	0.90	0.52
query29	12.48	4.15	3.30
query30	0.27	0.15	0.16
query31	2.77	0.61	0.31
query32	3.21	0.59	0.49
query33	3.18	3.23	3.24
query34	15.52	4.27	3.53
query35	3.52	3.55	3.51
query36	0.57	0.45	0.41
query37	0.09	0.07	0.06
query38	0.04	0.04	0.03
query39	0.04	0.03	0.03
query40	0.19	0.17	0.15
query41	0.09	0.03	0.03
query42	0.04	0.02	0.03
query43	0.05	0.04	0.03
Total cold run time: 96.46 s
Total hot run time: 24.98 s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants