问题:数据库运行一年发现truncate table 变慢
OceanBase版本:5.7.25-OceanBase_CE-v4.2.1.7
问题:__all_table_history表的truncate记录没有自动清理,现在都600万了,单表15万, ;
参数 schema_history_expire_time =7d, schema_history_recycle_interval=10m。现在导致truncate偶发性卡住导致10分钟超时。请问这个怎么解决(清理)?
七天之外的数据 没有清理么?__all_table_history 这个表的数据 按照时间降序排序 limit20 查出来看看
是的,通过 select COUNT(1),MIN(gmt_create) from oceanbase.__all_table_history WHERE TABLE_NAME=‘xxx’ 查询,单表有十几万,最小日期为oceanbase重新部署时的日期2024-08
这个表的数据 你查一下 查出来 截个图看看
用诊断工具obdiag拿回来巡检报告先看下
obdiag check run
https://www.oceanbase.com/docs/common-obdiag-cn-1000000002200479
感觉这个超时和 history 表的记录有没有清理没有直接关系,可能要通过日志看下是什么原因导致的哪个超时时间超时了?
已经运维巡检了,暂时未发现找到对应异常日志
超时报错应该有日志吧?
是个已知问题 421bp10之后应该就不会变慢了 暂时规避的方法是不要频繁使用truncate删除数据 目前解决办法 要么重建表,drop table之后create table,table history就可以正常清理,要么_parallel_ddl_control里把并行truncate关掉。
会话设置的10分钟超时,应用层会出现The last packet successfully received from the server was 599,756 milliseconds ago. The last packet sent successfully to the server was 599,755 milliseconds ago. 查看会话偶尔会发现多个truncate执行时间超长约7m。
目前也建议升级 可以升级到ob425 是长期支持的版本
谢谢,测试了drop table之后create table,table history还没有清理;
升级到5.7.25-OceanBase_CE-v4.2.1.10,这个表数据还没有清理,执行效率有提升。
后续准备升级到ob425,再验证一下。
应该还没有来的及清理呢 明天在观察看看 是否会清理
好的,我这边明天再观察一下
看了一下升级到5.7.25-OceanBase_CE-v4.2.1.10,今天这个表数据还没有清理。
我们这边还部署了一个4.3版本的,这个表好像一直也没有清理。
看了一下源码查了一下 rootservice.log |grep ob_schema_history_recycler,发现没有相关日志。
请问这个表正常会清理吗?或者哪里可以看到这个任务的状态,或者运行日志?
删除表以后 会按照时间重新计算 你设置的schema_history_expire_time是七天 目前这个版本至少是两天 你可以设置两天 后面在观察看看 升级后解的是schema刷新不受存量table history的影响 就是会提升性能
这个语句可以查看schema回收的调度 后面可以通过这个查看
select * from __all_rootservice_event_history where event like “%recycle%” and value1 = {租户id} order by gmt_create desc limit 1;
查了一下select * from __all_rootservice_event_history where event like “%recycle%”,没有数据。
找到一个事件表oceanbase.GV$SYSTEM_EVENT,显示:latch: obcdc progress recycle lock wait
后面观察一下吧 没有清理 没有数据正常 后面等到时间了观察看看 如果再有问题 可以重开帖子 在交流