From 366dccd187049cf539d708dfb5e4bb59f2d985ba Mon Sep 17 00:00:00 2001 From: "jingshun.tq" <35712518+Teingi@users.noreply.github.com> Date: Thu, 5 Dec 2024 15:54:10 +0800 Subject: [PATCH 1/6] Rename Dockerfile to DockerFile --- build/{Dockerfile => DockerFile} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename build/{Dockerfile => DockerFile} (93%) diff --git a/build/Dockerfile b/build/DockerFile similarity index 93% rename from build/Dockerfile rename to build/DockerFile index 60898428..4a0d7c9f 100644 --- a/build/Dockerfile +++ b/build/DockerFile @@ -8,4 +8,4 @@ RUN /opt/miniconda3/bin/conda init RUN /opt/miniconda3/bin/conda create --name obdiag python=3.8 -y RUN source /opt/miniconda3/bin/activate obdiag RUN /opt/miniconda3/envs/obdiag/bin/python3.8 -m pip install --upgrade pip setuptools wheel -RUN yum install -y gcc gcc-c++ make \ No newline at end of file +RUN yum install -y gcc gcc-c++ make From 1bb8382969c4b88b277d8b6c837e1333867ab813 Mon Sep 17 00:00:00 2001 From: Teingi Date: Thu, 2 Jan 2025 19:47:59 +0800 Subject: [PATCH 2/6] add storage_method.yaml --- build_update_package.sh | 10 +++ .../tasks/observer/storage_method.yaml | 63 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 build_update_package.sh create mode 100644 plugins/display/tasks/observer/storage_method.yaml diff --git a/build_update_package.sh b/build_update_package.sh new file mode 100644 index 00000000..75dc6cef --- /dev/null +++ b/build_update_package.sh @@ -0,0 +1,10 @@ +#!/bin/bash +echo "Start packaging plugins" +cd plugins && tar -cvf data.tar * +a=$(sha256sum data.tar | awk '{print $1}') +echo "obdiag_version: \"3.0.0\"" > version.yaml +echo "remote_tar_sha: \"$a\"" >> version.yaml +cp -rf version.yaml ../ +cp -rf data.tar ../ +rm -rf version.yaml +rm -rf data.tar \ No newline at end of file diff --git a/plugins/display/tasks/observer/storage_method.yaml b/plugins/display/tasks/observer/storage_method.yaml new file mode 100644 index 00000000..55c13565 --- /dev/null +++ b/plugins/display/tasks/observer/storage_method.yaml @@ -0,0 +1,63 @@ +info_en: "[query table/index uses storage method]" +info_cn: "[查看表/索引是行存/列存/行列冗余的存储方式]" +command: obdiag display scene run --scene=observer.storage_method --env tenant_name=test --env database_name=test +task: + - version: "[4.3.0.0, *]" + steps: + - type: sql + sql: " SELECT + tenant_name, + database_name, + table_name, + table_id, + data_table_id, + table_type, + storage_type, + main_table_name + FROM ( + select + t1.tenant_name, + t2.database_name, + case + when t2.table_type = 'user table' then t2.table_name + when t2.table_type = 'index' then t2.index_name + end as table_name, + t2.table_id, + t2.data_table_id, + t2.table_type, + case + when t2.table_type = 'user table' then + case + when sum(case when cg.column_group_type = 3 then 1 else 0 end) > 0 + and sum(case when cg.column_group_type = 1 then 1 else 0 end) = 0 then 'column storage table' + when sum(case when cg.column_group_type = 3 then 1 else 0 end) > 0 + and sum(case when cg.column_group_type = 1 then 1 else 0 end) > 0 then 'row-column storage table' + else 'row storage table' + end + when t2.table_type = 'index' then + case + when sum(case when cg.column_group_type = 3 then 1 else 0 end) > 0 + and sum(case when cg.column_group_type = 1 then 1 else 0 end) = 0 then 'column storage index' + when sum(case when cg.column_group_type = 3 then 1 else 0 end) > 0 + and sum(case when cg.column_group_type = 1 then 1 else 0 end) > 0 then 'row-column storage index' + else 'row storage index' + end + end as storage_type, + coalesce(t3.table_name, null) as main_table_name + from + oceanbase.__all_virtual_column_group cg + join + oceanbase.dba_ob_tenants t1 on cg.tenant_id = t1.tenant_id + join + oceanbase.cdb_ob_table_locations t2 on cg.tenant_id = t2.tenant_id and cg.table_id = t2.table_id + left join + oceanbase.cdb_ob_table_locations t3 on t2.data_table_id = t3.table_id + where + t1.tenant_name = '#{tenant_name}' + and t2.database_name = '#{database_name}' + and t2.table_type in ('user table', 'index') + group by + t1.tenant_name, t2.database_name, t2.table_name, t2.table_id, t2.data_table_id, t2.table_type, main_table_name + ) + ORDER BY tenant_name, database_name, table_name;" + global: true From c1778d9dbda3edca2d1d3a4d513130b174defce1 Mon Sep 17 00:00:00 2001 From: Teingi Date: Thu, 2 Jan 2025 19:48:32 +0800 Subject: [PATCH 3/6] add storage_method.yaml --- build_update_package.sh | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 build_update_package.sh diff --git a/build_update_package.sh b/build_update_package.sh deleted file mode 100644 index 75dc6cef..00000000 --- a/build_update_package.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -echo "Start packaging plugins" -cd plugins && tar -cvf data.tar * -a=$(sha256sum data.tar | awk '{print $1}') -echo "obdiag_version: \"3.0.0\"" > version.yaml -echo "remote_tar_sha: \"$a\"" >> version.yaml -cp -rf version.yaml ../ -cp -rf data.tar ../ -rm -rf version.yaml -rm -rf data.tar \ No newline at end of file From 3bb979419c59032305809eeebba9db8715a38eb4 Mon Sep 17 00:00:00 2001 From: Teingi Date: Tue, 14 Jan 2025 15:14:06 +0800 Subject: [PATCH 4/6] display function optimization --- .../display/tasks/observer/inner_table.yaml | 9 +++ .../display/tasks/observer/lock_table.yaml | 19 ++++++ .../display/tasks/observer/lockholder.yaml | 27 ++++---- .../tasks/observer/long_transaction.yaml | 4 +- plugins/display/tasks/observer/mermory.yaml | 49 +++++++++++++ .../display/tasks/observer/processlist.yaml | 3 +- .../tasks/observer/processlist_stat.yaml | 25 +++++++ plugins/display/tasks/observer/rs.yaml | 4 +- .../display/tasks/observer/server_info.yaml | 14 ++-- plugins/display/tasks/observer/tabndv.yaml | 68 +++++++++---------- 10 files changed, 162 insertions(+), 60 deletions(-) create mode 100644 plugins/display/tasks/observer/inner_table.yaml create mode 100644 plugins/display/tasks/observer/lock_table.yaml create mode 100644 plugins/display/tasks/observer/mermory.yaml create mode 100644 plugins/display/tasks/observer/processlist_stat.yaml diff --git a/plugins/display/tasks/observer/inner_table.yaml b/plugins/display/tasks/observer/inner_table.yaml new file mode 100644 index 00000000..08b2354c --- /dev/null +++ b/plugins/display/tasks/observer/inner_table.yaml @@ -0,0 +1,9 @@ +info_en: "[inner_table]" +info_cn: "[内部表信息模糊匹配]" +command: obdiag display scene run --scene=observer.inner_table --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 diff --git a/plugins/display/tasks/observer/lock_table.yaml b/plugins/display/tasks/observer/lock_table.yaml new file mode 100644 index 00000000..8ea5d96d --- /dev/null +++ b/plugins/display/tasks/observer/lock_table.yaml @@ -0,0 +1,19 @@ +info_en: "[lock table]" +info_cn: "[某张表上持有锁的信息]" +command: obdiag display scene run --scene=observer.lock_table --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/lockholder.yaml b/plugins/display/tasks/observer/lockholder.yaml index 33f7b0db..13293040 100644 --- a/plugins/display/tasks/observer/lockholder.yaml +++ b/plugins/display/tasks/observer/lockholder.yaml @@ -1,19 +1,20 @@ info_en: "[lock holder info]" info_cn: "[查看锁等待]" -command: obdiag display scene run --scene=observer.lockholder --env db_connect='-h127.0.0.1 -P2881 -utest@test -p****** -Dtest' +command: obdiag display scene run --scene=observer.lockholder task: - - version: "[4.0.0.0, *]" + - version: "[*,4.0.0]" steps: - type: sql - sql: " select /*+ READ_CONSISTENCY(WEAK) query_timeout(100000000)*/ concat(case block - when 0 then 'Holder:' - when 1 then 'Waiter:' - end, op.svr_ip, ':', op.id) as sess, - ol.id1, ol.id2, ol.lmode, ol.request, ol.type, round(ol.ctime/1000/1000,0) ctime, op.info, op.command, if(op.sql_id = '', 'NULL', op.sql_id) sql_id, do.owner, do.object_name - from oceanbase.gv$ob_locks ol, oceanbase.gv$ob_processlist op, oceanbase.dba_objects do, - (select id1, id2, type from oceanbase.gv$ob_locks where type = 'TR' and block = 1) l - where ol.id1 = l.id1 and ol.id2= l.id2 - and ol.trans_id = op.trans_id - and ol.id1 = do.data_object_id - order by id1, id2, ctime desc, block asc;" + 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 diff --git a/plugins/display/tasks/observer/long_transaction.yaml b/plugins/display/tasks/observer/long_transaction.yaml index 892c01e3..99940288 100644 --- a/plugins/display/tasks/observer/long_transaction.yaml +++ b/plugins/display/tasks/observer/long_transaction.yaml @@ -1,6 +1,6 @@ info_en: "[long_transaction]" -info_cn: "[ob集群的长事务信息]" -command: obdiag display scene run --scene=observer.long_transaction --env wait_time= waittime(s) +info_cn: "[集群的长事务信息]" +command: obdiag display scene run --scene=observer.long_transaction --env wait_time=waittime(s) task: - version: "[*,4.0.0]" steps: diff --git a/plugins/display/tasks/observer/mermory.yaml b/plugins/display/tasks/observer/mermory.yaml new file mode 100644 index 00000000..e96c870f --- /dev/null +++ b/plugins/display/tasks/observer/mermory.yaml @@ -0,0 +1,49 @@ +info_en: "[mermory]" +info_cn: "[所有租户的 mermory 信息]" +command: obdiag display scene run --scene=observer.mermory +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/processlist.yaml b/plugins/display/tasks/observer/processlist.yaml index 575bbe02..82ee390a 100644 --- a/plugins/display/tasks/observer/processlist.yaml +++ b/plugins/display/tasks/observer/processlist.yaml @@ -1,5 +1,5 @@ info_en: "[processlist]" -info_cn: "[查看processlist]" +info_cn: "[查看 processlist]" command: obdiag display scene run --scene=observer.processlist --env tenant_name=test task: - version: "[4.0.0.0, *]" @@ -12,4 +12,3 @@ task: - type: sql sql: "select * from oceanbase.__all_virtual_processlist where tenant='#{tenant_name}';" global: true - diff --git a/plugins/display/tasks/observer/processlist_stat.yaml b/plugins/display/tasks/observer/processlist_stat.yaml new file mode 100644 index 00000000..980eea52 --- /dev/null +++ b/plugins/display/tasks/observer/processlist_stat.yaml @@ -0,0 +1,25 @@ +info_en: "[processlist_stat]" +info_cn: "[processlist 实时会话信息汇总]" +command: obdiag display scene run --scene=observer.processlist_stat +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/rs.yaml b/plugins/display/tasks/observer/rs.yaml index 2b3a3fa7..19ec9111 100644 --- a/plugins/display/tasks/observer/rs.yaml +++ b/plugins/display/tasks/observer/rs.yaml @@ -1,5 +1,5 @@ info_en: "[rs]" -info_cn: "[查看rootservice信息]" +info_cn: "[查看 rootservice 信息]" command: obdiag display scene run --scene=observer.rs task: - version: "[4.0.0.0, *]" @@ -17,4 +17,4 @@ task: global: true - type: sql sql: "select * from oceanbase.__all_rootservice_event_history order by 1 desc limit 10;" - global: true \ No newline at end of file + global: true diff --git a/plugins/display/tasks/observer/server_info.yaml b/plugins/display/tasks/observer/server_info.yaml index 2dc13107..24581227 100644 --- a/plugins/display/tasks/observer/server_info.yaml +++ b/plugins/display/tasks/observer/server_info.yaml @@ -2,13 +2,13 @@ info_en: "[server info]" info_cn: "[server 信息展示]" command: obdiag display scene run --scene=observer.server_info task: - - version: "[4.0.0.0, *]" + - version: "[*,*]" steps: - type: sql - sql: "SELECT /*+READ_CONSISTENCY(WEAK), QUERY_TIMEOUT(100000000)*/ zone, svr_ip, with_rootserver rs, case when start_service_time = 0 then NULL else CAST(usec_to_time(start_service_time) AS DATETIME) end start_service_time, case when stop_time = 0 then NULL else CAST(usec_to_time(stop_time) AS DATETIME) end stop_time, case when last_offline_time = 0 then NULL else CAST(usec_to_time(last_offline_time) AS DATETIME) end last_offline_time, status, SUBSTR(build_version, 1, INSTR(build_version, '-') - 1) build_version FROM oceanbase.__all_server order by zone, svr_ip;" - global: true - - version: "[3.0.0.0, 4.0.0.0]" - steps: - - type: sql - sql: "SELECT /*+READ_CONSISTENCY(WEAK), QUERY_TIMEOUT(100000000)*/ zone, svr_ip, with_rootserver rs, case when start_service_time = 0 then NULL else CAST(usec_to_time(start_service_time) AS DATETIME) end start_service_time, case when stop_time = 0 then NULL else CAST(usec_to_time(stop_time) AS DATETIME) end stop_time, case when last_offline_time = 0 then NULL else CAST(usec_to_time(last_offline_time) AS DATETIME) end last_offline_time, status, SUBSTR(build_version, 1, INSTR(build_version, '-') - 1) build_version FROM oceanbase.__all_server order by zone, svr_ip;" + 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 diff --git a/plugins/display/tasks/observer/tabndv.yaml b/plugins/display/tasks/observer/tabndv.yaml index 75cb4fa4..543f433d 100644 --- a/plugins/display/tasks/observer/tabndv.yaml +++ b/plugins/display/tasks/observer/tabndv.yaml @@ -1,48 +1,48 @@ info_en: "[tabndv]" -info_cn: "[查询表ndv信息]" +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;" + 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 + 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 + 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 From 5e00e0ff2e9d4c4a22a8a064d6713be746516c1f Mon Sep 17 00:00:00 2001 From: Teingi Date: Tue, 14 Jan 2025 15:16:39 +0800 Subject: [PATCH 5/6] display function optimization --- plugins/display/tasks/observer/lock.yaml | 19 ------- .../tasks/observer/locked_session.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/status.yaml | 14 ------ 7 files changed, 155 deletions(-) delete mode 100644 plugins/display/tasks/observer/lock.yaml delete mode 100644 plugins/display/tasks/observer/locked_session.yaml delete mode 100644 plugins/display/tasks/observer/locktab.yaml delete mode 100644 plugins/display/tasks/observer/lvss.yaml delete mode 100644 plugins/display/tasks/observer/mem.yaml delete mode 100644 plugins/display/tasks/observer/obtab.yaml delete mode 100644 plugins/display/tasks/observer/status.yaml diff --git a/plugins/display/tasks/observer/lock.yaml b/plugins/display/tasks/observer/lock.yaml deleted file mode 100644 index 01dd8eec..00000000 --- a/plugins/display/tasks/observer/lock.yaml +++ /dev/null @@ -1,19 +0,0 @@ -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_session.yaml b/plugins/display/tasks/observer/locked_session.yaml deleted file mode 100644 index 84542265..00000000 --- a/plugins/display/tasks/observer/locked_session.yaml +++ /dev/null @@ -1,20 +0,0 @@ -info_en: "[locked_session]" -info_cn: "[库里被阻塞会话的信息]" -command: obdiag display scene run --scene=observer.locked_session -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 diff --git a/plugins/display/tasks/observer/locktab.yaml b/plugins/display/tasks/observer/locktab.yaml deleted file mode 100644 index 785a7a10..00000000 --- a/plugins/display/tasks/observer/locktab.yaml +++ /dev/null @@ -1,19 +0,0 @@ -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 deleted file mode 100644 index 040716da..00000000 --- a/plugins/display/tasks/observer/lvss.yaml +++ /dev/null @@ -1,25 +0,0 @@ -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 deleted file mode 100644 index c2cfb02a..00000000 --- a/plugins/display/tasks/observer/mem.yaml +++ /dev/null @@ -1,49 +0,0 @@ -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 deleted file mode 100644 index 45255dc6..00000000 --- a/plugins/display/tasks/observer/obtab.yaml +++ /dev/null @@ -1,9 +0,0 @@ -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/status.yaml b/plugins/display/tasks/observer/status.yaml deleted file mode 100644 index ee21dfc6..00000000 --- a/plugins/display/tasks/observer/status.yaml +++ /dev/null @@ -1,14 +0,0 @@ -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 From 213e569214545486c3ece923acecfa4d70cd4077 Mon Sep 17 00:00:00 2001 From: Teingi Date: Tue, 14 Jan 2025 19:05:07 +0800 Subject: [PATCH 6/6] Update the obdiag development version to 3.1.0 --- build_update_package.sh | 2 +- rpm/oceanbase-diagnostic-tool.spec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build_update_package.sh b/build_update_package.sh index 75dc6cef..5f892855 100644 --- a/build_update_package.sh +++ b/build_update_package.sh @@ -2,7 +2,7 @@ echo "Start packaging plugins" cd plugins && tar -cvf data.tar * a=$(sha256sum data.tar | awk '{print $1}') -echo "obdiag_version: \"3.0.0\"" > version.yaml +echo "obdiag_version: \"3.1.0\"" > version.yaml echo "remote_tar_sha: \"$a\"" >> version.yaml cp -rf version.yaml ../ cp -rf data.tar ../ diff --git a/rpm/oceanbase-diagnostic-tool.spec b/rpm/oceanbase-diagnostic-tool.spec index a55f87c1..4176d50e 100644 --- a/rpm/oceanbase-diagnostic-tool.spec +++ b/rpm/oceanbase-diagnostic-tool.spec @@ -1,5 +1,5 @@ Name: oceanbase-diagnostic-tool -Version:3.0.0 +Version:3.1.0 Release: %(echo $RELEASE)%{?dist} Summary: oceanbase diagnostic tool program Group: Development/Tools