VACUUM trong SQLite - SQLite căn bản và nâng cao
Trong bài học hôm nay chúng ta sẽ cùng một khái niệm khá lạ trong SQLite đó là VACUUM. Vậy VACUUM trong SQLite là gi? Chúng ta sẽ cùng tìm hiểu trong nội dung tiếp theo. 1. VACUUM trong SQLite là gì? Lệnh VACUUM trong SQLite làm sạch cơ sở dữ liệu chính bằng cách sao chép nội dung của ...
Trong bài học hôm nay chúng ta sẽ cùng một khái niệm khá lạ trong SQLite
đó là VACUUM
. Vậy VACUUM
trong SQLite
là gi? Chúng ta sẽ cùng tìm hiểu trong nội dung tiếp theo.
1. VACUUM trong SQLite là gì?
Lệnh VACUUM
trong SQLite
làm sạch cơ sở dữ liệu chính bằng cách sao chép nội dung của nó vào file cơ sở dữ liệu tạm thời và tải lại file cơ sở dữ liệu gốc từ bản sao. Điều này giúp loại bỏ các free page, sắp xếp lại dữ liệu bảng để chúng liền kề nhau và làm sạch cấu trúc file cơ sở dữ liệu.
Lệnh VACUUM
trong SQLite
có thể thay đổi ROWID
của các entry trong các bảng mà không có INTEGER PRIMARY KEY
rõ ràng. Lệnh VACUUM
chỉ hoạt động trên main database. Không thể VACUUM
một attached database file.
Lệnh VACUUM
sẽ thất bại nếu có một active transaction. Lệnh VACUUM
là không có cơ sở dữ liệu trong bộ nhớ. Khi lệnh VACUUM
xây dựng lại file database từ scratch, VACUUM
cũng có thể được sử dụng để sửa đổi nhiều tham số cấu hình dành riêng cho cơ sở dữ liệu.
2. Manual VACUUM trong SQLite
Sau đây là cú pháp của VACUUM
từ dấu nhắc lệnh:
$sqlite3 database_name "VACUUM;"
Bạn có thể chạy VACUUM
từ dấu 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;
3. Auto VACCUM trong SQLite
Auto-VACUUM
trong SQLite
không làm giống như VACUUM
mà nó chỉ di chuyển các free page đến cuối cơ sở dữ liệu do đó làm giảm kích thước cơ sở dữ liệu. Bằng cách đó, nó có thể phân mảnh đáng kể cơ sở dữ liệu trong khi VACUUM
đảm bảo phân mảnh. Do đó, Auto-VACUUM
chỉ giữ cho cơ sở dữ liệu nhỏ.
Bạn có thể enable/disable tính năng auto-vacuuming trong SQLite
bằng các pragma sau tại dấu nhắc SQLite
.
sqlite> PRAGMA auto_vacuum = NONE; -- 0 means disable auto vacuum sqlite> PRAGMA auto_vacuum = FULL; -- 1 means enable full auto vacuum sqlite> PRAGMA auto_vacuum = INCREMENTAL; -- 2 means enable incremental vacuum
Bạn có thể chạy lệnh sau từ dấu nhắc lệnh để kiểm tra cài đặt auto-vacuum.
$sqlite3 database_name "PRAGMA auto_vacuum;"