web-dev-qa-db-ja.com

ibdataファイルには大きすぎますか?

私のibdataファイルは非常に大きく、少なくとも私には非常に大きいようです。これは過大ですか、それとも悪くないですか?

-rw-rw---- 1 mysql mysql  15G Apr 18 10:11 ibdata1
9
nachito

これが問題になる場合

テーブルでshow table statusを実行し、Data_freeフィールドがibdata1ファイルのサイズの大部分を占める場合、多くの無駄なスペースが生じる可能性があります。大量の挿入/削除が問題になります。これが当てはまり、一時的な挿入と削除がデータの大部分を占めている場合は、テーブルごとのファイルに適切なケースがあります。

ただし、これは自動的な「はい」ではありません。 InnoDBファイル内の内部断片化については世界中で多くの話題がありますが、ファイルごとのファイルとしてファイルシステムに配置すると、断片化がデータベースレベルではなくファイルシステムレベルに移動します。

通常これが問題ではない理由

InnoDBファイルは、ファイルではなくファイルシステムと考えてください。多くのファイルがある場合、大きなファイルシステムが必要になります。

ほとんどの場合、ファイルシステムはテラバイト単位のデータと数えきれないほどの数のファイルを処理するためのスケールアップに非常に適しています。インデックス作成が不十分な問題(パフォーマンスに影響が出る前のディレクトリ内のファイル数の制限など)に遭遇することもありますが、最新のファイルシステムは、ほとんどの場合、テラバイトの範囲にうまく移行できます。

InnoDBは同じように機能します。データファイルのサイズは非常に大きくなる可能性があります。また、大きなファイルシステムと同様に、データのバックアップで問題が発生する可能性があります。ただし、ファイルシステムを複数のパーティションに分割しても問題が解決しないのと同様に、innodbを操作することもできません。 innodb_file_per_table を使用できますが、お勧めすることはほとんどありません。

あなたのファイルシステムのように、より良い答えは、内部で制限を知って、その中で働くことです。インデックスを理解し、適切に適用します。 InnoDBを分割しようとしてはいけません。それはそのためのものではありません。

私は概念を建設的に伝えるのに苦労しているので、ここでは言葉を私がこれよりも上手に読むことができます: テラバイトはビッグデータではなく、ペタバイトは です。

お客様が数テラバイトのデータウェアハウスを実行していた本当に古いMySQLマーケティングスライドを覚えています。何年も前に。 InnoDBまたはMyISAMのどちらでも機能します。これは、標準的なMySQLのものです。

15GBのデータベースを心配する必要はありません。

13
Jeff Ferland

ibdataファイルは縮小されません-最近いくつかのテーブルを削除したり、多くの行を削除したりした場合-設定のinnodbはファイルシステムに空き領域を解放しません。私はあなたをお勧めします:

  • mysqldumpなどを使用して、すべてのデータをバックアップします。
  • my.cnfに追加しますinnodb_file_per_tableディレクティブ
  • mysqlを再起動します
  • innodbエンジンを使用してすべてのデータベースを削除する
  • mysqlを停止する
  • ibdataファイルを削除する
  • rm ib_logfile [01]
  • mysqlを起動し、すべて問題ない場合はsyslogを確認します
  • ダンプをリロード

このようにして、innodbテーブル/データベースをドロップするたびにスペースを取り戻すことができます。関連するIDBファイルはすぐに削除されます。

6
pQd