AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 319674
Accepted
Niyaz
Niyaz
Asked: 2022-11-15 14:31:08 +0800 CST2022-11-15 14:31:08 +0800 CST 2022-11-15 14:31:08 +0800 CST

Como o Postgresql lida com o espaçamento livre de disco?

  • 772

Atualmente, uso o MySQL para um banco de dados muito grande (1 TB), excluo linhas diariamente para não exceder 1 TB. Mas eu enfrentei este problema Howto: Limpar um mecanismo de armazenamento mysql InnoDB? . Eu quero mudar para o PostgreSQL para evitar esse problema. (baseado em conselhos de outros)

Minhas perguntas são:

  1. Se eu mudar para o PostgreSQL esse problema vai resolver?
  2. Se minha ideia é ruim, qual é a melhor solução para minha situação?
mysql
  • 3 3 respostas
  • 113 Views

3 respostas

  • Voted
  1. Best Answer
    Rick James
    2022-11-15T17:34:12+08:002022-11-15T17:34:12+08:00

    No MySQL (InnoDB), você pode excluir linhas para liberar espaço para novas linhas. No entanto, devido à organização dos BTrees, não é 1:1. Nem mesmo 1000:1000. Ou seja, se você excluir mil linhas em uma "ponta" da tabela, isso pode ou não permitir que você adicione mil linhas na outra "ponta".

    Além disso, você disse, "excluir do banco de dados". Se isso significa excluir de uma tabela na esperança de poder inserir em uma tabela diferente , você está sem sorte.

    Forneça alguns detalhes mais específicos, incluindo pelo menos o arquivo SHOW CREATE TABLE.

    Pode ser que PARTITION BY RANGEseja útil. Esse é um dos poucos usos PARTITIONno MySQL. Ele permite o descarte muito rápido de blocos de dados 'antigos', como o valor de um dia a cada mês. Mas há ressalvas. Mais uma vez, mais detalhes me permitiriam elaborar.

    Se o DELETEtambém estiver causando um problema de desempenho, posso aconselhar melhor. (Novamente, são necessários mais detalhes.)

    • 3
  2. Laurenz Albe
    2022-11-16T08:35:01+08:002022-11-16T08:35:01+08:00

    No PostgreSQL, uma tabela normalmente não diminui se você excluir algumas linhas, mas o espaço vazio pode ser reutilizado para novas linhas. O mesmo se aplica a entradas de índice, mas como Rick James respondeu, a reutilização de espaço pode não funcionar tão bem.

    Ainda assim, você deve estar fundamentalmente bem, contanto que não utilize seu espaço em disco até o limite.

    No entanto, a maneira do rei de resolver seu problema seria usar o particionamento e descartar partições em vez de excluir linhas.

    • 3
  3. dwhitemv
    2022-11-15T17:38:37+08:002022-11-15T17:38:37+08:00

    Tentando apenas responder ao título da pergunta. mas acredito que o OP está perguntando como retornar o tablespace de volta ao sistema operacional no PostgreSQL. Existem dois métodos:

    1. Use VACUUM FULLpara compactar o(s) arquivo(s) da tabela. Isso copia os dados da tabela para um novo arquivo e reconstrói todos os índices da tabela, portanto, não é rápido (dependendo da quantidade de dados existentes) e bloqueia o acesso à tabela durante o andamento.
    2. Use o particionamento de tabelas e descarte as partições quando seus dados não forem mais necessários. DROP TABLEdesvincula os arquivos da tabela, devolvendo seu espaço ao SO imediatamente.

    Referências:

    • Manual do PostgreSQL sobre como devolver espaço ao sistema operacional
    • Manual do PostgreSQL sobre particionamento de tabelas
    • 2

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve