Mysql

MySQL information_schema 不更新

  • February 9, 2015

我有一個數據庫,比如說abc,在 mysql 伺服器中。它只有一個名為 的表testtest使用innodb引擎,我設置innodb_file_per_table為true。

執行查詢後delete from abc.test,我想計算abc. 這是我使用的查詢:

SELECT
   table_schema "name",
   sum( IF(engine = "MyISAM", data_length + index_length -  data_free,
   data_length + index_length)) "size"
FROM information_schema.TABLES
where table_schema like "abc";

奇怪的是,我發現數據庫大小根本沒有減少,但是“測試”中的數據已經消失了。

我做過很多次這種測試,這種奇怪的行為有時會發生。

我正在使用percona mysql server 5.5.29-rel29.4.

誰能告訴我有什麼問題?

更新:

實際上,我使用另一個執行緒定期檢查數據庫大小。

您需要重建表以縮小 ibd 文件。此命令將執行此操作:

optimize table abc.test;

我可以告訴你為什麼/var/lib/mysql/abc/test1.ibd沒有縮水。

查詢delete from abc.testl;是一個DML事務。您只需刪除所有行數據。如果要回收.ibd文件的物理空間,需要DDL使用DML. 我已經回答了這個性質的問題Jan 17, 2012InnoDB“每個表”文件大小的問題。

試試下面的DDL語句:

TRUNCATE TABLE abc.testl;

如果表沒有外鍵,你可以這樣做:

CREATE TABLE abc.test2 LIKE abc.test1;
DROP TABLE abc.test1;
ALTER TABLE abc.test2 RENAME abc.test1;

以下是您在完全刪除所有行後可以立即執行的操作:

DELETE FROM abc.testl;
ALTER TABLE abc.test1 ENGINE=InnoDB;

關於檢查空間,請參閱我的文章,其中的查詢可以為您提供按儲存引擎分組的大小並彙總:

試一試 !!!

引用自:https://dba.stackexchange.com/questions/36146