web-dev-qa-db-ja.com

データベースをバキュームすることはどういう意味ですか?

このFirefoxのバグ で参照されているように、データベースをバキュームする行為は何を達成しますか?この操作は、すべての最新のデータベースソフトウェアでサポートされていますか、それとも特定のソフトウェアでのみサポートされていますか?

26
An̲̳̳drew

[〜#〜] mvcc [〜#〜] を使用してトランザクションを相互に分離するデータベースは、定期的にテーブルをスキャンして、古い行のコピーを削除する必要があります。 MVCCでは、行が更新または削除されても、古いバージョンの行を引き続き表示できるアクティブなトランザクションが存在する可能性があるため、すぐにリサイクルすることはできません。それが事実であるかどうかをチェックする代わりに、それは非常にコストがかかる可能性があり、古い行は関連性を維持すると想定されます。スペースを再利用するプロセスは、データベースに応じて自動的または明示的に開始できるテーブルがバキュームされるまで延期されます。

35
edgar.holleis

具体的には、SQLliteバキュームコマンドを指します。 http://www.sqlite.org/lang_vacuum.html

DELETEステートメントから残ったスペースを削除しています。

6
MindStalker

'vacuumdb'は、MySQL、sqlite、およびPostgreSQLに含まれています。 Postgresでは、vacuumdbは削除された行が占めるスペースを識別し、将来使用するためにカタログ化します。 「vacuumfull」は、より包括的な検査を行い、新しく作成されたスペースにレコードを移動します。

1
user3490256

真空は2つのことを意味します: 1。スペースを再利用します2.ファイルをデフラグします[種類]

Vacuumを使用する理由: 1.テーブル、ビュー、インデックス、トリガーなどのデータベースオブジェクトを削除したり、テーブルからデータを削除したりすると、データベースファイルのサイズが常に大きくなります。SQLiteは削除されたオブジェクトを空きとしてマークするだけなので、将来の使用のためにそれを予約します。

2つのインデックスとテーブルが断片化され、挿入、更新、削除の数が多くなります。

  1. 未使用のデータブロックは、挿入、更新、および削除操作によって作成されます。

注意事項:データベースによって処理が異なる場合があります。たとえば、SQLiteでエイリアスなしのROWIDを使用すると、VACUUMコマンドによってROWID値がリセットされます。ただし、INTEGER PRIMARY KEY列を使用する場合、VACUUMはその列の値を変更しません。

バキュームは、データベースをコピーして操作を実行するためのスペースを必要とします

0
Shane.A