Skip to content

Commit a11c723

Browse files
HappenLeeYour Name
authored andcommitted
[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 857a0eb commit a11c723

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() {

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() 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
@@ -359,7 +359,7 @@ Status RowIdStorageReader::read_by_rowids(const PMultiGetRequest& request,
359359
watch.start();
360360
BaseTabletSPtr tablet = scope_timer_run(
361361
[&]() {
362-
auto res = ExecEnv::get_tablet(row_loc.tablet_id());
362+
auto res = ExecEnv::get_tablet(row_loc.tablet_id(), nullptr, true);
363363
return !res.has_value() ? nullptr
364364
: std::dynamic_pointer_cast<BaseTablet>(res.value());
365365
},

be/src/olap/storage_engine.cpp

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

1269-
Result<BaseTabletSPtr> StorageEngine::get_tablet(int64_t tablet_id, SyncRowsetStats* sync_stats) {
1269+
Result<BaseTabletSPtr> StorageEngine::get_tablet(int64_t tablet_id, SyncRowsetStats* sync_stats,
1270+
bool force_use_cache) {
12701271
BaseTabletSPtr tablet;
12711272
std::string err;
12721273
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() = 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
@@ -57,7 +57,8 @@ void ExecEnv::set_write_cooldown_meta_executors() {
5757
}
5858
#endif // BE_TEST
5959

60-
Result<BaseTabletSPtr> ExecEnv::get_tablet(int64_t tablet_id, SyncRowsetStats* sync_stats) {
60+
Result<BaseTabletSPtr> ExecEnv::get_tablet(int64_t tablet_id, SyncRowsetStats* sync_stats,
61+
bool force_use_cache) {
6162
auto storage_engine = GetInstance()->_storage_engine.get();
6263
return storage_engine != nullptr
6364
? 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
@@ -148,7 +148,8 @@ class ExecEnv {
148148

149149
// Requires ExenEnv ready
150150
static Result<BaseTabletSPtr> get_tablet(int64_t tablet_id,
151-
SyncRowsetStats* sync_stats = nullptr);
151+
SyncRowsetStats* sync_stats = nullptr,
152+
bool force_use_cache = false);
152153

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

0 commit comments

Comments
 (0)