This is an automated email from the ASF dual-hosted git repository.

dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 8cf1fdfb9b6 branch-3.0 [enhance](meta-service)add bytes for kv stats 
(#52729) (#53351)
8cf1fdfb9b6 is described below

commit 8cf1fdfb9b667997f88448efa35356766b35ad6a
Author: koarz <[email protected]>
AuthorDate: Thu Jul 17 12:26:54 2025 +0800

    branch-3.0 [enhance](meta-service)add bytes for kv stats (#52729) (#53351)
    
    pick https://github.com/apache/doris/pull/52729
---
 cloud/src/common/bvars.cpp                        | 166 +++++++
 cloud/src/common/bvars.h                          | 108 +++++
 cloud/src/common/stats.h                          |   4 +
 cloud/src/meta-service/meta_service.cpp           |  17 +
 cloud/src/meta-service/meta_service_helper.h      |   7 +-
 cloud/src/meta-service/meta_service_partition.cpp |   2 +
 cloud/src/meta-service/meta_service_resource.cpp  |   7 +-
 cloud/src/meta-service/meta_service_txn.cpp       |  26 +-
 cloud/src/meta-store/mem_txn_kv.cpp               |  20 +-
 cloud/src/meta-store/mem_txn_kv.h                 |  13 +
 cloud/src/meta-store/txn_kv.cpp                   |   5 +-
 cloud/src/meta-store/txn_kv.h                     |  24 +
 cloud/test/rpc_kv_bvar_test.cpp                   | 538 +++++++++++++---------
 13 files changed, 707 insertions(+), 230 deletions(-)

diff --git a/cloud/src/common/bvars.cpp b/cloud/src/common/bvars.cpp
index 7e4e36ce140..1ff6646c195 100644
--- a/cloud/src/common/bvars.cpp
+++ b/cloud/src/common/bvars.cpp
@@ -382,6 +382,172 @@ mBvarInt64Adder 
g_bvar_rpc_kv_clean_txn_label_put_counter("rpc_kv_clean_txn_labe
 mBvarInt64Adder 
g_bvar_rpc_kv_clean_txn_label_del_counter("rpc_kv_clean_txn_label_del_counter",{"instance_id"});
 // get_txn_id
 mBvarInt64Adder 
g_bvar_rpc_kv_get_txn_id_get_counter("rpc_kv_get_txn_id_get_counter",{"instance_id"});
+// bytes
+// get_rowset
+mBvarInt64Adder 
g_bvar_rpc_kv_get_rowset_get_bytes("rpc_kv_get_rowset_get_bytes",{"instance_id"});
+// get_version
+mBvarInt64Adder 
g_bvar_rpc_kv_get_version_get_bytes("rpc_kv_get_version_get_bytes",{"instance_id"});
+// get_schema_dict
+mBvarInt64Adder 
g_bvar_rpc_kv_get_schema_dict_get_bytes("rpc_kv_get_schema_dict_get_bytes",{"instance_id"});
+// create_tablets
+mBvarInt64Adder 
g_bvar_rpc_kv_create_tablets_get_bytes("rpc_kv_create_tablets_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_create_tablets_put_bytes("rpc_kv_create_tablets_put_bytes",{"instance_id"});
+// update_tablet
+mBvarInt64Adder 
g_bvar_rpc_kv_update_tablet_get_bytes("rpc_kv_update_tablet_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_update_tablet_put_bytes("rpc_kv_update_tablet_put_bytes",{"instance_id"});
+// update_tablet_schema
+mBvarInt64Adder 
g_bvar_rpc_kv_update_tablet_schema_get_bytes("rpc_kv_update_tablet_schema_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_update_tablet_schema_put_bytes("rpc_kv_update_tablet_schema_put_bytes",{"instance_id"});
+// get_tablet
+mBvarInt64Adder 
g_bvar_rpc_kv_get_tablet_get_bytes("rpc_kv_get_tablet_get_bytes",{"instance_id"});
+// prepare_rowset
+mBvarInt64Adder 
g_bvar_rpc_kv_prepare_rowset_get_bytes("rpc_kv_prepare_rowset_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_prepare_rowset_put_bytes("rpc_kv_prepare_rowset_put_bytes",{"instance_id"});
+// commit_rowset
+mBvarInt64Adder 
g_bvar_rpc_kv_commit_rowset_get_bytes("rpc_kv_commit_rowset_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_commit_rowset_put_bytes("rpc_kv_commit_rowset_put_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_commit_rowset_del_bytes("rpc_kv_commit_rowset_del_bytes",{"instance_id"});
+// update_tmp_rowset
+mBvarInt64Adder 
g_bvar_rpc_kv_update_tmp_rowset_get_bytes("rpc_kv_update_tmp_rowset_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_update_tmp_rowset_put_bytes("rpc_kv_update_tmp_rowset_put_bytes",{"instance_id"});
+// get_tablet_stats
+mBvarInt64Adder 
g_bvar_rpc_kv_get_tablet_stats_get_bytes("rpc_kv_get_tablet_stats_get_bytes",{"instance_id"});
+// update_delete_bitmap
+mBvarInt64Adder 
g_bvar_rpc_kv_update_delete_bitmap_get_bytes("rpc_kv_update_delete_bitmap_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_update_delete_bitmap_put_bytes("rpc_kv_update_delete_bitmap_put_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_update_delete_bitmap_del_bytes("rpc_kv_update_delete_bitmap_del_bytes",{"instance_id"});
+// get_delete_bitmap
+mBvarInt64Adder 
g_bvar_rpc_kv_get_delete_bitmap_get_bytes("rpc_kv_get_delete_bitmap_get_bytes",{"instance_id"});
+// get_delete_bitmap_update_lock
+mBvarInt64Adder 
g_bvar_rpc_kv_get_delete_bitmap_update_lock_get_bytes("rpc_kv_get_delete_bitmap_update_lock_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_get_delete_bitmap_update_lock_put_bytes("rpc_kv_get_delete_bitmap_update_lock_put_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_get_delete_bitmap_update_lock_del_bytes("rpc_kv_get_delete_bitmap_update_lock_del_bytes",{"instance_id"});
+// remove_delete_bitmap_update_lock
+mBvarInt64Adder 
g_bvar_rpc_kv_remove_delete_bitmap_update_lock_get_bytes("rpc_kv_remove_delete_bitmap_update_lock_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_remove_delete_bitmap_update_lock_put_bytes("rpc_kv_remove_delete_bitmap_update_lock_put_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_remove_delete_bitmap_update_lock_del_bytes("rpc_kv_remove_delete_bitmap_update_lock_del_bytes",{"instance_id"});
+// remove_delete_bitmap
+mBvarInt64Adder 
g_bvar_rpc_kv_remove_delete_bitmap_del_bytes("rpc_kv_remove_delete_bitmap_del_bytes",{"instance_id"});
+// start_tablet_job
+mBvarInt64Adder 
g_bvar_rpc_kv_start_tablet_job_get_bytes("rpc_kv_start_tablet_job_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_start_tablet_job_put_bytes("rpc_kv_start_tablet_job_put_bytes",{"instance_id"});
+// finish_tablet_job
+mBvarInt64Adder 
g_bvar_rpc_kv_finish_tablet_job_get_bytes("rpc_kv_finish_tablet_job_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_finish_tablet_job_put_bytes("rpc_kv_finish_tablet_job_put_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_finish_tablet_job_del_bytes("rpc_kv_finish_tablet_job_del_bytes",{"instance_id"});
+// prepare_index
+mBvarInt64Adder 
g_bvar_rpc_kv_prepare_index_get_bytes("rpc_kv_prepare_index_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_prepare_index_put_bytes("rpc_kv_prepare_index_put_bytes",{"instance_id"});
+// commit_index
+mBvarInt64Adder 
g_bvar_rpc_kv_commit_index_get_bytes("rpc_kv_commit_index_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_commit_index_put_bytes("rpc_kv_commit_index_put_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_commit_index_del_bytes("rpc_kv_commit_index_del_bytes",{"instance_id"});
+// drop_index
+mBvarInt64Adder 
g_bvar_rpc_kv_drop_index_get_bytes("rpc_kv_drop_index_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_drop_index_put_bytes("rpc_kv_drop_index_put_bytes",{"instance_id"});
+// prepare_partition
+mBvarInt64Adder 
g_bvar_rpc_kv_prepare_partition_get_bytes("rpc_kv_prepare_partition_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_prepare_partition_put_bytes("rpc_kv_prepare_partition_put_bytes",{"instance_id"});
+// commit_partition
+mBvarInt64Adder 
g_bvar_rpc_kv_commit_partition_get_bytes("rpc_kv_commit_partition_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_commit_partition_put_bytes("rpc_kv_commit_partition_put_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_commit_partition_del_bytes("rpc_kv_commit_partition_del_bytes",{"instance_id"});
+// drop_partition
+mBvarInt64Adder 
g_bvar_rpc_kv_drop_partition_get_bytes("rpc_kv_drop_partition_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_drop_partition_put_bytes("rpc_kv_drop_partition_put_bytes",{"instance_id"});
+// check_kv
+mBvarInt64Adder 
g_bvar_rpc_kv_check_kv_get_bytes("rpc_kv_check_kv_get_bytes",{"instance_id"});
+// get_obj_store_info
+mBvarInt64Adder 
g_bvar_rpc_kv_get_obj_store_info_get_bytes("rpc_kv_get_obj_store_info_get_bytes",{"instance_id"});
+// alter_storage_vault
+mBvarInt64Adder 
g_bvar_rpc_kv_alter_storage_vault_get_bytes("rpc_kv_alter_storage_vault_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_alter_storage_vault_put_bytes("rpc_kv_alter_storage_vault_put_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_alter_storage_vault_del_bytes("rpc_kv_alter_storage_vault_del_bytes",{"instance_id"});
+// alter_obj_store_info
+mBvarInt64Adder 
g_bvar_rpc_kv_alter_obj_store_info_get_bytes("rpc_kv_alter_obj_store_info_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_alter_obj_store_info_put_bytes("rpc_kv_alter_obj_store_info_put_bytes",{"instance_id"});
+// update_ak_sk
+mBvarInt64Adder 
g_bvar_rpc_kv_update_ak_sk_get_bytes("rpc_kv_update_ak_sk_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_update_ak_sk_put_bytes("rpc_kv_update_ak_sk_put_bytes",{"instance_id"});
+// create_instance
+mBvarInt64Adder 
g_bvar_rpc_kv_create_instance_get_bytes("rpc_kv_create_instance_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_create_instance_put_bytes("rpc_kv_create_instance_put_bytes",{"instance_id"});
+// get_instance
+mBvarInt64Adder 
g_bvar_rpc_kv_get_instance_get_bytes("rpc_kv_get_instance_get_bytes",{"instance_id"});
+// alter_cluster
+mBvarInt64Adder 
g_bvar_rpc_kv_alter_cluster_get_bytes("rpc_kv_alter_cluster_get_bytes",{"instance_id"});
+// get_cluster
+mBvarInt64Adder 
g_bvar_rpc_kv_get_cluster_get_bytes("rpc_kv_get_cluster_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_get_cluster_put_bytes("rpc_kv_get_cluster_put_bytes",{"instance_id"});
+// create_stage
+mBvarInt64Adder 
g_bvar_rpc_kv_create_stage_get_bytes("rpc_kv_create_stage_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_create_stage_put_bytes("rpc_kv_create_stage_put_bytes",{"instance_id"});
+// get_stage
+mBvarInt64Adder 
g_bvar_rpc_kv_get_stage_get_bytes("rpc_kv_get_stage_get_bytes",{"instance_id"});
+// get_iam
+mBvarInt64Adder 
g_bvar_rpc_kv_get_iam_get_bytes("rpc_kv_get_iam_get_bytes",{"instance_id"});
+// alter_iam
+mBvarInt64Adder 
g_bvar_rpc_kv_alter_iam_get_bytes("rpc_kv_alter_iam_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_alter_iam_put_bytes("rpc_kv_alter_iam_put_bytes",{"instance_id"});
+// alter_ram_user
+mBvarInt64Adder 
g_bvar_rpc_kv_alter_ram_user_get_bytes("rpc_kv_alter_ram_user_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_alter_ram_user_put_bytes("rpc_kv_alter_ram_user_put_bytes",{"instance_id"});
+// begin_copy
+mBvarInt64Adder 
g_bvar_rpc_kv_begin_copy_get_bytes("rpc_kv_begin_copy_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_begin_copy_put_bytes("rpc_kv_begin_copy_put_bytes",{"instance_id"});
+// finish_copy
+mBvarInt64Adder 
g_bvar_rpc_kv_finish_copy_get_bytes("rpc_kv_finish_copy_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_finish_copy_put_bytes("rpc_kv_finish_copy_put_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_finish_copy_del_bytes("rpc_kv_finish_copy_del_bytes",{"instance_id"});
+// get_copy_job
+mBvarInt64Adder 
g_bvar_rpc_kv_get_copy_job_get_bytes("rpc_kv_get_copy_job_get_bytes",{"instance_id"});
+// get_copy_files
+mBvarInt64Adder 
g_bvar_rpc_kv_get_copy_files_get_bytes("rpc_kv_get_copy_files_get_bytes",{"instance_id"});
+// filter_copy_files
+mBvarInt64Adder 
g_bvar_rpc_kv_filter_copy_files_get_bytes("rpc_kv_filter_copy_files_get_bytes",{"instance_id"});
+// get_cluster_status
+mBvarInt64Adder 
g_bvar_rpc_kv_get_cluster_status_get_bytes("rpc_kv_get_cluster_status_get_bytes",{"instance_id"});
+// begin_txn
+mBvarInt64Adder 
g_bvar_rpc_kv_begin_txn_get_bytes("rpc_kv_begin_txn_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_begin_txn_put_bytes("rpc_kv_begin_txn_put_bytes",{"instance_id"});
+// precommit_txn
+mBvarInt64Adder 
g_bvar_rpc_kv_precommit_txn_get_bytes("rpc_kv_precommit_txn_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_precommit_txn_put_bytes("rpc_kv_precommit_txn_put_bytes",{"instance_id"});
+// get_rl_task_commit_attach
+mBvarInt64Adder 
g_bvar_rpc_kv_get_rl_task_commit_attach_get_bytes("rpc_kv_get_rl_task_commit_attach_get_bytes",{"instance_id"});
+// reset_rl_progress
+mBvarInt64Adder 
g_bvar_rpc_kv_reset_rl_progress_get_bytes("rpc_kv_reset_rl_progress_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_reset_rl_progress_put_bytes("rpc_kv_reset_rl_progress_put_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_reset_rl_progress_del_bytes("rpc_kv_reset_rl_progress_del_bytes",{"instance_id"});
+// commit_txn
+mBvarInt64Adder 
g_bvar_rpc_kv_commit_txn_get_bytes("rpc_kv_commit_txn_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_commit_txn_put_bytes("rpc_kv_commit_txn_put_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_commit_txn_del_bytes("rpc_kv_commit_txn_del_bytes",{"instance_id"});
+// abort_txn
+mBvarInt64Adder 
g_bvar_rpc_kv_abort_txn_get_bytes("rpc_kv_abort_txn_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_abort_txn_put_bytes("rpc_kv_abort_txn_put_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_abort_txn_del_bytes("rpc_kv_abort_txn_del_bytes",{"instance_id"});
+// get_txn
+mBvarInt64Adder 
g_bvar_rpc_kv_get_txn_get_bytes("rpc_kv_get_txn_get_bytes",{"instance_id"});
+// get_current_max_txn_id
+mBvarInt64Adder 
g_bvar_rpc_kv_get_current_max_txn_id_get_bytes("rpc_kv_get_current_max_txn_id_get_bytes",{"instance_id"});
+// begin_sub_txn
+mBvarInt64Adder 
g_bvar_rpc_kv_begin_sub_txn_get_bytes("rpc_kv_begin_sub_txn_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_begin_sub_txn_put_bytes("rpc_kv_begin_sub_txn_put_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_begin_sub_txn_del_bytes("rpc_kv_begin_sub_txn_del_bytes",{"instance_id"});
+// abort_sub_txn
+mBvarInt64Adder 
g_bvar_rpc_kv_abort_sub_txn_get_bytes("rpc_kv_abort_sub_txn_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_abort_sub_txn_put_bytes("rpc_kv_abort_sub_txn_put_bytes",{"instance_id"});
+// abort_txn_with_coordinator
+mBvarInt64Adder 
g_bvar_rpc_kv_abort_txn_with_coordinator_get_bytes("rpc_kv_abort_txn_with_coordinator_get_bytes",{"instance_id"});
+// check_txn_conflict
+mBvarInt64Adder 
g_bvar_rpc_kv_check_txn_conflict_get_bytes("rpc_kv_check_txn_conflict_get_bytes",{"instance_id"});
+// clean_txn_label
+mBvarInt64Adder 
g_bvar_rpc_kv_clean_txn_label_get_bytes("rpc_kv_clean_txn_label_get_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_clean_txn_label_put_bytes("rpc_kv_clean_txn_label_put_bytes",{"instance_id"});
+mBvarInt64Adder 
g_bvar_rpc_kv_clean_txn_label_del_bytes("rpc_kv_clean_txn_label_del_bytes",{"instance_id"});
+// get_txn_id
+mBvarInt64Adder 
g_bvar_rpc_kv_get_txn_id_get_bytes("rpc_kv_get_txn_id_get_bytes",{"instance_id"});
 
 // meta ranges
 mBvarStatus<int64_t> g_bvar_fdb_kv_ranges_count("fdb_kv_ranges_count", 
{"category","instance_id", "sub_category"});
diff --git a/cloud/src/common/bvars.h b/cloud/src/common/bvars.h
index d57e14e2697..08461dad668 100644
--- a/cloud/src/common/bvars.h
+++ b/cloud/src/common/bvars.h
@@ -469,5 +469,113 @@ extern mBvarInt64Adder 
g_bvar_rpc_kv_clean_txn_label_put_counter;
 extern mBvarInt64Adder g_bvar_rpc_kv_clean_txn_label_del_counter;
 extern mBvarInt64Adder g_bvar_rpc_kv_get_txn_id_get_counter;
 
+extern mBvarInt64Adder g_bvar_rpc_kv_get_rowset_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_version_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_schema_dict_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_create_tablets_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_create_tablets_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_update_tablet_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_update_tablet_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_update_tablet_schema_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_update_tablet_schema_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_tablet_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_prepare_rowset_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_prepare_rowset_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_commit_rowset_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_commit_rowset_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_commit_rowset_del_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_update_tmp_rowset_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_update_tmp_rowset_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_tablet_stats_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_update_delete_bitmap_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_update_delete_bitmap_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_update_delete_bitmap_del_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_delete_bitmap_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_delete_bitmap_update_lock_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_delete_bitmap_update_lock_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_delete_bitmap_update_lock_del_bytes;
+extern mBvarInt64Adder 
g_bvar_rpc_kv_remove_delete_bitmap_update_lock_get_bytes;
+extern mBvarInt64Adder 
g_bvar_rpc_kv_remove_delete_bitmap_update_lock_put_bytes;
+extern mBvarInt64Adder 
g_bvar_rpc_kv_remove_delete_bitmap_update_lock_del_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_remove_delete_bitmap_del_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_start_tablet_job_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_start_tablet_job_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_finish_tablet_job_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_finish_tablet_job_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_finish_tablet_job_del_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_prepare_index_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_prepare_index_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_commit_index_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_commit_index_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_commit_index_del_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_drop_index_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_drop_index_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_prepare_partition_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_prepare_partition_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_commit_partition_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_commit_partition_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_commit_partition_del_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_drop_partition_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_drop_partition_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_check_kv_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_obj_store_info_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_alter_storage_vault_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_alter_storage_vault_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_alter_storage_vault_del_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_alter_obj_store_info_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_alter_obj_store_info_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_update_ak_sk_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_update_ak_sk_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_create_instance_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_create_instance_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_instance_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_alter_cluster_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_cluster_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_cluster_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_create_stage_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_create_stage_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_stage_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_iam_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_alter_iam_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_alter_iam_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_alter_ram_user_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_alter_ram_user_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_begin_copy_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_begin_copy_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_finish_copy_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_finish_copy_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_finish_copy_del_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_copy_job_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_copy_files_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_filter_copy_files_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_cluster_status_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_begin_txn_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_begin_txn_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_precommit_txn_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_precommit_txn_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_rl_task_commit_attach_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_reset_rl_progress_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_reset_rl_progress_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_reset_rl_progress_del_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_commit_txn_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_commit_txn_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_commit_txn_del_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_abort_txn_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_abort_txn_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_abort_txn_del_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_txn_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_current_max_txn_id_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_begin_sub_txn_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_begin_sub_txn_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_begin_sub_txn_del_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_abort_sub_txn_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_abort_sub_txn_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_abort_txn_with_coordinator_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_check_txn_conflict_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_clean_txn_label_get_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_clean_txn_label_put_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_clean_txn_label_del_bytes;
+extern mBvarInt64Adder g_bvar_rpc_kv_get_txn_id_get_bytes;
+
 // meta ranges
 extern mBvarStatus<int64_t> g_bvar_fdb_kv_ranges_count;
diff --git a/cloud/src/common/stats.h b/cloud/src/common/stats.h
index 2d99bf0d3c1..a9e482a3e4c 100644
--- a/cloud/src/common/stats.h
+++ b/cloud/src/common/stats.h
@@ -21,6 +21,10 @@
 
 namespace doris::cloud {
 struct KVStats {
+    int64_t get_bytes {};
+    int64_t put_bytes {};
+    int64_t del_bytes {};
+
     int64_t get_counter {};
     int64_t put_counter {};
     int64_t del_counter {};
diff --git a/cloud/src/meta-service/meta_service.cpp 
b/cloud/src/meta-service/meta_service.cpp
index 7e0d3a267b8..176882cb120 100644
--- a/cloud/src/meta-service/meta_service.cpp
+++ b/cloud/src/meta-service/meta_service.cpp
@@ -358,6 +358,7 @@ void 
MetaServiceImpl::batch_get_version(::google::protobuf::RpcController* contr
         }
         DORIS_CLOUD_DEFER {
             if (txn == nullptr) return;
+            stats.get_bytes += txn->get_bytes();
             stats.get_counter += txn->num_get_keys();
         };
         for (size_t i = response->versions_size(); i < num_acquired; i += 
BATCH_SIZE) {
@@ -459,6 +460,8 @@ void internal_create_tablet(const CreateTabletsRequest* 
request, MetaServiceCode
     }
     DORIS_CLOUD_DEFER {
         if (txn == nullptr) return;
+        stats.get_bytes += txn->get_bytes();
+        stats.put_bytes += txn->put_bytes();
         stats.get_counter += txn->num_get_keys();
         stats.put_counter += txn->num_put_keys();
     };
@@ -606,6 +609,8 @@ void 
MetaServiceImpl::create_tablets(::google::protobuf::RpcController* controll
         instance_key(key_info, &key);
 
         err = txn0->get(key, &val);
+        stats.get_bytes += val.size() + key.size();
+        stats.get_counter++;
         LOG(INFO) << "get instance_key=" << hex(key);
         stats.get_counter++;
         if (err != TxnErrorCode::TXN_OK) {
@@ -1726,6 +1731,7 @@ void 
MetaServiceImpl::get_rowset(::google::protobuf::RpcController* controller,
         }
         DORIS_CLOUD_DEFER {
             if (txn == nullptr) return;
+            stats.get_bytes += txn->get_bytes();
             stats.get_counter += txn->num_get_keys();
         };
         TabletIndexPB idx;
@@ -1766,6 +1772,7 @@ void 
MetaServiceImpl::get_rowset(::google::protobuf::RpcController* controller,
 
                 if (version_pb.pending_txn_ids_size() > 0) {
                     DCHECK(version_pb.pending_txn_ids_size() == 1);
+                    stats.get_bytes += txn->get_bytes();
                     stats.get_counter += txn->num_get_keys();
                     txn.reset();
                     
TEST_SYNC_POINT_CALLBACK("get_rowset::advance_last_pending_txn_id",
@@ -1900,6 +1907,7 @@ void 
MetaServiceImpl::get_tablet_stats(::google::protobuf::RpcController* contro
             return;
         }
         DORIS_CLOUD_DEFER {
+            stats.get_bytes += txn->get_bytes();
             stats.get_counter += txn->num_get_keys();
             // the txn is not a local variable, if not reset will count last 
res twice
             txn.reset(nullptr);
@@ -2246,6 +2254,9 @@ void 
MetaServiceImpl::update_delete_bitmap(google::protobuf::RpcController* cont
                 g_bvar_update_delete_bitmap_fail_counter << 1;
                 return;
             }
+            stats.get_bytes += txn->get_bytes();
+            stats.put_bytes += txn->put_bytes();
+            stats.del_bytes += txn->delete_bytes();
             stats.get_counter += txn->num_get_keys();
             stats.put_counter += txn->num_put_keys();
             stats.del_counter += txn->num_del_keys();
@@ -2359,6 +2370,7 @@ void 
MetaServiceImpl::get_delete_bitmap(google::protobuf::RpcController* control
         }
         DORIS_CLOUD_DEFER {
             if (txn == nullptr) return;
+            stats.get_bytes += txn->get_bytes();
             stats.get_counter += txn->num_get_keys();
         };
         MetaDeleteBitmapInfo start_key_info {instance_id, tablet_id, 
rowset_ids[i],
@@ -2387,6 +2399,7 @@ void 
MetaServiceImpl::get_delete_bitmap(google::protobuf::RpcController* control
             TEST_SYNC_POINT_CALLBACK("get_delete_bitmap_err", &round, &err);
             int64_t retry = 0;
             while (err == TxnErrorCode::TXN_TOO_OLD && retry < 3) {
+                stats.get_bytes += txn->get_bytes();
                 stats.get_counter += txn->num_get_keys();
                 txn = nullptr;
                 err = txn_kv_->create_txn(&txn);
@@ -2481,6 +2494,7 @@ void 
MetaServiceImpl::get_delete_bitmap(google::protobuf::RpcController* control
         }
         DORIS_CLOUD_DEFER {
             if (txn == nullptr) return;
+            stats.get_bytes += txn->get_bytes();
             stats.get_counter += txn->num_get_keys();
         };
         TabletIndexPB idx(request->idx());
@@ -2635,6 +2649,9 @@ bool 
MetaServiceImpl::get_mow_tablet_stats_and_meta(MetaServiceCode& code, std::
     }
     DORIS_CLOUD_DEFER {
         if (txn == nullptr) return;
+        stats.get_bytes += txn->get_bytes();
+        stats.put_bytes += txn->put_bytes();
+        stats.del_bytes += txn->delete_bytes();
         stats.get_counter += txn->num_get_keys();
         stats.put_counter += txn->num_put_keys();
         stats.del_counter += txn->num_del_keys();
diff --git a/cloud/src/meta-service/meta_service_helper.h 
b/cloud/src/meta-service/meta_service_helper.h
index 7ecdf856659..9d99e28b643 100644
--- a/cloud/src/meta-service/meta_service_helper.h
+++ b/cloud/src/meta-service/meta_service_helper.h
@@ -230,8 +230,10 @@ inline MetaServiceCode cast_as(TxnErrorCode code) {
 // don't use these macro it just for defer count, reduce useless variable(some 
rpc just need one of rw op)
 // If we have to write separate code for each RPC, it would be quite 
troublesome
 // After all, adding put, get, and del after the RPC_PREPROCESS macro is 
simpler than writing a long string of code
-#define RPCKVCOUNTHELPER(func_name, op) \
+#define RPCKVCOUNTHELPER(func_name, op)                                        
    \
+    g_bvar_rpc_kv_##func_name##_##op##_bytes.put({instance_id}, 
stats.op##_bytes); \
     g_bvar_rpc_kv_##func_name##_##op##_counter.put({instance_id}, 
stats.op##_counter);
+
 #define RPCKVCOUNT_0(func_name)
 #define RPCKVCOUNT_1(func_name, op1) RPCKVCOUNTHELPER(func_name, op1)
 #define RPCKVCOUNT_2(func_name, op1, op2) \
@@ -266,6 +268,9 @@ inline MetaServiceCode cast_as(TxnErrorCode code) {
         finish_rpc(#func_name, ctrl, response);                                
               \
         closure_guard.reset(nullptr);                                          
               \
         if (txn != nullptr) {                                                  
               \
+            stats.get_bytes += txn->get_bytes();                               
               \
+            stats.put_bytes += txn->put_bytes();                               
               \
+            stats.del_bytes += txn->delete_bytes();                            
               \
             stats.get_counter += txn->num_get_keys();                          
               \
             stats.put_counter += txn->num_put_keys();                          
               \
             stats.del_counter += txn->num_del_keys();                          
               \
diff --git a/cloud/src/meta-service/meta_service_partition.cpp 
b/cloud/src/meta-service/meta_service_partition.cpp
index 109b86813f3..e8f009281de 100644
--- a/cloud/src/meta-service/meta_service_partition.cpp
+++ b/cloud/src/meta-service/meta_service_partition.cpp
@@ -629,6 +629,7 @@ void check_create_table(std::string instance_id, 
std::shared_ptr<TxnKv> txn_kv,
     }
     DORIS_CLOUD_DEFER {
         if (txn == nullptr) return;
+        stats.get_bytes += txn->get_bytes();
         stats.get_counter += txn->num_get_keys();
     };
     auto& [keys, hint, key_func] = get_check_info(request);
@@ -650,6 +651,7 @@ void check_create_table(std::string instance_id, 
std::shared_ptr<TxnKv> txn_kv,
             *msg = "prepare and commit rpc not match, recycle key remained";
             return;
         } else if (err == TxnErrorCode::TXN_TOO_OLD) {
+            stats.get_bytes += txn->get_bytes();
             stats.get_counter += txn->num_get_keys();
             //  separate it to several txn for rubustness
             txn.reset();
diff --git a/cloud/src/meta-service/meta_service_resource.cpp 
b/cloud/src/meta-service/meta_service_resource.cpp
index f69ed65786d..e33b0c24a6d 100644
--- a/cloud/src/meta-service/meta_service_resource.cpp
+++ b/cloud/src/meta-service/meta_service_resource.cpp
@@ -2590,6 +2590,7 @@ void 
MetaServiceImpl::alter_cluster(google::protobuf::RpcController* controller,
         KVStats stats;
         notify_refresh_instance(txn_kv, instance_id, &stats);
         if (config::use_detailed_metrics && !instance_id.empty()) {
+            g_bvar_rpc_kv_alter_cluster_get_bytes.put({instance_id}, 
stats.get_bytes);
             g_bvar_rpc_kv_alter_cluster_get_counter.put({instance_id}, 
stats.get_counter);
         }
     });
@@ -4027,6 +4028,7 @@ void 
MetaServiceImpl::get_cluster_status(google::protobuf::RpcController* contro
         }
         DORIS_CLOUD_DEFER {
             if (config::use_detailed_metrics && txn != nullptr) {
+                g_bvar_rpc_kv_get_cluster_status_get_bytes.put({instance_id}, 
txn->get_bytes());
                 g_bvar_rpc_kv_get_cluster_status_get_counter.put({instance_id},
                                                                  
txn->num_get_keys());
             }
@@ -4087,7 +4089,7 @@ void notify_refresh_instance(std::shared_ptr<TxnKv> 
txn_kv, const std::string& i
     std::string key = system_meta_service_registry_key();
     std::string val;
     err = txn->get(key, &val);
-    if (config::use_detailed_metrics && stats) {
+    if (stats) {
         stats->get_counter++;
     }
     if (err != TxnErrorCode::TXN_OK) {
@@ -4095,6 +4097,9 @@ void notify_refresh_instance(std::shared_ptr<TxnKv> 
txn_kv, const std::string& i
                      << " err=" << err;
         return;
     }
+    if (stats) {
+        stats->get_bytes += val.size() + key.size();
+    }
     std::string self_endpoint =
             config::hostname.empty() ? get_local_ip(config::priority_networks) 
: config::hostname;
     self_endpoint = fmt::format("{}:{}", self_endpoint, 
config::brpc_listen_port);
diff --git a/cloud/src/meta-service/meta_service_txn.cpp 
b/cloud/src/meta-service/meta_service_txn.cpp
index 4f8fc6f7299..28e262226ed 100644
--- a/cloud/src/meta-service/meta_service_txn.cpp
+++ b/cloud/src/meta-service/meta_service_txn.cpp
@@ -151,6 +151,8 @@ void 
MetaServiceImpl::begin_txn(::google::protobuf::RpcController* controller,
         return;
     }
     // get count before txn reset, if not we will lose these count
+    stats.get_bytes += txn->get_bytes();
+    stats.put_bytes += txn->put_bytes();
     stats.get_counter += txn->num_get_keys();
     stats.put_counter += txn->num_put_keys();
     //2. Get txn id from version stamp
@@ -783,7 +785,9 @@ void scan_tmp_rowset(
         return;
     }
     DORIS_CLOUD_DEFER {
-        if (stats && txn) stats->get_counter += txn->num_get_keys();
+        if (!stats || !txn) return;
+        stats->get_bytes += txn->get_bytes();
+        stats->get_counter += txn->num_get_keys();
     };
 
     // Get db id with txn id
@@ -958,6 +962,9 @@ void commit_txn_immediately(
         }
         DORIS_CLOUD_DEFER {
             if (txn == nullptr) return;
+            stats.get_bytes += txn->get_bytes();
+            stats.put_bytes += txn->put_bytes();
+            stats.del_bytes += txn->delete_bytes();
             stats.get_counter += txn->num_get_keys();
             stats.put_counter += txn->num_put_keys();
             stats.del_counter += txn->num_del_keys();
@@ -1129,6 +1136,7 @@ void commit_txn_immediately(
         version_values.clear();
 
         if (last_pending_txn_id > 0) {
+            stats.get_bytes += txn->get_bytes();
             stats.get_counter += txn->num_get_keys();
             txn.reset();
             
TEST_SYNC_POINT_CALLBACK("commit_txn_immediately::advance_last_pending_txn_id",
@@ -1591,6 +1599,9 @@ void commit_txn_eventually(
         }
         DORIS_CLOUD_DEFER {
             if (txn == nullptr) return;
+            stats.get_bytes += txn->get_bytes();
+            stats.put_bytes += txn->put_bytes();
+            stats.del_bytes += txn->delete_bytes();
             stats.get_counter += txn->num_get_keys();
             stats.put_counter += txn->num_put_keys();
             stats.del_counter += txn->num_del_keys();
@@ -1611,6 +1622,7 @@ void commit_txn_eventually(
         
TEST_SYNC_POINT_CALLBACK("commit_txn_eventually::need_repair_tablet_idx",
                                  &need_repair_tablet_idx);
         if (need_repair_tablet_idx) {
+            stats.get_bytes += txn->get_bytes();
             stats.get_counter += txn->num_get_keys();
             txn.reset();
             repair_tablet_index(txn_kv, code, msg, instance_id, db_id, txn_id, 
tmp_rowsets_meta);
@@ -1676,6 +1688,7 @@ void commit_txn_eventually(
         if (last_pending_txn_id > 0) {
             
TEST_SYNC_POINT_CALLBACK("commit_txn_eventually::advance_last_pending_txn_id",
                                      &last_pending_txn_id);
+            stats.get_bytes += txn->get_bytes();
             stats.get_counter += txn->num_get_keys();
             txn.reset();
             std::shared_ptr<TxnLazyCommitTask> task =
@@ -2008,6 +2021,9 @@ void commit_txn_with_sub_txn(const CommitTxnRequest* 
request, CommitTxnResponse*
     }
     DORIS_CLOUD_DEFER {
         if (txn == nullptr) return;
+        stats.get_bytes += txn->get_bytes();
+        stats.put_bytes += txn->put_bytes();
+        stats.del_bytes += txn->delete_bytes();
         stats.get_counter += txn->num_get_keys();
         stats.put_counter += txn->num_put_keys();
         stats.del_counter += txn->num_del_keys();
@@ -2103,7 +2119,7 @@ void commit_txn_with_sub_txn(const CommitTxnRequest* 
request, CommitTxnResponse*
                    << " tmp_rowsets_meta.size()=" << tmp_rowsets_meta.size();
         sub_txn_to_tmp_rowsets_meta.emplace(sub_txn_id, 
std::move(tmp_rowsets_meta));
     }
-
+    stats.get_bytes += txn->get_bytes();
     stats.get_counter += txn->num_get_keys();
     // Create a read/write txn for guarantee consistency
     txn.reset();
@@ -3166,6 +3182,8 @@ void 
MetaServiceImpl::begin_sub_txn(::google::protobuf::RpcController* controlle
         msg = ss.str();
         return;
     }
+    stats.get_bytes += txn->get_bytes();
+    stats.put_bytes += txn->put_bytes();
     stats.get_counter += txn->num_get_keys();
     stats.put_counter += txn->num_put_keys();
 
@@ -3676,6 +3694,9 @@ TxnErrorCode internal_clean_label(std::shared_ptr<TxnKv> 
txn_kv, const std::stri
     }
     DORIS_CLOUD_DEFER {
         if (txn == nullptr) return;
+        stats.get_bytes += txn->get_bytes();
+        stats.put_bytes += txn->put_bytes();
+        stats.del_bytes += txn->delete_bytes();
         stats.get_counter += txn->num_get_keys();
         stats.put_counter += txn->num_put_keys();
         stats.del_counter += txn->num_del_keys();
@@ -3837,6 +3858,7 @@ void 
MetaServiceImpl::clean_txn_label(::google::protobuf::RpcController* control
             }
             DORIS_CLOUD_DEFER {
                 if (txn == nullptr) return;
+                stats.get_bytes += txn->get_bytes();
                 stats.get_counter += txn->num_get_keys();
             };
 
diff --git a/cloud/src/meta-store/mem_txn_kv.cpp 
b/cloud/src/meta-store/mem_txn_kv.cpp
index 5e049c6fe41..87189dd1d8e 100644
--- a/cloud/src/meta-store/mem_txn_kv.cpp
+++ b/cloud/src/meta-store/mem_txn_kv.cpp
@@ -23,10 +23,13 @@
 #include <cstring>
 #include <memory>
 #include <mutex>
+#include <numeric>
 #include <optional>
 #include <ostream>
 #include <string>
 
+#include "common/defer.h"
+#include "common/util.h"
 #include "cpp/sync_point.h"
 #include "meta-store/txn_kv_error.h"
 #include "txn_kv.h"
@@ -249,6 +252,7 @@ void Transaction::put(std::string_view key, 
std::string_view val) {
     op_list_.emplace_back(ModifyOpType::PUT, k, v);
     ++num_put_keys_;
     kv_->put_count_++;
+    kv_->put_bytes_ += key.size() + val.size();
     put_bytes_ += key.size() + val.size();
     approximate_bytes_ += key.size() + val.size();
 }
@@ -271,8 +275,6 @@ TxnErrorCode Transaction::get(std::string_view begin, 
std::string_view end,
                               int limit) {
     TEST_SYNC_POINT_CALLBACK("memkv::Transaction::get", &limit);
     std::lock_guard<std::mutex> l(lock_);
-    num_get_keys_++;
-    kv_->get_count_++;
     std::string begin_k(begin.data(), begin.size());
     std::string end_k(end.data(), end.size());
     // TODO: figure out what happen if range_get has part of unreadable_keys
@@ -285,6 +287,8 @@ TxnErrorCode Transaction::get(std::string_view begin, 
std::string_view end,
 }
 
 TxnErrorCode Transaction::inner_get(const std::string& key, std::string* val, 
bool snapshot) {
+    num_get_keys_++;
+    kv_->get_count_++;
     // Read your writes.
     auto it = writes_.find(key);
     if (it != writes_.end()) {
@@ -303,6 +307,8 @@ TxnErrorCode Transaction::inner_get(const std::string& key, 
std::string* val, bo
             return TxnErrorCode::TXN_KEY_NOT_FOUND;
         }
     }
+    get_bytes_ += val->size() + key.size();
+    kv_->get_bytes_ += val->size() + key.size();
     return TxnErrorCode::TXN_OK;
 }
 
@@ -349,6 +355,10 @@ TxnErrorCode Transaction::inner_get(const std::string& 
begin, const std::string&
     std::vector<std::pair<std::string, std::string>> kv_list(kv_map.begin(), 
kv_map.end());
     num_get_keys_ += kv_list.size();
     kv_->get_count_ += kv_list.size();
+    for (auto& [k, v] : kv_list) {
+        get_bytes_ += k.size() + v.size();
+        kv_->get_bytes_ += k.size() + v.size();
+    }
     *iter = std::make_unique<memkv::RangeGetIterator>(std::move(kv_list), 
more);
     return TxnErrorCode::TXN_OK;
 }
@@ -362,6 +372,8 @@ void Transaction::atomic_set_ver_key(std::string_view 
key_prefix, std::string_vi
     op_list_.emplace_back(ModifyOpType::ATOMIC_SET_VER_KEY, k, v);
 
     ++num_put_keys_;
+
+    kv_->put_bytes_ += k.size() + val.size();
     put_bytes_ += key_prefix.size() + val.size();
     approximate_bytes_ += key_prefix.size() + val.size();
 }
@@ -375,6 +387,7 @@ void Transaction::atomic_set_ver_value(std::string_view 
key, std::string_view va
     op_list_.emplace_back(ModifyOpType::ATOMIC_SET_VER_VAL, k, v);
 
     ++num_put_keys_;
+    kv_->put_bytes_ += key.size() + value.size();
     put_bytes_ += key.size() + value.size();
     approximate_bytes_ += key.size() + value.size();
 }
@@ -389,6 +402,7 @@ void Transaction::atomic_add(std::string_view key, int64_t 
to_add) {
     ++num_put_keys_;
     kv_->put_count_++;
     put_bytes_ += key.size() + 8;
+    kv_->put_bytes_ += key.size() + 8;
     approximate_bytes_ += key.size() + 8;
 }
 
@@ -412,6 +426,7 @@ void Transaction::remove(std::string_view key) {
 
     kv_->del_count_++;
     ++num_del_keys_;
+    kv_->del_bytes_ += key.size();
     delete_bytes_ += key.size();
     approximate_bytes_ += key.size();
 }
@@ -433,6 +448,7 @@ void Transaction::remove(std::string_view begin, 
std::string_view end) {
     kv_->del_count_ += 2;
     // same as normal txn
     num_del_keys_ += 2;
+    kv_->del_bytes_ += begin.size() + end.size();
     delete_bytes_ += begin.size() + end.size();
     approximate_bytes_ += begin.size() + end.size();
 }
diff --git a/cloud/src/meta-store/mem_txn_kv.h 
b/cloud/src/meta-store/mem_txn_kv.h
index 337f23a0361..d74938d6825 100644
--- a/cloud/src/meta-store/mem_txn_kv.h
+++ b/cloud/src/meta-store/mem_txn_kv.h
@@ -22,6 +22,7 @@
 #include <map>
 #include <memory>
 #include <mutex>
+#include <numeric>
 #include <optional>
 #include <set>
 #include <string>
@@ -57,6 +58,9 @@ public:
     TxnErrorCode get_kv(const std::string& begin, const std::string& end, 
int64_t version,
                         int limit, bool* more, std::map<std::string, 
std::string>* kv_list);
 
+    int64_t get_bytes_ {};
+    int64_t put_bytes_ {};
+    int64_t del_bytes_ {};
     int64_t get_count_ {};
     int64_t put_count_ {};
     int64_t del_count_ {};
@@ -203,6 +207,8 @@ public:
 
     size_t put_bytes() const override { return put_bytes_; }
 
+    size_t get_bytes() const override { return get_bytes_; }
+
 private:
     TxnErrorCode inner_get(const std::string& key, std::string* val, bool 
snapshot);
 
@@ -229,6 +235,7 @@ private:
     size_t num_put_keys_ {0};
     size_t delete_bytes_ {0};
     size_t put_bytes_ {0};
+    size_t get_bytes_ {0};
 };
 
 class RangeGetIterator : public cloud::RangeGetIterator {
@@ -250,6 +257,12 @@ public:
 
     bool more() override { return more_; }
 
+    int64_t get_kv_bytes() const override {
+        int64_t kv_bytes {};
+        for (auto& [k, v] : kvs_) kv_bytes += k.size() + v.size();
+        return kv_bytes;
+    }
+
     int size() override { return kvs_size_; }
     void reset() override { idx_ = 0; }
 
diff --git a/cloud/src/meta-store/txn_kv.cpp b/cloud/src/meta-store/txn_kv.cpp
index 76f3c724958..2b07870a321 100644
--- a/cloud/src/meta-store/txn_kv.cpp
+++ b/cloud/src/meta-store/txn_kv.cpp
@@ -407,6 +407,7 @@ TxnErrorCode Transaction::get(std::string_view key, 
std::string* val, bool snaps
                      << " key=" << hex(key);
         return cast_as_txn_code(err);
     }
+    get_bytes_ += len + key.size();
 
     if (!found) return TxnErrorCode::TXN_KEY_NOT_FOUND;
     *val = std::string((char*)ret, len);
@@ -440,6 +441,7 @@ TxnErrorCode Transaction::get(std::string_view begin, 
std::string_view end,
     std::unique_ptr<RangeGetIterator> ret(new RangeGetIterator(fut));
     RETURN_IF_ERROR(ret->init());
     num_get_keys_ += ret->size();
+    get_bytes_ += ret->get_kv_bytes();
     g_bvar_txn_kv_get_count_normalized << ret->size();
 
     *(iter) = std::move(ret);
@@ -655,6 +657,7 @@ TxnErrorCode 
Transaction::batch_get(std::vector<std::optional<std::string>>* res
             const uint8_t* ret;
             int len;
             err = fdb_future_get_value(future, &found, &ret, &len);
+            num_get_keys_++;
             if (err) {
                 LOG(WARNING) << __PRETTY_FUNCTION__
                              << " failed to fdb_future_get_value err=" << 
fdb_get_error(err)
@@ -665,12 +668,12 @@ TxnErrorCode 
Transaction::batch_get(std::vector<std::optional<std::string>>* res
                 res->push_back(std::nullopt);
                 continue;
             }
+            get_bytes_ += len + key.size();
             res->push_back(std::string((char*)ret, len));
         }
         futures.clear();
     }
     DCHECK_EQ(res->size(), num_keys);
-    num_get_keys_ += num_keys;
     return TxnErrorCode::TXN_OK;
 }
 
diff --git a/cloud/src/meta-store/txn_kv.h b/cloud/src/meta-store/txn_kv.h
index 56757cdb68a..45d3b1cc810 100644
--- a/cloud/src/meta-store/txn_kv.h
+++ b/cloud/src/meta-store/txn_kv.h
@@ -20,6 +20,8 @@
 #include <foundationdb/fdb_c.h>
 #include <foundationdb/fdb_c_options.g.h>
 
+#include <cstddef>
+#include <cstdint>
 #include <memory>
 #include <optional>
 #include <string>
@@ -253,6 +255,11 @@ public:
      **/
     virtual size_t delete_bytes() const = 0;
 
+    /**
+     * @brief return the bytes of the get values consumed.
+     **/
+    virtual size_t get_bytes() const = 0;
+
     /**
      * @brief return the bytes of the put key and values consumed.
      **/
@@ -298,6 +305,12 @@ public:
      */
     virtual int size() = 0;
 
+    /**
+     * Get all FDBKeyValue's bytes include key's bytes
+     * RangeGetIterator created by get range, when get range the keys in the 
range too.
+     */
+    virtual int64_t get_kv_bytes() const = 0;
+
     /**
      * Resets to initial state, some kinds of iterators may not support this 
function.
      */
@@ -457,6 +470,14 @@ public:
 
     int size() override { return kvs_size_; }
 
+    int64_t get_kv_bytes() const override {
+        int64_t total_bytes {};
+        for (int i = 0; i < kvs_size_; i++) {
+            total_bytes += kvs_[i].key_length + kvs_[i].value_length;
+        }
+        return total_bytes;
+    }
+
     void reset() override { idx_ = 0; }
 
     std::string next_begin_key() override {
@@ -580,6 +601,8 @@ public:
 
     size_t put_bytes() const override { return put_bytes_; }
 
+    size_t get_bytes() const override { return get_bytes_; }
+
 private:
     std::shared_ptr<Database> db_ {nullptr};
     bool commited_ = false;
@@ -590,6 +613,7 @@ private:
     size_t num_del_keys_ {0};
     size_t num_put_keys_ {0};
     size_t delete_bytes_ {0};
+    size_t get_bytes_ {0};
     size_t put_bytes_ {0};
     size_t approximate_bytes_ {0};
 };
diff --git a/cloud/test/rpc_kv_bvar_test.cpp b/cloud/test/rpc_kv_bvar_test.cpp
index 9ff4aac0c20..d737718d313 100644
--- a/cloud/test/rpc_kv_bvar_test.cpp
+++ b/cloud/test/rpc_kv_bvar_test.cpp
@@ -507,19 +507,25 @@ void finish_schema_change_job(
     meta_service->finish_tablet_job(&cntl, &req, &res, nullptr);
 }
 
+void clear_memkv_count_bytes(MemTxnKv* memkv) {
+    memkv->get_count_ = memkv->put_count_ = memkv->del_count_ = 0;
+    memkv->get_bytes_ = memkv->put_bytes_ = memkv->del_bytes_ = 0;
+}
+
 // create_tablets
 TEST(RpcKvBvarTest, CreateTablets) {
     auto meta_service = get_meta_service();
     auto mem_kv = std::dynamic_pointer_cast<MemTxnKv>(meta_service->txn_kv());
     constexpr auto table_id = 10021, index_id = 10022, partition_id = 10023, 
tablet_id = 10024;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     create_tablet(meta_service.get(), table_id, index_id, partition_id, 
tablet_id);
     LOG(INFO) << "CreateTablets: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_create_tablets_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_create_tablets_put_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_create_tablets_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_create_tablets_put_counter.get({mock_instance}));
 }
@@ -532,9 +538,7 @@ TEST(RpcKvBvarTest, GetTablet) {
     constexpr auto table_id = 10021, index_id = 10022, partition_id = 10023, 
tablet_id = 10024;
     create_tablet(meta_service.get(), table_id, index_id, partition_id, 
tablet_id);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     brpc::Controller cntl;
     GetTabletRequest req;
@@ -544,7 +548,9 @@ TEST(RpcKvBvarTest, GetTablet) {
 
     meta_service->get_tablet(&cntl, &req, &resp, nullptr);
     LOG(INFO) << "GetTablet: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_get_tablet_get_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_get_tablet_get_counter.get({mock_instance}));
 }
 
@@ -556,15 +562,16 @@ TEST(RpcKvBvarTest, GetTabletStats) {
     constexpr auto table_id = 10021, index_id = 10022, partition_id = 10023, 
tablet_id = 10024;
     create_tablet(meta_service.get(), table_id, index_id, partition_id, 
tablet_id);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     GetTabletStatsResponse res;
     get_tablet_stats(meta_service.get(), table_id, index_id, partition_id, 
tablet_id, res);
 
     LOG(INFO) << "GetTabletStats: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_get_tablet_stats_get_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_get_tablet_stats_get_counter.get({mock_instance}));
 }
 
@@ -583,14 +590,16 @@ TEST(RpcKvBvarTest, UpdateTablet) {
     tablet_meta_info->set_tablet_id(tablet_id);
     tablet_meta_info->set_is_in_memory(true);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     meta_service->update_tablet(&cntl, &req, &resp, nullptr);
 
     LOG(INFO) << "UpdateTablet: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_update_tablet_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_update_tablet_put_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_update_tablet_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_update_tablet_put_counter.get({mock_instance}));
 }
@@ -636,14 +645,16 @@ TEST(RpcKvBvarTest, BeginTxn) {
 
     int64_t txn_id = 0;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     ASSERT_NO_FATAL_FAILURE(begin_txn(meta_service.get(), db_id, label, 
table_id, txn_id));
 
     LOG(INFO) << "BeginTxn: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_begin_txn_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_begin_txn_put_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_begin_txn_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_begin_txn_put_counter.get({mock_instance}));
 }
@@ -659,14 +670,17 @@ TEST(RpcKvBvarTest, CommitTxn) {
     int64_t txn_id = 0;
     ASSERT_NO_FATAL_FAILURE(begin_txn(meta_service.get(), db_id, label, 
table_id, txn_id));
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     commit_txn(meta_service.get(), db_id, txn_id, label);
 
     LOG(INFO) << "CommitTxn: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_commit_txn_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_commit_txn_put_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->del_bytes_, 
g_bvar_rpc_kv_commit_txn_del_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_commit_txn_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_commit_txn_put_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->del_count_, 
g_bvar_rpc_kv_commit_txn_del_counter.get({mock_instance}));
@@ -716,16 +730,18 @@ TEST(RpcKvBvarTest, PrecommitTxn) {
     req.set_precommit_timeout_ms(36000);
     PrecommitTxnResponse res;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->precommit_txn(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
 &req,
                                 &res, nullptr);
     ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
 
     LOG(INFO) << "PrecommitTxn: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_precommit_txn_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_precommit_txn_put_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_precommit_txn_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_precommit_txn_put_counter.get({mock_instance}));
 }
@@ -741,9 +757,7 @@ TEST(RpcKvBvarTest, AbortTxn) {
     int64_t txn_id = 0;
     ASSERT_NO_FATAL_FAILURE(begin_txn(meta_service.get(), db_id, label, 
table_id, txn_id));
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     brpc::Controller cntl;
     AbortTxnRequest req;
@@ -756,7 +770,12 @@ TEST(RpcKvBvarTest, AbortTxn) {
     ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
 
     LOG(INFO) << "AbortTxn: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_abort_txn_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_abort_txn_put_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->del_bytes_, 
g_bvar_rpc_kv_abort_txn_del_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_abort_txn_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_abort_txn_put_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->del_count_, 
g_bvar_rpc_kv_abort_txn_del_counter.get({mock_instance}));
@@ -773,9 +792,7 @@ TEST(RpcKvBvarTest, GetTxn) {
     int64_t txn_id = 0;
     ASSERT_NO_FATAL_FAILURE(begin_txn(meta_service.get(), db_id, label, 
table_id, txn_id));
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     brpc::Controller cntl;
     GetTxnRequest req;
@@ -788,7 +805,10 @@ TEST(RpcKvBvarTest, GetTxn) {
     ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
 
     LOG(INFO) << "GetTxn: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_get_txn_get_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_get_txn_get_counter.get({mock_instance}));
 }
 
@@ -812,14 +832,15 @@ TEST(RpcKvBvarTest, GetTxnId) {
     req.set_label(label);
     req.set_db_id(db_id);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     meta_service->get_txn_id(&cntl, &req, &res, nullptr);
 
     LOG(INFO) << "GetTxnId: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_get_txn_id_get_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_get_txn_id_get_counter.get({mock_instance}));
 }
 
@@ -839,14 +860,16 @@ TEST(RpcKvBvarTest, PrepareRowset) {
     rowset.mutable_load_id()->set_hi(123);
     rowset.mutable_load_id()->set_lo(456);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     prepare_rowset(meta_service.get(), rowset, res);
 
     LOG(INFO) << "PrepareRowset: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_prepare_rowset_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_prepare_rowset_put_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_prepare_rowset_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_prepare_rowset_put_counter.get({mock_instance}));
 }
@@ -863,16 +886,17 @@ TEST(RpcKvBvarTest, GetRowset) {
     // check get tablet response
     check_get_tablet(meta_service.get(), tablet_id, 1);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     // check get rowset response
     GetRowsetResponse get_rowset_res;
     get_rowset(meta_service.get(), table_id, index_id, partition_id, 
tablet_id, get_rowset_res);
 
     LOG(INFO) << "GetRowset: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_get_rowset_get_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_get_rowset_get_counter.get({mock_instance}));
 }
 
@@ -904,10 +928,7 @@ TEST(RpcKvBvarTest, UpdateTmpRowset) {
     EXPECT_EQ(txn->commit(), TxnErrorCode::TXN_OK);
     req->mutable_rowset_meta()->CopyFrom(rowset);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
-
+    clear_memkv_count_bytes(mem_kv.get());
     meta_service->update_tmp_rowset(&cntl, req, &res, nullptr);
 
     if (!arena) {
@@ -915,7 +936,11 @@ TEST(RpcKvBvarTest, UpdateTmpRowset) {
     }
 
     LOG(INFO) << "UpdateTmpRowset: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_update_tmp_rowset_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_update_tmp_rowset_put_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_update_tmp_rowset_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_update_tmp_rowset_put_counter.get({mock_instance}));
 }
@@ -930,15 +955,18 @@ TEST(RpcKvBvarTest, CommitRowset) {
     create_tablet(meta_service.get(), table_id, index_id, partition_id, 
tablet_id);
     auto tmp_rowset = create_rowset(txn_id, tablet_id, partition_id);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     CreateRowsetResponse res;
     commit_rowset(meta_service.get(), tmp_rowset, res);
 
     LOG(INFO) << "CommitRowset: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_commit_rowset_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_commit_rowset_put_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->del_bytes_, 
g_bvar_rpc_kv_commit_rowset_del_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_commit_rowset_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_commit_rowset_put_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->del_count_, 
g_bvar_rpc_kv_commit_rowset_del_counter.get({mock_instance}));
@@ -960,15 +988,16 @@ TEST(RpcKvBvarTest, GetVersion) {
     req.set_table_id(table_id);
     req.set_partition_id(partition_id);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     GetVersionResponse resp;
     meta_service->get_version(&ctrl, &req, &resp, nullptr);
 
     LOG(INFO) << "GetVersion: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_get_version_get_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_get_version_get_counter.get({mock_instance}));
 }
 
@@ -991,15 +1020,16 @@ TEST(RpcKvBvarTest, GetSchemaDict) {
     txn->put(dict_key, "dict_val");
     EXPECT_EQ(txn->commit(), TxnErrorCode::TXN_OK);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     GetSchemaDictResponse resp;
     meta_service->get_schema_dict(&ctrl, &req, &resp, nullptr);
 
     LOG(INFO) << "GetSchemaDict: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_get_schema_dict_get_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_get_schema_dict_get_counter.get({mock_instance}));
 }
 
@@ -1021,14 +1051,20 @@ TEST(RpcKvBvarTest, GetDeleteBitmapUpdateLock) {
     int64_t lock_id = -2;
     int64_t initiator = 1009;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     get_delete_bitmap_update_lock(meta_service.get(), table_id, t1p1, lock_id, 
initiator);
 
     LOG(INFO) << "GetDeleteBitmapUpdateLock: " << mem_kv->get_count_ << ", " 
<< mem_kv->put_count_
-              << ", " << mem_kv->del_count_;
+              << ", " << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << 
", "
+              << mem_kv->put_bytes_ << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_,
+              
g_bvar_rpc_kv_get_delete_bitmap_update_lock_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_,
+              
g_bvar_rpc_kv_get_delete_bitmap_update_lock_put_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->del_bytes_,
+              
g_bvar_rpc_kv_get_delete_bitmap_update_lock_del_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_,
               
g_bvar_rpc_kv_get_delete_bitmap_update_lock_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_,
@@ -1062,15 +1098,21 @@ TEST(RpcKvBvarTest, UpdateDeleteBitmap) {
     // will be splited and stored in 5 KVs
     std::string data1(split_size * 5, 'c');
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     update_delete_bitmap(meta_service.get(), update_delete_bitmap_req, 
update_delete_bitmap_res,
                          table_id, t1p1, lock_id, initiator, tablet_id, 
txn_id, version, data1);
 
     LOG(INFO) << "UpdateDeleteBitmap: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_,
+              
g_bvar_rpc_kv_update_delete_bitmap_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_,
+              
g_bvar_rpc_kv_update_delete_bitmap_put_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->del_bytes_,
+              
g_bvar_rpc_kv_update_delete_bitmap_del_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_,
               
g_bvar_rpc_kv_update_delete_bitmap_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_,
@@ -1114,15 +1156,16 @@ TEST(RpcKvBvarTest, GetDeleteBitmap) {
     get_delete_bitmap_req.add_begin_versions(0);
     get_delete_bitmap_req.add_end_versions(version);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->get_delete_bitmap(reinterpret_cast<google::protobuf::RpcController*>(&ctrl),
                                     &get_delete_bitmap_req, 
&get_delete_bitmap_res, nullptr);
 
     LOG(INFO) << "GetDeleteBitmap: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_get_delete_bitmap_get_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_get_delete_bitmap_get_counter.get({mock_instance}));
 }
 
@@ -1154,16 +1197,22 @@ TEST(RpcKvBvarTest, RemoveDeleteBitmapUpdateLock) {
     remove_req.set_lock_id(lock_id);
     remove_req.set_initiator(initiator);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     meta_service->remove_delete_bitmap_update_lock(
             reinterpret_cast<::google::protobuf::RpcController*>(&cntl), 
&remove_req, &remove_res,
             nullptr);
 
     LOG(INFO) << "RemoveDeleteBitmapUpdateLock: " << mem_kv->get_count_ << ", "
-              << mem_kv->put_count_ << ", " << mem_kv->del_count_;
+              << mem_kv->put_count_ << ", " << mem_kv->del_count_ << ", " << 
mem_kv->get_bytes_
+              << ", " << mem_kv->put_bytes_ << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_,
+              
g_bvar_rpc_kv_remove_delete_bitmap_update_lock_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_,
+              
g_bvar_rpc_kv_remove_delete_bitmap_update_lock_put_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->del_bytes_,
+              
g_bvar_rpc_kv_remove_delete_bitmap_update_lock_del_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_,
               
g_bvar_rpc_kv_remove_delete_bitmap_update_lock_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_,
@@ -1206,14 +1255,16 @@ TEST(RpcKvBvarTest, RemoveDeleteBitmap) {
     req.add_rowset_ids("rowset_ids");
     req.set_cloud_unique_id("test_cloud_unique_id");
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     meta_service->remove_delete_bitmap(&ctrl, &req, &resp, nullptr);
 
     LOG(INFO) << "RemoveDeleteBitmap: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->del_bytes_,
+              
g_bvar_rpc_kv_remove_delete_bitmap_del_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->del_count_,
               
g_bvar_rpc_kv_remove_delete_bitmap_del_counter.get({mock_instance}));
 }
@@ -1229,15 +1280,17 @@ TEST(RpcKvBvarTest, StartTabletJob) {
     create_tablet(meta_service.get(), table_id, index_id, partition_id, 
tablet_id);
     StartTabletJobResponse res;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     start_compaction_job(meta_service.get(), tablet_id, "compaction1", 
"ip:port", 0, 0,
                          TabletCompactionJobPB::BASE, res);
 
     LOG(INFO) << "StartTabletJob: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_start_tablet_job_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_start_tablet_job_put_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_start_tablet_job_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_start_tablet_job_put_counter.get({mock_instance}));
 }
@@ -1280,14 +1333,17 @@ TEST(RpcKvBvarTest, FinishTabletJob) {
     compaction->set_lease(now + 10);
     req.mutable_job()->mutable_idx()->set_tablet_id(tablet_id);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     meta_service->finish_tablet_job(&cntl, &req, &finish_res_2, nullptr);
 
     LOG(INFO) << "FinishTabletJob: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_finish_tablet_job_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_finish_tablet_job_put_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->del_bytes_, 
g_bvar_rpc_kv_finish_tablet_job_del_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_finish_tablet_job_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_finish_tablet_job_put_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->del_count_, 
g_bvar_rpc_kv_finish_tablet_job_del_counter.get({mock_instance}));
@@ -1325,14 +1381,16 @@ TEST(RpcKvBvarTest, PrepareIndex) {
     req.set_is_new_table(true);
     IndexResponse res;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     meta_service->prepare_index(&ctrl, &req, &res, nullptr);
 
     LOG(INFO) << "PrepareIndex: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_prepare_index_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_prepare_index_put_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_prepare_index_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_prepare_index_put_counter.get({mock_instance}));
 }
@@ -1371,14 +1429,17 @@ TEST(RpcKvBvarTest, CommitIndex) {
     meta_service->prepare_index(&ctrl, &req, &res, nullptr);
     res.Clear();
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     meta_service->commit_index(&ctrl, &req, &res, nullptr);
 
     LOG(INFO) << "CommitIndex: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_commit_index_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_commit_index_put_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->del_bytes_, 
g_bvar_rpc_kv_commit_index_del_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_commit_index_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_commit_index_put_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->del_count_, 
g_bvar_rpc_kv_commit_index_del_counter.get({mock_instance}));
@@ -1437,15 +1498,17 @@ TEST(RpcKvBvarTest, DropIndex) {
     req.add_index_ids(index_id);
     IndexResponse res;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->drop_index(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
 &req,
                              &res, nullptr);
 
     LOG(INFO) << "DropIndex: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_drop_index_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_drop_index_put_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_drop_index_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_drop_index_put_counter.get({mock_instance}));
 }
@@ -1484,14 +1547,16 @@ TEST(RpcKvBvarTest, PreparePartition) {
     txn->atomic_add(tbl_version_key, 1);
     ASSERT_EQ(txn->commit(), TxnErrorCode::TXN_OK);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     meta_service->prepare_partition(&ctrl, &req, &res, nullptr);
 
     LOG(INFO) << "PreparePartition: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_prepare_partition_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_prepare_partition_put_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_prepare_partition_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_prepare_partition_put_counter.get({mock_instance}));
 }
@@ -1530,14 +1595,17 @@ TEST(RpcKvBvarTest, CommitPartition) {
     ASSERT_EQ(txn->commit(), TxnErrorCode::TXN_OK);
     meta_service->prepare_partition(&ctrl, &req, &res, nullptr);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     meta_service->commit_partition(&ctrl, &req, &res, nullptr);
 
     LOG(INFO) << "CommitPartition: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_commit_partition_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_commit_partition_put_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->del_bytes_, 
g_bvar_rpc_kv_commit_partition_del_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_commit_partition_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_commit_partition_put_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->del_count_, 
g_bvar_rpc_kv_commit_partition_del_counter.get({mock_instance}));
@@ -1570,14 +1638,15 @@ TEST(RpcKvBvarTest, CheckKv) {
     check_keys_pb.add_partition_ids(partition_id + 1);
     req_check.mutable_check_keys()->CopyFrom(check_keys_pb);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     meta_service->check_kv(&ctrl, &req_check, &res_check, nullptr);
 
     LOG(INFO) << "CheckKv: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_check_kv_get_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_check_kv_get_counter.get({mock_instance}));
 }
 
@@ -1604,14 +1673,16 @@ TEST(RpcKvBvarTest, DropPartition) {
     req.add_partition_ids(partition_id);
     req.set_need_update_table_version(true);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     meta_service->drop_partition(&ctrl, &req, &res, nullptr);
 
     LOG(INFO) << "DropPartition: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_drop_partition_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_drop_partition_put_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_drop_partition_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_drop_partition_put_counter.get({mock_instance}));
 }
@@ -1636,14 +1707,15 @@ TEST(RpcKvBvarTest, GetObjStoreInfo) {
     GetObjStoreInfoRequest req;
     req.set_cloud_unique_id("test_cloud_unique_id");
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     meta_service->get_obj_store_info(&cntl, &req, &res, nullptr);
 
     LOG(INFO) << "GetObjStoreInfo: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_get_obj_store_info_get_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_,
               
g_bvar_rpc_kv_get_obj_store_info_get_counter.get({mock_instance}));
 }
@@ -1674,15 +1746,18 @@ TEST(RpcKvBvarTest, AlterStorageVault) {
     brpc::Controller cntl;
     AlterObjStoreInfoResponse res;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->alter_storage_vault(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
                                       &req, &res, nullptr);
 
     LOG(INFO) << "AlterStorageVault: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_alter_storage_vault_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_alter_storage_vault_put_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->del_bytes_, 
g_bvar_rpc_kv_alter_storage_vault_del_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_,
               
g_bvar_rpc_kv_alter_storage_vault_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_,
@@ -1737,15 +1812,19 @@ TEST(RpcKvBvarTest, AlterObjStoreInfo) {
     brpc::Controller cntl;
     AlterObjStoreInfoResponse res;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->alter_obj_store_info(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
                                        &req, &res, nullptr);
 
     LOG(INFO) << "AlterObjStoreInfo: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_,
+              
g_bvar_rpc_kv_alter_obj_store_info_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_,
+              
g_bvar_rpc_kv_alter_obj_store_info_put_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_,
               
g_bvar_rpc_kv_alter_obj_store_info_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_,
@@ -1804,15 +1883,17 @@ TEST(RpcKvBvarTest, UpdateAkSk) {
     brpc::Controller cntl;
     UpdateAkSkResponse res;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->update_ak_sk(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
 &req,
                                &res, nullptr);
 
     LOG(INFO) << "UpdateAkSk: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_update_ak_sk_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_update_ak_sk_put_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_update_ak_sk_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_update_ak_sk_put_counter.get({mock_instance}));
 
@@ -1853,16 +1934,17 @@ TEST(RpcKvBvarTest, CreateInstance) {
     sp->enable_processing();
     CreateInstanceResponse res;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->create_instance(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
 &req,
                                   &res, nullptr);
     ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
 
     LOG(INFO) << "CreateInstance: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_create_instance_get_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_create_instance_get_counter.get({mock_instance}));
 
     sp->clear_all_call_backs();
@@ -1910,16 +1992,17 @@ TEST(RpcKvBvarTest, GetInstance) {
     GetInstanceRequest req;
     GetInstanceResponse res;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     req.set_cloud_unique_id("1:test_instance:m-n3qdpyal27rh8iprxx");
     
meta_service->get_instance(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
 &req,
                                &res, nullptr);
 
     LOG(INFO) << "GetInstance: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_get_instance_get_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_get_instance_get_counter.get({mock_instance}));
     sp->clear_all_call_backs();
     sp->clear_trace();
@@ -1927,7 +2010,6 @@ TEST(RpcKvBvarTest, GetInstance) {
 }
 
 // alter_cluster
-// alter cluster have not do kv op
 // TEST(RpcKvBvarTest, AlterCluster) {
 //     auto meta_service = get_meta_service();
 //     auto mem_kv = 
std::dynamic_pointer_cast<MemTxnKv>(meta_service->txn_kv());
@@ -1982,16 +2064,18 @@ TEST(RpcKvBvarTest, GetCluster) {
     req.set_cluster_name("test_cluster");
     GetClusterResponse res;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->get_cluster(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
 &req,
                               &res, nullptr);
     ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
 
     LOG(INFO) << "GetCluster: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_get_cluster_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_get_cluster_put_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_get_cluster_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_get_cluster_put_counter.get({mock_instance}));
 }
@@ -2073,16 +2157,16 @@ TEST(RpcKvBvarTest, CreateStage) {
     create_stage_request.set_cloud_unique_id(cloud_unique_id);
     create_stage_request.mutable_stage()->CopyFrom(stage);
     CreateStageResponse create_stage_response;
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->create_stage(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
                                &create_stage_request, &create_stage_response, 
nullptr);
-    ASSERT_EQ(create_stage_response.status().code(), MetaServiceCode::OK);
 
     LOG(INFO) << "CreateStage: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_create_stage_get_bytes.get({instance_id}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_create_stage_put_bytes.get({instance_id}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_create_stage_get_counter.get({instance_id}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_create_stage_put_counter.get({instance_id}));
     sp->clear_all_call_backs();
@@ -2169,7 +2253,6 @@ TEST(RpcKvBvarTest, GetStage) {
     CreateStageResponse create_stage_response;
     
meta_service->create_stage(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
                                &create_stage_request, &create_stage_response, 
nullptr);
-    ASSERT_EQ(create_stage_response.status().code(), MetaServiceCode::OK);
 
     GetStageRequest get_stage_req;
     get_stage_req.set_type(StagePB::INTERNAL);
@@ -2180,17 +2263,15 @@ TEST(RpcKvBvarTest, GetStage) {
     // get existent internal stage
     GetStageResponse res2;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->get_stage(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
                             &get_stage_req, &res2, nullptr);
-    ASSERT_EQ(res2.status().code(), MetaServiceCode::OK);
-    ASSERT_EQ(1, res2.stage().size());
 
     LOG(INFO) << "GetStage: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_get_stage_get_bytes.get({instance_id}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_get_stage_get_counter.get({instance_id}));
     sp->clear_all_call_backs();
     sp->clear_trace();
@@ -2268,16 +2349,15 @@ TEST(RpcKvBvarTest, GetIam) {
     request.set_cloud_unique_id(cloud_unique_id);
     GetIamResponse response;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
-
+    clear_memkv_count_bytes(mem_kv.get());
     
meta_service->get_iam(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
 &request,
                           &response, nullptr);
     ASSERT_EQ(response.status().code(), MetaServiceCode::OK);
 
     LOG(INFO) << "GetIam: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_get_iam_get_bytes.get({instance_id}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_get_iam_get_counter.get({instance_id}));
     sp->clear_all_call_backs();
     sp->clear_trace();
@@ -2311,16 +2391,17 @@ TEST(RpcKvBvarTest, AlterIam) {
     brpc::Controller cntl;
     AlterIamResponse res;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->alter_iam(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
 &req, &res,
                             nullptr);
     ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
 
     LOG(INFO) << "AlterIam: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_alter_iam_get_bytes.get({"alter_iam_instance"}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_alter_iam_put_bytes.get({"alter_iam_instance"}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_alter_iam_get_counter.get({"alter_iam_instance"}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_alter_iam_put_counter.get({"alter_iam_instance"}));
 }
@@ -2390,14 +2471,15 @@ TEST(RpcKvBvarTest, AlterRamUser) {
     alter_ram_user_request.set_instance_id(instance_id);
     alter_ram_user_request.mutable_ram_user()->CopyFrom(ram_user);
     AlterRamUserResponse alter_ram_user_response;
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
     
meta_service->alter_ram_user(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
                                  &alter_ram_user_request, 
&alter_ram_user_response, nullptr);
 
     LOG(INFO) << "AlterRamUser: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_alter_ram_user_get_bytes.get({instance_id}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_alter_ram_user_put_bytes.get({instance_id}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_alter_ram_user_get_counter.get({instance_id}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_alter_ram_user_put_counter.get({instance_id}));
     sp->clear_all_call_backs();
@@ -2444,16 +2526,17 @@ TEST(RpcKvBvarTest, BeginCopy) {
     }
     BeginCopyResponse res;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->begin_copy(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
                              &begin_copy_request, &res, nullptr);
     ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
 
     LOG(INFO) << "BeginCopy: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_begin_copy_get_bytes.get({instance_id}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_begin_copy_put_bytes.get({instance_id}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_begin_copy_get_counter.get({instance_id}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_begin_copy_put_counter.get({instance_id}));
     sp->clear_all_call_backs();
@@ -2511,9 +2594,7 @@ TEST(RpcKvBvarTest, GetCopyJob) {
     get_copy_job_request.set_copy_id("test_copy_id");
     get_copy_job_request.set_group_id(0);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     GetCopyJobResponse res;
     
meta_service->get_copy_job(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
@@ -2521,7 +2602,9 @@ TEST(RpcKvBvarTest, GetCopyJob) {
     ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
 
     LOG(INFO) << "GetCopyJob: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_get_copy_job_get_bytes.get({instance_id}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_get_copy_job_get_counter.get({instance_id}));
     sp->clear_all_call_backs();
     sp->clear_trace();
@@ -2579,9 +2662,7 @@ TEST(RpcKvBvarTest, FinishCopy) {
     finish_copy_request.set_group_id(0);
     finish_copy_request.set_action(FinishCopyRequest::COMMIT);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     FinishCopyResponse res;
     
meta_service->finish_copy(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
@@ -2589,7 +2670,11 @@ TEST(RpcKvBvarTest, FinishCopy) {
     ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
 
     LOG(INFO) << "FinishCopy: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_finish_copy_get_bytes.get({instance_id}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_finish_copy_put_bytes.get({instance_id}));
+    ASSERT_EQ(mem_kv->del_bytes_, 
g_bvar_rpc_kv_finish_copy_del_bytes.get({instance_id}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_finish_copy_get_counter.get({instance_id}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_finish_copy_put_counter.get({instance_id}));
     ASSERT_EQ(mem_kv->del_count_, 
g_bvar_rpc_kv_finish_copy_del_counter.get({instance_id}));
@@ -2645,9 +2730,7 @@ TEST(RpcKvBvarTest, GetCopyFiles) {
     get_copy_file_req.set_stage_id(stage_id);
     get_copy_file_req.set_table_id(table_id);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     GetCopyFilesResponse res;
     
meta_service->get_copy_files(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
@@ -2655,7 +2738,9 @@ TEST(RpcKvBvarTest, GetCopyFiles) {
     ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
 
     LOG(INFO) << "GetCopyFiles: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_get_copy_files_get_bytes.get({instance_id}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_get_copy_files_get_counter.get({instance_id}));
     sp->clear_all_call_backs();
     sp->clear_trace();
@@ -2716,16 +2801,16 @@ TEST(RpcKvBvarTest, FilterCopyFiles) {
         request.add_object_files()->CopyFrom(object_file);
     }
     FilterCopyFilesResponse res;
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->filter_copy_files(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
                                     &request, &res, nullptr);
     ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
 
     LOG(INFO) << "FilterCopyFiles: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_filter_copy_files_get_bytes.get({instance_id}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_filter_copy_files_get_counter.get({instance_id}));
     sp->clear_all_call_backs();
     sp->clear_trace();
@@ -2779,9 +2864,7 @@ TEST(RpcKvBvarTest, GetClusterStatus) {
     req.add_instance_ids(mock_instance);
     GetClusterStatusResponse res;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->get_cluster_status(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
                                      &req, &res, nullptr);
@@ -2789,7 +2872,9 @@ TEST(RpcKvBvarTest, GetClusterStatus) {
     ASSERT_EQ(res.details().at(0).clusters().size(), 3);
 
     LOG(INFO) << "GetClusterStatus: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_get_cluster_status_get_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_,
               
g_bvar_rpc_kv_get_cluster_status_get_counter.get({mock_instance}));
 }
@@ -2829,16 +2914,17 @@ TEST(RpcKvBvarTest, GetCurrentMaxTxnId) {
 
     max_txn_id_req.set_cloud_unique_id(cloud_unique_id);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     meta_service->get_current_max_txn_id(
             
reinterpret_cast<::google::protobuf::RpcController*>(&max_txn_id_cntl), 
&max_txn_id_req,
             &max_txn_id_res, nullptr);
 
     LOG(INFO) << "GetCurrentMaxTxnId: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_,
+              
g_bvar_rpc_kv_get_current_max_txn_id_get_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_,
               
g_bvar_rpc_kv_get_current_max_txn_id_get_counter.get({mock_instance}));
 }
@@ -2894,15 +2980,17 @@ TEST(RpcKvBvarTest, BeginSubTxn) {
     req.mutable_table_ids()->Add(t2);
     BeginSubTxnResponse res;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->begin_sub_txn(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
 &req,
                                 &res, nullptr);
 
     LOG(INFO) << "BeginSubTxn: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_begin_sub_txn_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_begin_sub_txn_put_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->del_bytes_, 
g_bvar_rpc_kv_begin_sub_txn_del_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_begin_sub_txn_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_begin_sub_txn_put_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->del_count_, 
g_bvar_rpc_kv_begin_sub_txn_del_counter.get({mock_instance}));
@@ -2973,15 +3061,16 @@ TEST(RpcKvBvarTest, AbortSubTxn) {
     req.mutable_table_ids()->Add(t2);
     AbortSubTxnResponse res;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->abort_sub_txn(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
 &req,
                                 &res, nullptr);
 
     LOG(INFO) << "AbortSubTxn: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_abort_sub_txn_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_abort_sub_txn_put_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_abort_sub_txn_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_abort_sub_txn_put_counter.get({mock_instance}));
 }
@@ -3033,16 +3122,17 @@ TEST(RpcKvBvarTest, AbortTxnWithCoordinator) {
     abort_txn_req.set_ip(host);
     abort_txn_req.set_start_time(cur_time + 3600);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     meta_service->abort_txn_with_coordinator(
             
reinterpret_cast<::google::protobuf::RpcController*>(&begin_txn_cntl), 
&abort_txn_req,
             &abort_txn_resp, nullptr);
 
     LOG(INFO) << "AbortTxnWithCoordinator: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_
-              << ", " << mem_kv->del_count_;
+              << ", " << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << 
", "
+              << mem_kv->put_bytes_ << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_,
+              
g_bvar_rpc_kv_abort_txn_with_coordinator_get_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_,
               
g_bvar_rpc_kv_abort_txn_with_coordinator_get_counter.get({mock_instance}));
 }
@@ -3085,16 +3175,16 @@ TEST(RpcKvBvarTest, CheckTxnConflict) {
     check_txn_conflict_req.set_end_txn_id(txn_id + 1);
     check_txn_conflict_req.add_table_ids(table_id);
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     meta_service->check_txn_conflict(
             
reinterpret_cast<::google::protobuf::RpcController*>(&begin_txn_cntl),
             &check_txn_conflict_req, &check_txn_conflict_res, nullptr);
 
     LOG(INFO) << "CheckTxnConflict: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_check_txn_conflict_get_bytes.get({mock_instance}));
     ASSERT_EQ(mem_kv->get_count_,
               
g_bvar_rpc_kv_check_txn_conflict_get_counter.get({mock_instance}));
 }
@@ -3125,17 +3215,19 @@ TEST(RpcKvBvarTest, CleanTxnLabel) {
     req.add_labels(label);
     CleanTxnLabelResponse res;
 
-    mem_kv->get_count_ = 0;
-    mem_kv->put_count_ = 0;
-    mem_kv->del_count_ = 0;
+    clear_memkv_count_bytes(mem_kv.get());
 
     
meta_service->clean_txn_label(reinterpret_cast<::google::protobuf::RpcController*>(&cntl),
 &req,
                                   &res, nullptr);
 
     LOG(INFO) << "CleanTxnLabel: " << mem_kv->get_count_ << ", " << 
mem_kv->put_count_ << ", "
-              << mem_kv->del_count_;
+              << mem_kv->del_count_ << ", " << mem_kv->get_bytes_ << ", " << 
mem_kv->put_bytes_
+              << ", " << mem_kv->del_bytes_;
     ASSERT_EQ(mem_kv->get_count_, 
g_bvar_rpc_kv_clean_txn_label_get_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->put_count_, 
g_bvar_rpc_kv_clean_txn_label_put_counter.get({mock_instance}));
     ASSERT_EQ(mem_kv->del_count_, 
g_bvar_rpc_kv_clean_txn_label_del_counter.get({mock_instance}));
+    ASSERT_EQ(mem_kv->get_bytes_, 
g_bvar_rpc_kv_clean_txn_label_get_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->put_bytes_, 
g_bvar_rpc_kv_clean_txn_label_put_bytes.get({mock_instance}));
+    ASSERT_EQ(mem_kv->del_bytes_, 
g_bvar_rpc_kv_clean_txn_label_del_bytes.get({mock_instance}));
 }
 } // namespace doris::cloud


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to