Search Postgresql Archives

Re: Row size overhead

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



In my test all 3358604 rows were inserted by single 'COPY FROM file'
command.
So it's obviously that each row has only one version.

> For 8.2 onwards, the tuple header is
> 23 bytes. Add another 4 bytes for one line pointer for each row. If
you
> have
> null values, another 5 bytes for null bitmap and alignment. Plus add
few
> bytes
> for page header and any unusable space in a page (because a row can
not
> fit in the remaining space).

> Simple calculations show that each row occupies 76 bytes
approximately.
> But anticipated row size would be 41 or near.

Row overhead:   23 + 4 + 5 = 32
Total row size: 32 + 41 = 73

Unfortunately value '76' has an objective explanation.


Thanks,
Sergey Zubkovsky

-----Original Message-----
From: Adrian Klaver [mailto:aklaver@xxxxxxxxxxx] 
Sent: Thursday, March 20, 2008 5:44 PM
To: pgsql-general@xxxxxxxxxxxxxx
Cc: Zubkovsky, Sergey; Pavan Deolasee
Subject: Re:  Row size overhead

On Thursday 20 March 2008 7:24 am, Zubkovsky, Sergey wrote:
> Thanks for your reply.
>
> I had used PG 8.3.1 on 32-bit WinXP platform.
> "PostgreSQL 8.3.1, compiled by Visual C++ build 1400"
> But I suppose this fact doesn't change anything essentially.
>
> Thanks,
> Sergey Zubkovsky

What you are probably seeing is row depth not row width. Postgres uses
MVCC 
and so there can be multiple versions of a row in existence at one time.
For 
a better explanation see:
http://www.postgresql.org/docs/8.3/interactive/routine-vacuuming.html

Try running Vacuum and/or Vacuum Full and see what happens to table
size.

>
>
> -----Original Message-----
> From: Pavan Deolasee [mailto:pavan.deolasee@xxxxxxxxx]
> Sent: Wednesday, March 19, 2008 8:23 PM
> To: Zubkovsky, Sergey
> Cc: pgsql-general@xxxxxxxxxxxxxx
> Subject: Re:  Row size overhead
>
> 2008/3/19 Zubkovsky, Sergey <Sergey.Zubkovsky@xxxxxxxxxxx>:
> > Simple calculations show that each row occupies 76 bytes
>
> approximately.
>
> > But anticipated row size would be 41 or near.
>
> You haven't mentioned PG version. For 8.2 onwards, the tuple header is
> 23 bytes. Add another 4 bytes for one line pointer for each row. If
you
> have
> null values, another 5 bytes for null bitmap and alignment. Plus add
few
> bytes
> for page header and any unusable space in a page (because a row can
not
> fit in the remaining space).
>
> Also ISTM that you might be loosing some space because of alignment
> in the tuple itself. Try moving booleans and char(3) at the end. There
> is not
> much you can do with other overheads.
>
>
> Thanks,
> Pavan
>
>
>
> --
> Pavan Deolasee
> EnterpriseDB http://www.enterprisedb.com

-- 
Adrian Klaver
aklaver@xxxxxxxxxxx

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux