Liberar espaço para sistema operacionar pos TRUNCATE TABLE

493 views
Skip to first unread message

Ederson Pereira de Brito

unread,
May 29, 2017, 4:00:59 PM5/29/17
to list...@googlegroups.com
Ola, estou precisando liberar o espaço para sistema operacional apos dar o comando TRUNCATE TABLE tabelax, mesmo que as tabelas estejam limpas o banco de dados ainda esta utilizando o armazenamento e nao consigo utilizar o espaço para outras finalidades, se alguem puder me dar um norte onde acho alguma informação sobre isso fico grato.

Agradeço quem puder me dar uma dica.

Yuri Yarlei

unread,
May 29, 2017, 4:17:35 PM5/29/17
to list...@googlegroups.com
Pode ser apenas o design do banco. Da uma lida aqui nesse artigo

https://dev.mysql.com/doc/refman/5.5/en/innodb-truncate-table-reclaim-space.html


Atenciosamente,
Yuri Yarlei.
Linkedin - https://goo.gl/5iJsr3
"Há grandes homens que fazem com que todos se sintam pequenos. Mas o verdadeiro grande homem é aquele que faz com que todos se sintam grandes." (Gilbert Keith Chesterton)

Em 29 de maio de 2017 17:00, Ederson Pereira de Brito <des...@gmail.com> escreveu:
Ola, estou precisando liberar o espaço para sistema operacional apos dar o comando TRUNCATE TABLE tabelax, mesmo que as tabelas estejam limpas o banco de dados ainda esta utilizando o armazenamento e nao consigo utilizar o espaço para outras finalidades, se alguem puder me dar um norte onde acho alguma informação sobre isso fico grato.

Agradeço quem puder me dar uma dica.

--
--
============================================================
JQUERY MAGAZINE > http://www.jquerymagazine.com.br
--
PHP MAGAZINE > http://www.phpmagazine.com.br
--
LISTA NODE.JS > https://groups.google.com/group/lista-nodejs?hl=pt-br
--
AJAX-BRASIL > http://groups.google.com/group/ajax-brasil
--
PYTHON-GOOGLE > http://groups.google.com.br/group/python-google
--
DOTNET-BRASIL > http://groups.google.com.br/group/dotnet_br
============================================================

---
Você recebeu essa mensagem porque está inscrito no grupo "LISTA PHP" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para listaphp+unsubscribe@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Alex Juchem

unread,
May 29, 2017, 4:22:12 PM5/29/17
to list...@googlegroups.com
Já aconteceu comigo também, depois de deletar uma tabela ainda estava sem espaço no sistema, o que fiz foi reiniciar a máquina e ai tudo voltou ao normal.

Em 29 de maio de 2017 17:00, Ederson Pereira de Brito <des...@gmail.com> escreveu:
Ola, estou precisando liberar o espaço para sistema operacional apos dar o comando TRUNCATE TABLE tabelax, mesmo que as tabelas estejam limpas o banco de dados ainda esta utilizando o armazenamento e nao consigo utilizar o espaço para outras finalidades, se alguem puder me dar um norte onde acho alguma informação sobre isso fico grato.

Agradeço quem puder me dar uma dica.

Ederson Pereira de Brito

unread,
May 29, 2017, 5:50:03 PM5/29/17
to list...@googlegroups.com
Reiniciar nao deu certo e o site acima informado deu erro.
Se mais alguem tiver uma dica fico grato

Yuri Yarlei

unread,
May 30, 2017, 7:14:29 AM5/30/17
to list...@googlegroups.com
Aqui eu consigo ver o site, o artigo é pequeno, fala sobre o tipo da tabela e uma propriedade a ser marcada, eu não o lí completo, vou postar aqui pra vc

14.15.5 Reclaiming Disk Space with TRUNCATE TABLE

To reclaim operating system disk space when truncating an InnoDB table, the table must be stored in its own .ibd file. For a table to be stored in its own .ibd file, innodb_file_per_table must enabled when the table is created. Additionally, there cannot be a foreign key constraint between the table being truncated and other tables, otherwise the TRUNCATE TABLE operation fails. This is a change from previous behavior, which would transform the TRUNCATE operation to a DELETE operation that removes all rows and triggers ON DELETE operations on child tables. A foreign key constraint between two columns in the same table, however, is permitted.

When a table is truncated, it is dropped and re-created in a new .ibd file (previous versions of InnoDB would keep the existing .idb file), and the freed space is returned to the operating system. This is in contrast to truncating InnoDB tables that are stored within the InnoDB system tablespace (tables created when innodb_file_per_table=OFF), where only InnoDB can use the freed space after the table is truncated.

The ability to truncate tables and return disk space to the operating system also means that physical backups can be smaller. Truncating tables that are stored in the system tablespace (tables created when innodb_file_per_table=OFF) leaves blocks of unused space in the system tablespace.




Atenciosamente,
Yuri Yarlei.
Linkedin - https://goo.gl/5iJsr3
"Há grandes homens que fazem com que todos se sintam pequenos. Mas o verdadeiro grande homem é aquele que faz com que todos se sintam grandes." (Gilbert Keith Chesterton)

Dafnis Raies

unread,
May 30, 2017, 10:59:56 AM5/30/17
to list...@googlegroups.com
Bom dia !

Passei por algo parecido aqui na empresa. Qual versão do mysql você esta usando? Nas mais antigas não é possível configurar para gerar um ibdata por tabela.
Mas de qualquer forma, você pode reaver o espaço não utilizado da seguinte forma.

- Faça um backup de todos seus bancos.
- Delete todos seus bancos (esquemas)
- Pare o Mysql
 - apague o arquivo ibdata
-  se sua versão suportar, altere o parâmetro do innodb_file_per_table  para on no my.cnf
-suba o banco
-restaure os backups dos seus esquemas de banco de dados

Só assim consegui ter de volta o espaço dos esquemas/tabelas que foram deletadas.



Ederson Pereira de Brito

unread,
May 30, 2017, 11:18:16 AM5/30/17
to list...@googlegroups.com
Yuri
 Obrigado por posta aqui e pelo que vi este método so afeta bancos posteriores, ja existentes nao afeta entao acho que nao resolve para o meu caso.

Dafnis Raies 
A minha duvida é se toda vez tenho que deletar os bancos e ibdata e recriar e restaurar os esquemas e so assim tenho o espaço novamente, se for isso acho uma baita sacanagem.

Versao do meu mysql
Server version          5.5.55-0+deb8u1


Dafnis Raies

unread,
May 30, 2017, 1:09:39 PM5/30/17
to list...@googlegroups.com
Ederson,

Nas versões mais antigas era essa sacanagem mesmo.
Já nas versões mais atuais , quando você seta o parâmetro innodb_file_per_table  para ON, o mysql passa a criar um arquivo no disco por tabela, resolvendo o problema.
Tenho um ambiente em produção com o Mysql 5.1.30 que não aceita o parâmetro. Já outro que eu administro que tem a opção está na versão 5.7. 
Sua versão  (5.5) tem de pesquisar se aceita. 

Ederson Pereira de Brito

unread,
May 30, 2017, 2:44:28 PM5/30/17
to list...@googlegroups.com
Obrigado pela dica vou pesquisar e fazer alguns testes antes.
Em relação a ser criado um arquivo para cada banco sera preciso deletar este arquivo para liberar o espaço e depois recriar ou tem outra forma?

Heleno da Silva Souza

unread,
May 31, 2017, 8:33:16 AM5/31/17
to LISTA PHP
Opa boa noite,

Ja passei por este problema também.
este link pode lhe ajudar amigo.
https://dev.mysql.com/doc/refman/5.7/en/optimize-table.html
Reply all
Reply to author
Forward
0 new messages