1 Minute 4 Change

Menu
  • Home
  • Code & Discover
    • Data Engineer
    • SQL
    • Flutter
    • Web Developer
  • Learn something
    • Languages
      • English
  • Chill Zone
    • Novels
      • Giả làm thần linh ở xã hội nguyên thủy
    • Games
    • Videos
  • About
  • Contact
Menu

Partition được tạo ra và hoạt động như thế nào trong cơ sở dữ liệu?

Posted on Tháng 12 2, 2024Tháng 12 20, 2024 by Daisy

Mục lục

Toggle
  • 1. Tạo Partition
    • a. Xác định chiến lược partitioning
    • b. Tạo metadata cho các partition
    • c. Chỉ định vị trí lưu trữ vật lý
  • 2. Cách Partition Hoạt Động
    • a. Lưu trữ dữ liệu
    • b. Xử lý truy vấn (Partition Pruning)
    • c. Parallel Query Execution (Xử lý song song)
    • d. Quản lý dữ liệu
  • 3. Partition và Hệ Thống File
    • a. Lưu trữ phân vùng trên các file vật lý
    • b. Hệ điều hành hỗ trợ parallel I/O
  • 4. Hạn chế của Partitioning
  • 5. Các yếu tố ảnh hưởng đến kích thước từng phân vùng
    • 1.   Tiêu chí phân vùng
    • 2.   Lượng dữ liệu ghi vào từng phân vùng
    • 3.   Hệ số nén và định dạng lưu trữ
    • 4.   Quản lý tự động của cơ sở dữ liệu
  • 6. Cách cơ sở dữ liệu quản lý kích thước phân vùng trong cùng tablespace
    • 1.   Theo dõi kích thước phân vùng:
    • 2.   Quy hoạch dung lượng tablespace
    • 3.   Cân bằng dữ liệu giữa các phân vùng:
    • 4.   Tách phân vùng ra tablespace riêng biệt (nếu cần)

1. Tạo Partition

Khi một bảng được phân vùng (partitioned), hệ thống cơ sở dữ liệu thực hiện các bước sau:

a. Xác định chiến lược partitioning

•       Range Partitioning: Chia dữ liệu thành các dải giá trị.

•       Hash Partitioning: Dùng hàm băm để phân phối dữ liệu ngẫu nhiên vào các phân vùng.

•       List Partitioning: Dữ liệu được chia dựa trên một danh sách các giá trị cụ thể.

•       Composite Partitioning: Kết hợp nhiều phương pháp, ví dụ: Range + Hash.

b. Tạo metadata cho các partition

•       Hệ thống lưu trữ thông tin về các phân vùng (metadata) trong Data Dictionary hoặc System Catalog của cơ sở dữ liệu.

•       Metadata này bao gồm:

    • Tên phân vùng.
    • Tiêu chí để một bản ghi thuộc về phân vùng đó.
    • Vị trí lưu trữ vật lý của từng phân vùng.

c. Chỉ định vị trí lưu trữ vật lý

•       Mỗi phân vùng có thể được lưu trữ trên:

    • Cùng một ổ đĩa hoặc thiết bị lưu trữ.
    •  Nhiều ổ đĩa khác nhau để tăng khả năng mở rộng và hiệu suất truy cập.

Ví dụ:

CREATE TABLE transactions (

    transaction_id NUMBER,

    transaction_date DATE,

    amount NUMBER

)

PARTITION BY RANGE (transaction_date) (

    PARTITION p_jan VALUES LESS THAN (TO_DATE('2024-02-01', 'YYYY-MM-DD')) 

        TABLESPACE ts_jan,

    PARTITION p_feb VALUES LESS THAN (TO_DATE('2024-03-01', 'YYYY-MM-DD')) 

        TABLESPACE ts_feb

);

•       Phân vùng p_jan được lưu trong tablespace ts_jan.

•       Phân vùng p_feb được lưu trong tablespace ts_feb.

2. Cách Partition Hoạt Động

a. Lưu trữ dữ liệu

•       Khi một bản ghi mới được thêm vào bảng, hệ thống kiểm tra tiêu chí của các phân vùng để quyết định nó thuộc phân vùng nào.

Ví dụ, với Range Partitioning, nếu một giao dịch có ngày 2024-02-15, hệ thống sẽ lưu nó vào phân vùng p_feb.

b. Xử lý truy vấn (Partition Pruning)

Khi truy vấn dữ liệu trên bảng partitioned, hệ thống sử dụng kỹ thuật Partition Pruning để xác định phân vùng nào chứa dữ liệu cần truy xuất.

•       Partition Pruning: Giảm số lượng phân vùng phải quét bằng cách dựa trên điều kiện trong câu lệnh WHERE.

Ví dụ:

SELECT * 

FROM transactions

WHERE transaction_date BETWEEN TO_DATE('2024-01-01', 'YYYY-MM-DD') 

                        AND TO_DATE('2024-01-31', 'YYYY-MM-DD');

Hệ thống sẽ chỉ quét phân vùng p_jan, thay vì quét toàn bộ bảng.

c. Parallel Query Execution (Xử lý song song)

Với các bảng được phân vùng, truy vấn có thể được thực thi song song trên nhiều phân vùng, tăng tốc độ xử lý dữ liệu.

•       Mỗi phân vùng có thể được xử lý bởi một luồng (thread) hoặc một tác vụ (task) riêng biệt.

d. Quản lý dữ liệu

Partitioning giúp đơn giản hóa việc quản lý dữ liệu:

•       Xóa dữ liệu cũ: Có thể xóa toàn bộ một phân vùng thay vì từng bản ghi.

ALTER TABLE transactions DROP PARTITION p_jan;

•       Lưu trữ và sao lưu riêng lẻ: Mỗi phân vùng có thể được sao lưu hoặc lưu trữ độc lập.

3. Partition và Hệ Thống File

Phân vùng không chỉ tồn tại ở mức logic mà còn ảnh hưởng đến cách cơ sở dữ liệu tương tác với hệ thống file:

a. Lưu trữ phân vùng trên các file vật lý

•       Mỗi phân vùng thường được ánh xạ tới một hoặc nhiều file vật lý trên ổ đĩa.

•       Khi tạo partition với TABLESPACE, cơ sở dữ liệu gán từng phân vùng vào các vùng lưu trữ cụ thể trên ổ đĩa.

Ví dụ:

•       Partition p_jan lưu trên file /data/ts_jan_part.dbf.

•       Partition p_feb lưu trên file /data/ts_feb_part.dbf.

b. Hệ điều hành hỗ trợ parallel I/O

•       Các phân vùng trên nhiều thiết bị lưu trữ khác nhau cho phép thực hiện các thao tác I/O đồng thời, tăng hiệu suất.

4. Hạn chế của Partitioning

Dưới góc nhìn hệ thống, partitioning có thể gây ra một số vấn đề:

•       Partition Skew (Mất cân bằng phân vùng):

    • Nếu dữ liệu không được phân phối đều giữa các phân vùng, một phân vùng có thể quá tải (hot partition).

Ví dụ: Range Partitioning cho ngày giao dịch có thể tạo ra tình trạng phân vùng mới nhất bị quá tải vì dữ liệu thường tập trung vào các giao dịch gần đây.

•       Chi phí quản lý cao:

    •  Với số lượng phân vùng lớn, việc bảo trì (xây dựng lại chỉ mục, sao lưu, nén) sẽ phức tạp hơn.

•       Không tối ưu với tất cả các loại truy vấn:

    •  Nếu truy vấn cần dữ liệu từ nhiều phân vùng, partitioning không mang lại nhiều lợi ích về hiệu suất.

5. Các yếu tố ảnh hưởng đến kích thước từng phân vùng

1.   Tiêu chí phân vùng

•  Dữ liệu được phân chia theo tiêu chí (partitioning key).

•  Phân vùng có nhiều dữ liệu hơn sẽ chiếm nhiều dung lượng hơn trong tablespace.

•  Ví dụ:

Nếu bạn sử dụng Range Partitioning theo thời gian, phân vùng chứa dữ liệu của một tháng nhiều giao dịch sẽ lớn hơn phân vùng chứa dữ liệu của một tháng ít giao dịch.

2.   Lượng dữ liệu ghi vào từng phân vùng

•  Kích thước từng phân vùng không được định nghĩa sẵn mà phụ thuộc vào dữ liệu ghi vào.

•  Phân vùng với số lượng bản ghi nhiều hơn sẽ chiếm dung lượng lớn hơn.

3.   Hệ số nén và định dạng lưu trữ

•  Nếu cơ sở dữ liệu hỗ trợ nén dữ liệu (Data Compression), dung lượng lưu trữ của các phân vùng có thể nhỏ hơn kích thước dữ liệu thực tế.

•  Các định dạng lưu trữ khác nhau (như ROW vs. COLUMN) cũng ảnh hưởng đến kích thước phân vùng.

4.   Quản lý tự động của cơ sở dữ liệu

•  Trong cùng một tablespace, cơ sở dữ liệu sẽ tự động cấp phát dung lượng từ tablespace tới phân vùng khi dữ liệu được ghi vào.

•  Khi một phân vùng cần thêm không gian, hệ thống sẽ mở rộng dung lượng trong tablespace, miễn là tablespace còn dung lượng trống.

6. Cách cơ sở dữ liệu quản lý kích thước phân vùng trong cùng tablespace

•       Phân vùng không có dung lượng riêng biệt:

Khi các phân vùng chia sẻ cùng một tablespace, không gian lưu trữ không được tách biệt sẵn cho từng phân vùng. Hệ thống sẽ cấp phát dung lượng theo nhu cầu của từng phân vùng.

•       Khi các phân vùng cùng nằm trong một tablespace, kích thước của từng phân vùng không cố định mà phụ thuộc vào lượng dữ liệu ghi vào từng phân vùng.

•       Hệ thống cơ sở dữ liệu sẽ tự động quản lý dung lượng của từng phân vùng trong không gian chung của tablespace.

•       Tăng trưởng động:

Khi một phân vùng đầy, hệ thống sẽ tự động tăng dung lượng của phân vùng (gọi là extent allocation) bằng cách lấy thêm không gian từ tablespace.

•       Không gian trống trong tablespace:

Nếu tablespace không còn dung lượng trống, các phân vùng sẽ không thể tăng kích thước, dẫn đến lỗi ghi dữ liệu.

Ví dụ cụ thể:

Giả sử bạn có bảng transactions với 3 phân vùng trong cùng một tablespace ts_sales:

CREATE TABLE transactions (

transaction_id NUMBER,

transaction_date DATE,

amount NUMBER

)

PARTITION BY RANGE (transaction_date) (

PARTITION p_2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')),

PARTITION p_2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD')),

PARTITION p_2025 VALUES LESS THAN (TO_DATE('2026-01-01', 'YYYY-MM-DD'))

)

TABLESPACE ts_sales;

Scenario:

•       Dữ liệu phân phối:

•  Phân vùng p_2023 có 100 triệu bản ghi (dữ liệu cũ).

•  Phân vùng p_2024 có 500 triệu bản ghi (dữ liệu hiện tại).

•  Phân vùng p_2025 chưa có bản ghi (dữ liệu tương lai).

•       Dung lượng phân vùng:

•  p_2023 chiếm 10GB trong ts_sales.

•  p_2024 chiếm 50GB trong ts_sales.

•  p_2025 chiếm 0GB (chưa ghi dữ liệu).

1.   Theo dõi kích thước phân vùng:

Sử dụng các câu lệnh SQL để kiểm tra dung lượng của từng phân vùng trong cùng một tablespace.

Ví dụ trong Oracle:

SELECT partition_name, bytes/1024/1024 AS size_mb

FROM user_segments

WHERE segment_type = 'TABLE PARTITION'

AND segment_name = 'TRANSACTIONS';


Kết quả:

PARTITION_NAME SIZE_MB
P_2023 10240
P_2024 51200
P_2025 0

2.   Quy hoạch dung lượng tablespace

Đảm bảo tablespace có đủ dung lượng để phục vụ tất cả các phân vùng. Nếu cần, bạn có thể mở rộng tablespace:

ALTER DATABASE DATAFILE '/path/to/ts_sales.dbf' RESIZE 200GB;

3.   Cân bằng dữ liệu giữa các phân vùng:

Sử dụng các kỹ thuật như split partition hoặc subpartitioning để chia nhỏ các phân vùng lớn.

4.   Tách phân vùng ra tablespace riêng biệt (nếu cần)

Đặt từng phân vùng trong một tablespace riêng để dễ dàng quản lý kích thước:

CREATE TABLE transactions (

transaction_id NUMBER,

transaction_date DATE,

amount NUMBER

)

PARTITION BY RANGE (transaction_date) (

PARTITION p_2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD'))

TABLESPACE ts_2023,

PARTITION p_2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD'))

TABLESPACE ts_2024,

PARTITION p_2025 VALUES LESS THAN (TO_DATE('2026-01-01', 'YYYY-MM-DD'))

TABLESPACE ts_2025

);
Category: Code & Discover Data Engineer SQL

Điều hướng bài viết

← Partition trong cơ sở dữ liệu là gì?
Chương 1 – Phải chịu đói ở xã hội nguyên thủy  →

1minute4change.

ABOUT ME

One minute for change, mỗi ngày biết thêm một chút.

RECENT POSTS

  • Tháng 1 30, 2025 by Daisy So sánh báo cáo trong Tableau và BI Publisher
  • Tháng 1 21, 2025 by Daisy CDS (Card Data System) là gì?
  • Tháng 1 19, 2025 by Daisy Data Warehouse (DW), Operational Reporting System (ORS), và Operational Data Store (ODS)

CATEGORIES

  • Chill Zone (5)
  • Code & Discover (17)
  • Learn something (0)
  • Uncategorized (1)

TAG

  • API (2)
  • Bigdata (1)
  • CDS (1)
  • CRM (1)
  • DevOps (1)
  • Gialamthanlinhoxahoinguyenthuy (4)
  • HTML (1)
  • Khongcp (3)
  • Oracle (1)
  • Partition (2)
  • Report (1)
  • SQL (8)
  • WebAPI (1)
  • Xaydung (3)
  • Chill Zone (5)
  • Code & Discover (17)
  • Data Engineer (12)
  • Discover (3)
  • Flutter (1)
  • Novels (5)
  • SQL (11)
  • Uncategorized (1)
  • Web Developer (4)
© 2025 1 Minute 4 Change | Powered by Minimalist Blog WordPress Theme