MySQL 下的数据库大小与磁盘上的实际大小之间存在巨大差异

Max*_*Max 8 mysql mariadb ubuntu

当我检查 MySQL 下数据库的大小时,我得到以下信息:

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 |
+--------------------+----------------------+------------------+
Run Code Online (Sandbox Code Playgroud)

当我检查磁盘上的大小时,我得到了这个:

$ sudo du -h --max-depth=1 /var/lib/mysql/
317M    /var/lib/mysql/alfresco
1.4G    /var/lib/mysql/drupal
Run Code Online (Sandbox Code Playgroud)

如果我将 Maria DB 提供的已用空间和可用空间结合起来,并将其与磁盘图进行比较,我将得到以下结果:

alfresco: DB=279MB  DISK=317MB (+14%)
drupal: DB=1100MB   DISK=1433MB (+30%)
Run Code Online (Sandbox Code Playgroud)

问:磁盘上有这么多开销是否正常/我可以做些什么来减少它?

仅供参考,我认为运行 mysql 优化会有所帮助(使用该命令),它确实减少了数据库的大小,但没有更改磁盘上文件的大小。

附加信息:

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)
Run Code Online (Sandbox Code Playgroud)

Der*_*ney 5

如果您使用 InnoDB 表,您的 ibdata 文件的大小会随着时间的推移而增长。因此,如果您发出DELETE语句,您的数据库大小将减少,但 ibdata 文件将保持不变(不减少)。

如果您不使用innodb_file_per_table选项,回收空间的唯一方法是转储数据库并从转储文件中恢复。

但是,如果您正在使用innodb_file_per_table,则可以发出

ALTER TABLE foo ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)

在增长过大而无法回收磁盘空间的表上。