sostanziale differenza tra le dimensioni del database in MySQL e dimensioni reali su disco

dba.stackexchange https://dba.stackexchange.com/questions/11567

  •  16-10-2019
  •  | 
  •  

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)
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top