Robert Haas <robertmh...@gmail.com> writes:
> Nice.  What was the overall effect on memory consumption?

Before:
cspell: 31352608 total in 3814 blocks; 37432 free (6 chunks); 31315176 used

After:
cspell: 16214816 total in 1951 blocks; 13744 free (12 chunks); 16201072 used

This is on a 32-bit machine that uses MAXALIGN 8, and I also had
enable_cassert on (hence extra palloc chunk overhead) so it may be
overstating the amount of savings you'd see in production.  But it's
in the same ballpark as what Pavel reported originally.  AFAICT
practically all of the useful savings comes from the one place he
targeted originally, and the other changes are just marginal gravy.

Before I throw it away, here's some data about the allocations that
go through that code on the Czech dictionary.  First column is number
of calls of the given size, second is requested size in bytes:

   1 1
 695 2
1310 3
1965 4
2565 5
1856 6
 578 7
 301 8
   7 9
   2 10
707733 12
 520 16
107035 20
  16 24
22606 28
   3 32
8814 36
  59 40
4305 44
   2 48
2238 52
   2 56
1236 60
  20 64
 816 68
 599 76
   1 80
 408 84
   9 88
 334 92
   2 96
 246 100
   1 104
 164 108
  13 112
 132 116
 110 124
   1 128
 107 132
   3 136
  81 140
   1 144
  77 148
  40 156
  46 164
  29 172
  39 180
   2 184
  35 188
  31 196
  19 204
  16 212
  12 220
  10 228
   3 244
   1 304
   1 400
   1 1120

The spikes at 12/20/28 bytes correspond to SPNodes with 1/2/3 data
items.

BTW, on a 64-bit machine we're really paying through the nose for the
pointers in SPNodeData --- the pointers are bad enough, and their
alignment effects are worse.  If we were to try to change this over to
a pointer-free representation, we could probably replace those pointers
by 32-bit offsets, which would save a full factor of 2 on 64-bit.

                        regards, tom lane

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

Reply via email to