VACUUM trong SQLite



Lệnh VACUUM trong SQLite xóa cơ sở dữ liệu chính (Main Database) bằng việc sao chép nội dung của nó sang một Database File tạm thời và nạp lại Database File ban đầu từ bản sao. Việc này loại bỏ các Free Page và căn chỉnh lại dữ liệu bảng để chúng là liền kề nhau, và xóa cấu trúc của Database File.

Lệnh VACUUM có thể thay đổi ROWID của các entry trong các bảng mà không có một INTERGER PRIMARY KEY tường minh. Lệnh VACUUM chỉ làm việc trên Main Database. Bạn không thể thực hiện lệnh VACUUM trên một Attach Database.

Lệnh VACUUM trong SQLite sẽ thất bại nếu có một Active Transaction. Lệnh này cũng có thể được sử dụng để sửa đổi nhiều tham số cấu hình Database cụ thể.

Manual VACUUM trong SQLite

Sau đây là cú pháp đơn giản để thông báo một lệnh VACUUM cho toàn bộ cơ sở dữ liệu từ dòng nhắc lệnh:

$sqlite3 database_name "VACUUM;"

Bạn cũng có thể chạy VACUUM từ dòng nhắc sqlite như sau:

sqlite> VACUUM;

Bạn cũng có thể chạy VACUUM trên một bảng cụ thể như sau:

sqlite> VACUUM table_name;

Auto-VACCUM trong SQLite

Auto-VACUUM trong SQLite không thực hiện giống như VACUUM, thay vào đó nó chỉ di chuyển các Free Page tới phần cuối của cơ sở dữ liệu, do đó giảm kích cỡ của cơ sở dữ liệu. Bằng việc thực hiện như thế, nó có thể phân mảnh cơ sở dữ liệu trong khi VACUUm đảm bảo cơ sở dữ liệu là liên tục. Vì thế, Auto-VACUUM chỉ giữ cho cơ sở dữ liệu nhỏ hơn.

Bạn có thể kích hoạt/vô hiệu hóa auto-vacuum trong SQLite bằng các Pragma sau dòng nhắc sqlite:

sqlite> PRAGMA auto_vacuum = NONE;  -- 0 means disable auto vacuum
sqlite> PRAGMA auto_vacuum = INCREMENTAL;  -- 1 means enable incremental vacuum
sqlite> PRAGMA auto_vacuum = FULL;  -- 2 means enable full auto vacuum

Bạn có thể chạy lệnh sau từ dòng nhắc lệnh để kiểm tra thiết lập auto-vacuum.

$sqlite3 database_name "PRAGMA auto_vacuum;"

Các bài học SQLite phổ biến khác tại VietJack: