pg.ddx.io  pgsql-hackers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
To: pgsql-hackers <pgsql-hackers@postgresql.org>
Subject: Save a few bytes in pg_attribute
Date: Mon, 20 Mar 2023 11:00:12 +0100
Message-ID: <d07ffc2b-e0e8-77f7-38fb-be921dff71af@enterprisedb.com> (raw)

After the discussion in [0] ff., I was looking around in pg_attribute 
and noticed that we could possibly save 4 bytes.  We could change both 
attstattarget and attinhcount from int4 to int2, which together with 
some reordering would save 4 bytes from the fixed portion.

attstattarget is already limited to 10000, so this wouldn't lose 
anything.  For attinhcount, I don't see any documented limits.  But it 
seems unlikely to me that someone would need more than 32k immediate 
inheritance parents on a column.  (Maybe an overflow check would be 
useful, though, to prevent shenanigans.)

The attached patch seems to work.  Thoughts?


[0]: 
https://www.postgresql.org/message-id/20230313204119.4mkepdvixcxrwpsc%40awork3.anarazel.de

Attachments:

0001-Save-a-few-bytes-in-pg_attribute.patch (text/plain, 7.3K) download From 400f44d18875c40605147c8d81793c6dcc46f8a6 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut <peter@eisentraut.org> Date: Mon, 20 Mar 2023 09:51:20 +0100 Subject: [PATCH] Save a few bytes in pg_attribute attstattarget and attinhcount can be converted to int16 (from int32). --- doc/src/sgml/catalogs.sgml | 36 +++++++++++++++--------------- src/backend/catalog/heap.c | 4 ++-- src/backend/catalog/index.c | 2 +- src/include/catalog/pg_attribute.h | 20 ++++++++--------- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 746baf5053..ad5d15ec49 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -1164,23 +1164,6 @@ <title><structname>pg_attribute</structname> Columns</title> </para></entry> </row> - <row> - <entry role="catalog_table_entry"><para role="column_definition"> - <structfield>attstattarget</structfield> <type>int4</type> - </para> - <para> - <structfield>attstattarget</structfield> controls the level of detail - of statistics accumulated for this column by - <link linkend="sql-analyze"><command>ANALYZE</command></link>. - A zero value indicates that no statistics should be collected. - A negative value says to use the system default statistics target. - The exact meaning of positive values is data type-dependent. - For scalar data types, <structfield>attstattarget</structfield> - is both the target number of <quote>most common values</quote> - to collect, and the target number of histogram bins to create. - </para></entry> - </row> - <row> <entry role="catalog_table_entry"><para role="column_definition"> <structfield>attlen</structfield> <type>int2</type> @@ -1362,7 +1345,7 @@ <title><structname>pg_attribute</structname> Columns</title> <row> <entry role="catalog_table_entry"><para role="column_definition"> - <structfield>attinhcount</structfield> <type>int4</type> + <structfield>attinhcount</structfield> <type>int2</type> </para> <para> The number of direct ancestors this column has. A column with a @@ -1370,6 +1353,23 @@ <title><structname>pg_attribute</structname> Columns</title> </para></entry> </row> + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attstattarget</structfield> <type>int2</type> + </para> + <para> + <structfield>attstattarget</structfield> controls the level of detail + of statistics accumulated for this column by + <link linkend="sql-analyze"><command>ANALYZE</command></link>. + A zero value indicates that no statistics should be collected. + A negative value says to use the system default statistics target. + The exact meaning of positive values is data type-dependent. + For scalar data types, <structfield>attstattarget</structfield> + is both the target number of <quote>most common values</quote> + to collect, and the target number of histogram bins to create. + </para></entry> + </row> + <row> <entry role="catalog_table_entry"><para role="column_definition"> <structfield>attcollation</structfield> <type>oid</type> diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 4f006820b8..c67dfffa56 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -732,7 +732,6 @@ InsertPgAttributeTuples(Relation pg_attribute_rel, slot[slotCount]->tts_values[Anum_pg_attribute_attname - 1] = NameGetDatum(&attrs->attname); slot[slotCount]->tts_values[Anum_pg_attribute_atttypid - 1] = ObjectIdGetDatum(attrs->atttypid); - slot[slotCount]->tts_values[Anum_pg_attribute_attstattarget - 1] = Int32GetDatum(attrs->attstattarget); slot[slotCount]->tts_values[Anum_pg_attribute_attlen - 1] = Int16GetDatum(attrs->attlen); slot[slotCount]->tts_values[Anum_pg_attribute_attnum - 1] = Int16GetDatum(attrs->attnum); slot[slotCount]->tts_values[Anum_pg_attribute_attndims - 1] = Int32GetDatum(attrs->attndims); @@ -749,7 +748,8 @@ InsertPgAttributeTuples(Relation pg_attribute_rel, slot[slotCount]->tts_values[Anum_pg_attribute_attgenerated - 1] = CharGetDatum(attrs->attgenerated); slot[slotCount]->tts_values[Anum_pg_attribute_attisdropped - 1] = BoolGetDatum(attrs->attisdropped); slot[slotCount]->tts_values[Anum_pg_attribute_attislocal - 1] = BoolGetDatum(attrs->attislocal); - slot[slotCount]->tts_values[Anum_pg_attribute_attinhcount - 1] = Int32GetDatum(attrs->attinhcount); + slot[slotCount]->tts_values[Anum_pg_attribute_attinhcount - 1] = Int16GetDatum(attrs->attinhcount); + slot[slotCount]->tts_values[Anum_pg_attribute_attstattarget - 1] = Int16GetDatum(attrs->attstattarget); slot[slotCount]->tts_values[Anum_pg_attribute_attcollation - 1] = ObjectIdGetDatum(attrs->attcollation); if (attoptions && attoptions[natts] != (Datum) 0) slot[slotCount]->tts_values[Anum_pg_attribute_attoptions - 1] = attoptions[natts]; diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 7777e7ec77..bccea1c749 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -1812,7 +1812,7 @@ index_concurrently_swap(Oid newIndexId, Oid oldIndexId, const char *oldName) memset(repl_repl, false, sizeof(repl_repl)); repl_repl[Anum_pg_attribute_attstattarget - 1] = true; - repl_val[Anum_pg_attribute_attstattarget - 1] = Int32GetDatum(attstattarget); + repl_val[Anum_pg_attribute_attstattarget - 1] = Int16GetDatum(attstattarget); newTuple = heap_modify_tuple(attrTuple, RelationGetDescr(pg_attribute), diff --git a/src/include/catalog/pg_attribute.h b/src/include/catalog/pg_attribute.h index b561e17781..a0d6409036 100644 --- a/src/include/catalog/pg_attribute.h +++ b/src/include/catalog/pg_attribute.h @@ -52,15 +52,6 @@ CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75, */ Oid atttypid BKI_LOOKUP_OPT(pg_type); - /* - * attstattarget is the target number of statistics datapoints to collect - * during VACUUM ANALYZE of this column. A zero here indicates that we do - * not wish to collect any stats about this column. A "-1" here indicates - * that no value has been explicitly set for this column, so ANALYZE - * should use the default setting. - */ - int32 attstattarget BKI_DEFAULT(-1); - /* * attlen is a copy of the typlen field from pg_type for this attribute. * See atttypid comments above. @@ -165,7 +156,16 @@ CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75, bool attislocal BKI_DEFAULT(t); /* Number of times inherited from direct parent relation(s) */ - int32 attinhcount BKI_DEFAULT(0); + int16 attinhcount BKI_DEFAULT(0); + + /* + * attstattarget is the target number of statistics datapoints to collect + * during VACUUM ANALYZE of this column. A zero here indicates that we do + * not wish to collect any stats about this column. A "-1" here indicates + * that no value has been explicitly set for this column, so ANALYZE + * should use the default setting. + */ + int16 attstattarget BKI_DEFAULT(-1); /* attribute's collation, if any */ Oid attcollation BKI_LOOKUP_OPT(pg_collation); base-commit: 0b51d423e974557e821d890c0a3a49e419a19caa -- 2.39.2

view thread (24+ messages)  latest in thread

Message-ID: <d07ffc2b-e0e8-77f7-38fb-be921dff71af@enterprisedb.com>
Permalink:  ../d07ffc2b-e0e8-77f7-38fb-be921dff71af@enterprisedb.com/
Also on:    postgresql.org/message-id/d07ffc2b-e0e8-77f7-38fb-be921dff71af@enterprisedb.com

 ·  · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-hackers@postgresql.org
  Cc: peter.eisentraut@enterprisedb.com
  Subject: Re: Save a few bytes in pg_attribute
  In-Reply-To: <d07ffc2b-e0e8-77f7-38fb-be921dff71af@enterprisedb.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox