Thứ Sáu, 7 tháng 2, 2025

Quy Trình Xử Lý Bảng Dữ Liệu Lớn Hiệu Quả Trong Oracle Database

I. Tổng Quan Về Xử Lý Bảng Lớn

Bảng dữ liệu lớn (Large Table) có thể làm suy giảm hiệu năng của hệ thống Oracle do:

  • Quét bảng toàn bộ (Full Table Scan - FTS) làm tăng tải CPU và I/O.
  • Tốc độ truy vấn chậm do Index không hiệu quả hoặc không đủ.
  • Dữ liệu rác (Fragmentation) sau nhiều lần INSERT/DELETE.
  • Không có phân vùng (Partitioning) dẫn đến truy vấn kém tối ưu.

Mục tiêu: Tăng hiệu suất truy vấn và tối ưu lưu trữ bằng cách:

  1. Phân tích kích thước và tình trạng bảng.
  2. Áp dụng Partitioning để chia nhỏ dữ liệu.
  3. Tối ưu Index và sử dụng Index Rebuild khi cần.
  4. Dọn dẹp không gian trống và giảm Fragmentation.
  5. Tối ưu hóa truy vấn với EXPLAIN PLAN.

II. Quy Trình Xử Lý Bảng Lớn

Dưới đây là quy trình tối ưu hóa bảng lớn kèm các câu lệnh cụ thể:

1. Kiểm Tra Kích Thước Bảng & Tình Trạng Hiện Tại

Trước khi tối ưu, cần phân tích dung lượng bảng và hiệu suất truy vấn.

SELECT segment_name, tablespace_name, bytes/1024/1024 AS size_mb FROM dba_segments WHERE segment_type = 'TABLE' AND segment_name = 'LARGE_TABLE';
  • segment_name: Tên bảng cần kiểm tra.
  • bytes/1024/1024: Hiển thị kích thước bảng tính bằng MB.

📌 Kiểm tra chỉ mục (Indexes) có hiệu quả không?

SELECT index_name, table_name, num_rows, leaf_blocks, distinct_keys
FROM dba_indexes WHERE table_name = 'LARGE_TABLE';
  • Nếu leaf_blocks quá lớn → Chỉ mục cần tối ưu hoặc chia nhỏ.
  • Nếu num_rows cao nhưng distinct_keys thấp → Index có thể không hiệu quả.

📌 Kiểm tra kế hoạch thực thi SQL (Execution Plan)

EXPLAIN PLAN FOR
SELECT * FROM LARGE_TABLE WHERE transaction_date > SYSDATE - 30; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

Nếu thấy TABLE ACCESS FULL, ta cần INDEX hoặc PARTITIONING.


2. Áp Dụng Partitioning Để Chia Nhỏ Bảng

Nếu bảng chứa nhiều dữ liệu lịch sử (theo ngày/tháng/năm), bạn nên sử dụng Range Partitioning.

📌 Tạo bảng với Partitioning theo ngày

CREATE TABLE LARGE_TABLE (
id NUMBER PRIMARY KEY, transaction_date DATE, customer_id NUMBER, amount NUMBER ) PARTITION BY RANGE (transaction_date) ( PARTITION p2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')), PARTITION p2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD')) );

💡 Lợi ích:

  • Chia nhỏ dữ liệu giúp tăng tốc truy vấn.
  • Truy vấn chỉ đọc partition cần thiết thay vì toàn bộ bảng.

📌 Thêm Partition động khi dữ liệu mới phát sinh

ALTER TABLE LARGE_TABLE ADD PARTITION p2025 VALUES LESS THAN (TO_DATE('2026-01-01', 'YYYY-MM-DD'));

3. Tối Ưu Hóa Chỉ Mục (Indexing)

Nếu bảng lớn, Index có thể bị phân mảnh hoặc không tối ưu.

📌 Xây dựng Index hiệu quả

CREATE INDEX idx_large_table_date ON LARGE_TABLE (transaction_date);

📌 Kiểm tra Index có hoạt động tốt không?

SELECT index_name, table_name, leaf_blocks, distinct_keys
FROM dba_indexes WHERE table_name = 'LARGE_TABLE';

📌 Rebuild Index nếu cần tối ưu hóa

ALTER INDEX idx_large_table_date REBUILD;

💡 Lợi ích:

  • Giảm Fragmentation.
  • Cải thiện tốc độ truy vấn.
  • Tối ưu tài nguyên CPU và I/O.

4. Giải Phóng Không Gian Dư Thừa (Shrink Space)

Sau khi xóa dữ liệu hoặc cập nhật bảng, có thể xuất hiện vùng trống.

📌 Giải phóng không gian trống

ALTER TABLE LARGE_TABLE ENABLE ROW MOVEMENT;
ALTER TABLE LARGE_TABLE SHRINK SPACE;

💡 Lợi ích:

  • Giảm kích thước vật lý của bảng.
  • Tăng hiệu suất khi đọc dữ liệu.

📌 Kiểm tra lại kích thước bảng sau khi tối ưu

SELECT segment_name, bytes/1024/1024 AS size_mb
FROM dba_segments WHERE segment_type = 'TABLE' AND segment_name = 'LARGE_TABLE';

5. Tối Ưu Truy Vấn SQL Với EXPLAIN PLAN

Sau khi tối ưu bảng, cần kiểm tra lại hiệu suất truy vấn.

📌 Chạy EXPLAIN PLAN để kiểm tra kế hoạch thực thi

EXPLAIN PLAN FOR
SELECT * FROM LARGE_TABLE WHERE transaction_date > SYSDATE - 30; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

➡ Nếu Oracle sử dụng Index Scan (INDEX RANGE SCAN), nghĩa là Index hoạt động tốt.
➡ Nếu vẫn thấy TABLE ACCESS FULL, cần kiểm tra lại Index và Partitioning.


6. Dùng Table Compression Để Giảm Kích Thước

Nếu dữ liệu chủ yếu là READ-ONLY, ta có thể sử dụng Compression.

📌 Nén dữ liệu trong bảng

ALTER TABLE LARGE_TABLE MOVE COMPRESS FOR QUERY HIGH;

📌 Kiểm tra bảng đã được nén chưa

SELECT table_name, compression, compress_for
FROM dba_tables WHERE table_name = 'LARGE_TABLE';

💡 Lợi ích:

  • Giảm dung lượng lưu trữ tới 50-70%.
  • Tăng hiệu suất truy vấn với dữ liệu tĩnh.

III. Tổng Kết Quy Trình Xử Lý Bảng Lớn

🔹 1. Phân tích kích thước bảng & kiểm tra hiệu suất (DBA_SEGMENTS, EXPLAIN PLAN).
🔹 2. Dùng Partitioning để chia nhỏ dữ liệu, tránh quét toàn bộ bảng.
🔹 3. Tạo hoặc tối ưu Index, kiểm tra bằng EXPLAIN PLAN.
🔹 4. Rebuild hoặc Shrink bảng để giải phóng không gian dư thừa.
🔹 5. Dùng Compression nếu dữ liệu ít thay đổi để tiết kiệm dung lượng.
🔹 6. Kiểm tra hiệu suất truy vấn sau tối ưu hóa bằng DBMS_XPLAN.DISPLAY.

🚀 Áp dụng các kỹ thuật này sẽ giúp hệ thống Oracle Database xử lý bảng lớn nhanh hơn, giảm tải CPU/I/O, tăng tốc truy vấn và tối ưu hóa dung lượng lưu trữ! 🚀

=============================
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master