obdiag 收集trace_id 信息提示nodatabase No database selected'

【 使用环境 】生产环境 or 测试环境 生产
【 OB or 其他组件 】 4.1
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

obdiag 收集trace_id 信息提示nodatabase No database selected’

obdiag version

OceanBase Diagnostic Tool: 1.6.1

BUILD_TIME: Mar 05 2024 19:27:02OURCE

复现步骤:

mysql -h10.241.28.194 -P2883 -uroot@sys#obclu_test_ncore2 -p -A -c

MySQL [oceanbase]> select t.tenant_name,

-> round(sum(t2.data_size)/1024/1024/1024,2) as data_size_gb,

-> round(sum(t2.required_size)/1024/1024/1024,2) as required_size_gb

-> from dba_ob_tenants t,cdb_ob_table_locations t1,cdb_ob_tablet_replicas t2

-> where t.tenant_id=t1.tenant_id

-> and t1.svr_ip=t2.svr_ip

-> and t1.tenant_id=t2.tenant_id

-> and t1.ls_id=t2.ls_id

-> and t1.tablet_id=t2.tablet_id

-> -- and t1.role='leader'

-> group by t.tenant_name

-> order by 3 desc;

±------------±-------------±-----------------+

| tenant_name | data_size_gb | required_size_gb |

±------------±-------------±-----------------+

| dps_dp_st2 | 339.36 | 394.78 |

| core_dm2_st | 175.85 | 199.46 |

| META$1006 | 0.02 | 0.53 |

±------------±-------------±-----------------+

select query_sql,trace_id from oceanbase.GV$OB_SQL_AUDIT where query_sql like ‘%t.tenant_id=t1.tenant_id%’ order by REQUEST_TIME desc limit 5;

| query_sql | trace_id |

±-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------±----------------------------------+

| select t.tenant_name,

round(sum(t2.data_size)/1024/1024/1024,2) as data_size_gb,

round(sum(t2.required_size)/1024/1024/1024,2) as required_size_gb

from dba_ob_tenants t,cdb_ob_table_locations t1,cdb_ob_tablet_replicas t2

where t.tenant_id=t1.tenant_id

and t1.svr_ip=t2.svr_ip

and t1.tenant_id=t2.tenant_id

and t1.ls_id=t2.ls_id

and t1.tablet_id=t2.tablet_id

– and t1.role=‘leader’

group by t.tenant_name

order by 3 desc | YB420AF11CC3-00061F11480A7CE9-0-0 |

| select t.tenant_name,

round(sum(t2.data_size)/1024/1024/1024,2) as data_size_gb,

round(sum(t2.required_size)/1024/1024/1024,2) as required_size_gb

from dba_ob_tenants t,cdb_ob_table_locations t1,cdb_ob_tablet_replicas t2

where t.tenant_id=t1.tenant_id

and t1.svr_ip=t2.svr_ip

and t1.tenant_id=t2.tenant_id

and t1.ls_id=t2.ls_id

and t1.tablet_id=t2.tablet_id

– and t1.role=‘leader’

group by t.tenant_name

order by 3 desc | YB420AF11CC2-00061F102C9FBAE0-0-0 |

trace_id=YB420AF11CC2-00061F102C9FBAE0-0-0

obdiag gather plan_monitor --trace_id YB420AF11CC2-00061F102C9FBAE0-0-0

[cradmin@zhobtest08 ~]$ obdiag gather plan_monitor --trace_id YB420AF11CC2-00061F102C9FBAE0-0-0

2024-08-23 09:58:48,506 [INFO] Detected mySQL mode successful, Database version :OceanBase 4.2.1.7 (r107030032024062709-7d62d41478c39e4512cd694d1019a69dcc7efb63) (Built Jun 27 2024 10:10:49)

2024-08-23 09:58:48,507 [INFO] Use gather_pack_20240823095845 as pack dir.

2024-08-23 09:58:48,507 [INFO] [cs resource path] : /usr/local/oceanbase-diagnostic-tool/resources

2024-08-23 09:58:48,511 [INFO] [sql plan monitor report task] start

2024-08-23 09:58:53,615 [INFO] TraceID : YB420AF11CC2-00061F102C9FBAE0-0-0

2024-08-23 09:58:53,615 [INFO] SQL : select t.tenant_name,

round(sum(t2.data_size)/1024/1024/1024,2) as data_size_gb,

round(sum(t2.required_size)/1024/1024/1024,2) as required_size_gb

from dba_ob_tenants t,cdb_ob_table_locations t1,cdb_ob_tablet_replicas t2

where t.tenant_id=t1.tenant_id

and t1.svr_ip=t2.svr_ip

and t1.tenant_id=t2.tenant_id

and t1.ls_id=t2.ls_id

and t1.tablet_id=t2.tablet_id

– and t1.role=‘leader’

group by t.tenant_name

order by 3 desc

2024-08-23 09:58:53,615 [INFO] SVR_IP : 10.241.28.194

2024-08-23 09:58:53,615 [INFO] SVR_PORT : 2882

2024-08-23 09:58:53,615 [INFO] DB:

2024-08-23 09:58:53,616 [INFO] PLAN_ID: 0

2024-08-23 09:58:53,616 [INFO] TENANT_ID: 1

2024-08-23 09:58:53,616 [INFO] [sql plan monitor report task] report header

2024-08-23 09:58:53,617 [INFO] report header complete

2024-08-23 09:58:53,617 [INFO] [sql plan monitor report task] report sql_audit

2024-08-23 09:58:58,551 [INFO] report sql_audit_result to file start …

2024-08-23 09:58:58,552 [INFO] report sql_audit_result end

2024-08-23 09:58:58,552 [INFO] [sql plan monitor report task] report plan explain

2024-08-23 09:58:58,555 [ERROR] plan explain> explain select t.tenant_name,

round(sum(t2.data_size)/1024/1024/1024,2) as data_size_gb,

round(sum(t2.required_size)/1024/1024/1024,2) as required_size_gb

from dba_ob_tenants t,cdb_ob_table_locations t1,cdb_ob_tablet_replicas t2

where t.tenant_id=t1.tenant_id

and t1.svr_ip=t2.svr_ip

and t1.tenant_id=t2.tenant_id

and t1.ls_id=t2.ls_id

and t1.tablet_id=t2.tablet_id

– and t1.role=‘leader’

group by t.tenant_name

order by 3 desc

2024-08-23 09:58:58,555 [ERROR] OperationalError(1046, ‘No database selected’) 《 - 报错信息如上。

2024-08-23 09:58:58,555 [INFO] [sql plan monitor report task] report plan cache

Gather Sql Plan Monitor Summary:

±----------±----------±-------±---------------------------+

| Cluster | Status | Time | PackPath |

+===========+===========+========+============================+

| obcluster | Completed | 32 s | gather_pack_20240823095845 |

±----------±----------±-------±---------------------------+

If you want to view detailed obdiag logs, please run:’ obdiag display-trace --trace_id f2f92dad-0dc4-374f-90e5-f0180179f0e4 ’

《 - 报错信息如上。

如何调整SQL ,使得obdiag 可以正常运行;

gather_pack_20240823095845_2.zip (125.7 KB)

再向您确认几个问题:

  1. 您在执行 obdiag 命令时是否指定了具体的数据库名称
  2. 您能否提供执行 SQL 语句时所使用的租户的具体信息
  3. 在执行 SQL 之前是否有选择对应的数据库或者租户
  4. 您尝试收集 trace_id 信息的 SQL 语句是否在特定的数据库或租户下执行成功过

如何指定,请给出方法?
我的方法如下:
obdiag gather plan_monitor --trace_id YB420AF11CC2-00061F102C9FBAE0-0-0

执行的sql表名前带上数据库试试呢

参看博客:OceanBase 社区OceanBase 社区

obdiag gather plan_monitor --trace_id YB420BA2D99B-0005EBBFC45D5A00-0-0 --env "{db_connect='-hxx -Pxx -uxx -pxx -Dxx'}"

env用于传递业务租户的信息,如果不传递的话,默认认为你的库表是建在sys租户下,所以会出现找不到数据库的情况

再向您确认几个问题:

  1. 您在执行 obdiag 命令时是否使用了 -d 或 --database 参数来指定数据库
  2. 您能否提供执行 SQL 语句时所使用的租户 ID
  3. 在执行 SQL 之前是否有使用 use database_name; 选择对应的数据库
  4. 您尝试收集 trace_id 信息的 SQL 语句是否在特定的数据库或租户下执行成功过

另外发现的obdiag 版本挺老的,升级到新版本吧2.3.0

pxx 是否有暴露密码的风险?

使用 obdiag 工具时通过 --env 参数指定连接信息确实可能会暴露敏感信息,比如密码。为了确保安全性,建议采用以下几种方式之一来避免密码暴露风险:

  1. 使用环境变量:您可以将密码存储在一个环境变量中,并在命令行中引用这个环境变量。例如,您可以先设置一个环境变量 OBDIAG_PWD,然后在 obdiag 命令中使用 $OBDIAG_PWD 来引用它。这种方式可以避免直接在命令行中显示密码。

  2. 使用配置文件:您可以创建一个配置文件来保存连接信息,包括密码,并在 obdiag 命令中引用该配置文件。例如,您可以创建一个名为 obdiag.conf 的文件,内容如下:

    [database]
    host=xx
    port=xx
    user=xx
    password=xx
    database=xx
    

    然后在 obdiag 命令中使用 -c--config 参数来指定配置文件:

    obdiag gather plan_monitor --trace_id YB420BA2D99B-0005EBBFC45D5A00-0-0 --config obdiag.conf
    
  3. 使用密钥管理工具:如果您使用的是支持密钥管理工具(如 keychainsecrets 等)的操作系统,可以考虑将密码存储在这些工具中,并在 obdiag 命令中通过相应的命令或环境变量引用。

综上所述,为了安全起见,建议您不要直接在命令行中明文传递密码。您可以选择上述任意一种方式来避免密码暴露风险。如果您已经使用了明文密码的方式执行了 obdiag 命令,建议您检查命令历史记录,并确保没有其他人能够访问到这些敏感信息。

具体信息可参考以下文档:

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

问题1:
[cradmin@zhobtest08 ~]$ obdiag gather plan_monitor --trace_id YB420BA2D99B-0005EBBFC45D5A00-0-0 --config obdiag.conf

usage: obdiag [-h] {version,display-trace,config,gather,analyze,check,rca,update} …
obdiag: error: unrecognized arguments: --config obdiag.conf

问题2:
密码 包含12@% 等特殊字符。应该如何应用,我测试了mysql 模式可以登陆。
但是使用如下方法引用,

obdiag gather plan_monitor --trace_id YB420BA2D99B-0005EBBFC45D5A00-0-0 --env “{db_connect=’-h10.241.28.1 -P2881 -uroot@sys -p’12@%’ -Doceanbase’}”

报错
'@‘xxx.xxx.xxx.xxx’ (using password: YES)")
2024-08-23 14:58:38,276 [ERROR] connect OB: 10.241.28.1:2881 with user root@sys failed, error:(1045, “Access denied for user ‘root’@‘xxx.xxx.xxx.xxx’ (using password: YES)”)

-p后的引号去掉也报错么
conf文件路径写完整的物理路径试试

去掉‘ 可以,一个新问题
见附件
do.txt (9.8 KB)

抓到了内部SQL,这个问题在obdiag 2.3.0 上修复了,你的版本应该还没升级到obdiag 2.3.0吧

obdiag_gather_pack_20240905150047_2.zip (1.1 MB)
请看这条SQL 慢在哪里,有无优化建议