当我在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 |
+--------------------+----------------------+------------------+

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

$ sudo du -h --max-depth=1 /var/lib/mysql/
317M    /var/lib/mysql/alfresco
1.4G    /var/lib/mysql/drupal

如果我将玛丽亚db给出的二手用途和可用空间结合在一起,并将其与磁盘数字进行比较,我将有以下内容:

alfresco: DB=279MB  DISK=317MB (+14%)
drupal: DB=1100MB   DISK=1433MB (+30%)

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

仅供参考,我认为运行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)
有帮助吗?

解决方案

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

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

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

ALTER TABLE foo ENGINE=InnoDB;

在桌子上生长太大而无法收回磁盘空间的桌子上。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top