自动收集统计信息状态开着,但是显示运行次数为null

【 使用环境 】
生产环境

【 OB or obproxy 】
ob

【 使用版本 】
4.2.1.5

【问题描述】
插入数据后,通过第三方开发工具看到行数还是0,实际是几千万

通过查看job看到自动采集统计信息功能是开着的,状态是 schedulerd,但是运行次数是null,想了解为啥没有运行次数,是没采集完吗

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

2 个赞

根据您的描述,您的问题可能与统计信息的收集状态有关。当自动收集统计信息的状态为schedulerd但运行次数为null时,通常意味着统计信息收集任务已经调度但未被执行。此外,您提到插入数据后通过第三方工具看到行数为0,但实际上行数为几千万,这表明统计信息未正确反映表的实际数据量。

推荐使用 obdiag 工具进行日志采集,以便进一步分析问题的具体原因。

日志采集场景: 统计信息收集问题

日志采集命令:

obdiag gather scene run --scene=observer.stats

该命令将收集与统计信息收集相关的日志,包括调度和执行日志,以便我们能够分析为什么统计信息收集任务未被执行。

提供更多详细信息:

为了更好地帮助您解决问题,请提供以下信息:

  1. 您的OceanBase集群的部署方式(例如:OCP、OBD或手动部署)。
  2. 统计信息收集任务的调度配置,例如:CREATE STATISTICSALTER SYSTEM 语句。
  3. 插入数据的操作过程,包括使用的SQL语句和插入数据的时间点。
  4. 第三方工具查看行数的具体操作步骤,以及工具的名称和版本。
  5. 是否有其他相关错误日志或警告信息。

请执行上述命令并将生成的日志文件提供给我们,以便我们进一步分析并帮助您解决问题。

附上敏捷诊断工具 obdiag 使用帮助链接

2 个赞

@论坛小助手根据现有的日志能分析吗?比如需要过滤那些关键字

1 个赞

根据现有文档片段,可以通过 obdiag 工具对日志进行分析。您可以使用 obdiag analyze log 命令来分析日志,并通过 --since 参数指定时间范围,或者使用 --files 参数指定具体的日志文件。此外,您可以使用 --keywords 参数来过滤特定的关键字。

例如,如果您想分析最近一小时的日志并过滤关键字 ‘error’,可以使用以下命令:

obdiag analyze log --since 1h --keywords error

如果您想分析指定的日志文件并过滤关键字 ‘warning’,可以使用以下命令:

obdiag analyze log --files observer.log.20230831142211247 --keywords warning

更多信息请查看:

  1. 在线分析最近一小时的日志,该指令执行的时候会从远程主机上拉取最近一小时的日志进行分析,诊断出出现过的错误
  2. 在线分析最近 30 分钟的日志,该指令执行的时候会从远程主机上拉取最近 30 分钟的日志进行分析,诊断出出现过的错误
  3. 离线分析指定的日志文件
  4. 诊断工具命令组
1 个赞

obdiag gather scene run --scene=observer.stats 这个命令是需要在没给ob节点上运行吗还是只在其中一个 ob节点运行

1 个赞

并且客户环境里没有这个工具,安装比较麻烦,有没有手工分析的方法,只能人工分析

1 个赞

666

666

一般展示表的行数数据来源于统计信息,可以先收集一波信息:
1、 查看表的统计信息
SELECT * FROM oceanbase.DBA_TAB_STATISTICS WHERE TABLE_NAME = ‘your_table_name’;
关注NUM_ROWS–行数 和 STALE_STATS–统计信息是否过时
2、租户统计信息历史任务信息
SELECT * FROM oceanbase.DBA_OB_TASK_OPT_STAT_GATHER_HISTORY WHERE TENANT_ID = xxxx;

1 个赞

我目前的困惑点是,自动采集统计信息为什么没执行成功。

1 个赞

先查一下这个信息 看看调度是否有问题-- MySQL业务租户,查询为空则说明有租户调度异常
SELECT *
FROM oceanbase.dba_ob_task_opt_stat_gather_history
WHERE start_time > date_sub(now(), interval 1 day)
AND TYPE = ‘AUTO GATHER’;

1 个赞

1 个赞

学习一下大佬们的经验

学习

学习学习

内容看是昨天晚上10点成功触发了自动采集,但是为什么从dba_scheduler_jobs 看 run_count 为 null

SELECT job_name,
job_action,
start_date,
last_start_date,
next_run_date,
enabled
FROM oceanbase.dba_scheduler_jobs
WHERE job_name IN ( ‘MONDAY_WINDOW’, ‘TUESDAY_WINDOW’, ‘WEDNESDAY_WINDOW’,
‘THURSDAY_WINDOW’,
‘FRIDAY_WINDOW’, ‘SATURDAY_WINDOW’, ‘SUNDAY_WINDOW’ );


这个结果是通过下面SQL获得的:
select job_name,job_type,start_date,repeat_interval,end_date,enabled,state,run_count from oceanbase.dba_scheduler_jobs where job_name like ‘%window%’;

job_action字段是必须的吗?

学习了

学习到了