Giới thiệu
Hybrid Partitioning là một tính năng mới được giới thiệu trong Oracle 19c, cho phép bạn tạo ra sự kết hợp giữa các phân vùng bên ngoài và bên trong cho một bảng duy nhất. Tính năng này mang lại sự linh hoạt trong việc quản lý dữ liệu và tối ưu hóa hiệu suất cho các ứng dụng cơ sở dữ liệu lớn.
Cấu trúc bảng Hybrid Partitioning
Định nghĩa
Khi bạn tạo một bảng hoặc phân vùng kiểu bên ngoài, chỉ có siêu dữ liệu và định nghĩa của nó được lưu trữ trong cơ sở dữ liệu; dữ liệu thực sự được lưu trữ bên ngoài cơ sở dữ liệu ở cấp độ hệ điều hành.
Ví dụ thực tế
Giả sử bạn muốn lưu trữ thông tin như số ID quốc gia, tên, họ và ID tổ chức trong một bảng có tên là mytbl. Bạn có thể phân vùng bảng này dựa trên org_id với câu lệnh sau:
sql
CREATE TABLE mytbl(national_id NUMBER, name VARCHAR2(20), last_name VARCHAR2(20), org_id NUMBER)
PARTITION BY LIST (org_id)
(
PARTITION p1 VALUES (1),
PARTITION p2 VALUES (2)
);
Nhập dữ liệu vào bảng
Bạn có thể lưu trữ thông tin của những người có org_id là 1 và 2 trong cơ sở dữ liệu (nội bộ) như sau:
sql
insert into mytbl values(100, 'ali', 'rezai', 1);
insert into mytbl values(101, 'hadi', 'alavi', 1);
insert into mytbl values(102, 'reza', 'karimi', 2);
insert into mytbl values(103, 'hossein', 'akbari', 2);
commit;
Dữ liệu bên ngoài
Đối với một số lý do, bạn muốn lưu trữ dữ liệu của những người có org_id là 3 và 4 bên ngoài cơ sở dữ liệu. Thông tin này được lưu trữ trong hai tệp: part3.txt và part4.txt:
plaintext
[oracle@ol7 ~]$ cat /part3/part3.txt
104,javad,akbarian,3
105,mina,karimi,3
106,sima,kabiri,3
107,nima,kasiri,3
[oracle@ol7 ~]$ vi /part4/part4.txt
108,kimya,hasani,4
109,kobra,armani,4
110,kazem,kalvandi,4
111,usef,kalvani,4
Để truy cập dữ liệu này trong cơ sở dữ liệu, bạn cần tạo hai thư mục có tên là part3dir và part4dir:
sql
SQL> create directory part3dir as '/part3';
SQL> create directory part4dir as '/part4';
Thêm phân vùng bên ngoài
Sử dụng tính năng Hybrid Partitioning, bạn có thể thêm hai phân vùng bên ngoài vào bảng mytbl như sau:
Kích hoạt thuộc tính PHÂN VÙNG BÊN NGOÀI cho bảng mytbl:
sql
ALTER TABLE mytbl
ADD EXTERNAL PARTITION ATTRIBUTES
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY part3dir
ACCESS PARAMETERS (
FIELDS TERMINATED BY ',' (national_id, name, last_name, org_id)
));
Thêm các phân vùng cần thiết:
sql
ALTER TABLE mytbl ADD PARTITION p3 VALUES (3) EXTERNAL LOCATION (part3dir:'part3.txt');
ALTER TABLE mytbl ADD PARTITION p4 VALUES (4) EXTERNAL LOCATION (part4dir:'part4.txt');
Kiểm tra cấu trúc bảng
Sau khi thêm hai phân vùng này, cấu trúc bảng sẽ như sau:
sql
create table MYTBL
(
national_id NUMBER,
name VARCHAR2(20),
last_name VARCHAR2(20),
org_id NUMBER
)
organization external
(
type ORACLE_LOADER
default directory PART3DIR
access parameters
(
FIELDS TERMINATED BY ',' (national_id, name, last_name, org_id)
)
)
reject limit 0
partition by list (ORG_ID)
(
partition P1 values (1),
partition P2 values (2),
partition P3 values (3),
partition P4 values (4)
);
Truy cập dữ liệu
Bạn có thể truy cập dữ liệu được lưu trữ bên ngoài. Ví dụ, để xem dữ liệu của những người có org_id=3, bạn có thể chạy:
sql
select * from mytbl where org_id=3;
Kế hoạch thực thi
Bạn có thể kiểm tra kế hoạch thực thi cho org_id=2 và org_id=3 như sau:
sql
select * from mytbl where org_id=2;
select * from mytbl where org_id=3;
Tính năng chính và giới hạn của Hybrid Partitioning
- Chỉ hỗ trợ chỉ mục một phần:
sql
SQL> create index ind1 on mytbl(name);
ORA-14354: operation not supported for a hybrid-partitioned table
SQL> create index ind1 on mytbl(name) local;
ORA-14354: operation not supported for a hybrid-partitioned table
SQL> create index ind1 on mytbl(name) indexing partial;
Index created
SQL> create index ind1 on mytbl(name) local indexing partial;
Index created
- DML chỉ có thể thực hiện trên các phân vùng nội bộ:
sql
SQL> insert into mytbl values(130, 'hossein', 'zaker', 4);
ORA-14466: Data in a read-only partition or subpartition cannot be modified.
SQL> insert into mytbl values(130, 'hossein', 'zaker', 1);
1 row inserted
- Không thể thêm kiểu dữ liệu LOB và LONG:
sql
SQL> alter table MYTBL add pic blob;
ORA-03001: unimplemented feature
SQL> alter table MYTBL add id number;
Table altered
- Truy vấn bảng sử dụng Hybrid Partitioning:
sql
select TABLE_NAME, HYBRID from user_tables where HYBRID='YES';
Các phương pháp tốt nhất
- Lập kế hoạch phân vùng hợp lý: Nên phân tích cách dữ liệu sẽ được truy xuất và sử dụng để xác định cách phân vùng phù hợp.
- Kiểm tra hiệu suất: Sử dụng các công cụ để theo dõi hiệu suất của các truy vấn và điều chỉnh phân vùng nếu cần thiết.
Những cạm bẫy thường gặp
- Nhầm lẫn giữa phân vùng bên trong và bên ngoài: Đảm bảo hiểu rõ cách thức hoạt động của từng loại phân vùng để tránh lỗi khi thực hiện DML.
- Không kiểm tra tính tương thích: Trước khi nâng cấp hoặc thay đổi cấu trúc bảng, hãy đảm bảo rằng tất cả các ứng dụng liên quan đều tương thích.
Mẹo tối ưu hóa hiệu suất
- Sử dụng chỉ mục hợp lý: Chỉ tạo chỉ mục cho các phân vùng nội bộ và kiểm tra hiệu suất.
- Quản lý dữ liệu bên ngoài hiệu quả: Đảm bảo các tệp bên ngoài được tối ưu hóa và dễ dàng truy cập.
Kết luận
Tính năng Hybrid Partitioning trong Oracle 19c mở ra nhiều khả năng mới cho việc quản lý dữ liệu. Bằng cách hiểu rõ cách sử dụng và tối ưu hóa nó, bạn có thể cải thiện hiệu suất và khả năng mở rộng của cơ sở dữ liệu. Hãy thử nghiệm với các phân vùng trong dự án của bạn và theo dõi kết quả đạt được.
Câu hỏi thường gặp (FAQ)
Q: Hybrid Partitioning có thể sử dụng cho tất cả các loại bảng không?
A: Hybrid Partitioning chỉ có thể sử dụng cho các bảng hỗ trợ tính năng này.
Q: Có thể thực hiện các thao tác DML trên phân vùng bên ngoài không?
A: Không, các thao tác DML chỉ có thể thực hiện trên các phân vùng bên trong.
Q: Làm thế nào để kiểm tra các bảng sử dụng Hybrid Partitioning?
A: Sử dụng truy vấn select TABLE_NAME, HYBRID from user_tables where HYBRID='YES'; để tìm các bảng này.