Ubuntu

MySQL 下的數據庫大小與磁碟上的實際大小之間存在顯著差異

  • January 26, 2012

當我在 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

如果我將 Maria 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;

在變得太大而無法回收磁碟空間的表上。

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