High Water Mark (HWM) trong cơ sở dữ liệu là một khái niệm quan trọng liên quan đến quản lý không gian lưu trữ và hiệu năng của cơ sở dữ liệu, đặc biệt trong các hệ quản trị cơ sở dữ liệu như Oracle, PostgreSQL, và SQL Server.
1. Khái niệm High Water Mark (HWM)
• HWM là điểm đánh dấu cao nhất mà hệ quản trị cơ sở dữ liệu (DBMS) đã từng sử dụng để lưu trữ dữ liệu trong một bảng hoặc tablespace.
• Khi dữ liệu được chèn vào một bảng, HWM sẽ tăng lên để phản ánh mức sử dụng không gian mới.
• Khi dữ liệu bị xóa, HWM không giảm trừ khi bạn thực hiện các hoạt động quản lý thủ công (như co lại hoặc tái tổ chức bảng).
2. Cách HWM Hoạt động trong Oracle Database
a. Các Mức Đánh Dấu HWM
Oracle quản lý HWM trong hai cấp độ:
• High Water Mark (Tablespace Level): Quản lý ở cấp độ toàn tablespace hoặc datafile.
• Table High Water Mark: Quản lý ở cấp độ bảng và các đoạn dữ liệu liên quan.
b. Khi nào HWM Tăng?
• Khi bạn thêm dữ liệu (INSERT, UPDATE).
• Khi bạn thực hiện thao tác LOAD DATA hoặc IMPORT.
c. Khi nào HWM Không Giảm?
• Khi dữ liệu bị xóa (DELETE).
• Khi bạn sử dụng TRUNCATE TABLE, HWM sẽ được đặt lại về vị trí ban đầu vì tất cả dữ liệu sẽ bị xóa ngay lập tức.
3. Tác Động Của HWM
a. Hiệu Năng Truy Vấn
• Truy vấn chậm: Khi HWM tăng quá cao mà không có dữ liệu tương ứng, hệ quản trị vẫn quét toàn bộ các khối dữ liệu dưới HWM, dẫn đến các truy vấn không hiệu quả (Full Table Scan).
• Tăng thời gian xử lý: Một bảng có HWM cao sẽ làm tăng chi phí của các hoạt động quét bảng hoặc chỉ mục.
b. Lãng Phí Không Gian
• Nếu bạn thường xuyên chèn và xóa dữ liệu mà không làm giảm HWM, sẽ có không gian không sử dụng trong bảng hoặc tablespace.
4. Cách Quản Lý và Giảm HWM
a. Giảm HWM trong Oracle
• Truncate Table
TRUNCATE TABLE ten_bang;
Xóa tất cả các hàng và đặt lại HWM.
• Shrink Space (Oracle 10g trở lên)
ALTER TABLE ten_bang ENABLE ROW MOVEMENT;
ALTER TABLE ten_bang SHRINK SPACE;
Thu nhỏ không gian bảng và giảm HWM mà không cần xóa dữ liệu.
b. Rebuild Table/Index
• Rebuild Table
CREATE TABLE bang_moi AS SELECT * FROM bang_cu;
DROP TABLE bang_cu; RENAME bang_moi TO bang_cu;
• Rebuild Index
ALTER INDEX ten_chi_muc REBUILD;
5. Tối Ưu Hóa Liên Quan Đến HWM
a. Theo Dõi HWM
• Sử dụng câu lệnh SQL để kiểm tra HWM trong Oracle:
SELECT segment_name, tablespace_name, bytes/1024/1024 AS size_mb FROM dba_segments WHERE segment_type = 'TABLE' AND segment_name = 'TEN_BANG';
b. Chiến Lược Quản Lý
• Sử dụng Partitioning: Giúp giảm tải dữ liệu, quản lý tốt hơn các phần dữ liệu cũ.
• Tự động hóa dọn dẹp: Dùng các công cụ như Oracle Scheduler hoặc Jobs để tự động thực thi việc dọn dẹp dữ liệu và giảm HWM định kỳ.
6. Thực Tế Áp Dụng
• OLTP (Online Transaction Processing): Cần theo dõi HWM liên tục vì dữ liệu được thêm và xóa thường xuyên.
• Data Warehouse: Tối ưu hóa bằng cách sử dụng Partition và Shrink Space để tránh việc lãng phí không gian lưu trữ.