v 7.1.1 的问题,升级 7.1.2 未能解决 TiDB Dashboard SQL 页面异常问题

【 TiDB 使用环境】生产环境
【 TiDB 版本】v7.1.2
【复现路径】
【遇到的问题:问题现象及影响】
TiDB Dashboard SQL 语句分析和慢查询页面报错

你看看日志呢

[2023/10/30 13:41:44.032 +08:00] [WARN] [error.go:89] [“Error when handling request”] [uri=/dashboard/api/statements/stmt_types] [remoteAddr=:43876] [errorFullText=]
[2023/10/30 13:41:44.037 +08:00] [WARN] [error.go:89] [“Error when handling request”] [uri=“/dashboard/api/statements/list?begin_time=1698644203&end_time=1698644504&fields=digest_text%2Csum_latency%2Cavg_latency%2Cmax_latency%2Cmin_latency%2Cexec_count%2Cplan_count&text=”] [remoteAddr=:43870] [errorFullText=]

刷新页面 pd 会有这类日志

我记得之前有个人好像是重启pd解决的。。。

重启/迁移 pd 都没效果
升级到 7.1.2 也没用

你把慢日志删除后重启tidb

你看下你tidb的主机目录下slow-query目录下日志多吗?多的话删点慢sql日志


直接删除这些日志文件?

配置保留30天,目前看每台有70+份
tidb-deploy/tidb-4000/log/tidb_slow_query*.log

这么多慢日志啊。。。。你要不调整下慢日志的阈值?或者你们不对慢sql进行优化的吗?先把历史的都删掉,dashboard应该不会再报错了

清理掉那些慢查询日志文件,重启了 tidb-server,还是一样报错

清掉了慢日志文件了,重启了 tidb-server,也一样

根据你提供的这个堆栈,我翻了下代码。感觉非常迷惑。
以我粗浅的经验来说,这个堆栈最上面的地方就是空指针引用到的对象。

https://github.com/pingcap/tidb/blob/v7.1.1/store/copr/coprocessor.go#L1098

这个1098行的报错,让我觉得这个worker对象因为某种原因为null。感觉这个结论非常不靠谱。 :joy:菜了菜了。

select * from INFORMATION_SCHEMA.CLUSTER_STATEMENTS_SUMMARY_HISTORY limit 1;
这个sql如果查询固定报错的话,建议直接去github上提个bug。

不过内容除了报错的堆栈以外,建议也提供一下执行sql的现场信息,更好排查。

https://docs.pingcap.com/zh/tidb/stable/sql-plan-replayer#plan-replayer-导出示例

PLAN REPLAYER DUMP EXPLAIN select * from INFORMATION_SCHEMA.CLUSTER_STATEMENTS_SUMMARY_HISTORY limit 1;
执行上述语句,然后去每个tidb上去找一下返回的zip文件的名称。把这个zip文件也上传到issue里面去。这样更方面pingcap的开发排查问题。
zip里面不会包含用户数据的。你不放心可以打开自己看的。

replayer_lpj0ZXzLWwOSvnGNp9b-mQ==_1698649890339077634.zip|attachment (19.6 KB)

看起来别人有提过一个 issue 了
panic:runtime error: invalid memory address or nil pointer · Issue #47531 · pingcap/tidb (github.com)

1 个赞

感觉像数据源有问题,可以试一下把监控模块prometheus和grafana缩掉重新安装试试

报错写的invalid memory address,要不从内存方向看一下呢?
查一下系统内存,再查一下 tidb_mem_quota_query内存
再检查一下 tidb_enable_prepared_plan_cache看看 Prepared Plan Cache是否是开启状态,默认是开启的,先关了,重启一下试试,排查一下原因

试了下,没用。。

tidb_mem_quota_query 目前是默认1G,但我试了下改成32G还是一样报错
tidb_enable_prepared_plan_cache 关掉,也是一样报错,重启 tidb-server 后 tidb_enable_prepared_plan_cache 值是被重置回去了

应该还要重启PD吧?