n_live_tup 和 n_dead_tup 的变化是不是意味着一些新行被插入到表中
Posted
技术标签:
【中文标题】n_live_tup 和 n_dead_tup 的变化是不是意味着一些新行被插入到表中【英文标题】:Does change in n_live_tup and n_dead_tup means that some new rows were inserted into a tablen_live_tup 和 n_dead_tup 的变化是否意味着一些新行被插入到表中 【发布时间】:2019-01-31 09:44:45 【问题描述】:我需要检查是否有一些行被插入到一个特定的表中。我需要每天检查它。
我已经尝试为此使用pg_stat_all_tables.n_live_tup
,但我不确定这是否正确并且最初是为此目的而设计的。
n_tup_ins
、n_tup_upd
、n_tup_del
列是否还描述了是否插入、更新或删除了任何行?
【问题讨论】:
【参考方案1】:这些统计数据由统计收集器进程收集和更新。 各个数据库后端通过 UDP 套接字将统计信息发送到统计收集器。
这有两个后果:
信息是异步更新的,因此在数据库操作完成与其在统计数据中的影响可见之间可能存在延迟。 在 UDP 中,消息可能会丢失。该信息在内部用于触发 autovacuum 和 autoanalyze,因此数字是否 100% 准确并不重要。如果这对您的目的来说足够好,那么您当然可以使用该信息。
【讨论】:
我不需要准确性,我只需要知道发生了什么变化。我将每 24 小时只执行一次脚本。我想如果插入记录,该统计值肯定会在接下来的 24 小时内更新。对于我来说,迟到 1 天也不是问题以上是关于n_live_tup 和 n_dead_tup 的变化是不是意味着一些新行被插入到表中的主要内容,如果未能解决你的问题,请参考以下文章
malloc和free,brk和sbrk和mmap和munmap的使用和关系以及内存分配的原理