Search Postgresql Archives

huge table occupation after updates

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

 



Hi,
I've a table ('stato') with an indexed bigint ('Id') and 5 bytea fields ('d0','d1',...,'d4').
I populated the table with 10000 rows; each d.. field inizialized with 20 bytes.
Reported table size is 1.5MB. OK.
Now, for 1000 times,  I update  2000 different rows each time, changing d0 filed keeping the same length, and at the end of all,  I issued VACUUM.
Now table size is 29MB. 

Why so big? What is an upper bound to estimate a table occupation on disk?


The same test, redone with dX length=200 bytes instead of 20 reports:
Size before UPDATES = 11MB. OK.
Size after UPDATES = 1.7GB . Why?

Attached a txt file with details of statistical command I issued (max of row size, rows count etc....)

Regards
Pupillo





#############  TABLE stato JUST POPULATED: 

ginopino=# select * from stato where id<10;
 id |                     d0                     |                     d1                     |                     d2                     |                     d3                     |                     d4                     
----+--------------------------------------------+--------------------------------------------+--------------------------------------------+--------------------------------------------+--------------------------------------------
  0 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  1 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  2 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  3 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  4 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  5 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  6 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  7 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  8 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  9 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
(10 rows)

ginopino=# select max(pg_column_size(stato)),count(*) from stato;
 max | count 
-----+-------
 137 | 10000
(1 row)

ginopino=# select pg_table_size('stato'),pg_database_size('ginopino');
 pg_table_size | pg_database_size 
---------------+------------------
       1523712 |          9519276
(1 row)


#############  NOW 2 MILLIONS ROWS UPDATE VIA LIBPQ........................

ginopino=# VACUUM;
VACUUM

ginopino=# select * from stato where id<10;
 id |                     d0                     |                     d1                     |                     d2                     |                     d3                     |                     d4                     
----+--------------------------------------------+--------------------------------------------+--------------------------------------------+--------------------------------------------+--------------------------------------------
  0 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  1 | \x0000000053535353535353535353535353535353 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  2 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  3 | \x0000000053535353535353535353535353535353 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  4 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  5 | \x0000000053535353535353535353535353535353 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  6 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  7 | \x0000000053535353535353535353535353535353 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  8 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
  9 | \x0000000053535353535353535353535353535353 | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d | \x2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d
(10 rows)

ginopino=# select max(pg_column_size(stato)),count(*) from stato;
 max | count 
-----+-------
 137 | 10000
(1 row)

ginopino=# select pg_table_size('stato'),pg_database_size('ginopino');
 pg_table_size | pg_database_size 
---------------+------------------
      29179904 |         37331116
(1 row)


#################################################################  NOW TABLE DROPPED, RECREATED AND REPOPULATED WITH 200 bytes FIELDS (select * from stato...COMMANDS EXECUTED LIKE PREVIOUS TEST BUT OMITTED IN THIS REPORT, TOO LONG.....)
#############  TABLE stato JUST POPULATED: 
ginopino=# select max(pg_column_size(stato)),count(*) from stato;
 max  | count 
------+-------
 1052 | 10000
(1 row)

ginopino=# select pg_table_size('stato'),pg_database_size('ginopino');
 pg_table_size | pg_database_size 
---------------+------------------
      11739136 |         19595780
(1 row)

############# 2 MILLIONS ROWS UPDATE........................

ginopino=# VACUUM;
ERROR:  canceling autovacuum task
CONTEXT:  automatic vacuum of table "ginopino.public.stato"
VACUUM
ginopino=# select max(pg_column_size(stato)),count(*) from stato;
 max  | count 
------+-------
 1052 | 10000
(1 row)

ginopino=# select pg_table_size('stato'),pg_database_size('ginopino');
 pg_table_size | pg_database_size 
---------------+------------------
    1711095808 |       1724113068
(1 row)

ginopino=# select * from pg_stat_all_tables where relname='stato';
 relid | schemaname | relname | seq_scan | seq_tup_read | idx_scan | idx_tup_fetch | n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze |          last_vacuum          |       last_autovacuum        | last_analyze |       last_autoanalyze        | vacuum_count | autovacuum_count | analyze_count | autoanalyze_count 
-------+------------+---------+----------+--------------+----------+---------------+-----------+-----------+-----------+---------------+------------+------------+---------------------+-------------------------------+------------------------------+--------------+-------------------------------+--------------+------------------+---------------+-------------------
 18611 | public     | stato   |        5 |        40000 |  4020005 |       4020014 |     10000 |   2000000 |         0 |        392157 |       5024 |          0 |                   0 | 2016-12-10 12:48:13.206175+01 | 2016-12-10 12:44:39.64471+01 |              | 2016-12-10 12:49:15.581839+01 |            1 |                1 |             0 |                 3
(1 row)

-- 
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