SQLiteのVACUUMメモ

高頻度でインサートし、一定期間が過ぎたものはデータが不要になるシステムの場合、定期的に不要データを掃除しないとぶくぶくデータサイズが膨れ上がる。組込型データベースの SQLite ではデータを SQL で DELETE するだけでは物理削除されず、PostgreSQL のように VACUUM する必要がある。 VACUUM のバリエーションはいろいろあるものの、結論としては $ sqlite filename.db vacuum とやるのが一番無難。 これまでは個人用途のしょうもないプログラムのためにしか使って来なかったため、スルーしていた SQLite の VACUUM 機能をメモ。 VACUUM の種類 SQLite の VACUUM には大きく分けて vacuum と auto_vacuum の2つがある。 vacuum http://sqlite.org/lang_vacuum.html まずは vacuum から。vacuum はデータベースファイル全体に対して データベースページのパックや空き領域の開放 デフラグメンテーション などを行う 注意点 データベースのリビルド前に既存のデータベースを一時ファイルにコピーするので、既存のDB以上のディスク空き容量が必要 vacuum 後は rowid が変わることがある (select rowid from table_name で確認可能) 使い方 auto_vacuum http://sqlite.org/pragma.html#pragma_auto_vacuum 次に 3.1 以降(2005年リリース)から追加された auto_vacuum。Continue reading “SQLiteのVACUUMメモ”