Pergunta

Eu li várias vezes que depois que você excluir uma linha em uma tabela InnoDB no MySQL, o seu espaço não é reutilizado, por isso, se você fizer um monte de inserções em uma tabela e, em seguida, periodicamente excluir algumas linhas da tabela vai usar mais e mais espaço em disco, como se as linhas não foram excluídos de todo.

Recentemente eu tenho dito que embora o espaço ocupado por linhas excluídas é mas só depois de algumas transações são completos e mesmo assim reutilizado - não totalmente. Agora estou confuso.

Alguém por favor pode dar sentido a isso comigo? Eu preciso fazer um monte de inserções em uma tabela InnoDB e depois a cada X minutos eu preciso excluir registros que são mais do que Y minutos de idade. Eu tenho um problema de crescente tabela InnoDB aqui, ou é paranóia?

Foi útil?

Solução

É a paranóia:)

de

DB não crescem em tamanho desnecessariamente, mas para o espaço de problemas de desempenho não é liberado também.

O que você ouviu provavelmente é que se você excluir registros que o espaço não é dado de volta para o sistema operacional . Em vez disso, ele é mantido como um espaço vazio para o DB para reutilização depois.

Isso ocorre porque:

  • DB precisa ter algum espaço HD para salvar seus dados; se ele não tem qualquer espaço, ele reserva um espaço vazio no início.
  • Quando você inserir uma nova linha, é usado um pedaço desse espaço.
  • Quando você ficar sem espaço livre, um novo bloco é reservado, e assim por diante.
  • Agora, quando você excluir algumas linhas , a fim de evitar reservando mais e mais blocos, seu espaço é mantida livre mas nunca dado de volta para o sistema operacional, para que você possa usá-lo novamente mais tarde sem qualquer necessidade de reservar novos blocos.

Como você pode ver, o espaço é re-utilizado, mas nunca devolvido. Esse é o ponto chave para a sua pergunta.

Outras dicas

no InnoDB, não há nenhuma maneira prática de liberar o espaço.

Todos estes métodos se tornam impraticáveis ??quando você estiver usando enormes mesas (no meu caso são mais do que 250GB) e você deve mantê-los eliminar registos para um melhor desempenho.

Você terá que pensar seriamente, se você tem espaço suficiente no seu disco rígido para executar uma das funções acima (no meu caso eu não acho que 1TB é suficiente para todas essas ações)

com mesa Innotab (e MySQL em si) a opção são bastante limitados se tem tamanho sério banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top