web-dev-qa-db-ja.com

PostgreSQLと比較してMysqlでは真空が不要なのはなぜですか?

MySQLよりもPostgreSQLに精通しています。 PostgreSQL dbでラップアラウンドIDの失敗に一度遭遇し、dbのバキュームの重要性を理解しました。実際、これは対処するのに非常に大きなオーバーヘッドの作業でした(そして、自動バキュームを使用するために数か月前に更新された古いバージョン7.4.3を使用していました)。 MySQLをPostgreSQLと比較する場合、MySQLはPostgreSQLのバキュームなどのオーバーヘッドを処理する必要がないと想定します。この仮定は正しいですか?

また、なぜPostgreSQLと比較して、MySQL Dbsでは真空が必要ないのですか? MySQL dbには、vacuumに似た他の最適化の代替策はありますか?

21
RunningAdithya

Robert Haasがこのトピックについて書きました

短いバージョンでは、InnoDBはOracleの設計に似たロールバックログを使用します。行の最新バージョンのみがメインテーブルに保持されます。ログの消去、PostgreSQLのVACUUMに関連する関数を使用した非同期/遅延操作を管理する必要があります。

これは、更新時に行う書き込みが多くなり、古い行バージョンへのアクセスがかなり遅くなることを意味しますが、非同期バキュームの必要がなくなり、テーブルの膨張の問題が発生しなくなります。代わりに、巨大なロールバックセグメントを使用するか、ロールバック用のスペースを使い果たすことができます。

したがって、これはトレードオフであり、利点と問題のセットが異なる設計です。

MyISAMテーブルについて話している場合は、まったく異なります。 PostgreSQLのテーブルはデータを消費しません。 MyISAMはします。 PostgreSQLのテーブルはトランザクション対応です。 MyISAMは違います。フラットファイルもVACUUMを必要としないので、良い考えではありません。

14
Craig Ringer

MySQLのPostgreSQLのvacuumOPTIMIZE TABLE tablenameMySQL docs )。 MySQLでPostgreSQLと同様の機能を実行します。使用するストレージエンジンに応じて、未使用のスペースを再利用し、インデックスとテーブルを再編成し、データファイルを最適化します。 PostgreSQLのvacuumと同様に、定期的に実行する必要があります。

15
j.w.r