MySQL の InnoDB テーブルで行を削除した後、そのスペースは再利用されないため、テーブルに多数の INSERT を実行し、定期的に一部の行を削除すると、行がまったく削除されなかったかのように、テーブルがディスク上のスペースをどんどん使用していくことになると何度か読んだことがあります。
しかし最近、削除された行が占めていたスペースは再利用されるが、一部のトランザクションが完了した後にのみ再利用され、それでも完全には再利用されないと聞きました。私は今、混乱しています。
どなたか、この意味を説明していただけないでしょうか? InnoDB テーブルに多数の INSERT を実行する必要があり、その後 X 分ごとに Y 分以上経過したレコードを DELETE する必要があります。InnoDB テーブルが大きくなり続けるという問題があるのでしょうか、それとも妄想なのでしょうか?
ベストアンサー1
それは妄想です:)
DB のサイズは不必要に大きくなりませんが、パフォーマンスの問題によりスペースも解放されません。
おそらく聞いたことがあるのは、レコードを削除してもそのスペースは返されないということだオペレーティングシステム代わりに、後で DB が再利用できるように空きスペースとして保持されます。
それの訳は:
- DB はデータを保存するために HD 領域を必要とします。領域がない場合は、最初に空き領域を予約します。
- 新しい行を挿入すると、そのスペースの一部が使用されます。
- 空き領域が不足すると、新しいブロックが予約されます。
- 今、いくつかの行を削除するとより多くのブロックが予約されるのを防ぐため、そのスペースは空いたままに保たれますが、オペレーティング システムに返されることはありません。そのため、新しいブロックを予約する必要なく、後で再び使用できます。
ご覧の通り、スペースは再利用はされるが、返却されない。それがあなたの質問の要点です。