web-dev-qa-db-ja.com

InnoDB:Data freeとはどういう意味ですか?

25GBを超えるかなり大きなMysqlテーブルがあります。 MySQL WorkbenchでTable Inspectorを使用して概要を抽出すると、フィールドData Freeに気づきました。テキストフィールドは選択できないため、その写真を投稿しています。それはある種の予約されたスペースを意味しますか?または、サイズ制限のために実際には空き領域ですか?または、他の何か?

enter image description here

「Data_free」とはどういう意味ですか?あまりない。真剣に、テーブルには「空き領域」がある領域がいくつかあります。 Data_freeはそのうちの1つだけを参照します。

  • InnoDBブロックはちょうど16KBです。ほとんどの場合、ブロック内に無駄なスペースがあります。
  • BTreeのブロックは、通常50%から100%の範囲でいっぱいです。
  • ブロックのグループ(「エクステント」)は、8MB(?)のチャンクで割り当てられます。あなたの7MiBはそのような範囲の一部です。 (very)は、メインのアロケーションユニットが16KBであるにもかかわらず、4、5、6、または7を頻繁に参照します。
  • メインのテーブルスペース(ibdata1)、Data_freeは、その中の「空き」容量を示します。通常、これは多数です。

あなたがした場合OPTIMIZE TABLE、テーブルはまたはそうでない可能性があります、現在の25.6 GiBから縮小します。それも増える可能性があります! 7.0 MiBはおそらく7のままか、4または5または6に変わる可能性があります。

「それはある種の予約スペースを意味するのですか?」 -部分的にスペースを割り当てる方法の変更。しかし、ほとんどそれは役に立たない数です。それが7 MiBより大きい場合、_可能性があるがあり、OPTIMIZEを使用してOSに戻すことができるスペースがあります-_それがfile_per_table。ただし、file_per_tableとData_freeの両方がテーブルサイズのかなりの部分を占めていない限り、OPTIMIZEを使用しないでください。 (これは大きなDELETEの後に発生する可能性があります。)

「それとも、サイズ制限のため、実際には空き領域ですか?」 -いくつかのしきい値の下のテーブルには、一度に16KBが割り当てられます。そのしきい値を超えると、一度に8MBが割り当てられます。

4
Rick James