Mysql
MySQL information_schema 不更新
我有一個數據庫,比如說
abc
,在 mysql 伺服器中。它只有一個名為 的表test
。test
使用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, 2012
:InnoDB“每個表”文件大小的問題。試試下面的
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;
關於檢查空間,請參閱我的文章,其中的查詢可以為您提供按儲存引擎分組的大小並彙總:
Sep 13, 2011
:確定支持的最大數據庫和表大小以及目前大小Dec 01, 2011
: MySQL Workbench 數據庫大小Jan 11, 2013
:將備份大小轉換為數據庫大小試一試 !!!