From 0715f57e399d5db84412cddf1cf17ebd26ee067c Mon Sep 17 00:00:00 2001 From: obdev Date: Tue, 27 Feb 2024 06:48:37 +0000 Subject: [PATCH] Add a db_id field to the virtual table related to automatic memory management. --- .../ob_all_virtual_sql_workarea_active.cpp | 4 +++ .../ob_all_virtual_sql_workarea_active.h | 1 + ..._all_virtual_sql_workarea_history_stat.cpp | 4 +++ ...ob_all_virtual_sql_workarea_history_stat.h | 1 + .../ob_inner_table_schema.12151_12200.cpp | 30 +++++++++++++++++++ .../ob_inner_table_schema.15051_15100.cpp | 30 +++++++++++++++++++ .../ob_inner_table_schema.21051_21100.cpp | 4 +-- .../ob_inner_table_schema.28001_28050.cpp | 2 +- .../ob_inner_table_schema.28051_28100.cpp | 2 +- .../inner_table/ob_inner_table_schema_def.py | 6 ++++ .../engine/ob_tenant_sql_memory_manager.cpp | 14 ++++++++- src/sql/engine/ob_tenant_sql_memory_manager.h | 27 ++++++++++++----- .../r/mysql/desc_sys_views_in_mysql.result | 4 +++ .../r/mysql/desc_sys_views_in_sys.result | 4 +++ .../mysql/desc_virtual_table_in_mysql.result | 2 ++ .../r/mysql/desc_virtual_table_in_sys.result | 2 ++ 16 files changed, 124 insertions(+), 13 deletions(-) diff --git a/src/observer/virtual_table/ob_all_virtual_sql_workarea_active.cpp b/src/observer/virtual_table/ob_all_virtual_sql_workarea_active.cpp index 504b0f0be3..aedd06a846 100644 --- a/src/observer/virtual_table/ob_all_virtual_sql_workarea_active.cpp +++ b/src/observer/virtual_table/ob_all_virtual_sql_workarea_active.cpp @@ -235,6 +235,10 @@ int ObSqlWorkareaActive::fill_row( ObCharset::get_default_collation(ObCharset::get_default_charset())); break; } + case DB_ID: { + cells[cell_idx].set_int(wa_active.database_id_); + break; + } default: { ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected column id", K(col_id)); diff --git a/src/observer/virtual_table/ob_all_virtual_sql_workarea_active.h b/src/observer/virtual_table/ob_all_virtual_sql_workarea_active.h index e2b5996f2c..c0932cc81f 100644 --- a/src/observer/virtual_table/ob_all_virtual_sql_workarea_active.h +++ b/src/observer/virtual_table/ob_all_virtual_sql_workarea_active.h @@ -74,6 +74,7 @@ private: TEMPSEG_SIZE, TENAND_ID, // OB_APP_MIN_COLUMN_ID + 15 POLICY, + DB_ID, }; int fill_row( uint64_t tenant_id, diff --git a/src/observer/virtual_table/ob_all_virtual_sql_workarea_history_stat.cpp b/src/observer/virtual_table/ob_all_virtual_sql_workarea_history_stat.cpp index 1edf6ae9ff..3324cf8200 100644 --- a/src/observer/virtual_table/ob_all_virtual_sql_workarea_history_stat.cpp +++ b/src/observer/virtual_table/ob_all_virtual_sql_workarea_history_stat.cpp @@ -255,6 +255,10 @@ int ObSqlWorkareaHistoryStat::fill_row( ObCharset::get_default_collation(ObCharset::get_default_charset())); break; } + case DB_ID: { + cells[cell_idx].set_int(wa_stat.get_database_id()); + break; + } default: { ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected column id", K(col_id)); diff --git a/src/observer/virtual_table/ob_all_virtual_sql_workarea_history_stat.h b/src/observer/virtual_table/ob_all_virtual_sql_workarea_history_stat.h index 9a3669ac45..d07bfcd4f2 100644 --- a/src/observer/virtual_table/ob_all_virtual_sql_workarea_history_stat.h +++ b/src/observer/virtual_table/ob_all_virtual_sql_workarea_history_stat.h @@ -76,6 +76,7 @@ private: LAST_TEMPSEG_SIZE, TENAND_ID, // OB_APP_MIN_COLUMN_ID + 18 POLICY, + DB_ID, }; int fill_row( uint64_t tenant_id, diff --git a/src/share/inner_table/ob_inner_table_schema.12151_12200.cpp b/src/share/inner_table/ob_inner_table_schema.12151_12200.cpp index df64909a55..1fd8103ee0 100644 --- a/src/share/inner_table/ob_inner_table_schema.12151_12200.cpp +++ b/src/share/inner_table/ob_inner_table_schema.12151_12200.cpp @@ -2052,6 +2052,21 @@ int ObInnerTableSchema::all_virtual_sql_workarea_history_stat_schema(ObTableSche false, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("db_id", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } if (OB_SUCC(ret)) { table_schema.get_part_option().set_part_num(1); table_schema.set_part_level(PARTITION_LEVEL_ONE); @@ -2361,6 +2376,21 @@ int ObInnerTableSchema::all_virtual_sql_workarea_active_schema(ObTableSchema &ta false, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("db_id", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } if (OB_SUCC(ret)) { table_schema.get_part_option().set_part_num(1); table_schema.set_part_level(PARTITION_LEVEL_ONE); diff --git a/src/share/inner_table/ob_inner_table_schema.15051_15100.cpp b/src/share/inner_table/ob_inner_table_schema.15051_15100.cpp index 5a95590265..8b06d1cbe0 100644 --- a/src/share/inner_table/ob_inner_table_schema.15051_15100.cpp +++ b/src/share/inner_table/ob_inner_table_schema.15051_15100.cpp @@ -2331,6 +2331,21 @@ int ObInnerTableSchema::all_virtual_sql_workarea_history_stat_ora_schema(ObTable false, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("DB_ID", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + false, //is_nullable + false); //is_autoincrement + } if (OB_SUCC(ret)) { table_schema.get_part_option().set_part_num(1); table_schema.set_part_level(PARTITION_LEVEL_ONE); @@ -2640,6 +2655,21 @@ int ObInnerTableSchema::all_virtual_sql_workarea_active_ora_schema(ObTableSchema false, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("DB_ID", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + false, //is_nullable + false); //is_autoincrement + } if (OB_SUCC(ret)) { table_schema.get_part_option().set_part_num(1); table_schema.set_part_level(PARTITION_LEVEL_ONE); diff --git a/src/share/inner_table/ob_inner_table_schema.21051_21100.cpp b/src/share/inner_table/ob_inner_table_schema.21051_21100.cpp index c0348fdcfd..5c6a2a3680 100644 --- a/src/share/inner_table/ob_inner_table_schema.21051_21100.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21051_21100.cpp @@ -781,7 +781,7 @@ int ObInnerTableSchema::gv_sql_workarea_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(NULL AS BINARY(8)) AS ADDRESS, CAST(NULL AS SIGNED) AS HASH_VALUE, SQL_ID, CAST(PLAN_ID AS SIGNED) AS CHILD_NUMBER, CAST(NULL AS BINARY(8)) AS WORKAREA_ADDRESS, OPERATION_TYPE, OPERATION_ID, POLICY, ESTIMATED_OPTIMAL_SIZE, ESTIMATED_ONEPASS_SIZE, LAST_MEMORY_USED, LAST_EXECUTION, LAST_DEGREE, TOTAL_EXECUTIONS, OPTIMAL_EXECUTIONS, ONEPASS_EXECUTIONS, MULTIPASSES_EXECUTIONS, ACTIVE_TIME, MAX_TEMPSEG_SIZE, LAST_TEMPSEG_SIZE, TENANT_ID AS CON_ID, SVR_IP, SVR_PORT FROM OCEANBASE.__ALL_VIRTUAL_SQL_WORKAREA_HISTORY_STAT )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(NULL AS BINARY(8)) AS ADDRESS, CAST(NULL AS SIGNED) AS HASH_VALUE, DB_ID, SQL_ID, CAST(PLAN_ID AS SIGNED) AS CHILD_NUMBER, CAST(NULL AS BINARY(8)) AS WORKAREA_ADDRESS, OPERATION_TYPE, OPERATION_ID, POLICY, ESTIMATED_OPTIMAL_SIZE, ESTIMATED_ONEPASS_SIZE, LAST_MEMORY_USED, LAST_EXECUTION, LAST_DEGREE, TOTAL_EXECUTIONS, OPTIMAL_EXECUTIONS, ONEPASS_EXECUTIONS, MULTIPASSES_EXECUTIONS, ACTIVE_TIME, MAX_TEMPSEG_SIZE, LAST_TEMPSEG_SIZE, TENANT_ID AS CON_ID, SVR_IP, SVR_PORT FROM OCEANBASE.__ALL_VIRTUAL_SQL_WORKAREA_HISTORY_STAT )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -881,7 +881,7 @@ int ObInnerTableSchema::gv_sql_workarea_active_schema(ObTableSchema &table_schem table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(NULL AS SIGNED) AS SQL_HASH_VALUE, SQL_ID, CAST(NULL AS DATE) AS SQL_EXEC_START, SQL_EXEC_ID, CAST(NULL AS BINARY(8)) AS WORKAREA_ADDRESS, OPERATION_TYPE, OPERATION_ID, POLICY, SID, CAST(NULL AS SIGNED) AS QCINST_ID, CAST(NULL AS SIGNED) AS QCSID, ACTIVE_TIME, WORK_AREA_SIZE, EXPECT_SIZE, ACTUAL_MEM_USED, MAX_MEM_USED, NUMBER_PASSES, TEMPSEG_SIZE, CAST(NULL AS CHAR(20)) AS TABLESPACE, CAST(NULL AS SIGNED) AS `SEGRFNO#`, CAST(NULL AS SIGNED) AS `SEGBLK#`, TENANT_ID AS CON_ID, SVR_IP, SVR_PORT FROM OCEANBASE.__ALL_VIRTUAL_SQL_WORKAREA_ACTIVE )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(NULL AS SIGNED) AS SQL_HASH_VALUE, DB_ID, SQL_ID, CAST(NULL AS DATE) AS SQL_EXEC_START, SQL_EXEC_ID, CAST(NULL AS BINARY(8)) AS WORKAREA_ADDRESS, OPERATION_TYPE, OPERATION_ID, POLICY, SID, CAST(NULL AS SIGNED) AS QCINST_ID, CAST(NULL AS SIGNED) AS QCSID, ACTIVE_TIME, WORK_AREA_SIZE, EXPECT_SIZE, ACTUAL_MEM_USED, MAX_MEM_USED, NUMBER_PASSES, TEMPSEG_SIZE, CAST(NULL AS CHAR(20)) AS TABLESPACE, CAST(NULL AS SIGNED) AS `SEGRFNO#`, CAST(NULL AS SIGNED) AS `SEGBLK#`, TENANT_ID AS CON_ID, SVR_IP, SVR_PORT FROM OCEANBASE.__ALL_VIRTUAL_SQL_WORKAREA_ACTIVE )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.28001_28050.cpp b/src/share/inner_table/ob_inner_table_schema.28001_28050.cpp index 51bf4a01c9..0a9540f2a7 100644 --- a/src/share/inner_table/ob_inner_table_schema.28001_28050.cpp +++ b/src/share/inner_table/ob_inner_table_schema.28001_28050.cpp @@ -1910,7 +1910,7 @@ int ObInnerTableSchema::gv_sql_workarea_active_ora_schema(ObTableSchema &table_s table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(NULL AS NUMBER) AS SQL_HASH_VALUE, SQL_ID, CAST(NULL AS DATE) AS SQL_EXEC_START, CAST(SQL_EXEC_ID AS NUMBER) AS SQL_EXEC_ID, CAST(NULL AS RAW(8)) AS WORKAREA_ADDRESS, CAST(OPERATION_TYPE AS VARCHAR2(160)) AS OPERATION_TYPE, CAST(OPERATION_ID AS NUMBER) AS OPERATION_ID, CAST(POLICY AS VARCHAR2(24)) AS POLICY, CAST(SID AS NUMBER) AS SID, CAST(NULL AS NUMBER) AS QCINST_ID, CAST(NULL AS NUMBER) AS QCSID, CAST(ACTIVE_TIME AS NUMBER) AS ACTIVE_TIME, CAST(WORK_AREA_SIZE AS NUMBER) AS WORK_AREA_SIZE, CAST(EXPECT_SIZE AS NUMBER) AS EXPECT_SIZE, CAST(ACTUAL_MEM_USED AS NUMBER) AS ACTUAL_MEM_USED, CAST(MAX_MEM_USED AS NUMBER) AS MAX_MEM_USED, CAST(NUMBER_PASSES AS NUMBER) AS NUMBER_PASSES, CAST(TEMPSEG_SIZE AS NUMBER) AS TEMPSEG_SIZE, CAST(NULL AS VARCHAR2(128)) AS TABLESPACE, CAST(NULL AS NUMBER) AS "SEGRFNO#", CAST(NULL AS NUMBER) AS "SEGBLK#", CAST(TENANT_ID AS NUMBER) AS CON_ID, SVR_IP, SVR_PORT FROM SYS.ALL_VIRTUAL_SQL_WORKAREA_ACTIVE )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(NULL AS NUMBER) AS SQL_HASH_VALUE, DB_ID, SQL_ID, CAST(NULL AS DATE) AS SQL_EXEC_START, CAST(SQL_EXEC_ID AS NUMBER) AS SQL_EXEC_ID, CAST(NULL AS RAW(8)) AS WORKAREA_ADDRESS, CAST(OPERATION_TYPE AS VARCHAR2(160)) AS OPERATION_TYPE, CAST(OPERATION_ID AS NUMBER) AS OPERATION_ID, CAST(POLICY AS VARCHAR2(24)) AS POLICY, CAST(SID AS NUMBER) AS SID, CAST(NULL AS NUMBER) AS QCINST_ID, CAST(NULL AS NUMBER) AS QCSID, CAST(ACTIVE_TIME AS NUMBER) AS ACTIVE_TIME, CAST(WORK_AREA_SIZE AS NUMBER) AS WORK_AREA_SIZE, CAST(EXPECT_SIZE AS NUMBER) AS EXPECT_SIZE, CAST(ACTUAL_MEM_USED AS NUMBER) AS ACTUAL_MEM_USED, CAST(MAX_MEM_USED AS NUMBER) AS MAX_MEM_USED, CAST(NUMBER_PASSES AS NUMBER) AS NUMBER_PASSES, CAST(TEMPSEG_SIZE AS NUMBER) AS TEMPSEG_SIZE, CAST(NULL AS VARCHAR2(128)) AS TABLESPACE, CAST(NULL AS NUMBER) AS "SEGRFNO#", CAST(NULL AS NUMBER) AS "SEGBLK#", CAST(TENANT_ID AS NUMBER) AS CON_ID, SVR_IP, SVR_PORT FROM SYS.ALL_VIRTUAL_SQL_WORKAREA_ACTIVE )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.28051_28100.cpp b/src/share/inner_table/ob_inner_table_schema.28051_28100.cpp index 88784c3ace..12e6cae3e3 100644 --- a/src/share/inner_table/ob_inner_table_schema.28051_28100.cpp +++ b/src/share/inner_table/ob_inner_table_schema.28051_28100.cpp @@ -210,7 +210,7 @@ int ObInnerTableSchema::gv_sql_workarea_ora_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(NULL AS RAW(8)) AS ADDRESS, CAST(NULL AS NUMBER) AS HASH_VALUE, SQL_ID, CAST(PLAN_ID AS NUMBER) AS CHILD_NUMBER, CAST(NULL AS RAW(8)) AS WORKAREA_ADDRESS, CAST(OPERATION_TYPE AS VARCHAR2(160)) AS OPERATION_TYPE, CAST(OPERATION_ID AS NUMBER) AS OPERATION_ID, CAST(POLICY AS VARCHAR2(40)) AS POLICY, CAST(ESTIMATED_OPTIMAL_SIZE AS NUMBER) AS ESTIMATED_OPTIMAL_SIZE, CAST(ESTIMATED_ONEPASS_SIZE AS NUMBER) AS ESTIMATED_ONEPASS_SIZE, CAST(LAST_MEMORY_USED AS NUMBER) AS LAST_MEMORY_USED, CAST(LAST_EXECUTION AS VARCHAR2(40)) AS LAST_EXECUTION, CAST(LAST_DEGREE AS NUMBER) AS LAST_DEGREE, CAST(TOTAL_EXECUTIONS AS NUMBER) AS TOTAL_EXECUTIONS, CAST(OPTIMAL_EXECUTIONS AS NUMBER) AS OPTIMAL_EXECUTIONS, CAST(ONEPASS_EXECUTIONS AS NUMBER) AS ONEPASS_EXECUTIONS, CAST(MULTIPASSES_EXECUTIONS AS NUMBER) AS MULTIPASSES_EXECUTIONS, CAST(ACTIVE_TIME AS NUMBER) AS ACTIVE_TIME, CAST(MAX_TEMPSEG_SIZE AS NUMBER) AS MAX_TEMPSEG_SIZE, CAST(LAST_TEMPSEG_SIZE AS NUMBER) AS LAST_TEMPSEG_SIZE, CAST(TENANT_ID AS NUMBER) AS CON_ID, SVR_IP, SVR_PORT FROM SYS.ALL_VIRTUAL_SQL_WORKAREA_HISTORY_STAT )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(NULL AS RAW(8)) AS ADDRESS, CAST(NULL AS NUMBER) AS HASH_VALUE, DB_ID, SQL_ID, CAST(PLAN_ID AS NUMBER) AS CHILD_NUMBER, CAST(NULL AS RAW(8)) AS WORKAREA_ADDRESS, CAST(OPERATION_TYPE AS VARCHAR2(160)) AS OPERATION_TYPE, CAST(OPERATION_ID AS NUMBER) AS OPERATION_ID, CAST(POLICY AS VARCHAR2(40)) AS POLICY, CAST(ESTIMATED_OPTIMAL_SIZE AS NUMBER) AS ESTIMATED_OPTIMAL_SIZE, CAST(ESTIMATED_ONEPASS_SIZE AS NUMBER) AS ESTIMATED_ONEPASS_SIZE, CAST(LAST_MEMORY_USED AS NUMBER) AS LAST_MEMORY_USED, CAST(LAST_EXECUTION AS VARCHAR2(40)) AS LAST_EXECUTION, CAST(LAST_DEGREE AS NUMBER) AS LAST_DEGREE, CAST(TOTAL_EXECUTIONS AS NUMBER) AS TOTAL_EXECUTIONS, CAST(OPTIMAL_EXECUTIONS AS NUMBER) AS OPTIMAL_EXECUTIONS, CAST(ONEPASS_EXECUTIONS AS NUMBER) AS ONEPASS_EXECUTIONS, CAST(MULTIPASSES_EXECUTIONS AS NUMBER) AS MULTIPASSES_EXECUTIONS, CAST(ACTIVE_TIME AS NUMBER) AS ACTIVE_TIME, CAST(MAX_TEMPSEG_SIZE AS NUMBER) AS MAX_TEMPSEG_SIZE, CAST(LAST_TEMPSEG_SIZE AS NUMBER) AS LAST_TEMPSEG_SIZE, CAST(TENANT_ID AS NUMBER) AS CON_ID, SVR_IP, SVR_PORT FROM SYS.ALL_VIRTUAL_SQL_WORKAREA_HISTORY_STAT )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema_def.py b/src/share/inner_table/ob_inner_table_schema_def.py index 215b6a97de..7cacbf1f11 100644 --- a/src/share/inner_table/ob_inner_table_schema_def.py +++ b/src/share/inner_table/ob_inner_table_schema_def.py @@ -10734,6 +10734,7 @@ def_table_schema( ('last_tempseg_size', 'int'), ('tenant_id', 'int'), ('policy', 'varchar:10'), + ('db_id', 'int'), ], partition_columns = ['svr_ip', 'svr_port'], vtable_route_policy = 'distributed', @@ -10765,6 +10766,7 @@ def_table_schema( ('tempseg_size', 'int'), ('tenant_id', 'int'), ('policy', 'varchar:6'), + ('db_id', 'int'), ], partition_columns = ['svr_ip', 'svr_port'], vtable_route_policy = 'distributed', @@ -16813,6 +16815,7 @@ def_table_schema( SELECT CAST(NULL AS BINARY(8)) AS ADDRESS, CAST(NULL AS SIGNED) AS HASH_VALUE, + DB_ID, SQL_ID, CAST(PLAN_ID AS SIGNED) AS CHILD_NUMBER, CAST(NULL AS BINARY(8)) AS WORKAREA_ADDRESS, @@ -16887,6 +16890,7 @@ def_table_schema( view_definition = """ SELECT CAST(NULL AS SIGNED) AS SQL_HASH_VALUE, + DB_ID, SQL_ID, CAST(NULL AS DATE) AS SQL_EXEC_START, SQL_EXEC_ID, @@ -54010,6 +54014,7 @@ def_table_schema( view_definition = """ SELECT CAST(NULL AS NUMBER) AS SQL_HASH_VALUE, + DB_ID, SQL_ID, CAST(NULL AS DATE) AS SQL_EXEC_START, CAST(SQL_EXEC_ID AS NUMBER) AS SQL_EXEC_ID, @@ -54308,6 +54313,7 @@ def_table_schema( SELECT CAST(NULL AS RAW(8)) AS ADDRESS, CAST(NULL AS NUMBER) AS HASH_VALUE, + DB_ID, SQL_ID, CAST(PLAN_ID AS NUMBER) AS CHILD_NUMBER, CAST(NULL AS RAW(8)) AS WORKAREA_ADDRESS, diff --git a/src/sql/engine/ob_tenant_sql_memory_manager.cpp b/src/sql/engine/ob_tenant_sql_memory_manager.cpp index 1b6c77836d..4cc8b2e8c2 100644 --- a/src/sql/engine/ob_tenant_sql_memory_manager.cpp +++ b/src/sql/engine/ob_tenant_sql_memory_manager.cpp @@ -66,6 +66,11 @@ uint64_t ObSqlWorkAreaProfile::get_session_id() return session_id_; } +uint64_t ObSqlWorkAreaProfile::get_db_id() +{ + return db_id_; +} + int ObSqlWorkAreaProfile::set_exec_info(ObExecContext &exec_ctx) { int ret = OB_SUCCESS; @@ -82,6 +87,10 @@ int ObSqlWorkAreaProfile::set_exec_info(ObExecContext &exec_ctx) sql_id_[OB_MAX_SQL_ID_LENGTH] = '\0'; } } + ObSQLSessionInfo *sql_session = exec_ctx.get_my_session(); + if (OB_NOT_NULL(sql_session)) { + db_id_ = sql_session->get_database_id(); + } return ret; } @@ -737,6 +746,7 @@ int ObTenantSqlMemoryManager::new_and_fill_workarea_stat( wa_stat->workarea_key_.set_sql_id(profile.get_sql_id()); wa_stat->workarea_key_.set_plan_id(profile.get_plan_id()); wa_stat->workarea_key_.set_operator_id(profile.get_operator_id()); + wa_stat->workarea_key_.set_database_id(profile.get_db_id()); wa_stat->op_type_ = profile.get_operator_type(); if (OB_FAIL(fill_workarea_stat(*wa_stat, profile))) { LOG_WARN("failed to fill workarea stat", K(ret)); @@ -767,7 +777,8 @@ int ObTenantSqlMemoryManager::collect_workarea_stat(ObSqlWorkAreaProfile &profil if (profile.has_exec_ctx()) { ObSqlWorkAreaStat::WorkareaKey workarea_key( profile.get_plan_id(), - profile.get_operator_id()); + profile.get_operator_id(), + profile.get_db_id()); workarea_key.set_sql_id(profile.get_sql_id()); bool need_insert = false; if (OB_FAIL(try_fill_workarea_stat(workarea_key, profile, need_insert))) { @@ -1320,6 +1331,7 @@ int ObTenantSqlMemoryManager::get_all_active_workarea( profile_info.sql_exec_id_ = profile->get_exec_id(); profile_info.set_sql_id(profile->get_sql_id()); profile_info.session_id_ = profile->get_session_id(); + profile_info.database_id_ = profile->get_db_id(); if (OB_FAIL(wa_actives.push_back(profile_info))) { LOG_WARN("failed to push back profile", K(ret)); } diff --git a/src/sql/engine/ob_tenant_sql_memory_manager.h b/src/sql/engine/ob_tenant_sql_memory_manager.h index c65e786e9d..47cdc2fc63 100644 --- a/src/sql/engine/ob_tenant_sql_memory_manager.h +++ b/src/sql/engine/ob_tenant_sql_memory_manager.h @@ -39,7 +39,7 @@ public: random_id_(0), type_(type), op_type_(PHY_INVALID), op_id_(UINT64_MAX), exec_ctx_(nullptr), min_size_(0), row_count_(0), input_size_(0), bucket_size_(0), chunk_size_(0), cache_size_(-1), one_pass_size_(0), expect_size_(OB_INVALID_ID), - global_bound_size_(INT64_MAX), dop_(-1), plan_id_(-1), exec_id_(-1), sql_id_(), + global_bound_size_(INT64_MAX), dop_(-1), plan_id_(-1), exec_id_(-1), sql_id_(), db_id_(-1), session_id_(-1), max_bound_(INT64_MAX), delta_size_(0), data_size_(0), max_mem_used_(0), mem_used_(0), pre_mem_used_(0), dumped_size_(0), data_ratio_(0.5), active_time_(0), number_pass_(0), @@ -145,6 +145,7 @@ public: uint64_t get_exec_id(); const char* get_sql_id(); uint64_t get_session_id(); + uint64_t get_db_id(); OB_INLINE bool need_profiled() { @@ -180,6 +181,7 @@ private: int64_t plan_id_; int64_t exec_id_; char sql_id_[common::OB_MAX_SQL_ID_LENGTH + 1]; + uint64_t db_id_; int64_t session_id_; // 取 min(cache_size, global_bound_size) // sort场景,在global_bound_size比较大情况下,sort理论上有data和extra内存,data应该是one-pass size @@ -219,14 +221,14 @@ public: active_avg_time_(0), max_temp_size_(0), last_temp_size_(0), is_auto_policy_(false) {} public: - // key: (sql_id, plan_id, operator_id) 可以确认相同执行的统计 + // key: (sql_id, plan_id, operator_id, database_id) 可以确认相同执行的统计 struct WorkareaKey { - WorkareaKey(uint64_t plan_id, uint64_t operator_id) : - plan_id_(plan_id), operator_id_(operator_id) + WorkareaKey(uint64_t plan_id, uint64_t operator_id, uint64_t database_id) : + plan_id_(plan_id), operator_id_(operator_id), database_id_(database_id) { sql_id_[0] = '\0'; } - WorkareaKey() : plan_id_(UINT64_MAX), operator_id_(UINT64_MAX) + WorkareaKey() : plan_id_(UINT64_MAX), operator_id_(UINT64_MAX), database_id_(UINT64_MAX) { sql_id_[0] = '\0'; } @@ -240,12 +242,14 @@ public: } void set_plan_id(uint64_t plan_id) { plan_id_ = plan_id; } void set_operator_id(uint64_t op_id) { operator_id_ = op_id; } + void set_database_id(uint64_t database_id) { database_id_ = database_id; } void assign(const WorkareaKey &other) { strncpy(sql_id_, other.sql_id_, common::OB_MAX_SQL_ID_LENGTH + 1); plan_id_ = other.plan_id_; operator_id_ = other.operator_id_; + database_id_ = other.database_id_; } WorkareaKey &operator=(const WorkareaKey &other) { @@ -255,6 +259,7 @@ public: int64_t hash() const { uint64_t val = common::murmurhash(&plan_id_, sizeof(plan_id_), 0); + val = common::murmurhash(&database_id_, sizeof(database_id_), val); return common::murmurhash(&operator_id_, sizeof(operator_id_), val); } int hash(uint64_t &hash_val) const @@ -266,13 +271,15 @@ public: bool operator==(const WorkareaKey &other) const { return plan_id_ == other.plan_id_ && operator_id_ == other.operator_id_ - && 0 == MEMCMP(sql_id_, other.sql_id_, strlen(sql_id_)); + && 0 == MEMCMP(sql_id_, other.sql_id_, strlen(sql_id_)) + && database_id_ == other.database_id_; } - TO_STRING_KV(K_(sql_id), K_(plan_id), K_(operator_id)); + TO_STRING_KV(K_(sql_id), K_(plan_id), K_(operator_id), K_(database_id)); public: char sql_id_[common::OB_MAX_SQL_ID_LENGTH + 1]; // sql id uint64_t plan_id_; // plan id uint64_t operator_id_; // operator id + uint64_t database_id_; // database id }; // end WorkareaKey OB_INLINE void set_seqno(int64_t seqno) { seqno_ = seqno; } @@ -281,6 +288,7 @@ public: OB_INLINE const char* get_sql_id() const { return workarea_key_.sql_id_; } OB_INLINE uint64_t get_plan_id() const { return workarea_key_.plan_id_; } OB_INLINE uint64_t get_operator_id() const { return workarea_key_.operator_id_; } + OB_INLINE uint64_t get_database_id() const { return workarea_key_.database_id_; } OB_INLINE ObPhyOperatorType get_op_type() const { return op_type_; } OB_INLINE int64_t get_est_cache_size() const { return est_cache_size_; } OB_INLINE int64_t get_est_one_pass_size() const { return est_one_pass_size_; } @@ -331,7 +339,8 @@ class ObSqlWorkareaProfileInfo { public: ObSqlWorkareaProfileInfo() : - profile_(ObSqlWorkAreaType::MAX_TYPE), plan_id_(0), sql_exec_id_(0), session_id_(0) + profile_(ObSqlWorkAreaType::MAX_TYPE), plan_id_(0), + sql_exec_id_(0), session_id_(0), database_id_(0) { sql_id_[0] = '\0'; } @@ -343,6 +352,7 @@ public: plan_id_ = other.plan_id_; sql_exec_id_ = other.sql_exec_id_; session_id_ = other.session_id_; + database_id_ = other.database_id_; } ObSqlWorkareaProfileInfo &operator=(const ObSqlWorkareaProfileInfo &other) @@ -366,6 +376,7 @@ public: uint64_t plan_id_; uint64_t sql_exec_id_; uint64_t session_id_; + uint64_t database_id_; }; class ObSqlWorkAreaIntervalStat diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result index 1ab47c7747..20bcba3447 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result @@ -1433,6 +1433,7 @@ desc oceanbase.GV$SQL_WORKAREA; Field Type Null Key Default Extra ADDRESS varbinary(8) NO HASH_VALUE bigint(0) NO +DB_ID bigint(20) NO NULL SQL_ID varchar(32) NO NULL CHILD_NUMBER bigint(20) NO NULL WORKAREA_ADDRESS varbinary(8) NO @@ -1461,6 +1462,7 @@ desc oceanbase.V$SQL_WORKAREA; Field Type Null Key Default Extra ADDRESS varbinary(8) NO HASH_VALUE bigint(0) NO +DB_ID bigint(20) NO SQL_ID varchar(32) NO CHILD_NUMBER bigint(20) NO WORKAREA_ADDRESS varbinary(8) NO @@ -1488,6 +1490,7 @@ cnt desc oceanbase.GV$SQL_WORKAREA_ACTIVE; Field Type Null Key Default Extra SQL_HASH_VALUE bigint(0) NO +DB_ID bigint(20) NO NULL SQL_ID varchar(32) NO NULL SQL_EXEC_START date NO SQL_EXEC_ID bigint(20) NO NULL @@ -1517,6 +1520,7 @@ cnt desc oceanbase.V$SQL_WORKAREA_ACTIVE; Field Type Null Key Default Extra SQL_HASH_VALUE bigint(0) NO +DB_ID bigint(20) NO SQL_ID varchar(32) NO SQL_EXEC_START date NO SQL_EXEC_ID bigint(20) NO diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result index 72cb57639e..cf7339bf91 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result @@ -1434,6 +1434,7 @@ desc oceanbase.GV$SQL_WORKAREA; Field Type Null Key Default Extra ADDRESS varbinary(8) NO HASH_VALUE bigint(0) NO +DB_ID bigint(20) NO NULL SQL_ID varchar(32) NO NULL CHILD_NUMBER bigint(20) NO NULL WORKAREA_ADDRESS varbinary(8) NO @@ -1462,6 +1463,7 @@ desc oceanbase.V$SQL_WORKAREA; Field Type Null Key Default Extra ADDRESS varbinary(8) NO HASH_VALUE bigint(0) NO +DB_ID bigint(20) NO SQL_ID varchar(32) NO CHILD_NUMBER bigint(20) NO WORKAREA_ADDRESS varbinary(8) NO @@ -1489,6 +1491,7 @@ cnt desc oceanbase.GV$SQL_WORKAREA_ACTIVE; Field Type Null Key Default Extra SQL_HASH_VALUE bigint(0) NO +DB_ID bigint(20) NO NULL SQL_ID varchar(32) NO NULL SQL_EXEC_START date NO SQL_EXEC_ID bigint(20) NO NULL @@ -1518,6 +1521,7 @@ cnt desc oceanbase.V$SQL_WORKAREA_ACTIVE; Field Type Null Key Default Extra SQL_HASH_VALUE bigint(0) NO +DB_ID bigint(20) NO SQL_ID varchar(32) NO SQL_EXEC_START date NO SQL_EXEC_ID bigint(20) NO diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_mysql.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_mysql.result index aec58904b2..ab3fa96c54 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_mysql.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_mysql.result @@ -1921,6 +1921,7 @@ max_tempseg_size bigint(20) NO NULL last_tempseg_size bigint(20) NO NULL tenant_id bigint(20) NO NULL policy varchar(10) NO NULL +db_id bigint(20) NO NULL select /*+QUERY_TIMEOUT(60000000)*/ IF(count(*) >= 0, 1, 0) from oceanbase.__all_virtual_sql_workarea_history_stat; IF(count(*) >= 0, 1, 0) 1 @@ -1946,6 +1947,7 @@ number_passes bigint(20) NO NULL tempseg_size bigint(20) NO NULL tenant_id bigint(20) NO NULL policy varchar(6) NO NULL +db_id bigint(20) NO NULL select /*+QUERY_TIMEOUT(60000000)*/ IF(count(*) >= 0, 1, 0) from oceanbase.__all_virtual_sql_workarea_active; IF(count(*) >= 0, 1, 0) 1 diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_sys.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_sys.result index d8e4c20c13..c76f22f225 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_sys.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_sys.result @@ -4344,6 +4344,7 @@ max_tempseg_size bigint(20) NO NULL last_tempseg_size bigint(20) NO NULL tenant_id bigint(20) NO NULL policy varchar(10) NO NULL +db_id bigint(20) NO NULL select /*+QUERY_TIMEOUT(60000000)*/ IF(count(*) >= 0, 1, 0) from oceanbase.__all_virtual_sql_workarea_history_stat; IF(count(*) >= 0, 1, 0) 1 @@ -4369,6 +4370,7 @@ number_passes bigint(20) NO NULL tempseg_size bigint(20) NO NULL tenant_id bigint(20) NO NULL policy varchar(6) NO NULL +db_id bigint(20) NO NULL select /*+QUERY_TIMEOUT(60000000)*/ IF(count(*) >= 0, 1, 0) from oceanbase.__all_virtual_sql_workarea_active; IF(count(*) >= 0, 1, 0) 1