代码拉取完成,页面将自动刷新
5579
3.0.5[fixbug]修复truncate句柄残留时,空间不释放给OS的问题
已关闭
【标题】3.0.5[fixbug]修复truncate句柄残留时,空间不释放给OS的问题
【实现内容】:mdunlink时先做truncate,后释放
【根因分析】:
- 在多session并发执行时,其中一个session执行truncate,在commit阶段会构造invalid message给其他session消费
- 其他session会在下一个事务开始时消费这个invalid message,结合vfd机制,在下一个事务开始前这个session会一直持有relationsmgr的句柄
- 在执行truncate的session上对于main fork的数据文件是先做了truncate,再通过checkpoint去延迟删除(unlink)文件,但是对于其他段文件,是直接unlink的,如果句柄一直被持有,这个空间是不会还回给OS的
- 这种场景下如果有session是长事务或者长期悬挂,存储空间会捉襟见肘
【实现方案】: - 与PG看齐,除了MAIN_FORK之外的文件也先做truncate归还存储空间,再进行unlink
-
!5035:[fixbug]修复truncate句柄残留时,空间不释放给OS的问题
【关联需求或issue】:
#I9BZF7:数据库truncate表后存储空间不释放问题
【开发自验报告】: - 请附上自验结果(内容或者截图)
- 是否可以添加fastcheck测试用例,如是,请补充fastcheck用例
否 - 是否涉及资料修改,如是,在docs仓库补充资料
否 - 是否考虑升级场景(系统表修改、日志持久化以及修改执行态数据格式)
否 - 是否考虑在线扩容等扩展场景
否 - 是否考虑异常场景/并发场景/前向兼容/性能场景
否 - 是否对其他模块产生影响
否
【其他说明】: