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

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 68e9a66aa0 [Enchancement](schema scanner) add SchemaScanner profile 
(#17230)
68e9a66aa0 is described below

commit 68e9a66aa0abab7724d968a52d832c0e79906848
Author: WenYao <[email protected]>
AuthorDate: Wed Mar 1 08:34:27 2023 +0800

    [Enchancement](schema scanner) add SchemaScanner profile (#17230)
    
    Add some profile information to the schema scanner to facilitate 
performance optimization.
    
    Example:
    
    SchemaScanner:
          -  FillBlockTime:  9s131ms
          -  GetDbTime:  12.816ms
          -  GetDescribeTime:  1s645ms
          -  GetTableTime:  25.433ms
---
 be/src/exec/schema_scanner.cpp                                  | 7 +++++++
 be/src/exec/schema_scanner.h                                    | 7 +++++++
 be/src/exec/schema_scanner/schema_backends_scanner.cpp          | 1 +
 be/src/exec/schema_scanner/schema_charsets_scanner.cpp          | 1 +
 be/src/exec/schema_scanner/schema_collations_scanner.cpp        | 1 +
 be/src/exec/schema_scanner/schema_columns_scanner.cpp           | 4 ++++
 be/src/exec/schema_scanner/schema_files_scanner.cpp             | 2 ++
 be/src/exec/schema_scanner/schema_partitions_scanner.cpp        | 2 ++
 be/src/exec/schema_scanner/schema_rowsets_scanner.cpp           | 1 +
 be/src/exec/schema_scanner/schema_schema_privileges_scanner.cpp | 1 +
 be/src/exec/schema_scanner/schema_schemata_scanner.cpp          | 2 ++
 be/src/exec/schema_scanner/schema_table_privileges_scanner.cpp  | 2 ++
 be/src/exec/schema_scanner/schema_tables_scanner.cpp            | 3 +++
 be/src/exec/schema_scanner/schema_user_privileges_scanner.cpp   | 2 ++
 be/src/exec/schema_scanner/schema_variables_scanner.cpp         | 1 +
 be/src/exec/schema_scanner/schema_views_scanner.cpp             | 3 +++
 be/src/vec/exec/vschema_scan_node.cpp                           | 4 ++++
 17 files changed, 44 insertions(+)

diff --git a/be/src/exec/schema_scanner.cpp b/be/src/exec/schema_scanner.cpp
index 36c7459d9f..0c84e0c8e4 100644
--- a/be/src/exec/schema_scanner.cpp
+++ b/be/src/exec/schema_scanner.cpp
@@ -90,6 +90,13 @@ Status SchemaScanner::init(SchemaScannerParam* param, 
ObjectPool* pool) {
     _param = param;
     _is_init = true;
 
+    if (_param->profile) {
+        _get_db_timer = ADD_TIMER(_param->profile, "GetDbTime");
+        _get_table_timer = ADD_TIMER(_param->profile, "GetTableTime");
+        _get_describe_timer = ADD_TIMER(_param->profile, "GetDescribeTime");
+        _fill_block_timer = ADD_TIMER(_param->profile, "FillBlockTime");
+    }
+
     return Status::OK();
 }
 
diff --git a/be/src/exec/schema_scanner.h b/be/src/exec/schema_scanner.h
index dacd84d0d9..216ccb9b70 100644
--- a/be/src/exec/schema_scanner.h
+++ b/be/src/exec/schema_scanner.h
@@ -24,6 +24,7 @@
 #include "gen_cpp/Descriptors_types.h"
 #include "gen_cpp/Types_types.h"
 #include "runtime/mem_pool.h"
+#include "util/runtime_profile.h"
 #include "vec/core/block.h"
 
 namespace doris {
@@ -49,6 +50,7 @@ struct SchemaScannerParam {
     int64_t thread_id;
     const std::vector<TSchemaTableStructure>* table_structure;
     const std::string* catalog;
+    std::unique_ptr<RuntimeProfile> profile;
 
     SchemaScannerParam()
             : db(nullptr),
@@ -105,6 +107,11 @@ protected:
     static DorisServer* _s_doris_server;
 
     TSchemaTableType::type _schema_table_type;
+
+    RuntimeProfile::Counter* _get_db_timer = nullptr;
+    RuntimeProfile::Counter* _get_table_timer = nullptr;
+    RuntimeProfile::Counter* _get_describe_timer = nullptr;
+    RuntimeProfile::Counter* _fill_block_timer = nullptr;
 };
 
 } // namespace doris
diff --git a/be/src/exec/schema_scanner/schema_backends_scanner.cpp 
b/be/src/exec/schema_scanner/schema_backends_scanner.cpp
index e9c008f8a2..30d00fc2bb 100644
--- a/be/src/exec/schema_scanner/schema_backends_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_backends_scanner.cpp
@@ -84,6 +84,7 @@ Status 
SchemaBackendsScanner::get_next_block(vectorized::Block* block, bool* eos
 }
 
 Status SchemaBackendsScanner::_fill_block_impl(vectorized::Block* block) {
+    SCOPED_TIMER(_fill_block_timer);
     auto row_num = _batch_data.size();
     for (size_t col_idx = 0; col_idx < _columns.size(); ++col_idx) {
         auto it = _col_name_to_type.find(_columns[col_idx].name);
diff --git a/be/src/exec/schema_scanner/schema_charsets_scanner.cpp 
b/be/src/exec/schema_scanner/schema_charsets_scanner.cpp
index 56b446fa56..720085d75c 100644
--- a/be/src/exec/schema_scanner/schema_charsets_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_charsets_scanner.cpp
@@ -52,6 +52,7 @@ Status 
SchemaCharsetsScanner::get_next_block(vectorized::Block* block, bool* eos
 }
 
 Status SchemaCharsetsScanner::_fill_block_impl(vectorized::Block* block) {
+    SCOPED_TIMER(_fill_block_timer);
     auto row_num = 0;
     while (nullptr != _s_charsets[row_num].charset) {
         ++row_num;
diff --git a/be/src/exec/schema_scanner/schema_collations_scanner.cpp 
b/be/src/exec/schema_scanner/schema_collations_scanner.cpp
index eb35c30f2c..50065b3ca4 100644
--- a/be/src/exec/schema_scanner/schema_collations_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_collations_scanner.cpp
@@ -56,6 +56,7 @@ Status 
SchemaCollationsScanner::get_next_block(vectorized::Block* block, bool* e
 }
 
 Status SchemaCollationsScanner::_fill_block_impl(vectorized::Block* block) {
+    SCOPED_TIMER(_fill_block_timer);
     auto row_num = 0;
     while (nullptr != _s_collations[row_num].name) {
         ++row_num;
diff --git a/be/src/exec/schema_scanner/schema_columns_scanner.cpp 
b/be/src/exec/schema_scanner/schema_columns_scanner.cpp
index 8ca5896faf..1f8682d5d6 100644
--- a/be/src/exec/schema_scanner/schema_columns_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_columns_scanner.cpp
@@ -63,6 +63,7 @@ SchemaColumnsScanner::SchemaColumnsScanner()
 SchemaColumnsScanner::~SchemaColumnsScanner() = default;
 
 Status SchemaColumnsScanner::start(RuntimeState* state) {
+    SCOPED_TIMER(_get_db_timer);
     if (!_is_init) {
         return Status::InternalError("schema columns scanner not inited.");
     }
@@ -231,6 +232,7 @@ std::string 
SchemaColumnsScanner::_type_to_string(TColumnDesc& desc) {
 }
 
 Status SchemaColumnsScanner::_get_new_desc() {
+    SCOPED_TIMER(_get_describe_timer);
     TDescribeTableParams desc_params;
     desc_params.__set_db(_db_result.dbs[_db_index - 1]);
     if (_db_result.__isset.catalogs) {
@@ -259,6 +261,7 @@ Status SchemaColumnsScanner::_get_new_desc() {
 }
 
 Status SchemaColumnsScanner::_get_new_table() {
+    SCOPED_TIMER(_get_table_timer);
     TGetTablesParams table_params;
     table_params.__set_db(_db_result.dbs[_db_index]);
     if (_db_result.__isset.catalogs) {
@@ -312,6 +315,7 @@ Status 
SchemaColumnsScanner::get_next_block(vectorized::Block* block, bool* eos)
 }
 
 Status SchemaColumnsScanner::_fill_block_impl(vectorized::Block* block) {
+    SCOPED_TIMER(_fill_block_timer);
     auto columns_num = _desc_result.columns.size();
 
     // TABLE_CATALOG
diff --git a/be/src/exec/schema_scanner/schema_files_scanner.cpp 
b/be/src/exec/schema_scanner/schema_files_scanner.cpp
index 762db774f9..1eb8132668 100644
--- a/be/src/exec/schema_scanner/schema_files_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_files_scanner.cpp
@@ -19,6 +19,7 @@
 
 #include "exec/schema_scanner/schema_helper.h"
 #include "runtime/primitive_type.h"
+#include "util/runtime_profile.h"
 #include "vec/common/string_ref.h"
 
 namespace doris {
@@ -76,6 +77,7 @@ Status SchemaFilesScanner::start(RuntimeState* state) {
     if (!_is_init) {
         return Status::InternalError("used before initialized.");
     }
+    SCOPED_TIMER(_get_db_timer);
     TGetDbsParams db_params;
     if (nullptr != _param->db) {
         db_params.__set_pattern(*(_param->db));
diff --git a/be/src/exec/schema_scanner/schema_partitions_scanner.cpp 
b/be/src/exec/schema_scanner/schema_partitions_scanner.cpp
index 41ba26da4b..0f0b9ede9d 100644
--- a/be/src/exec/schema_scanner/schema_partitions_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_partitions_scanner.cpp
@@ -20,6 +20,7 @@
 #include "exec/schema_scanner/schema_helper.h"
 #include "runtime/datetime_value.h"
 #include "runtime/primitive_type.h"
+#include "util/runtime_profile.h"
 #include "vec/common/string_ref.h"
 
 namespace doris {
@@ -64,6 +65,7 @@ Status SchemaPartitionsScanner::start(RuntimeState* state) {
     if (!_is_init) {
         return Status::InternalError("used before initialized.");
     }
+    SCOPED_TIMER(_get_db_timer);
     TGetDbsParams db_params;
     if (nullptr != _param->db) {
         db_params.__set_pattern(*(_param->db));
diff --git a/be/src/exec/schema_scanner/schema_rowsets_scanner.cpp 
b/be/src/exec/schema_scanner/schema_rowsets_scanner.cpp
index 5ee608acbb..577b7b0093 100644
--- a/be/src/exec/schema_scanner/schema_rowsets_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_rowsets_scanner.cpp
@@ -97,6 +97,7 @@ Status 
SchemaRowsetsScanner::get_next_block(vectorized::Block* block, bool* eos)
 }
 
 Status SchemaRowsetsScanner::_fill_block_impl(vectorized::Block* block) {
+    SCOPED_TIMER(_fill_block_timer);
     size_t fill_rowsets_num = std::min(1000ul, rowsets_.size() - _rowsets_idx);
     auto fill_idx_begin = _rowsets_idx;
     auto fill_idx_end = _rowsets_idx + fill_rowsets_num;
diff --git a/be/src/exec/schema_scanner/schema_schema_privileges_scanner.cpp 
b/be/src/exec/schema_scanner/schema_schema_privileges_scanner.cpp
index 03072073d2..7b9c3e6652 100644
--- a/be/src/exec/schema_scanner/schema_schema_privileges_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_schema_privileges_scanner.cpp
@@ -86,6 +86,7 @@ Status 
SchemaSchemaPrivilegesScanner::get_next_block(vectorized::Block* block, b
 }
 
 Status SchemaSchemaPrivilegesScanner::_fill_block_impl(vectorized::Block* 
block) {
+    SCOPED_TIMER(_fill_block_timer);
     auto privileges_num = _priv_result.privileges.size();
 
     // grantee
diff --git a/be/src/exec/schema_scanner/schema_schemata_scanner.cpp 
b/be/src/exec/schema_scanner/schema_schemata_scanner.cpp
index 647a19a47a..a1d230abbd 100644
--- a/be/src/exec/schema_scanner/schema_schemata_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_schemata_scanner.cpp
@@ -38,6 +38,7 @@ SchemaSchemataScanner::SchemaSchemataScanner()
 SchemaSchemataScanner::~SchemaSchemataScanner() = default;
 
 Status SchemaSchemataScanner::start(RuntimeState* state) {
+    SCOPED_TIMER(_get_db_timer);
     if (!_is_init) {
         return Status::InternalError("used before initial.");
     }
@@ -85,6 +86,7 @@ Status 
SchemaSchemataScanner::get_next_block(vectorized::Block* block, bool* eos
 }
 
 Status SchemaSchemataScanner::_fill_block_impl(vectorized::Block* block) {
+    SCOPED_TIMER(_fill_block_timer);
     auto dbs_num = _db_result.dbs.size();
 
     // catalog
diff --git a/be/src/exec/schema_scanner/schema_table_privileges_scanner.cpp 
b/be/src/exec/schema_scanner/schema_table_privileges_scanner.cpp
index d959145168..3f95a7fb84 100644
--- a/be/src/exec/schema_scanner/schema_table_privileges_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_table_privileges_scanner.cpp
@@ -49,6 +49,7 @@ Status SchemaTablePrivilegesScanner::start(RuntimeState* 
state) {
 }
 
 Status SchemaTablePrivilegesScanner::_get_new_table() {
+    SCOPED_TIMER(_get_table_timer);
     TGetTablesParams table_params;
     if (nullptr != _param->wild) {
         table_params.__set_pattern(*(_param->wild));
@@ -89,6 +90,7 @@ Status 
SchemaTablePrivilegesScanner::get_next_block(vectorized::Block* block, bo
 }
 
 Status SchemaTablePrivilegesScanner::_fill_block_impl(vectorized::Block* 
block) {
+    SCOPED_TIMER(_fill_block_timer);
     auto privileges_num = _priv_result.privileges.size();
 
     // grantee
diff --git a/be/src/exec/schema_scanner/schema_tables_scanner.cpp 
b/be/src/exec/schema_scanner/schema_tables_scanner.cpp
index 054897b516..2ee16177d0 100644
--- a/be/src/exec/schema_scanner/schema_tables_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_tables_scanner.cpp
@@ -59,6 +59,7 @@ Status SchemaTablesScanner::start(RuntimeState* state) {
     if (!_is_init) {
         return Status::InternalError("used before initialized.");
     }
+    SCOPED_TIMER(_get_db_timer);
     TGetDbsParams db_params;
     if (nullptr != _param->db) {
         db_params.__set_pattern(*(_param->db));
@@ -87,6 +88,7 @@ Status SchemaTablesScanner::start(RuntimeState* state) {
 }
 
 Status SchemaTablesScanner::_get_new_table() {
+    SCOPED_TIMER(_get_table_timer);
     TGetTablesParams table_params;
     table_params.__set_db(_db_result.dbs[_db_index]);
     if (_db_result.__isset.catalogs) {
@@ -117,6 +119,7 @@ Status SchemaTablesScanner::_get_new_table() {
 }
 
 Status SchemaTablesScanner::_fill_block_impl(vectorized::Block* block) {
+    SCOPED_TIMER(_fill_block_timer);
     auto table_num = _table_result.tables.size();
     // catalog
     if (_db_result.__isset.catalogs) {
diff --git a/be/src/exec/schema_scanner/schema_user_privileges_scanner.cpp 
b/be/src/exec/schema_scanner/schema_user_privileges_scanner.cpp
index 4fcdfecfbe..179835528a 100644
--- a/be/src/exec/schema_scanner/schema_user_privileges_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_user_privileges_scanner.cpp
@@ -45,6 +45,7 @@ Status SchemaUserPrivilegesScanner::start(RuntimeState* 
state) {
 }
 
 Status SchemaUserPrivilegesScanner::_get_new_table() {
+    SCOPED_TIMER(_get_table_timer);
     TGetTablesParams table_params;
     if (nullptr != _param->wild) {
         table_params.__set_pattern(*(_param->wild));
@@ -85,6 +86,7 @@ Status 
SchemaUserPrivilegesScanner::get_next_block(vectorized::Block* block, boo
 }
 
 Status SchemaUserPrivilegesScanner::_fill_block_impl(vectorized::Block* block) 
{
+    SCOPED_TIMER(_fill_block_timer);
     auto privileges_num = _priv_result.privileges.size();
 
     // grantee
diff --git a/be/src/exec/schema_scanner/schema_variables_scanner.cpp 
b/be/src/exec/schema_scanner/schema_variables_scanner.cpp
index 38fa4e0af1..dbbef99f6d 100644
--- a/be/src/exec/schema_scanner/schema_variables_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_variables_scanner.cpp
@@ -74,6 +74,7 @@ Status 
SchemaVariablesScanner::get_next_block(vectorized::Block* block, bool* eo
 }
 
 Status SchemaVariablesScanner::_fill_block_impl(vectorized::Block* block) {
+    SCOPED_TIMER(_fill_block_timer);
     // variables names
     {
         for (auto& it : _var_result.variables) {
diff --git a/be/src/exec/schema_scanner/schema_views_scanner.cpp 
b/be/src/exec/schema_scanner/schema_views_scanner.cpp
index fb64337cce..c0273a85b2 100644
--- a/be/src/exec/schema_scanner/schema_views_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_views_scanner.cpp
@@ -46,6 +46,7 @@ Status SchemaViewsScanner::start(RuntimeState* state) {
     if (!_is_init) {
         return Status::InternalError("used before initialized.");
     }
+    SCOPED_TIMER(_get_db_timer);
     TGetDbsParams db_params;
     if (nullptr != _param->db) {
         db_params.__set_pattern(*(_param->db));
@@ -74,6 +75,7 @@ Status SchemaViewsScanner::start(RuntimeState* state) {
 }
 
 Status SchemaViewsScanner::_get_new_table() {
+    SCOPED_TIMER(_get_table_timer);
     TGetTablesParams table_params;
     table_params.__set_db(_db_result.dbs[_db_index++]);
     if (nullptr != _param->wild) {
@@ -118,6 +120,7 @@ Status 
SchemaViewsScanner::get_next_block(vectorized::Block* block, bool* eos) {
 }
 
 Status SchemaViewsScanner::_fill_block_impl(vectorized::Block* block) {
+    SCOPED_TIMER(_fill_block_timer);
     auto tables_num = _table_result.tables.size();
 
     // catalog
diff --git a/be/src/vec/exec/vschema_scan_node.cpp 
b/be/src/vec/exec/vschema_scan_node.cpp
index 60fe1d7720..5cede5de72 100644
--- a/be/src/vec/exec/vschema_scan_node.cpp
+++ b/be/src/vec/exec/vschema_scan_node.cpp
@@ -153,6 +153,10 @@ Status VSchemaScanNode::prepare(RuntimeState* state) {
         return Status::InternalError("Failed to get schema table descriptor.");
     }
 
+    // init schema scanner profile
+    _scanner_param.profile.reset(new RuntimeProfile("SchemaScanner"));
+    _runtime_profile->add_child(_scanner_param.profile.get(), true, nullptr);
+
     // new one scanner
     
_schema_scanner.reset(SchemaScanner::create(schema_table->schema_table_type()));
 


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

Reply via email to