截断 8gb 的 mysql table 数据并不意味着释放 8gb 的磁盘空间?
truncating 8gb of mysql table data does not mean freeing up 8gb of diskspace?
我运行以下查询来获取数据库大小:
SELECT table_schema "DB Name",
Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
FROM information_schema.tables
GROUP BY table_schema;
而且我注意到一个数据库占用了 8GB。所以我进入那个数据库并开始截断一些表。当我重新运行上面的查询时,它说我正在清理的一个数据库下降到 200MB。
然后我进入 bash 并执行了 df -h
,但我注意到我的磁盘使用量从 95GB 下降到 93GB。我原以为它会下降到 87G,因为 MySQL 命令似乎表明我摆脱了 8GB 的数据。为什么会出现差异?
创建 table 后,它位于 table 空间 - 一个预先分配的(基本上是固定的起始大小)文件或文件集。删除 table 中的数据对 table 空间的影响很小,它保持相同的大小。如果将来要使用 table,删除现有的 "empty" table 空间文件可能不是一个好主意。截断 table 会删除 table.
中的所有行
我没有尝试缩小 table 空间,但请查看此更改 table 空间帮助:
http://dev.mysql.com/doc/refman/5.1/en/alter-tablespace.html
语法是:
ALTER TABLESPACE tablespace_name
{ADD|DROP} DATAFILE 'file_name'
[INITIAL_SIZE [=] size]
[WAIT]
ENGINE [=] engine_name
我猜你想删除一个数据文件。
我运行以下查询来获取数据库大小:
SELECT table_schema "DB Name",
Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
FROM information_schema.tables
GROUP BY table_schema;
而且我注意到一个数据库占用了 8GB。所以我进入那个数据库并开始截断一些表。当我重新运行上面的查询时,它说我正在清理的一个数据库下降到 200MB。
然后我进入 bash 并执行了 df -h
,但我注意到我的磁盘使用量从 95GB 下降到 93GB。我原以为它会下降到 87G,因为 MySQL 命令似乎表明我摆脱了 8GB 的数据。为什么会出现差异?
创建 table 后,它位于 table 空间 - 一个预先分配的(基本上是固定的起始大小)文件或文件集。删除 table 中的数据对 table 空间的影响很小,它保持相同的大小。如果将来要使用 table,删除现有的 "empty" table 空间文件可能不是一个好主意。截断 table 会删除 table.
中的所有行我没有尝试缩小 table 空间,但请查看此更改 table 空间帮助: http://dev.mysql.com/doc/refman/5.1/en/alter-tablespace.html
语法是:
ALTER TABLESPACE tablespace_name
{ADD|DROP} DATAFILE 'file_name'
[INITIAL_SIZE [=] size]
[WAIT]
ENGINE [=] engine_name
我猜你想删除一个数据文件。