From badca0c38adfbfd1a13e2c3145326939e3255a52 Mon Sep 17 00:00:00 2001 From: zhang2014 Date: Thu, 20 Nov 2025 15:44:11 +0800 Subject: [PATCH 1/3] refactor(query): remove potential performance hotspots caused by fetch_add --- src/common/hashtable/src/hashjoin_hashtable.rs | 6 +++++- src/common/hashtable/src/hashjoin_string_hashtable.rs | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/common/hashtable/src/hashjoin_hashtable.rs b/src/common/hashtable/src/hashjoin_hashtable.rs index 69c942d89968b..ffa3cb41aa933 100644 --- a/src/common/hashtable/src/hashjoin_hashtable.rs +++ b/src/common/hashtable/src/hashjoin_hashtable.rs @@ -172,7 +172,11 @@ impl old_header = x, }; } - self.count.fetch_add(1, Ordering::Relaxed); + + if SKIP_DUPLICATES { + self.count.fetch_add(1, Ordering::Relaxed); + } + unsafe { (*entry_ptr).next = remove_header_tag(old_header) }; } } diff --git a/src/common/hashtable/src/hashjoin_string_hashtable.rs b/src/common/hashtable/src/hashjoin_string_hashtable.rs index d13ea2debef72..20fa2e254cf72 100644 --- a/src/common/hashtable/src/hashjoin_string_hashtable.rs +++ b/src/common/hashtable/src/hashjoin_string_hashtable.rs @@ -105,7 +105,11 @@ impl Err(x) => old_header = x, }; } - self.count.fetch_add(1, Ordering::Relaxed); + + if SKIP_DUPLICATES { + self.count.fetch_add(1, Ordering::Relaxed); + } + unsafe { (*entry_ptr).next = remove_header_tag(old_header) }; } } From 7f0381c60f1542991fbd6ca8e7b31e60a48aded8 Mon Sep 17 00:00:00 2001 From: zhang2014 Date: Thu, 20 Nov 2025 18:21:06 +0800 Subject: [PATCH 2/3] refactor(query): remove potential performance hotspots caused by fetch_add --- src/common/hashtable/src/hashjoin_hashtable.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/common/hashtable/src/hashjoin_hashtable.rs b/src/common/hashtable/src/hashjoin_hashtable.rs index ffa3cb41aa933..f3d1d1ab0ea1d 100644 --- a/src/common/hashtable/src/hashjoin_hashtable.rs +++ b/src/common/hashtable/src/hashjoin_hashtable.rs @@ -137,7 +137,10 @@ impl Default::default(), + false => AtomicUsize::new(row_num), + }, }; hashtable.atomic_pointers = unsafe { std::mem::transmute::<*mut u64, *mut AtomicU64>(hashtable.pointers.as_mut_ptr()) From 914585933113e284d1c19d9b519578e12f55d076 Mon Sep 17 00:00:00 2001 From: zhang2014 Date: Thu, 20 Nov 2025 20:30:43 +0800 Subject: [PATCH 3/3] refactor(query): remove potential performance hotspots caused by fetch_add --- src/common/hashtable/src/hashjoin_string_hashtable.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/common/hashtable/src/hashjoin_string_hashtable.rs b/src/common/hashtable/src/hashjoin_string_hashtable.rs index 20fa2e254cf72..b9fd9c0c266d2 100644 --- a/src/common/hashtable/src/hashjoin_string_hashtable.rs +++ b/src/common/hashtable/src/hashjoin_string_hashtable.rs @@ -70,7 +70,10 @@ impl }, atomic_pointers: std::ptr::null_mut(), hash_shift: (hash_bits() - capacity.trailing_zeros()) as usize, - count: Default::default(), + count: match SKIP_DUPLICATES { + true => Default::default(), + false => AtomicUsize::new(row_num), + }, }; hashtable.atomic_pointers = unsafe { std::mem::transmute::<*mut u64, *mut AtomicU64>(hashtable.pointers.as_mut_ptr())