MySQLでのデータベースサイズとディスク上の実際のサイズの大きな違い


8

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%)

Q:ディスクにそれほど多くのオーバーヘッドがあるのは普通ですか/それを減らすために私にできることはありますか?

参考までに、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テーブル?テーブルはいくつありますか?
GBN、2012年

回答:


5

InnoDBテーブルを使用している場合、ibdataファイルのサイズは時間とともに大きくなります。したがって、DELETEステートメントを発行すると、データベースのサイズは減少しますが、ibdataファイルは同じままです(減少しません)。

innodb_file_per_tableオプションを使用していない場合、スペースを取り戻す唯一の方法は、データベースをダンプしてダンプファイルから復元することです。

ただし、を使用innodb_file_per_tableしている場合は、

ALTER TABLE foo ENGINE=InnoDB;

大きくなりすぎてディスク領域を解放できないテーブル。


データベースのサイズが減少してもibdataファイルのサイズが減少しないのはなぜですか?
最大

これは明らかに、innodbの開発者が行った「設計上の決定」であり、このバグのコメントで簡単に説明されています。同様の機能要求がかなり数年前に行われましたが、それについては何も行われていません。私は個人的にはデザインの決定には同意しませんが、それはそういうものです。
Derek Downey

なぜテーブル再利用スペースを最適化しなかったのですか?それとも、「縮小」ではなく「整頓」されているのでしょうか。
gbn 2012年

1
@gbn "InnoDBテーブルの場合、OPTIMIZE TABLEはALTER TABLEにマップされ、テーブルを再構築してインデックス統計を更新し、クラスター化インデックスの未使用スペースを解放します。" srcだから、はい、ただ整頓されています。同じ理由がAlTER TABLE foo ENGINE=InnoDBなければ、innodb_file_per_table=1ibdataは縮小されません。
Derek Downey、2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.