Transformando bytes de linha num tamanho de tabela que dá para planejar
Bancos de dados respondem em bytes. pg_total_relation_size('orders') devolve um inteiro cru; information_schema.tables informa data_length e index_length em bytes; a página de estatísticas do motor de armazenamento te dá um número de nove ou doze dígitos sem unidade nenhuma. Já o planejamento de capacidade acontece em gigabytes — a unidade do disco que você precisa provisionar, do volume que precisa crescer e da linha de orçamento que alguém precisa aprovar.
GB = bytes ÷ 1.000.000.000. Então uma tabela reportada como 42.500.000.000 bytes é 42.500.000.000 ÷ 1.000.000.000 = 42,5 GB.A habilidade útil não é a divisão em si, e sim saber quais bytes aquele número contém. Tamanho de relação e tamanho de tabela são valores diferentes, e é geralmente nessa diferença que uma previsão de capacidade se perde.
A largura da linha nunca é só das colunas
Os índices costumam ser a maior metade
Crescimento é taxa, não retrato
Do número em bytes ao tamanho a provisionar
Tire o valor em bytes do banco
Peça o inteiro cru em vez de uma cadeia já formatada — é o valor sem formatação que você quer converter, e assim você evita que o servidor já tenha arredondado para uma casa decimal.
Cole no campo de bytes
O valor em gigabytes aparece conforme você digita. A saída de consulta muitas vezes já vem agrupada com espaços ou usa vírgula como marca decimal; os dois casos são tratados, e os espaços simplesmente são ignorados.
Copie para o plano de capacidade
O botão de copiar de cada campo devolve o número puro, então o valor cai direto numa célula de planilha, num tamanho de volume do Terraform ou num chamado sem precisar tirar a unidade antes.
Inverta para escrever um limite
Inverta os campos para ir de gigabytes de volta a bytes quando uma regra de monitoramento ou uma cota precisar do valor na unidade que o banco expõe. Qualquer um dos menus tem busca, então terabytes ficam a uma tecla quando a tabela ultrapassa os GB.
Largura da linha × número de linhas: quanto uma tabela custa de verdade
Multiplique a largura média da linha em disco pelo número de linhas e você tem os bytes de dados; divida por um bilhão para chegar aos gigabytes. Os números abaixo supõem que a largura já inclui o cabeçalho por linha e não contam índices — some esses à parte.
| Tabela típica | Largura da linha | Linhas | Bytes de dados | Tamanho em GB |
|---|---|---|---|---|
| Fluxo de eventos, estreito | 96 B | 250.000.000 | 24.000.000.000 | 24 GB |
| Registros de sessão | 128 B | 10.000.000 | 1.280.000.000 | 1,28 GB |
| Itens de pedido | 256 B | 50.000.000 | 12.800.000.000 | 12,8 GB |
| Perfis de usuário | 512 B | 100.000.000 | 51.200.000.000 | 51,2 GB |
| Log de auditoria com JSON | 1.024 B | 5.000.000 | 5.120.000.000 | 5,12 GB |
| Documentos, linhas largas | 2.048 B | 1.000.000 | 2.048.000.000 | 2,048 GB |
Dois ajustes quase sempre se aplicam. Tuplas mortas à espera do vacuum inflam os dados acima do número da conta, e qualquer coluna cujo valor passe de mais ou menos dois kilobytes é comprimida e empurrada para uma relação TOAST, que o tamanho de tabela puro não inclui mas o tamanho da relação total inclui.
Os dois campos ativos enquanto você compara tabelas
Digite em qualquer uma das caixas e a outra acompanha na hora, então dá para descer a lista de tamanhos de relação de uma única consulta sem limpar e redigitar a cada vez.
Valores de doze dígitos continuam legíveis
Os milhares saem separados por espaço e resultados muito grandes passam para notação científica, o que deixa evidente à primeira vista um dígito contado a mais num valor bruto em bytes.
Acompanha uma tabela para além do terabyte
Os dois menus de unidade têm busca e listam todas as unidades de armazenamento, então a mesma página cobre uma tabela de apoio em kilobytes e uma tabela de fatos particionada em terabytes.
Números de produção ficam no seu computador
Tudo é calculado no navegador depois que a página carrega, então tamanhos copiados de um banco de produção nunca são enviados para lugar nenhum.
Dúvidas sobre dimensionamento de bancos de dados
Por que minha tabela é maior do que a largura das colunas sugere?
Cada linha carrega uma sobrecarga fixa antes de os seus dados começarem. No PostgreSQL são um cabeçalho de tupla de 23 bytes mais um ponteiro de item de 4 bytes na página, e os valores das colunas são preenchidos até o limite de alinhamento — um bigint depois de um bool pode desperdiçar sete bytes. Numa tabela estreita, essas adições chegam a um terço da linha. Multiplique a largura real, não a nominal, antes de dividir em gigabytes.
Os índices devem entrar no tamanho que eu provisiono?
Sim, e são subestimados com frequência. Cada índice guarda as colunas da chave mais um ponteiro de linha e a própria sobrecarga de página, então uma tabela com seis índices pode gastar mais espaço com eles do que com os dados. Dimensione os dados e os índices separadamente, converta cada parte em gigabytes e provisione a soma — depois deixe folga para a cópia temporária que uma reindexação exige.
O que exatamente o tamanho da relação total inclui?
Ele devolve os bytes dos dados, de todos os índices, dos mapas de espaço livre e de visibilidade e de qualquer relação TOAST ligada à tabela. A função de tamanho de tabela pura cobre só os dados e os mapas deles. Quando um painel de monitoramento e uma consulta manual discordam sobre uma tabela, é quase sempre por isso — um deles contou os índices e o outro não.
Como valores de coluna gigantes mudam a conta?
Uma linha precisa caber dentro de uma página, então, assim que um valor passa de uns dois kilobytes, o motor o comprime e, se não bastar, o move para fora da linha, para uma relação lateral, deixando um ponteiro pequeno no lugar. A largura visível da linha encolhe enquanto o armazenamento real fica em outro lugar. Numa tabela de textos ou documentos JSON grandes, a estimativa de largura vezes linhas pode ficar absurdamente baixa se você não medir também a relação lateral.
Como projeto o tamanho do ano que vem a partir das linhas por dia?
Multiplique as linhas por dia pela largura medida em disco para obter bytes por dia, converta em gigabytes e multiplique pela janela de retenção. Com 2.000.000 de linhas por dia e largura de 256 bytes você está acrescentando 512.000.000 de bytes por dia — 0,512 GB, cerca de 15,4 GB por mês. Aplique por cima a proporção de índices que você mediu nos dados existentes e confira o resultado contra o crescimento real depois de um mês, em vez de confiar na primeira estimativa.
Ainda não há comentários. Seja o primeiro a comentar!