Tính Năng Memoptimized Rowstore Trong Oracle Database: Từ Phiên Bản 19c đến 23ai
Mở Đầu
Tính năng Memoptimized Rowstore giúp tăng tốc độ ghi dữ liệu trong Oracle Database bằng cách giữ các bản ghi trong bộ nhớ trước khi ghi xuống đĩa. Đây là một bước tiến quan trọng dành cho những ứng dụng cần xử lý dữ liệu tốc độ cao.
Kể từ phiên bản Oracle 19c và 21c, người dùng muốn kích hoạt Memoptimized Rowstore phải bật tính năng ở cấp độ bảng và thêm hint MEMOPTIMIZE_WRITE vào câu lệnh INSERT. Tuy nhiên, điều này gây khó khăn cho các ứng dụng đã phát triển sẵn, khi việc chỉnh sửa các câu lệnh INSERT để thêm hint có thể rất phức tạp. Trong phiên bản Oracle 23ai, Oracle đã bổ sung một tham số hệ thống mới giúp đơn giản hóa đáng kể quy trình này.
Bài viết dưới đây sẽ cung cấp cái nhìn chi tiết về cách sử dụng Memoptimized Rowstore qua các phiên bản Oracle khác nhau, cũng như hướng dẫn cấu hình tham số mới giúp loại bỏ yêu cầu sử dụng hint trong INSERT.
1. Cách Thức Hoạt Động Memoptimized Rowstore Trong Oracle 19c – 21c
1.1 Kích Hoạt Tính Năng Ở Cấp Độ Bảng
Để sử dụng Memoptimized Rowstore trên bảng, bạn cần thực hiện lệnh sau:
ALTER TABLE tbl1 MEMOPTIMIZE FOR WRITE;
Sau khi table được cấu hình, các câu lệnh INSERT muốn hưởng lợi từ tính năng này bắt buộc phải có hint MEMOPTIMIZE_WRITE.
3. Sử Dụng Memoptimized Rowstore Không Cần Hint Trong Oracle 23ai
3.1 Tạo Bảng Và Kích Hoạt Memoptimized Rowstore
CREATE TABLE tbl1 (
id NUMBER NOT NULL,
text VARCHAR2(3000),
mydate DATE
)
SEGMENT CREATION IMMEDIATE
PARTITIONBYRANGE (mydate)
INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
(
PARTITION p1 VALUES LESS THAN (TO_DATE('01-01-2015', 'DD-MM-YYYY'))
);
ALTER TABLE tbl1 MEMOPTIMIZE FOR WRITE;
3.2 Thêm Dữ Liệu Với Câu Lệnh INSERT Bình Thường
INSERT INTO tbl1 VALUES (1, 'www.usefzadeh.com', SYSDATE);
COMMIT;
Câu lệnh trên chạy không cần hint.
Dữ liệu sẽ được lưu trong bộ nhớ trước khi được ghi xuống đĩa, đảm bảo ghi nhanh.
3.3 Xử Lý Ghi Dữ Liệu Xuống Đĩa
Bạn có thể đợi tự động hoặc chủ động đẩy dữ liệu từ bộ nhớ xuống đĩa bằng cách sử dụng procedure:
EXEC DBMS_MEMOPTIMIZE_ADMIN.WRITES_FLUSH();
3.4 Kiểm Tra Dữ Liệu
SELECT*FROM tbl1;
Dữ liệu sẽ được hiển thị đầy đủ.
Điều này chứng tỏ tính năng Memoptimized Rowstore đang hoạt động hiệu quả.
Khi memoptimize_writes=ON, bạn có thể tiện lợi hơn nhiều trong việc tích hợp tính năng Memoptimized Rowstore vào các ứng dụng mà không cần chỉnh sửa câu lệnh SQL insert hiện tại.
4. Quay Lại Sử Dụng Hint Khi Thay Đổi Lại Tham Số MEMOPTIMIZE_WRITES
Nếu bạn cấu hình tham số về giá trị mặc định là HINT:
ALTERSYSTEMSET memoptimize_writes = HINT SCOPE= SPFILE;
STARTUP FORCE;
Bạn phải sử dụng hint MEMOPTIMIZE_WRITE để tận dụng tính năng Memoptimized Rowstore:
Nếu không có hint, INSERT sẽ ghi dữ liệu trực tiếp xuống đĩa, không còn giữ trong bộ nhớ để tối ưu tốc độ nữa.
Việc lựa chọn giữa hai cách này phụ thuộc vào mục đích triển khai và tính tương thích với ứng dụng hiện có.
5. Bảng So Sánh Tính Năng Memoptimized Rowstore Qua Các Phiên Bản
Phiên bản Oracle
Cách kích hoạt Memoptimized Rowstore
Yêu cầu thêm hint MEMOPTIMIZE_WRITE trong INSERT
Tham số memoptimize_writes
19c, 21c
ALTER TABLE … MEMOPTIMIZE FOR WRITE
Có
Không có
23ai
ALTER TABLE … MEMOPTIMIZE FOR WRITE
Không (nếu memoptimize_writes=ON)
memoptimize_writes = HINT/ON
Kết Luận
Tính năng Memoptimized Rowstore giúp tăng hiệu suất ghi dữ liệu trong Oracle Database bằng cách giữ dữ liệu trong bộ nhớ trước khi ghi xuống đĩa. Trong các phiên bản Oracle 19c và 21c, để sử dụng tính năng này, bạn bắt buộc phải thêm hint MEMOPTIMIZE_WRITE trong các câu lệnh INSERT. Điều này gây không ít trở ngại cho những ứng dụng đã phát triển trước đó.
Oracle 23ai đã cải tiến đáng kể với việc bổ sung tham số hệ thống memoptimize_writes, cho phép sử dụng Memoptimized Rowstore mà không cần thêm hint — một bước tiến lớn giúp đơn giản hóa việc triển khai và nâng cao tính linh hoạt trong phát triển ứng dụng.
Bạn nên cân nhắc cấu hình tham số này tùy theo môi trường và ứng dụng của mình, đồng thời tận dụng tính năng này để tối ưu hiệu suất Database một cách hiệu quả.