sostanziale differenza tra le dimensioni del database in MySQL e dimensioni reali su disco
Domanda
Quando controllo le dimensioni del mio database MySQL sotto ottengo questo:
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 controllo la dimensione del disco ottengo questo:
$ sudo du -h --max-depth=1 /var/lib/mysql/
317M /var/lib/mysql/alfresco
1.4G /var/lib/mysql/drupal
Se combino sia spazio utilizzato e libero dato da Maria DB e confrontarla con i dati del disco ho la seguente:
alfresco: DB=279MB DISK=317MB (+14%)
drupal: DB=1100MB DISK=1433MB (+30%)
D: E 'normale avere più di tanto in testa sul disco / C'è qualcosa che posso fare per ridurlo
FYI ho pensato esecuzione di un ottimizzare mysql aiuterebbe ( utilizzando tale comando ), ha fatto ridurre la dimensione dei database, ma non ha cambiato la dimensione dei file sul disco.
Ulteriori informazioni:
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)
Soluzione
Se si utilizza le tabelle InnoDB, la dimensione dei file ibdata crescerà nel tempo. Quindi, se si emette dichiarazione DELETE
, le dimensioni del database riduce, ma il file ibdata rimarrà lo stesso (non ridurre).
Se non si utilizza l'opzione innodb_file_per_table
, l'unico modo per recuperare lo spazio è di dump del database e il ripristino dal file di dump.
Tuttavia, se si utilizza innodb_file_per_table
, è possibile emettere un
ALTER TABLE foo ENGINE=InnoDB;
sulle tabelle che crescono troppo grande per recuperare lo spazio su disco.