Обсуждение: explaining the pg_total_relation_size/pg_relation_size results
I have the follwing in a view to glance at the size of my relations:
--
pg_size_pretty(pg_relation_size(c.oid::regclass)) AS size,
pg_total_relation_size(c.oid::regclass) AS bytes
This view sorts by pg_relation_size(c.oid::regclass) descending.
The question is: the byte values are often higher for relations with a lower size indicated by size. As I sit here, I see an 11GB table of 23821893632 bytes and a 12GB table of 14545387520 bytes, and lastly/weirdly, a 3194MB table of 19924844544 bytes.
Can someone give me the quck explainer here of what I am looking at? I tend to trust the size more than the bytes but I want to understand both better.
Thanks.
Wells Oliver
wells.oliver@gmail.com
wells.oliver@gmail.com
On 2018-Jun-20, Wells Oliver wrote: > I have the follwing in a view to glance at the size of my relations: > > pg_size_pretty(pg_relation_size(c.oid::regclass)) AS size, > pg_total_relation_size(c.oid::regclass) AS bytes > > This view sorts by pg_relation_size(c.oid::regclass) descending. > > The question is: the byte values are often higher for relations with a > lower size indicated by size. As I sit here, I see an 11GB table > of 23821893632 bytes and a 12GB table of 14545387520 bytes, and > lastly/weirdly, a 3194MB table of 19924844544 bytes. This is a strange question. pg_total_relation_size includes the size of indexes and toast table and index, which pg_relation_size does not, so it seems natural that they give wildly different results for differently shaped tables. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
I have the follwing in a view to glance at the size of my relations:pg_size_pretty(pg_relation_size(c.oid::regclass)) AS size, pg_total_relation_size(c.oid::regclass) AS bytes This view sorts by pg_relation_size(c.oid::regclass) descending. The question is: the byte values are often higher for relations with a lower size indicated by size. As I sit here, I see an 11GB table of 23821893632 bytes and a 12GB table of 14545387520 bytes, and lastly/weirdly, a 3194MB table of 19924844544 bytes.Can someone give me the quck explainer here of what I am looking at? I tend to trust the size more than the bytes but I want to understand both better.
The documented difference between the two size functions are "indexes" and "toast" (and the non-main forks which are a small fraction of the difference). Any observation of an inverse relationship between the two doesn't seem actionable...
Toast is basically "automatic large object storage"; I leave the docs to cover indexes.
David J.