Quando verifico o tamanho dos meus bancos de dados no MySQL, recebo o seguinte:
MariaDB [(none)]> SELECT table_schema "Data Base Name", sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MB", sum( data_free )/ 1024 / 1024 "Free Space in MB" FROM information_schema.TABLES GROUP BY table_schema;
+--------------------+----------------------+------------------+
| Data Base Name | Data Base Size in MB | Free Space in MB |
+--------------------+----------------------+------------------+
| alfresco | 245.75000000 | 34.00000000 |
| drupal | 892.15625000 | 216.00000000 |
+--------------------+----------------------+------------------+
Quando verifico o tamanho do disco, recebo o seguinte:
$ sudo du -h --max-depth=1 /var/lib/mysql/
317M /var/lib/mysql/alfresco
1.4G /var/lib/mysql/drupal
Se eu combinar o espaço usado e o espaço livre fornecido pelo Maria DB e compará-lo com as figuras do disco, tenho o seguinte:
alfresco: DB=279MB DISK=317MB (+14%)
drupal: DB=1100MB DISK=1433MB (+30%)
P: É normal ter muita sobrecarga no disco / há algo que eu possa fazer para reduzi-la?
Para sua informação, pensei que executar uma otimização do mysql ajudaria ( usando esse comando ), reduzia o tamanho dos bancos de dados, mas não alterava o tamanho dos arquivos no disco.
Informação adicional:
server: ubuntu server 10.04 LTS
DB server: MariaDB
DB engine: InnoDB v10 (for all tables)
Table collation: utf8_general_ci
Nb Drupal tables: 416 (0.80MB overhead per table)
Nb Alfresco tables: 84 (0.45MB overhead per table)
Respostas:
Se você estiver usando tabelas do InnoDB, o tamanho dos seus arquivos ibdata aumentará com o tempo. Portanto, se você emitir uma
DELETE
instrução, o tamanho do banco de dados será reduzido, mas o arquivo ibdata permanecerá o mesmo (não será reduzido).Se você não estiver usando a
innodb_file_per_table
opção, a única maneira de recuperar o espaço é descartando o banco de dados e restaurando a partir do arquivo de despejo.No entanto, se você estiver usando
innodb_file_per_table
, poderá emitir umem tabelas que crescem muito para recuperar o espaço em disco.
fonte
AlTER TABLE foo ENGINE=InnoDB
seminnodb_file_per_table=1
não encolhe ibdata.