小哲豆腐花
#1
【 使用环境 】生产环境
【 OB or 其他组件 】ob
【 使用版本 】4.2.1.5
【问题描述】ALTER SYSTEM SET recyclebin_object_expire_time = ‘550d’;开启自动清理回收站并指定550d后,通过show recyclebin还是能够看到最早的object;但是手工下purge table命令时会提示该对象已经不存在于回收站。
【复现路径】
通过ocp调整回收站过期时间:
通过show recyclebin查看回收站内对象:
通过purge table命令删除指定object:
针对这个情况,是说视图有一定的延迟更新?或者说统计信息未变更?
【附件及日志】
Giant
#3
–清理表。–切回到表被删除前的数据库
PURGE TABLE object_name; --确定是这个表备删除前的 库执型的 命令吧
–只有root用户才能执行操作
PURGE RECYCLEBIN;
小哲豆腐花
#4
1、这个purge table执行时所在的数据库不能确认是否为删除表前的数据库。是有这个要求吗?
看官方文档没这个说明。
2、由于该数据库一直使用不规范,且回收站自开启后一直未清理过,已经运行558天,当前已经有24w行记录,且所占磁盘有1.5T,所以不敢执行purge recyclebin;担心造成io飙升影响业务访问。
Giant
#5
第一个疑问: 您可以手工删除个, 然后切换个库 测试下。
- 将参数 recyclebin_object_expire_time 一天一天减少或者按照一定的天数 减少 ,然系统自己删吧。 监控下 IO 看下
好像需要到 table 被删除前的 database 里去 purge 吧?如果不加 database_name 就可以跨库去删其他库里的东西,是比较容易误操作的。而且如果要用 original_name 去 purge 和 flashback ,估计就彻底乱成一锅粥了。
如果已经赋过操作其他库里对象的权限,也可以考虑改成下面这种写法,明确下你删的东西所在的库是正确的:
purge table origin_db_name.object_name;
just like:
recyclebin_object_expire_time 这个我没接触过,不太了解了。估计是说不到 550 天的,可以保证一定不会被系统清理,而超过 550 天的才可能会被清理。但也不是一到 550 天就马上被清理,估计是有后台任务给你慢慢清~(瞎猜的)
小哲豆腐花
#7
嗯嗯,当前也是调整为550d了,先删除8天的数据吧。
另外如上咨询的,有关回收站自动清理任务的监控或者相关视图能否告知下?
哦哦,我记得以前好像是可以的,可能是被禁掉了。那直接切到对应的 db 下去删除吧~
Giant
#10
小哲豆腐花
#11
我的问的不是看回收站内数据,是想看自动清理回收站的相关任务执行情况
Giant
#13
@OB社区小助手 怎么查看回收站 清除数据 的工作线程和进程?
哈哈,艾特错了吧……
@论坛小助手 怎么查看回收站 清除数据 的工作线程和进程?
论坛小助手
#15
根据文档库中的信息,OceanBase 数据库并未直接提供专门用于监控回收站自动清理任务的视图或工具。但可以通过以下方式间接了解和监控回收站自动清理任务的执行情况:
1. 回收站对象过期时间设置
您已经通过 ALTER SYSTEM SET recyclebin_object_expire_time = '550d';
设置了回收站对象的过期时间。这意味着超过 550 天的对象会被系统自动清理。不过,这种清理并非实时发生,而是由后台任务周期性触发。
2. 监控回收站对象的变化
虽然没有直接的任务执行视图,但可以通过定期执行 SHOW RECYCLEBIN;
来观察回收站中对象的数量和创建时间。如果发现某些对象长期未被清理,可能是因为它们尚未达到过期时间,或者清理任务尚未运行到这些对象。
3. 相关系统视图
尽管没有明确的回收站清理任务视图,但可以参考以下视图来间接了解系统任务的执行情况:
-
oceanbase.DBA_SCHEDULER_JOBS
根据文档片段 1 的描述,该视图可以查询调度任务(包括统计信息收集等)的执行情况。虽然它主要用于统计信息收集任务,但类似的调度机制也可能适用于回收站清理任务。
SELECT JOB_NAME, LAST_START_DATE, NEXT_RUN_DATE, ENABLED, FAILURE_COUNT
FROM oceanbase.DBA_SCHEDULER_JOBS;
如果存在与回收站清理相关的调度任务,可以在该视图中找到相关信息。
-
oceanbase.DBA_SCHEDULER_WINDOWS
查询维护窗口的执行信息,了解系统是否在特定时间段内执行了清理任务。
SELECT WINDOW_NAME, STATE, DURATION
FROM oceanbase.DBA_SCHEDULER_WINDOWS;
4. 手动验证清理效果
如果担心自动清理任务未能正常工作,可以手动验证清理效果。例如,通过以下命令检查并清理特定对象:
PURGE TABLE object_name;
PURGE DATABASE database_name;
PURGE INDEX index_name;
PURGE RECYCLEBIN;
5. 日志文件
OceanBase 的日志文件中可能会记录回收站清理任务的执行情况。您可以检查以下日志文件:
-
observer.log
查找与回收站清理相关的日志条目,例如 recyclebin cleanup
或类似关键词。
6. 潜在延迟问题
您提到 SHOW RECYCLEBIN;
仍然能看到最早的对象,但 PURGE TABLE
提示对象不存在。这可能是由于以下原因:
-
视图延迟:回收站视图可能存在一定的延迟更新,导致对象已被清理但视图未及时刷新。
-
并发操作:其他线程或进程可能已提前清理了该对象。
总结
目前 OceanBase 社区版并未提供明确的回收站自动清理任务监控视图。建议通过以下方式综合判断:
- 定期检查
SHOW RECYCLEBIN;
的输出。
- 查询调度任务视图
oceanbase.DBA_SCHEDULER_JOBS
和 oceanbase.DBA_SCHEDULER_WINDOWS
。
- 检查日志文件以获取更详细的执行信息。
- 如果需要确保清理效果,可以结合手动清理命令进行验证。
如果上述方法仍无法满足需求,建议联系 OceanBase 技术支持团队以获取更专业的解答。
检索到的文档如下:
- 自动统计信息收集
- 管理历史统计信息
- 备份架构
- oceanbase.DBA_OB_BACKUP_DELETE_JOBS
- 回收站
- OceanBase 数据库在 MySQL 模式租户下的扩展功能
- oceanbase.CDB_OB_BACKUP_DELETE_JOBS
- obshell recyclebin 命令组
- oceanbase.DBA_OB_BACKUP_DELETE_TASKS
Giant
#16
我给你提供一个 间接的办法吧
select count(1) from dba_recyclebin;; --进行查询数量
parameter参数 _recyclebin_object_purge_frequency=10m 每10分钟执行一次
–租户过期时间是 recyclebin_object_expire_time ,您可以根据数量 判断 回收站真的执行了。
如果想要知道
回收站的数据 被定时清除,怎么查看定时清除了哪些 数据? 消耗了多少时间? 什么时候启动了 什么名字的线程
目前我也没找到办法。
淇铭
#17
进程信息和线程信息 没有办法看到 可以看到回收站的对象