MySQLよりもPostgreSQLに精通しています。 PostgreSQL dbでラップアラウンドIDの失敗に一度遭遇し、dbのバキュームの重要性を理解しました。実際、これは対処するのに非常に大きなオーバーヘッドの作業でした(そして、自動バキュームを使用するために数か月前に更新された古いバージョン7.4.3を使用していました)。 MySQLをPostgreSQLと比較する場合、MySQLはPostgreSQLのバキュームなどのオーバーヘッドを処理する必要がないと想定します。この仮定は正しいですか?
また、なぜPostgreSQLと比較して、MySQL Dbsでは真空が必要ないのですか? MySQL dbには、vacuumに似た他の最適化の代替策はありますか?
短いバージョンでは、InnoDBはOracleの設計に似たロールバックログを使用します。行の最新バージョンのみがメインテーブルに保持されます。ログの消去、PostgreSQLのVACUUM
に関連する関数を使用した非同期/遅延操作を管理する必要があります。
これは、更新時に行う書き込みが多くなり、古い行バージョンへのアクセスがかなり遅くなることを意味しますが、非同期バキュームの必要がなくなり、テーブルの膨張の問題が発生しなくなります。代わりに、巨大なロールバックセグメントを使用するか、ロールバック用のスペースを使い果たすことができます。
したがって、これはトレードオフであり、利点と問題のセットが異なる設計です。
MyISAMテーブルについて話している場合は、まったく異なります。 PostgreSQLのテーブルはデータを消費しません。 MyISAMはします。 PostgreSQLのテーブルはトランザクション対応です。 MyISAMは違います。フラットファイルもVACUUM
を必要としないので、良い考えではありません。
MySQLのPostgreSQLのvacuum
はOPTIMIZE TABLE tablename
( MySQL docs )。 MySQLでPostgreSQLと同様の機能を実行します。使用するストレージエンジンに応じて、未使用のスペースを再利用し、インデックスとテーブルを再編成し、データファイルを最適化します。 PostgreSQLのvacuum
と同様に、定期的に実行する必要があります。