暂无图片
pg_stat_get_live_tuples 的活的记录数显示不对
我来答
分享
暂无图片 匿名用户
pg_stat_get_live_tuples 的活的记录数显示不对


create table tbl_1(id int,name varchar(10));

insert into tbl_1 values(1,'a'),(2,'b'),(3,'c'),(4,'d');


(postgres@[local]:5432)-[agedb]-#select * from tbl_1;
id | name
----+------
1 | a
2 | b
3 | c
4 | d

-----------插入4条数据

(postgres@[local]:5432)-[agedb]-#select relname,relpages,reltuples,pg_stat_get_live_tuples(oid),pg_stat_get_dead_tuples(oid) from pg_class where relname = 'tbl_1';
relname | relpages | reltuples | pg_stat_get_live_tuples | pg_stat_get_dead_tuples
---------+----------+-----------+-------------------------+-------------------------
tbl_1 | 1 | 4 | 0 | 0
(1 row)

(postgres@[local]:5432)-[agedb]-#analyze tbl_1 ;
ANALYZE
(postgres@[local]:5432)-[agedb]-#analyze tbl_1 ;
ANALYZE
(postgres@[local]:5432)-[agedb]-#analyze tbl_1 ;
ANALYZE
(postgres@[local]:5432)-[agedb]-#analyze tbl_1 ;
ANALYZE
(postgres@[local]:5432)-[agedb]-#select relname,relpages,reltuples,pg_stat_get_live_tuples(oid),pg_stat_get_dead_tuples(oid) from pg_class where relname = 'tbl_1';
relname | relpages | reltuples | pg_stat_get_live_tuples | pg_stat_get_dead_tuples
---------+----------+-----------+-------------------------+-------------------------
tbl_1 | 1 | 4 | 0 | 0
(1 row)


analyze 收集统计信息后, pg_stat_get_live_tuples ---这个活的记录数,期望的是4 ,才对,因为4条记录,没做任何操作,没删除,没更新,所以活的记录数应该是4个才对;不知道为啥显示是0 


版本  pg---10

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
梧桐

pg_stat_get_live_tuples 函数返回表中当前"活"元组(可见且未被删除的行)的数量,您插入了4条数据且没有删除的话,pg_stat_get_live_tuples 应为4,如果不是4,可能有以下原因:
事务隔离问题:如果在另一个事务中插入但未提交,当前事务可能看不到这些数据?
表上可能有触发器或或者其他会话删除了实际插入的行数
可以执行以下查询进行交叉验证:

select count(*) from tbl_1; -- 应该返回4 selelct * from pg_stat_user_tables where relname = 'tbl_1'; -- 查看完整统计信息

正常情况下,这查询的结果pg_stat_get_live_tuples应该一致是:4

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏