Skip to content

Commit af2cda4

Browse files
authored
[Performance](clould) reduce tablet cache read in topn query (#50803)
Topn lazy read only read the cache in cloud mode to reduce tablet cache read.
1 parent 8081c33 commit af2cda4

File tree

9 files changed

+27
-15
lines changed

9 files changed

+27
-15
lines changed

be/src/cloud/cloud_storage_engine.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -249,10 +249,10 @@ bool CloudStorageEngine::stopped() {
249249
}
250250

251251
Result<BaseTabletSPtr> CloudStorageEngine::get_tablet(int64_t tablet_id,
252-
SyncRowsetStats* sync_stats) {
253-
return _tablet_mgr->get_tablet(tablet_id, false, true, sync_stats).transform([](auto&& t) {
254-
return static_pointer_cast<BaseTablet>(std::move(t));
255-
});
252+
SyncRowsetStats* sync_stats,
253+
bool force_use_cache) {
254+
return _tablet_mgr->get_tablet(tablet_id, false, true, sync_stats, force_use_cache)
255+
.transform([](auto&& t) { return static_pointer_cast<BaseTablet>(std::move(t)); });
256256
}
257257

258258
Status CloudStorageEngine::start_bg_threads(std::shared_ptr<WorkloadGroup> wg_sptr) {

be/src/cloud/cloud_storage_engine.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ class CloudStorageEngine final : public BaseStorageEngine {
5858
void stop() override;
5959
bool stopped() override;
6060

61-
Result<BaseTabletSPtr> get_tablet(int64_t tablet_id,
62-
SyncRowsetStats* sync_stats = nullptr) override;
61+
Result<BaseTabletSPtr> get_tablet(int64_t tablet_id, SyncRowsetStats* sync_stats = nullptr,
62+
bool force_use_cache = false) override;
6363

6464
Status start_bg_threads(std::shared_ptr<WorkloadGroup> wg_sptr = nullptr) override;
6565

be/src/cloud/cloud_tablet_mgr.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,8 @@ void set_tablet_access_time_ms(CloudTablet* tablet) {
153153

154154
Result<std::shared_ptr<CloudTablet>> CloudTabletMgr::get_tablet(int64_t tablet_id, bool warmup_data,
155155
bool sync_delete_bitmap,
156-
SyncRowsetStats* sync_stats) {
156+
SyncRowsetStats* sync_stats,
157+
bool force_use_cache) {
157158
// LRU value type. `Value`'s lifetime MUST NOT be longer than `CloudTabletMgr`
158159
class Value : public LRUCacheValueBase {
159160
public:
@@ -170,6 +171,12 @@ Result<std::shared_ptr<CloudTablet>> CloudTabletMgr::get_tablet(int64_t tablet_i
170171
auto tablet_id_str = std::to_string(tablet_id);
171172
CacheKey key(tablet_id_str);
172173
auto* handle = _cache->lookup(key);
174+
175+
if (handle == nullptr && force_use_cache) {
176+
return ResultError(
177+
Status::InternalError("failed to get cloud tablet from cache {}", tablet_id));
178+
}
179+
173180
if (handle == nullptr) {
174181
if (sync_stats) {
175182
++sync_stats->tablet_meta_cache_miss;

be/src/cloud/cloud_tablet_mgr.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ class CloudTabletMgr {
4646
// sync rowsets after, and download segment data in background if `warmup_data` is true.
4747
Result<std::shared_ptr<CloudTablet>> get_tablet(int64_t tablet_id, bool warmup_data = false,
4848
bool sync_delete_bitmap = true,
49-
SyncRowsetStats* sync_stats = nullptr);
49+
SyncRowsetStats* sync_stats = nullptr,
50+
bool force_use_cache = false);
5051

5152
void erase_tablet(int64_t tablet_id);
5253

be/src/exec/rowid_fetcher.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ Status RowIdStorageReader::read_by_rowids(const PMultiGetRequest& request,
369369
watch.start();
370370
BaseTabletSPtr tablet = scope_timer_run(
371371
[&]() {
372-
auto res = ExecEnv::get_tablet(row_loc.tablet_id());
372+
auto res = ExecEnv::get_tablet(row_loc.tablet_id(), nullptr, true);
373373
return !res.has_value() ? nullptr
374374
: std::dynamic_pointer_cast<BaseTablet>(res.value());
375375
},

be/src/olap/storage_engine.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1267,7 +1267,8 @@ Status StorageEngine::create_tablet(const TCreateTabletReq& request, RuntimeProf
12671267
return _tablet_manager->create_tablet(request, stores, profile);
12681268
}
12691269

1270-
Result<BaseTabletSPtr> StorageEngine::get_tablet(int64_t tablet_id, SyncRowsetStats* sync_stats) {
1270+
Result<BaseTabletSPtr> StorageEngine::get_tablet(int64_t tablet_id, SyncRowsetStats* sync_stats,
1271+
bool force_use_cache) {
12711272
BaseTabletSPtr tablet;
12721273
std::string err;
12731274
tablet = _tablet_manager->get_tablet(tablet_id, true, &err);

be/src/olap/storage_engine.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ class BaseStorageEngine {
109109
virtual Status start_bg_threads(std::shared_ptr<WorkloadGroup> wg_sptr = nullptr) = 0;
110110

111111
virtual Result<BaseTabletSPtr> get_tablet(int64_t tablet_id,
112-
SyncRowsetStats* sync_stats = nullptr) = 0;
112+
SyncRowsetStats* sync_stats = nullptr,
113+
bool force_use_cache = false) = 0;
113114

114115
void register_report_listener(ReportWorker* listener);
115116
void deregister_report_listener(ReportWorker* listener);
@@ -227,8 +228,8 @@ class StorageEngine final : public BaseStorageEngine {
227228

228229
Status create_tablet(const TCreateTabletReq& request, RuntimeProfile* profile);
229230

230-
Result<BaseTabletSPtr> get_tablet(int64_t tablet_id,
231-
SyncRowsetStats* sync_stats = nullptr) override;
231+
Result<BaseTabletSPtr> get_tablet(int64_t tablet_id, SyncRowsetStats* sync_stats = nullptr,
232+
bool force_use_cache = false) override;
232233

233234
void clear_transaction_task(const TTransactionId transaction_id);
234235
void clear_transaction_task(const TTransactionId transaction_id,

be/src/runtime/exec_env.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ void ExecEnv::set_write_cooldown_meta_executors() {
5252
}
5353
#endif // BE_TEST
5454

55-
Result<BaseTabletSPtr> ExecEnv::get_tablet(int64_t tablet_id, SyncRowsetStats* sync_stats) {
55+
Result<BaseTabletSPtr> ExecEnv::get_tablet(int64_t tablet_id, SyncRowsetStats* sync_stats,
56+
bool force_use_cache) {
5657
auto storage_engine = GetInstance()->_storage_engine.get();
5758
return storage_engine != nullptr
5859
? storage_engine->get_tablet(tablet_id, sync_stats)

be/src/runtime/exec_env.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,8 @@ class ExecEnv {
154154

155155
// Requires ExenEnv ready
156156
static Result<BaseTabletSPtr> get_tablet(int64_t tablet_id,
157-
SyncRowsetStats* sync_stats = nullptr);
157+
SyncRowsetStats* sync_stats = nullptr,
158+
bool force_use_cache = false);
158159

159160
static bool ready() { return _s_ready.load(std::memory_order_acquire); }
160161
static bool tracking_memory() { return _s_tracking_memory.load(std::memory_order_acquire); }

0 commit comments

Comments
 (0)