Bài viết gốc được xuất bản bởi TriCore: 12 tháng 4, 2017
Loạt bài blog hai phần này bao gồm các tính năng tinh chỉnh hiệu suất mới trong Oracle® Database. Phần 1 thảo luận Oracle Database phiên bản 12.1.0.1. Bài tiếp theo này bao gồm phiên bản 12.1.0.2.
Giới thiệu In-Memory column store
In-Memory column store (IM column store) là khu vực tùy chọn của System Global Area (SGA) lưu trữ bản sao của bảng, partition và các đối tượng database khác ở định dạng cột (columnar) được tối ưu cho quét nhanh. IM column store tăng tốc hiệu suất database cho phân tích, kho dữ liệu (data warehousing) và ứng dụng xử lý giao dịch trực tuyến (OLTP).
Cách IM column store hoạt động
IM column store lưu trữ bản sao đối tượng database trong SGA. Nó không thay thế database buffer cache. Cả hai khu vực bộ nhớ có thể lưu trữ cùng dữ liệu ở định dạng khác nhau. Hàng lưu trữ trong IM column store được chia thành các vùng bộ nhớ lớn ở định dạng cột. Một cột nằm riêng biệt trong vùng bộ nhớ liền kề trong mỗi vùng.
Bạn có thể bật IM column store cho bất kỳ đối tượng database nào sau:
- Tables (Bảng)
- Materialized views (View vật chất hóa)
- Partitions (Phân vùng)
- Tablespaces (Không gian bảng)
Bạn có thể lưu tất cả cột của một bảng trong IM column store, hoặc chỉ một tập con. Tương tự, cho bảng phân vùng, bạn có thể lưu tất cả partition của bảng, hoặc chỉ một tập con. Nếu bạn bật IM column store ở cấp tablespace, Oracle Database tự động bật tất cả bảng và materialized views trong tablespace cho IM column store.
Lợi ích hiệu suất khi dùng IM column store
Lưu trữ đối tượng database trong bộ nhớ thay vì trên đĩa cho phép Oracle Database thực hiện quét, truy vấn, join và aggregate nhanh hơn nhiều. IM column store có thể tăng hiệu suất khi thực hiện các tác vụ sau:
- Quét số lượng lớn hàng và dùng bộ lọc
- Truy vấn một tập con nhỏ của tập cột lớn
- Join bảng nhỏ với bảng lớn, đặc biệt khi điều kiện join lọc hầu hết các hàng
- Aggregate dữ liệu trong truy vấn
IM column store cũng nâng cao hiệu suất câu lệnh thao tác dữ liệu (DML). Hệ thống OLTP thường yêu cầu nhiều index được tạo trên các cột thường truy cập. Các index này có thể ảnh hưởng tiêu cực đến hiệu suất câu lệnh DML. Lưu trữ đối tượng database trong IM column store làm cho các index này trở nên không cần thiết vì quét chạy nhanh hơn nhiều. Loại bỏ các index không cần thiết cải thiện hiệu suất câu lệnh DML vì ít index hơn phải được cập nhật.
Nguồn ảnh: Oracle Learning Library YouTube videos: Oracle Database 12c demos: In-Memory Column Store Architecture Overview
Ước lượng kích thước IM column store cần thiết
IM column store hỗ trợ các phương pháp nén sau:
| Phương pháp nén | Thứ tự nén dữ liệu in-memory | So sánh nén In-Memory |
|---|---|---|
| NO MEMCOMPRESS | 1 | NIL |
| MEMCOMPRESS FOR DML | 2 (ít nén nhất) | B<all |
| MEMCOMPRESS FOR QUERY LOW | 3 | B<C<D |
| MEMCOMPRESS FOR QUERY HIGH | 4 | C<D<E |
| MEMCOMPRESS FOR CAPACITY LOW | 5 | D<E<F |
| MEMCOMPRESS FOR CAPACITY HIGH | 6 (nén cao nhất) | all<F |
Ví dụ sau cho thấy cách bật bảng oe.product_information cho IM column store và chỉ định phương pháp nén MEMCOMPRESS FOR CAPACITY HIGH:
SQL>ALTER TABLE oe.product_information INMEMORY MEMCOMPRESS FOR CAPACITY HIGH;
Định kích thước IM column store
Sau khi xác định bộ nhớ cần thiết để lưu trữ đối tượng database trong IM column store, bạn có thể đặt kích thước của nó bằng tham số khởi tạo INMEMORY_SIZE.
Sử dụng các bước sau để đặt kích thước IM column store:
Đặt tham số khởi tạo
INMEMORY_SIZEthành kích thước yêu cầu.Giá trị mặc định cho tham số này là
0, nghĩa là IM column store không được dùng. Để bật IM column store, đặt tham số này thành giá trị khác 0.Trong môi trường multitenant, bạn có thể chỉ định kích thước IM column store cho từng pluggable database (PDB) bằng cách đặt tham số này cho mỗi PDB. Tổng giá trị cho các PDB không nhất thiết phải bằng giá trị cho container database (CDB), và có thể lớn hơn nó.
Sau khi đặt kích thước IM column store, bạn phải khởi động lại instance database để cho phép nó lưu trữ đối tượng database.
Ví dụ sau cho thấy cách đặt kích thước IM column store thành 100 GB:
ALTER SYSTEM SET INMEMORY_SIZE = 100G;
Hỗ trợ quản trị cho IM column store
Báo cáo SQL Monitor, báo cáo Active Session History (ASH) và báo cáo Automatic Workload Repository (AWR) hiện hiển thị thống kê cho các hoạt động in-memory khác nhau.
Chế độ cache database (Database caching modes)
Có hai chế độ cache database:
- Chế độ cache database mặc định mà các phiên bản trước của Oracle Database dùng
- Chế độ force full database caching mới trong Oracle Database 12c Release 1 (12.1.0.2)
Chế độ cache database mặc định (Default database caching mode)
Mặc định, Oracle Database dùng chế độ cache database mặc định khi thực hiện full table scan.
Nếu instance Oracle Database xác định có đủ không gian để cache toàn bộ database trong buffer cache và có lợi để làm vậy, thì instance tự động cache toàn bộ database trong buffer cache.
Nếu instance xác định không đủ không gian để cache toàn bộ database trong buffer cache, nó thực hiện các hành động sau:
- Bảng nhỏ nhỏ hơn 2% kích thước buffer cache: Tải bảng này vào bộ nhớ.
- Bảng kích thước trung bình: Phân tích khoảng cách giữa lần quét bảng cuối cùng và timestamp aging của buffer cache. Nếu kích thước bảng được tái sử dụng trong lần quét cuối lớn hơn kích thước buffer cache còn lại, cache bảng.
- Bảng lớn: Không tải vào bộ nhớ trừ khi bạn khai báo rõ ràng bảng cho buffer pool
KEEP.
Chế độ force full database caching (Force full database caching mode)
Chế độ force full database caching cho phép bạn cache toàn bộ database trong bộ nhớ, có thể cung cấp cải thiện hiệu suất đáng kể khi thực hiện full table scan hoặc truy cập large objects (LOBs).
Trong chế độ caching mặc định, Oracle Database không luôn cache dữ liệu gốc khi user truy vấn bảng lớn. Trong chế độ force full database caching, Oracle Database giả định buffer cache đủ lớn để cache toàn bộ database và cố gắng cache tất cả block mà truy vấn truy cập. Nó thành công khi kích thước database nhỏ hơn kích thước database buffer cache.
Oracle Database tải tất cả data file vào buffer cache khi chúng được truy cập, bao gồm NOCACHE LOBs và LOBs dùng Oracle Database SecureFiles.
Nguồn ảnh: Full DB In-Memory Caching.
Khi nào dùng force full database caching mode
Cân nhắc dùng force full database caching mode trong các tình huống sau:
- Kích thước database logic (hoặc không gian thực tế dùng) nhỏ hơn buffer cache riêng lẻ của mỗi instance database trong môi trường Oracle Real Application Clusters (RAC). Khuyến nghị này cũng áp dụng cho database non-Oracle RAC.
- Kích thước database logic nhỏ hơn 80% tổng kích thước buffer cache của tất cả instance database cho workload được phân vùng tốt (theo truy cập instance) trong môi trường Oracle RAC.
- Database dùng
SGA_TARGEThoặcMEMORY_TARGET. - Cần cache
NOCACHELOBs.NOCACHELOBs không bao giờ được cache trừ khi dùng force full database caching.
Trong ba tình huống đầu tiên, bạn nên theo dõi hiệu suất hệ thống định kỳ để xác minh các chỉ số hiệu suất đáp ứng kỳ vọng của bạn.
Lưu ý: Khi một instance Oracle RAC database dùng force full database caching mode, thì tất cả các instance database khác trong môi trường Oracle RAC cũng dùng chế độ này. Trong môi trường multitenant, force full database caching mode áp dụng cho toàn bộ CDB, bao gồm tất cả PDB của nó.
Thiết lập và xác minh chế độ cache database
Trước tiên, kiểm tra kích thước database và bộ nhớ. Bạn có thể loại trừ tablespace SYSAUX, như ví dụ sau:
SQL> col size_mb format 9999
SQL> SELECT sum(bytes)/1024/1024 seg_size_mb FROM dba_segments where tablespace_name != 'SYSAUX';
SEG_SIZE_MB
-----------
4971
Dùng lệnh sau để kiểm tra kích thước buffer cache:
SQL> SELECT round(sum(cnum_set * blk_size)/1024/1024) size_mb FROM X$KCBWDS;
SIZE_MB
-------
5283
Sử dụng các bước sau để cấu hình database cho force full database caching:
SQL> startup mount;
Database mounted.
SQL> ALTER DATABASE FORCE FULL DATABASE CACHING;
Database altered.
SQL> SELECT force_full_db_caching FROM v$database;
FORCE_FULL_DB_CACHING
---
YES
SQL> alter database open;
Database altered.
Sử dụng các bước sau để xác minh force full database caching mode được bật:
Dùng lệnh sau để truy vấn view
V$DATABASE:SQL> SELECT FORCE_FULL_DB_CACHING FROM V$DATABASE;Kết quả là
YEShoặcNO.Để bật force full database caching mode, dùng lệnh
ALTER DATABASEsau:ALTER DATABASE FORCE FULL DATABASE CACHING;Lệnh trả về xác nhận:
Database altered.Để tắt force full database caching, dùng lệnh sau:
SQL> ALTER DATABASE NO FORCE FULL DATABASE CACHING;Lệnh trả về xác nhận:
Database altered.
Kết luận
Tóm lại, IM column store giảm thời gian thực thi câu lệnh DML, và force full database caching mode cung cấp cải thiện hiệu suất đáng kể. Để biết thêm thông tin về các tính năng tinh chỉnh hiệu suất mới của Oracle Database, hãy xem các báo cáo mà Oracle Enterprise Manager (OEM) cung cấp.
Sử dụng tab Feedback để bình luận hoặc đặt câu hỏi.
Tham khảo
Các nguồn sau được dùng làm tham khảo cho bài blog này:
- Database Performance Tuning Guide: Performance Benefits of Using the In-Memory Column Store
- Full DB In-Memory Caching
- Oracle Database 12c demos: In-Memory Column Store Architecture Overview