PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Tamanho da tabela com layout de página


Seu cálculo está errado em vários pontos.
  • Tamanho de armazenamento de varchar , text (e character !) é, citar o manual ):

A ênfase em negrito é minha para abordar a questão no comentário.

  • O HeapTupleHeader ocupa 23 bytes . Mas cada tupla ("item" - linha ou entrada de índice) tem um identificador de item no início da página de dados para ele, totalizando os 27 bytes mencionados. A distinção é relevante, pois os dados reais do usuário começam em um múltiplo de MAXALIGN desde o início de cada item, e o identificador do item não conta para esse deslocamento - assim como o "tamanho da tupla" real.

  • 1 byte de preenchimento devido ao alinhamento de dados (múltiplo de 8), que é usado para o bitmap NULL nesse caso.

  • Sem preenchimento para o tipo varchar (mas o byte adicional mencionado acima)

Assim, o cálculo real (com todas as colunas preenchidas ao máximo) é:
    23    -- heaptupleheader
 +   1    -- NULL bitmap (or padding if row has NO null values)
 +   9    -- columns ...
 + 101 
 +   2 
 + 101 
 +   4 
 +  11
-------------
   252 bytes

 +   4    -- item identifier at page start

Relacionado:

Você encontrará muito mais na lista de links à direita dessas respostas.