pgstatpack2.2的无索引、无toast段的表不统计的一个bug
时间:2011-04-03
来源:互联网
文章也可以见我的blog:http://blog.osdba.net/?post=45
这几天使用了pgstatpack2.2,发现出来的报告不太对,有几个insert量很大的表,没有统计出来,检查函数pgstatspack_snap发现是其中的SQL有点问题:
INSERT INTO pgstatspack_tables
SELECT
spid as snapid,
t.schemaname ||'.'|| t.relname as table_name,
t.seq_scan as seq_scan,
t.seq_tup_read as seq_tup_read,
t.idx_scan as idx_scan,
t.idx_tup_fetch as idx_tup_fetch,
t.n_tup_ins as n_tup_ins,
t.n_tup_upd as n_tup_upd,
t.n_tup_del as n_tup_del,
it.heap_blks_read as heap_blks_read,
it.heap_blks_hit as heap_blks_hit,
it.idx_blks_read as idx_blks_read,
it.idx_blks_hit as idx_blks_hit,
it.toast_blks_read as toast_blks_read,
it.toast_blks_hit as toast_blks_hit,
it.tidx_blks_read as tidx_blks_read,
it.tidx_blks_hit as tidx_blks_hit,
pg_relation_size(t.relid)+pg_relation_size(s.relid) as tbl_size,
sum(pg_relation_size(i.indexrelid)) as idx_size
FROM
pg_statio_all_tables it,
pg_stat_all_tables t
JOIN pg_class c on t.relid=c.oid
JOIN pg_stat_sys_tables s on c.reltoastrelid=s.relid
JOIN pg_index i on i.indrelid=t.relid
WHERE
(t.relid = it.relid)
GROUP BY
t.schemaname,t.relname,t.seq_scan,t.seq_tup_read,t.idx_scan,t.idx_tup_fetch,t.n_tup_ins,t.n_tup_upd,t.n_tup_del,it.heap_blks_read,it.heap_blks_hit,it.i
dx_blks_read,it.idx_blks_hit,it.toast_blks_read,it.toast_blks_hit,it.tidx_blks_read,it.tidx_blks_hit,t.relid,s.relid
;
与pg_stat_sys_tables进行join的原因是为了统计表的toast段的大小,而与pg_index是为了计算表的索引大小,然后有些表是没有toast段的,有些表没有索引的,于是这样的表表就没有统计出来,
改成如下:
SELECT
--spid as snapid,
t.schemaname ||'.'|| t.relname as table_name,
t.seq_scan as seq_scan,
t.seq_tup_read as seq_tup_read,
t.idx_scan as idx_scan,
t.idx_tup_fetch as idx_tup_fetch,
t.n_tup_ins as n_tup_ins,
t.n_tup_upd as n_tup_upd,
t.n_tup_del as n_tup_del,
it.heap_blks_read as heap_blks_read,
it.heap_blks_hit as heap_blks_hit,
it.idx_blks_read as idx_blks_read,
it.idx_blks_hit as idx_blks_hit,
it.toast_blks_read as toast_blks_read,
it.toast_blks_hit as toast_blks_hit,
it.tidx_blks_read as tidx_blks_read,
it.tidx_blks_hit as tidx_blks_hit,
pg_relation_size(t.relid)+coalesce(pg_relation_size(s.relid),0) as tbl_size,
sum(coalesce(pg_relation_size(i.indexrelid),0) ) as idx_size
FROM
pg_statio_all_tables it,
pg_stat_all_tables t
JOIN pg_class c on t.relid=c.oid
LEFT JOIN pg_stat_sys_tables s on c.reltoastrelid=s.relid
LEFT JOIN pg_index i on i.indrelid=t.relid
WHERE
t.relid = it.relid
and t.relname='t'
GROUP BY t.schemaname,t.relname,t.seq_scan,t.seq_tup_read,t.idx_scan,t.idx_tup_fetch,t.n_tup_ins,t.n_tup_upd,t.n_tup_del,it.heap_blks_read,it.heap_blks_hit,it.idx_blks_read,it.idx_blks_hit,it.toast_blks_read,it.toast_blks_hit,it.tidx_blks_read,it.tidx_blks_hit,t.relid,s.relid
这几天使用了pgstatpack2.2,发现出来的报告不太对,有几个insert量很大的表,没有统计出来,检查函数pgstatspack_snap发现是其中的SQL有点问题:
INSERT INTO pgstatspack_tables
SELECT
spid as snapid,
t.schemaname ||'.'|| t.relname as table_name,
t.seq_scan as seq_scan,
t.seq_tup_read as seq_tup_read,
t.idx_scan as idx_scan,
t.idx_tup_fetch as idx_tup_fetch,
t.n_tup_ins as n_tup_ins,
t.n_tup_upd as n_tup_upd,
t.n_tup_del as n_tup_del,
it.heap_blks_read as heap_blks_read,
it.heap_blks_hit as heap_blks_hit,
it.idx_blks_read as idx_blks_read,
it.idx_blks_hit as idx_blks_hit,
it.toast_blks_read as toast_blks_read,
it.toast_blks_hit as toast_blks_hit,
it.tidx_blks_read as tidx_blks_read,
it.tidx_blks_hit as tidx_blks_hit,
pg_relation_size(t.relid)+pg_relation_size(s.relid) as tbl_size,
sum(pg_relation_size(i.indexrelid)) as idx_size
FROM
pg_statio_all_tables it,
pg_stat_all_tables t
JOIN pg_class c on t.relid=c.oid
JOIN pg_stat_sys_tables s on c.reltoastrelid=s.relid
JOIN pg_index i on i.indrelid=t.relid
WHERE
(t.relid = it.relid)
GROUP BY
t.schemaname,t.relname,t.seq_scan,t.seq_tup_read,t.idx_scan,t.idx_tup_fetch,t.n_tup_ins,t.n_tup_upd,t.n_tup_del,it.heap_blks_read,it.heap_blks_hit,it.i
dx_blks_read,it.idx_blks_hit,it.toast_blks_read,it.toast_blks_hit,it.tidx_blks_read,it.tidx_blks_hit,t.relid,s.relid
;
与pg_stat_sys_tables进行join的原因是为了统计表的toast段的大小,而与pg_index是为了计算表的索引大小,然后有些表是没有toast段的,有些表没有索引的,于是这样的表表就没有统计出来,
改成如下:
SELECT
--spid as snapid,
t.schemaname ||'.'|| t.relname as table_name,
t.seq_scan as seq_scan,
t.seq_tup_read as seq_tup_read,
t.idx_scan as idx_scan,
t.idx_tup_fetch as idx_tup_fetch,
t.n_tup_ins as n_tup_ins,
t.n_tup_upd as n_tup_upd,
t.n_tup_del as n_tup_del,
it.heap_blks_read as heap_blks_read,
it.heap_blks_hit as heap_blks_hit,
it.idx_blks_read as idx_blks_read,
it.idx_blks_hit as idx_blks_hit,
it.toast_blks_read as toast_blks_read,
it.toast_blks_hit as toast_blks_hit,
it.tidx_blks_read as tidx_blks_read,
it.tidx_blks_hit as tidx_blks_hit,
pg_relation_size(t.relid)+coalesce(pg_relation_size(s.relid),0) as tbl_size,
sum(coalesce(pg_relation_size(i.indexrelid),0) ) as idx_size
FROM
pg_statio_all_tables it,
pg_stat_all_tables t
JOIN pg_class c on t.relid=c.oid
LEFT JOIN pg_stat_sys_tables s on c.reltoastrelid=s.relid
LEFT JOIN pg_index i on i.indrelid=t.relid
WHERE
t.relid = it.relid
and t.relname='t'
GROUP BY t.schemaname,t.relname,t.seq_scan,t.seq_tup_read,t.idx_scan,t.idx_tup_fetch,t.n_tup_ins,t.n_tup_upd,t.n_tup_del,it.heap_blks_read,it.heap_blks_hit,it.idx_blks_read,it.idx_blks_hit,it.toast_blks_read,it.toast_blks_hit,it.tidx_blks_read,it.tidx_blks_hit,t.relid,s.relid
作者: osdba 发布时间: 2011-04-03
这个我没有使用过。
作者: renxiao2003 发布时间: 2011-04-03
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28