为何PostgreSQL 13的pg_commit_ts目录为空?
PostgreSQL中pg_commit_ts目录的功能及为空原因
一、pg_commit_ts目录的功能
pg_commit_ts是PostgreSQL 10及以后版本引入的目录,主要用于存储每个事务的提交时间戳。这个时间戳记录了事务成功提交的精确时间,PostgreSQL会用它优化部分后台操作(比如提升并行VACUUM的效率),同时也能支持一些依赖事务提交顺序或时间的业务场景。
二、目录为空的原因
你的pg_commit_ts目录为空,核心原因是PostgreSQL默认关闭了事务提交时间戳的跟踪功能——track_commit_timestamp参数默认值为off。
因为跟踪事务提交时间会带来额外性能开销(需要为每个提交的事务写入时间戳数据),所以PostgreSQL默认不启用该功能。即便你执行了插入数据的事务,只要这个参数没开启,系统就不会往pg_commit_ts目录写入任何数据。
开启该功能的步骤
要让pg_commit_ts目录生成数据,需修改PostgreSQL配置文件postgresql.conf:
- 找到
track_commit_timestamp参数,将其值改为on - 重启PostgreSQL服务
- 之后新提交的事务,其提交时间戳就会被写入pg_commit_ts目录下的文件中
注意:开启该功能后,仅会记录开启之后新提交的事务时间戳,之前的事务不会被回溯记录。
内容的提问来源于stack exchange,提问作者Monika Yadav
相关产品推荐
相关产品推荐

