Wenn ich die Größe meiner Datenbanken unter MySQL überprüfe, erhalte ich Folgendes:
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 |
+--------------------+----------------------+------------------+
Wenn ich die Größe auf der Festplatte überprüfe, erhalte ich Folgendes:
$ sudo du -h --max-depth=1 /var/lib/mysql/
317M /var/lib/mysql/alfresco
1.4G /var/lib/mysql/drupal
Wenn ich sowohl genutzten als auch freien Speicherplatz von Maria DB kombiniere und ihn mit Festplattenzahlen vergleiche, habe ich Folgendes:
alfresco: DB=279MB DISK=317MB (+14%)
drupal: DB=1100MB DISK=1433MB (+30%)
F: Ist es normal, so viel Overhead auf der Festplatte zu haben? Kann ich irgendetwas tun, um ihn zu reduzieren?
Zu Ihrer Information Ich dachte, das Ausführen einer MySQL-Optimierung würde helfen ( mit diesem Befehl ). Es hat zwar die Größe der Datenbanken verringert, aber die Größe der Dateien auf der Festplatte nicht geändert.
Zusätzliche Information:
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)
Antworten:
Wenn Sie InnoDB-Tabellen verwenden, nimmt die Größe Ihrer ibdata-Dateien mit der Zeit zu. Wenn Sie also eine
DELETE
Anweisung ausgeben , wird Ihre Datenbankgröße reduziert, aber die ibdata-Datei bleibt gleich (nicht reduziert).Wenn Sie die
innodb_file_per_table
Option nicht verwenden , können Sie den Speicherplatz nur zurückfordern, indem Sie die Datenbank sichern und aus dem Dumpfile wiederherstellen.Wenn Sie jedoch verwenden
innodb_file_per_table
, können Sie eine ausgebenauf Tabellen, die zu groß werden, um den Speicherplatz zurückzugewinnen.
quelle
AlTER TABLE foo ENGINE=InnoDB
ohneinnodb_file_per_table=1
ibdata nicht schrumpft.