From de02b2abb9337afa0083d4d9b183420f6044b402 Mon Sep 17 00:00:00 2001 From: zhangry7777 <37564287+zhangry7777@users.noreply.github.com> Date: Sun, 5 Jan 2025 14:53:56 +0800 Subject: [PATCH 1/4] =?UTF-8?q?display=E5=8A=9F=E8=83=BD=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ##lvss## processlist实时会话信息汇总(取并发度前十的信息) 对业务租户根据sql_id和截取的sqltext进行汇总,简单展示各类sql的并发情况。 字段主要包括:租户名/执行IP/用户名/sql_id或截取前40位的sql文本/会话平均执行时间/会话最大的执行时间/会话数量/session_id/3.x及前版本还有父session_id #####cpu######### tenant的cpu信息 展示不同租户在不同节点的cpu使用情况(计算单位是内部方法,不是实际的cpu核数) 字段含义为 当前查询时间/租户名/租户id/节点ip/cpu使用量/cpu总量/cpu使用百分比 ######index########### 查询表上的index信息 字段含义分别为 租户名/索引的table_id/表所属用户/表明/索引所属用户/索引名/索引的列(按顺序) #####leader######### ob集群的leader信息(分为全库/租户/表三个粒度) 字段含义分别为 租户id/租户名/节点ip/leader或follow的角色/分区数量 #######lock########### 库里当前所有表持有锁的信息 字段含义分别为 租户id/节点ip/table_id(4.x还有ls_id和tablet_id)/表名/会话id/创建时间 ########locked######## 库里被阻塞会话的信息 字段含义分别为 节点ip/table_id/表名/会话id/阻塞该会话的会话id/锁的模式/锁的类型 ####locktab######## 某张表上持有锁的信息 字段含义分别为 租户id/节点ip/table_id/表名/会话id/hash信息/创建时间/已经持有了多久 ####mem######## 所有tenant的mermory和memstore信息 mermory相关信息字段含义分别为 检查时间/租户id/租户名/节点ip/内存使用/最大内存/内存使用百分比 memstore相关信息字段含义分别为 租户id/节点ip/memstore活跃内存/memstore触发转储的内存/memstore转储使用百分比/已经转储次数/memstore使用内存/memstore总内存/memstore使用百分比 ###obtab######## ob内部表信息 字段含义为内部表表名 ####splan######## 执行记录信息 字段含义分别为 用户名/节点ip/计划id/租户id/计划类型/第一次加载时间/最后一次应用时间/平均执行时间/执行次数/总耗时/最慢的耗时/慢耗时执行的时间/慢耗时的执行次数/是否使用ps协议/平均返回行数/outline的id ####aplan######### 实际执行计划信息 字段含义分别为 计划id/算子/对象名/行数/代价 ####status########## server status信息与原有server_info部分字段一致,增添了集群名的列,可以确认连接环境 ###tabndv######## 查询表ndv信息 字段含义分别为 库名/表名/字段名/字段类型/ndv值/空值 4.x之前版本还有分区信息 ####tenant###### tenant信息与原有tenant_info功能点不冲突 展示库里所有租户的 租户id/租户名/zonelist/primary_zone/状态 #####trans########### ob集群的长事务信息 字段含义分别为 节点ip/会话id/(3.x及前版本包括表名,table_id)/创建时间/当前时间/会话时间/事务类型/trans_id/详细的事务分析类型/ --- plugins/display/tasks/observer/aplan.yaml | 14 ++++++ plugins/display/tasks/observer/cpu.yaml | 18 ++++++++ plugins/display/tasks/observer/index.yaml | 15 +++++++ plugins/display/tasks/observer/leader.yaml | 16 +++++++ plugins/display/tasks/observer/lock.yaml | 19 ++++++++ plugins/display/tasks/observer/locked.yaml | 20 +++++++++ plugins/display/tasks/observer/locktab.yaml | 19 ++++++++ plugins/display/tasks/observer/lvss.yaml | 25 +++++++++++ plugins/display/tasks/observer/mem.yaml | 49 +++++++++++++++++++++ plugins/display/tasks/observer/obtab.yaml | 9 ++++ plugins/display/tasks/observer/splan.yaml | 25 +++++++++++ plugins/display/tasks/observer/status.yaml | 14 ++++++ plugins/display/tasks/observer/tabndv.yaml | 48 ++++++++++++++++++++ plugins/display/tasks/observer/tenant.yaml | 9 ++++ plugins/display/tasks/observer/trans.yaml | 20 +++++++++ 15 files changed, 320 insertions(+) create mode 100644 plugins/display/tasks/observer/aplan.yaml create mode 100644 plugins/display/tasks/observer/cpu.yaml create mode 100644 plugins/display/tasks/observer/index.yaml create mode 100644 plugins/display/tasks/observer/leader.yaml create mode 100644 plugins/display/tasks/observer/lock.yaml create mode 100644 plugins/display/tasks/observer/locked.yaml create mode 100644 plugins/display/tasks/observer/locktab.yaml create mode 100644 plugins/display/tasks/observer/lvss.yaml create mode 100644 plugins/display/tasks/observer/mem.yaml create mode 100644 plugins/display/tasks/observer/obtab.yaml create mode 100644 plugins/display/tasks/observer/splan.yaml create mode 100644 plugins/display/tasks/observer/status.yaml create mode 100644 plugins/display/tasks/observer/tabndv.yaml create mode 100644 plugins/display/tasks/observer/tenant.yaml create mode 100644 plugins/display/tasks/observer/trans.yaml diff --git a/plugins/display/tasks/observer/aplan.yaml b/plugins/display/tasks/observer/aplan.yaml new file mode 100644 index 00000000..149e9579 --- /dev/null +++ b/plugins/display/tasks/observer/aplan.yaml @@ -0,0 +1,14 @@ +info_en: "[aplan]" +info_cn: "[实际执行计划信息]" +command: obdiag display scene run --scene=observer.aplan --env svr_ip=test --env tenant_id=test --env plan_id=test +task: + - version: "[*,*]" + steps: + - type: sql + sql: "select plan_id, operator, name, rows, cost + from oceanbase.__all_virtual_plan_cache_plan_explain + where svr_ip = '#{svr_ip}' + and svr_port = 2882 + and tenant_id = '#{tenant_id}' + and plan_id = '#{plan_id}'" + global: true \ No newline at end of file diff --git a/plugins/display/tasks/observer/cpu.yaml b/plugins/display/tasks/observer/cpu.yaml new file mode 100644 index 00000000..60130878 --- /dev/null +++ b/plugins/display/tasks/observer/cpu.yaml @@ -0,0 +1,18 @@ +info_en: "[cpu]" +info_cn: "[tenant的cpu信息]" +command: obdiag display scene run --scene=observer.cpu +task: + - version: "[*,*]" + steps: + - type: sql + sql: " select NOW() 'chenck_time', t.tenant_name,t.tenant_id,ca.svr_ip, + round(sum(case when STAT_ID='140006' then ca.VALUE else 0 end)/100,2) 'cpu_usage', + round(sum(case when STAT_ID='140005' then ca.VALUE else 0 end)/100,2) 'cpu_max' , + round(100*(sum(case when STAT_ID='140006' then ca.VALUE else 0 end)/sum(case when STAT_ID='140005' then ca.VALUE else 0 end)),2) 'cpu_percent' + from + (select s.CON_ID, s.svr_ip,s.STAT_ID, sum(s.VALUE) VALUE + from oceanbase.gv$sysstat s where s.STAT_ID in(140005,140006) + group by s.CON_ID, s.svr_ip,s.STAT_ID, s.NAME) ca,oceanbase.__all_tenant t + where t.tenant_id=ca.CON_ID + group by t.tenant_name,ca.svr_ip;" + global: true \ No newline at end of file diff --git a/plugins/display/tasks/observer/index.yaml b/plugins/display/tasks/observer/index.yaml new file mode 100644 index 00000000..46f4cb38 --- /dev/null +++ b/plugins/display/tasks/observer/index.yaml @@ -0,0 +1,15 @@ +info_en: "[index]" +info_cn: "[查询表上的index信息]" +command: obdiag display scene run --scene=observer.index --env user_name=test --env table_name=test +task: + - version: "[*,*]" + steps: + - type: sql + sql: "select t1.tenant_name,a.table_id index_id,d.database_name tab_owner,a2.table_name ,d.database_name idx_owner,substr(substring_index(e.table_name,'_',4),7) table_id, substring(e.table_name,length(substring_index(e.table_name,'_',4))+2) index_name, group_concat(distinct a.column_name order by a.rowkey_position separator',') as index_column + from oceanbase.__all_virtual_column a + inner join oceanbase.__all_virtual_table e on a.table_id=e.table_id and e.table_type=5 and a.tenant_id=e.tenant_id + inner join oceanbase.__all_virtual_table a2 on e.data_table_id=a2.table_id and a2.table_name=upper('#{table_name}') And a2.tenant_id=e.tenant_id + inner join oceanbase.__all_tenant t1 on t1.tenant_id=a2.tenant_id and t1.tenant_id>1000 + inner join oceanbase.__all_virtual_database d on d.database_id=a2.database_id and d.database_name=upper('#{user_name}') and e.database_id=d.database_id + group by t1.tenant_name,a.table_id,d.database_name,a2.table_name,d.database_name,e.table_name; " + global: true \ No newline at end of file diff --git a/plugins/display/tasks/observer/leader.yaml b/plugins/display/tasks/observer/leader.yaml new file mode 100644 index 00000000..f68485f8 --- /dev/null +++ b/plugins/display/tasks/observer/leader.yaml @@ -0,0 +1,16 @@ +info_en: "[leader]" +info_cn: "[ob集群的leader信息]" +command: obdiag display scene run --scene=observer.leader --env level=('all' or tenant_id or table_name) +task: + - version: "[*,4.0.0]" + steps: + - type: sql + sql: "select a.tenant_id, b.tenant_name, a.svr_ip, a.role, count(1) part_count from oceanbase.__all_virtual_meta_table a, oceanbase.__all_tenant b +where a.tenant_id = b.tenant_id and (('all'='#{level}') or (a.tenant_id = '#{level}') or (a.table_id in (select table_id from oceanbase.__all_virtual_table where table_name ='#{level}'))) group by a.tenant_id, b.tenant_name, a.svr_ip, a.role order by 4,1;" + global: true + - version: "[4.0.0,*]" + steps: + - type: sql + sql: "select a.tenant_id, b.tenant_name, a.svr_ip, a.role, count(1) part_count from oceanbase.CDB_OB_TABLE_LOCATIONS a, oceanbase.__all_tenant b +where a.tenant_id = b.tenant_id and (('all'='#{level}') or (a.tenant_id = '#{level}') or (a.table_name ='#{level}')) group by a.tenant_id, b.tenant_name, a.svr_ip, a.role order by 4,1;" + global: true \ No newline at end of file diff --git a/plugins/display/tasks/observer/lock.yaml b/plugins/display/tasks/observer/lock.yaml new file mode 100644 index 00000000..01dd8eec --- /dev/null +++ b/plugins/display/tasks/observer/lock.yaml @@ -0,0 +1,19 @@ +info_en: "[lock]" +info_cn: "[库里所有表持有锁的信息]" +command: obdiag display scene run --scene=observer.lock +task: + - version: "[*,4.0.0]" + steps: + - type: sql + sql: "select a.tenant_id,a.svr_ip,a.table_id,c.table_name,a.session_id,substring_index(substring_index(a.trans_id,',',1),':',-1) hash,a.ctx_create_time,a.expired_time,count(*) +from oceanbase.__all_virtual_trans_lock_stat a +inner join oceanbase.__all_virtual_table c on a.table_id=c.table_id and c.table_name not like '__idx_%' and a.tenant_id>1000 group by a.tenant_id,a.trans_id,a.svr_ip,a.table_id,c.table_name,a.session_id,substring_index(substring_index(a.trans_id,',',1),':',-1),a.ctx_create_time,a.expired_time;" + global: true + - version: "[4.0.0,*]" + steps: + - type: sql + sql: "select a.tenant_id,a.svr_ip,a.ls_id,a.table_id,c.table_id table_actual_id,c.table_name,a.tablet_id,a.session_id,a.ctx_create_time +from oceanbase.__all_virtual_trans_lock_stat a +inner join oceanbase.__all_virtual_tablet_to_ls b on b.tablet_id=a.tablet_id and a.tenant_id=b.tenant_id and a.ls_id=b.ls_id +inner join oceanbase.__all_virtual_table c on b.table_id=c.table_id and c.table_name not like '__idx_%' where a.tenant_id>1000;" + global: true \ No newline at end of file diff --git a/plugins/display/tasks/observer/locked.yaml b/plugins/display/tasks/observer/locked.yaml new file mode 100644 index 00000000..ed6efd65 --- /dev/null +++ b/plugins/display/tasks/observer/locked.yaml @@ -0,0 +1,20 @@ +info_en: "[locked]" +info_cn: "[库里被阻塞会话的信息]" +command: obdiag display scene run --scene=observer.locked +task: + - version: "[*,4.0.0]" + steps: + - type: sql + sql: "select distinct a.svr_ip,c.table_id table_actual_id,c.table_name,a.session_id,a.block_session_id,a.lock_mode,a.type +from oceanbase.__all_virtual_lock_wait_stat a +left join oceanbase.__all_virtual_table c on a.table_id=c.table_id order by c.table_name;" + global: true + - version: "[4.0.0,*]" + steps: + - type: sql + sql: "select distinct a.tenant_id,a.svr_ip,c.table_id table_actual_id,c.table_name,a.tablet_id,a.session_id,a.block_session_id,a.trans_id, +a.holder_trans_id,a.lock_mode,a.type +from oceanbase.__all_virtual_lock_wait_stat a +left join oceanbase.__all_virtual_tablet_to_ls b on b.tablet_id=a.tablet_id and a.tenant_id=b.tenant_id and a.ls_id=b.ls_id +left join oceanbase.__all_virtual_table c on b.table_id=c.table_id order by c.table_name,a.tenant_id;" + global: true \ No newline at end of file diff --git a/plugins/display/tasks/observer/locktab.yaml b/plugins/display/tasks/observer/locktab.yaml new file mode 100644 index 00000000..785a7a10 --- /dev/null +++ b/plugins/display/tasks/observer/locktab.yaml @@ -0,0 +1,19 @@ +info_en: "[locktab]" +info_cn: "[某张表上持有锁的信息]" +command: obdiag display scene run --scene=observer.locktab --env tablename=test +task: + - version: "[*,4.0.0]" + steps: + - type: sql + sql: "select * from (select a.tenant_id,a.svr_ip,a.table_id,c.table_name,a.session_id,substring_index(substring_index(a.trans_id,',',1),':',-1) hash,a.ctx_create_time,a.expired_time,timestampdiff(second,date_format(a.ctx_create_time,'%Y-%m-%d %T'),now()) wait_time_s +from oceanbase.__all_virtual_trans_lock_stat a +left join oceanbase.__all_virtual_table c on a.table_id=c.table_id ) t where t.table_name like '%#{tablename}%';" + global: true + - version: "[4.0.0,*]" + steps: + - type: sql + sql: "select * from (select a.tenant_id,a.svr_ip,a.ls_id,a.table_id,c.table_id table_actual_id,c.table_name,a.tablet_id,a.session_id,a.ctx_create_time,timestampdiff(second,date_format(a.ctx_create_time,'%Y-%m-%d %T'),now()) wait_time_s +from oceanbase.__all_virtual_trans_lock_stat a +left join oceanbase.__all_virtual_tablet_to_ls b on b.tablet_id=a.tablet_id +left join oceanbase.__all_virtual_table c on b.table_id=c.table_id) t where t.table_name like '%#{tablename}%';" + global: true \ No newline at end of file diff --git a/plugins/display/tasks/observer/lvss.yaml b/plugins/display/tasks/observer/lvss.yaml new file mode 100644 index 00000000..040716da --- /dev/null +++ b/plugins/display/tasks/observer/lvss.yaml @@ -0,0 +1,25 @@ +info_en: "[lvss]" +info_cn: "[processlist实时会话信息汇总]" +command: obdiag display scene run --scene=observer.lvss +task: + - version: "[*,3.0.0.0]" + steps: + - type: sql + sql: " select a.db,a.tenant,a.user,b.svr_ip,ifnull(b.sql_id,''),avg(b.time),max(b.time),count(*),a.id,a.master_sessid from oceanbase.__all_virtual_processlist a + inner join oceanbase.__all_virtual_session_info b on a.id=b.id and a.svr_ip=b.svr_ip + inner join oceanbase.__all_tenant c on a.tenant=c.tenant_name and c.tenant_id>1000 + where b.sql_id<>'' and a.state<>'SLEEP' group by a.db,a.tenant,a.user,a.svr_ip,b.sql_id order by count(*) desc limit 10; " + global: true + - type: sql + sql: " select user,svr_ip,replace(substr(info,1,40),char(10),'') as q_sql,avg(time),max(time),count(*),id from oceanbase.__all_virtual_processlist +where tenant in (select b.tenant_name from __all_tenant b where b.tenant_id>1000) +and state<>'SLEEP' group by user,svr_ip,substr(info,1,40) order by count(*) desc limit 10; " + global: true + - version: "[3.0.0.0,*]" + steps: + - type: sql + sql: "select tenant,user,svr_ip,ifnull(sql_id,''),avg(retry_cnt),avg(time),max(time),count(*),id from oceanbase.__all_virtual_processlist where tenant<>'sys' and sql_id<>'' group by user,svr_ip,sql_id order by count(*) desc limit 10; " + global: true + - type: sql + sql: "select tenant,user,svr_ip,substr(info,1,40) as q_sql,avg(retry_cnt),avg(time),max(time),count(*),id from oceanbase.__all_virtual_processlist where tenant<>'sys' and sql_id<>'' group by user,svr_ip,substr(info,1,40) order by count(*) desc limit 10; " + global: true diff --git a/plugins/display/tasks/observer/mem.yaml b/plugins/display/tasks/observer/mem.yaml new file mode 100644 index 00000000..c2cfb02a --- /dev/null +++ b/plugins/display/tasks/observer/mem.yaml @@ -0,0 +1,49 @@ +info_en: "[mem]" +info_cn: "[所有tenant的mermory信息]" +command: obdiag display scene run --scene=observer.mem +task: + - version: "[4.0.0.0,*]" + steps: + - type: sql + sql: " select NOW() 'chenck_time',b.tenant_id,b.tenant_name, a.SVR_IP , + round(sum(case when a.STAT_ID='140003' then a.VALUE else 0 end)/1024/1024/1024,2) 'mem_usage/G', + round(sum(case when a.STAT_ID='140002' then a.VALUE else 0 end)/1024/1024/1024,2) 'mem_max/G' ,round(100*(sum(case when STAT_ID='140003' then a.VALUE else 0 end)/sum(case when STAT_ID='140002' then a.VALUE else 0 end)),2) 'mem_percent' + from oceanbase.gv$sysstat a inner join oceanbase.__all_tenant b on a.con_id = b.tenant_id where a.stat_id IN (140003,140002) and (a.con_id > 1000 or a.con_id = 1) and a.class < 1000 + group by b.tenant_id,b.tenant_name, a.SVR_IP order by b.tenant_name,a.SVR_IP ; " + global: true + - type: sql + sql: " SELECT tenant_id, svr_ip + , round(ACTIVE_SPAN / 1024 / 1024/1024,2) AS active_gb + , round(freeze_trigger / 1024 / 1024/1024,2) AS freeze_trg_gb + , round(ACTIVE_SPAN / freeze_trigger*100,2) AS freeze_percent + , FREEZE_CNT + , round(MEMSTORE_USED /1024 / 1024/1024, 2) AS memstore_usage + , round(MEMSTORE_LIMIT / 1024 / 1024/1024, 2) AS memstore_total + ,round(MEMSTORE_USED / MEMSTORE_LIMIT*100,2) as memstore_percent +FROM oceanbase.gv$ob_memstore +where tenant_id>1000 or tenant_id= 1 +ORDER BY tenant_id, svr_ip desc; " + global: true + + - version: "[*,4.0.0.0]" + steps: + - type: sql + sql: " select NOW() 'chenck_time',b.tenant_id,b.tenant_name, a.SVR_IP , + round(sum(case when a.STAT_ID='140003' then a.VALUE else 0 end)/1024/1024/1024,2) 'mem_usage/G', + round(sum(case when a.STAT_ID='140002' then a.VALUE else 0 end)/1024/1024/1024,2) 'mem_max/G' ,round(100*(sum(case when STAT_ID='140003' then a.VALUE else 0 end)/sum(case when STAT_ID='140002' then a.VALUE else 0 end)),2) 'mem_percent' + from oceanbase.gv$sysstat a inner join oceanbase.__all_tenant b on a.con_id = b.tenant_id where a.stat_id IN (140003,140002) and (a.con_id > 1000 or a.con_id = 1) and a.class < 1000 + group by b.tenant_id,b.tenant_name, a.SVR_IP order by b.tenant_name,a.SVR_IP ; " + global: true + - type: sql + sql: " SELECT tenant_id, ip + , round(active / 1024 / 1024) AS active_mb + , round(total / 1024 / 1024) AS total_mb + , round(freeze_trigger / 1024 / 1024) AS freeze_trg_mb + , round(mem_limit / 1024 / 1024) AS mem_limit_mb + , freeze_cnt, round(active / freeze_trigger, 2) AS freeze_pct + , round(total / mem_limit, 2) AS mem_usage +FROM oceanbase.gv$memstore +where tenant_id>1000 or tenant_id= 1 +ORDER BY tenant_id, mem_usage desc; " + global: true + \ No newline at end of file diff --git a/plugins/display/tasks/observer/obtab.yaml b/plugins/display/tasks/observer/obtab.yaml new file mode 100644 index 00000000..45255dc6 --- /dev/null +++ b/plugins/display/tasks/observer/obtab.yaml @@ -0,0 +1,9 @@ +info_en: "[obtab]" +info_cn: "[ob内部表信息]" +command: obdiag display scene run --scene=observer.obtab --env tablename=test +task: + - version: "[*,*]" + steps: + - type: sql + sql: "SELECT distinct table_name FROM oceanbase.__all_virtual_table t1 JOIN oceanbase.__all_virtual_database t2 ON t2.database_id = t1.database_id JOIN oceanbase.__all_tenant t3 ON t3.tenant_id = t1.tenant_id WHERE tenant_name = 'sys' AND database_name = 'oceanbase' AND (table_name LIKE '__all%' OR table_name LIKE '__tenant%' OR table_name LIKE 'gv%' OR table_name LIKE 'v%' OR table_name LIKE 'dba%' OR table_name LIKE 'cdb%') and table_name like '%#{tablename}%' ORDER BY ORA_DECODE(SUBSTR(table_name, 1, 1), 'v', 3, 'g', 4, ORA_DECODE(SUBSTR(table_name, 3, 1), 'a', 2, 1)), table_name;" + global: true \ No newline at end of file diff --git a/plugins/display/tasks/observer/splan.yaml b/plugins/display/tasks/observer/splan.yaml new file mode 100644 index 00000000..e34bcda3 --- /dev/null +++ b/plugins/display/tasks/observer/splan.yaml @@ -0,0 +1,25 @@ +info_en: "[splan]" +info_cn: "[执行记录信息]" +command: obdiag display scene run --scene=observer.splan --env sqlid=test +task: + - version: "[*,4.0.0.0]" + steps: + - type: sql + sql: "select database_name,svr_ip,plan_id,a.TENANT_ID,type,sql_id,substr(first_load_time,1,19) first_load_time, +substr(last_active_time,1,19) last_active_time,avg_exe_usec/1000 'avg_exe_usec(ms)',executions,elapsed_time/1000/1000 'elapsed_time(s)', +round(slowest_exe_usec/1000/1000,2) 'slowest_time(s)',substr(slowest_exe_time,1,19) slowest_exe_time,slow_count,ps_stmt_id, +rows_processed/executions rows,outline_id +from oceanbase.gv$plan_cache_plan_stat a,oceanbase.__all_virtual_database d +where sql_id='#{sqlid}' and d.database_id=db_id and d.tenant_id=a.tenant_id;" + global: true + + - version: "[4.0.0.0,*]" + steps: + - type: sql + sql: "select database_name,svr_ip,plan_id,a.TENANT_ID,type,sql_id,substr(first_load_time,1,19) first_load_time, +substr(last_active_time,1,19) last_active_time,avg_exe_usec/1000 'avg_exe_usec(ms)',executions,elapsed_time/1000/1000 'elapsed_time(s)', +round(slowest_exe_usec/1000/1000,2) 'slowest_time(s)',substr(slowest_exe_time,1,19) slowest_exe_time,slow_count,ps_stmt_id, +rows_processed/executions rows,outline_id +from oceanbase.gv$ob_plan_cache_plan_stat a,oceanbase.__all_virtual_database d +where sql_id='#{sqlid}' and d.database_id=db_id and d.tenant_id=a.tenant_id;" + global: true \ No newline at end of file diff --git a/plugins/display/tasks/observer/status.yaml b/plugins/display/tasks/observer/status.yaml new file mode 100644 index 00000000..ee21dfc6 --- /dev/null +++ b/plugins/display/tasks/observer/status.yaml @@ -0,0 +1,14 @@ +info_en: "[status]" +info_cn: "[server status信息]" +command: obdiag display scene run --scene=observer.status +task: + - version: "[*,*]" + steps: + - type: sql + sql: "select b.info cluster_name,a.svr_ip,a.with_rootserver rs,a.zone, +ora_decode(a.start_service_time,0,null,date_format(usec_to_time(a.start_service_time),'%Y-%m-%d %h:%i:%s')) start_service_time, +ora_decode(a.last_offline_time,0,null,date_format(usec_to_time(a.last_offline_time),'%Y-%m-%d %h:%i:%s')) last_offline_time, +ora_decode(a.stop_time,0,null,date_format(usec_to_time(a.stop_time),'%Y-%m-%d %h:%i:%s')) stop_time, +a.status,SUBSTR(a.build_version, 1, INSTR(build_version, '-') - 1) build_version +from oceanbase.__All_server a ,oceanbase.__all_zone b where b.name='cluster' order by a.zone,a.svr_ip; " + global: true \ No newline at end of file diff --git a/plugins/display/tasks/observer/tabndv.yaml b/plugins/display/tasks/observer/tabndv.yaml new file mode 100644 index 00000000..75cb4fa4 --- /dev/null +++ b/plugins/display/tasks/observer/tabndv.yaml @@ -0,0 +1,48 @@ +info_en: "[tabndv]" +info_cn: "[查询表ndv信息]" +command: obdiag display scene run --scene=observer.tabndv --env user_name=test --env table_name=test +task: + - version: "[*,4.0.0.0]" + steps: + - type: sql + sql: "select t.database_name, + t.table_name, + c.column_name, + (case c.data_type + when 22 then 'VARCHAR2' when 17 then 'DATE' when 15 then 'NUMBER' when 38 then 'TIMESTAMP' when 30 then 'CLOB/BLOB' when 23 then 'CHAR' when 42 then 'FLOAT' when 39 then 'RAW' when 44 then 'NCHAR' when 43 then 'NVARCHAR2' else c.data_type end) AS COLUMN_TYPE, + SUM(s.num_distinct) as NDV, + sum(s.num_null) as num_null + from oceanbase.gv$table t + inner join oceanbase.__all_virtual_column c on t.table_id = c.table_id + inner join oceanbase.__all_virtual_column_statistic s on t.table_id = s.table_id and c.column_id = s.column_id + where t.table_name = upper('#{table_name}') + and t.database_name = upper('#{user_name}') + group by t.database_name, t.table_name, c.column_name,c.data_type;" + global: true + - type: sql + sql: "select a.svr_ip, + c.database_name, + tb.table_name,b.part_id, + b.part_name,b.part_high_bound part_high_value,b.part_func_type,b.subpart_id,b.subpart_name,b.subpart_high_bound subpart_high_value,b.subpart_func_type, + a.row_count + from oceanbase.__all_virtual_table tb join + oceanbase.__all_virtual_partition_table a on a.table_id = tb.table_id join + oceanbase.__all_virtual_database c on c.database_id = tb.database_id left join + oceanbase.__all_virtual_partition_item b on a.partition_id = b.partition_id and a.table_id = b.table_id + where tb.table_name = upper('#{table_name}') + and c.database_name = upper('#{user_name}') and a.role=1 order by 4,8;" + global: true + + - version: "[4.0.0.0,*]" + steps: + - type: sql + sql: "select + s.OWNER,s.TABLE_NAME,s.COLUMN_NAME,s.NUM_DISTINCT as ndv,s.NUM_NULLS,s.LAST_ANALYZED,(case c.data_type + when 22 then 'VARCHAR2' when 17 then 'DATE' when 15 then 'NUMBER' when 38 then 'TIMESTAMP' when 30 then 'CLOB/BLOB' when 23 then 'CHAR' when 42 then 'FLOAT' when 39 then 'RAW' when 44 then 'NCHAR' when 43 then 'NVARCHAR2' else c.data_type end) AS COLUMN_TYPE + from oceanbase.CDB_TAB_COL_STATISTICS s + inner join oceanbase.__all_database d on s.OWNER=d.database_name + inner join oceanbase.__all_virtual_table t on s.TABLE_NAME=t.TABLE_NAME and s.CON_ID=t.tenant_id and d.database_id=t.database_id + inner join oceanbase.__all_virtual_column c on t.table_id = c.table_id and c.COLUMN_NAME=s.COLUMN_NAME + where s.table_name = upper('{#table_name}') + and s.OWNER=upper('#{user_name}');" + global: true \ No newline at end of file diff --git a/plugins/display/tasks/observer/tenant.yaml b/plugins/display/tasks/observer/tenant.yaml new file mode 100644 index 00000000..e6e41850 --- /dev/null +++ b/plugins/display/tasks/observer/tenant.yaml @@ -0,0 +1,9 @@ +info_en: "[tenant]" +info_cn: "[tenant信息]" +command: obdiag display scene run --scene=observer.tenant +task: + - version: "[*,*]" + steps: + - type: sql + sql: "select tenant_id,tenant_name,zone_list,primary_zone,status from oceanbase.__all_tenant;" + global: true \ No newline at end of file diff --git a/plugins/display/tasks/observer/trans.yaml b/plugins/display/tasks/observer/trans.yaml new file mode 100644 index 00000000..21838b74 --- /dev/null +++ b/plugins/display/tasks/observer/trans.yaml @@ -0,0 +1,20 @@ +info_en: "[trans]" +info_cn: "[ob集群的长事务信息]" +command: obdiag display scene run --scene=observer.trans --env wait_time= waittime(s) +task: + - version: "[*,4.0.0]" + steps: + - type: sql + sql: "select t.table_name,t.table_id,a.svr_ip,a.session_id,timestampdiff(second,date_format(ctx_create_time,'%Y-%m-%d %T'),now())/60 wait_time,a.trans_type,a.trans_id,case when b.trans_id is not null and part_trans_action > 2 then 'XA_hang' when b.trans_id is null and part_trans_action > 2 then 'nomarl_hang' when b.trans_id is not null then 'normal_XA_trans' when b.trans_id is null then 'normal_long_trans' end as 'trans_type_info' from oceanbase.__all_virtual_trans_stat a left join oceanbase.gv$table t on substr(a.`partition`,6,16)=t.table_id left join oceanbase.__all_virtual_global_transaction b on a.tenant_id = b.tenant_id and a.trans_id = b.trans_id where + timestampdiff(second,date_format(ctx_create_time,'%Y-%m-%d %T'),now()) > #{wait_time} and a.is_exiting<>1 +order by a.ctx_create_time limit 50;" + global: true + - version: "[4.0.0,*]" + steps: + - type: sql + sql: "select a.svr_ip,a.session_id,a.ctx_create_time,now(),timestampdiff(second,date_format(ctx_create_time,'%Y-%m-%d %T'),now())/60 wait_time,a.trans_type,a.trans_id,case when b.trans_id is not null +and part_trans_action > 2 then 'XA_hang' when b.trans_id is null and part_trans_action > 2 then 'nomarl_hang' +when b.trans_id is not null then 'normal_XA_trans' when b.trans_id is null then 'normal_long_trans' end as 'trans_type_info',a.participants from oceanbase.__all_virtual_trans_stat a left join oceanbase.__all_virtual_global_transaction b on a.tenant_id = b.tenant_id and a.trans_id = b.trans_id where + timestampdiff(second,date_format(ctx_create_time,'%Y-%m-%d %T'),now()) > #{wait_time} and a.is_exiting<>1 +order by a.ctx_create_time limit 50;" + global: true \ No newline at end of file From aef90d634efcd38bfcbcf713bc2bf4c8300cf97e Mon Sep 17 00:00:00 2001 From: zhangry7777 <37564287+zhangry7777@users.noreply.github.com> Date: Tue, 14 Jan 2025 10:07:12 +0800 Subject: [PATCH 2/4] Update and rename tenant.yaml to all_tenant.yaml --- .../tasks/observer/{tenant.yaml => all_tenant.yaml} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename plugins/display/tasks/observer/{tenant.yaml => all_tenant.yaml} (51%) diff --git a/plugins/display/tasks/observer/tenant.yaml b/plugins/display/tasks/observer/all_tenant.yaml similarity index 51% rename from plugins/display/tasks/observer/tenant.yaml rename to plugins/display/tasks/observer/all_tenant.yaml index e6e41850..d87e8bff 100644 --- a/plugins/display/tasks/observer/tenant.yaml +++ b/plugins/display/tasks/observer/all_tenant.yaml @@ -1,9 +1,9 @@ -info_en: "[tenant]" -info_cn: "[tenant信息]" -command: obdiag display scene run --scene=observer.tenant +info_en: "[all_tenant]" +info_cn: "[所有tenant基本信息]" +command: obdiag display scene run --scene=observer.all_tenant task: - version: "[*,*]" steps: - type: sql sql: "select tenant_id,tenant_name,zone_list,primary_zone,status from oceanbase.__all_tenant;" - global: true \ No newline at end of file + global: true From b04f7618de976a5ab57e3166e5255fc5bd580a6f Mon Sep 17 00:00:00 2001 From: zhangry7777 <37564287+zhangry7777@users.noreply.github.com> Date: Tue, 14 Jan 2025 10:07:47 +0800 Subject: [PATCH 3/4] Update and rename locked.yaml to locked_session.yaml --- .../tasks/observer/{locked.yaml => locked_session.yaml} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename plugins/display/tasks/observer/{locked.yaml => locked_session.yaml} (87%) diff --git a/plugins/display/tasks/observer/locked.yaml b/plugins/display/tasks/observer/locked_session.yaml similarity index 87% rename from plugins/display/tasks/observer/locked.yaml rename to plugins/display/tasks/observer/locked_session.yaml index ed6efd65..84542265 100644 --- a/plugins/display/tasks/observer/locked.yaml +++ b/plugins/display/tasks/observer/locked_session.yaml @@ -1,6 +1,6 @@ -info_en: "[locked]" +info_en: "[locked_session]" info_cn: "[库里被阻塞会话的信息]" -command: obdiag display scene run --scene=observer.locked +command: obdiag display scene run --scene=observer.locked_session task: - version: "[*,4.0.0]" steps: @@ -17,4 +17,4 @@ a.holder_trans_id,a.lock_mode,a.type from oceanbase.__all_virtual_lock_wait_stat a left join oceanbase.__all_virtual_tablet_to_ls b on b.tablet_id=a.tablet_id and a.tenant_id=b.tenant_id and a.ls_id=b.ls_id left join oceanbase.__all_virtual_table c on b.table_id=c.table_id order by c.table_name,a.tenant_id;" - global: true \ No newline at end of file + global: true From 013ff68fc9f9c337bfc19024f8e41e997d94c88b Mon Sep 17 00:00:00 2001 From: zhangry7777 <37564287+zhangry7777@users.noreply.github.com> Date: Tue, 14 Jan 2025 10:08:28 +0800 Subject: [PATCH 4/4] Update and rename trans.yaml to long_transaction.yaml --- .../tasks/observer/{trans.yaml => long_transaction.yaml} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename plugins/display/tasks/observer/{trans.yaml => long_transaction.yaml} (91%) diff --git a/plugins/display/tasks/observer/trans.yaml b/plugins/display/tasks/observer/long_transaction.yaml similarity index 91% rename from plugins/display/tasks/observer/trans.yaml rename to plugins/display/tasks/observer/long_transaction.yaml index 21838b74..892c01e3 100644 --- a/plugins/display/tasks/observer/trans.yaml +++ b/plugins/display/tasks/observer/long_transaction.yaml @@ -1,6 +1,6 @@ -info_en: "[trans]" +info_en: "[long_transaction]" info_cn: "[ob集群的长事务信息]" -command: obdiag display scene run --scene=observer.trans --env wait_time= waittime(s) +command: obdiag display scene run --scene=observer.long_transaction --env wait_time= waittime(s) task: - version: "[*,4.0.0]" steps: @@ -17,4 +17,4 @@ and part_trans_action > 2 then 'XA_hang' when b.trans_id is null and part_trans when b.trans_id is not null then 'normal_XA_trans' when b.trans_id is null then 'normal_long_trans' end as 'trans_type_info',a.participants from oceanbase.__all_virtual_trans_stat a left join oceanbase.__all_virtual_global_transaction b on a.tenant_id = b.tenant_id and a.trans_id = b.trans_id where timestampdiff(second,date_format(ctx_create_time,'%Y-%m-%d %T'),now()) > #{wait_time} and a.is_exiting<>1 order by a.ctx_create_time limit 50;" - global: true \ No newline at end of file + global: true