All Products
Search
Document Center

ApsaraDB for OceanBase (Deprecated):Menetapkan strategi partisi

Last Updated:Jun 28, 2025

Topik ini menjelaskan cara menetapkan strategi pembuatan dan penghapusan partisi.

Strategi pembuatan partisi

Penting
  • Membuat partisi untuk tabel dalam grup tabel dapat gagal atau merusak status penyeimbangan beban. Berhati-hatilah saat Anda memutuskan untuk mengonfigurasi strategi pembuatan partisi untuk tabel semacam itu.

  • Membuat partisi untuk tabel dalam grup tabel dapat membatalkan validitas grup tabel, karena tabel dalam grup tabel yang sama harus memiliki jumlah partisi yang sama.

Strategi pembuatan partisi kustom

Anda dapat membuat strategi pembuatan partisi kustom untuk menghasilkan batas atas partisi dengan menggunakan ekspresi SQL. Lakukan langkah-langkah berikut:

  1. Gunakan ekspresi SQL untuk mendapatkan waktu referensi, yaitu waktu mulai untuk pembuatan partisi.

    Catatan

    Untuk menggunakan waktu ketika rencana partisi dijalankan sebagai waktu mulai, gunakan fungsi now() atau SYSDATE.fungsi.

  2. Tetapkan interval waktu untuk menghasilkan partisi: Rencana partisi akan menghasilkan partisi berdasarkan interval waktu yang ditentukan. Setelah Anda memasukkan interval waktu di kolom Interval , OceanBase Developer Center (ODC) menggunakan ekspresi ${INTERVAL} untuk mereferensikan interval waktu ini dan menambahkannya ke ekspresi SQL yang dihasilkan pada Langkah 1.

  3. Hasilkan ekspresi partisi dengan tipe data yang sama dengan kunci partisi: Konversikan ekspresi SQL tipe waktu yang dihasilkan setelah Langkah 1 dan Langkah 2 selesai menjadi tipe aktual dari kunci partisi. Jika kunci partisi dan ekspresi SQL memiliki tipe yang sama, lewati langkah ini.

Anda dapat mereferensikan variabel dalam strategi pembuatan partisi kustom. Tabel berikut mencantumkan ekspresi yang didukung.

Ekspresi

Deskripsi

Contoh

INTERVAL

Interval waktu untuk menghasilkan partisi. ODC akan mengganti variabel ini dengan nilai kolom Interval di kolom Rule di bagian Creation Rule .

${INTERVAL}

Secara umum, jika Anda memilih untuk membuat strategi partisi kustom, partisi akan dihasilkan berdasarkan tipe waktu untuk kunci partisi yang bukan bertipe waktu. Tabel referensi cepat berikut dapat membantu Anda menulis ekspresi SQL dengan benar.

Ekspresi untuk menghasilkan batas atas partisi dalam mode MySQL

Ekspresi partisi contoh

Deskripsi

Interval waktu

Ekspresi SQL untuk menghitung batas atas partisi

... nilai kurang dari ('2024')

Hasilkan per tahun

1

date_format(now() + interval ${INTERVAL} year, '''%Y''')

... nilai kurang dari ('202401')

Hasilkan per tahun

1

date_format(now() + interval ${INTERVAL} tahun, '''%Y01''')

Hasilkan per bulan

1

date_format(now() + interval ${INTERVAL} month, '''%Y%m''')

... nilai kurang dari ('2024-01')

Hasilkan per tahun

1

date_format(now() + interval ${INTERVAL} tahun, '''%Y-01''')

Hasilkan per bulan

1

date_format(now() + interval ${INTERVAL} bulan, '''%Y-%m''')

... nilai kurang dari ('2024/01')

Hasilkan per tahun

1

date_format(now() + interval ${INTERVAL} tahun, '''%Y/01''')

Hasilkan per bulan

1

date_format(now() + interval ${INTERVAL} bulan, '''%Y/%m''')

... nilai kurang dari ('20240101')

Hasilkan per tahun

1

date_format(now() + interval ${INTERVAL} tahun, '''%Y0101''')

Hasilkan per bulan

1

date_format(now() + interval ${INTERVAL} bulan, '%Y%m01')

Hasilkan per hari

1

date_format(now() + interval ${INTERVAL} day, '''%Y%m%d''')

... nilai kurang dari ('2024-01-01')

Hasilkan per tahun

1

date_format(now() + interval ${INTERVAL} tahun, '''%Y-01-01''')

Hasilkan per bulan

1

date_format(now() + interval ${INTERVAL} bulan, '''%Y-%m-01''')

Hasilkan per hari

1

date_format(now() + interval ${INTERVAL} hari, '''%Y-%m-%d''')

... nilai kurang dari ('2024/01/01')

Hasilkan per tahun

1

date_format(now() + interval ${INTERVAL} tahun, '''%Y/01/01''')

Hasilkan per bulan

1

date_format(now() + interval ${INTERVAL} bulan, '''%Y/%m/01''')

Hasilkan per hari

1

date_format(now() + interval ${INTERVAL} day, '''%Y/%m/%d''')

... nilai kurang dari ('2024-01-01 00:00:00')

Hasilkan per tahun

1

date_format(now() + interval ${INTERVAL} tahun, '''%Y-01-01 00:00:00''')

Hasilkan per bulan

1

date_format(now() + interval ${INTERVAL} bulan, '''%Y-%m-01 00:00:00''')

Hasilkan per hari

1

date_format(now() + interval ${INTERVAL} day, '''%Y-%m-%d 00:00:00''')

... nilai kurang dari ('2024/01/01 00:00:00')

Hasilkan per tahun

1

date_format(now() + interval ${INTERVAL} tahun, '''%Y/01/01 00:00:00''')

Hasilkan per bulan

1

date_format(now() + interval ${INTERVAL} bulan, '''%Y/%m/01 00:00:00''')

Hasilkan per hari

1

date_format(now() + interval ${INTERVAL} day, '''%Y/%m/%d 00:00:00''')

... values less than (2024)

Hasilkan per tahun

1

date_format(now() + interval ${INTERVAL} year, '%Y')

... values less than (202401)

Hasilkan per tahun

1

date_format(now() + interval ${INTERVAL} year, '%Y01')

Hasilkan per bulan

1

date_format(now() + interval ${INTERVAL} month, '%Y%m')

... values less than (20240101)

Hasilkan per tahun

1

date_format(now() + interval ${INTERVAL} year, '%Y0101')

Hasilkan per bulan

1

date_format(now() + interval ${INTERVAL} month, '%Y%m01')

Hasilkan per hari

1

date_format(now() + interval ${INTERVAL} day, '%Y%m%d')

... values less than (1709222400)

Catatan: Unix timestamp

Hasilkan per tahun

1

unix_timestamp(str_to_date(date_format(now() + interval ${INTERVAL} year, '%Y-01-01 00:00:00'), '%Y-%m-%d %H:%i:%s'))

Hasilkan per bulan

1

unix_timestamp(str_to_date(date_format(now() + interval ${INTERVAL} month, '%Y-%m-01 00:00:00'), '%Y-%m-%d %H:%i:%s'))

Hasilkan per hari

1

unix_timestamp(str_to_date(date_format(now() + interval ${INTERVAL} day, '%Y-%m-%d 00:00:00'), '%Y-%m-%d %H:%i:%s'))

Ekspresi untuk menghasilkan batas atas partisi dalam mode Oracle

Ekspresi partisi contoh

Deskripsi

Interval waktu

Ekspresi SQL untuk menghitung batas atas partisi

... values less than ('2024')

Hasilkan per tahun

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY''')

... values less than ('202401')

Hasilkan per tahun

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY"01"''')

Hasilkan per bulan

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYYMM''')

... values less than ('2024-01')

Hasilkan per tahun

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-"01"''')

Hasilkan per bulan

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-MM''')

... values less than ('2024/01')

Hasilkan per tahun

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/"01"''')

Hasilkan per bulan

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/MM''')

... values less than ('20240101')

Hasilkan per tahun

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY"01""01"''')

Hasilkan per bulan

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYYMM"01"''')

Hasilkan per hari

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYYMMDD''')

... values less than ('2024-01-01')

Hasilkan per tahun

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-"01"-"01"''')

Hasilkan per bulan

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-MM-"01"''')

Hasilkan per hari

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-MM-DD''')

... values less than ('2024/01/01')

Hasilkan per tahun

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/"01"/"01"''')

Hasilkan per bulan

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/MM/"01"''')

Hasilkan per hari

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/MM/DD''')

... values less than ('2024-01-01 00:00:00')

Hasilkan per tahun

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-"01"-"01 00:00:00"''')

Hasilkan per bulan

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-MM-"01 00:00:00"''')

Hasilkan per hari

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-MM-DD "00:00:00"''')

... values less than ('2024/01/01 00:00:00')

Hasilkan per tahun

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/"01"/"01 00:00:00"''')

Hasilkan per bulan

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/MM/"01 00:00:00"''')

Hasilkan per hari

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/MM/DD "00:00:00"''')

... nilai kurang dari (2024)

Hasilkan per tahun

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYY')

... nilai kurang dari (202401)

Hasilkan per tahun

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYY"01"')

Hasilkan per bulan

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYYMM')

... nilai kurang dari (20240101)

Hasilkan per tahun

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYY"01""01"')

Hasilkan per bulan

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYYMM"01"')

Hasilkan per hari

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYYMMDD')

Strategi peningkatan berurutan

  • Metode Peningkatan Berurutan hanya berlaku untuk kunci partisi bertipe waktu.

  • Waktu referensi untuk metode ini bisa berupa waktu saat ini atau waktu yang ditentukan. Partisi dihasilkan secara berurutan berdasarkan interval waktu yang ditentukan.

Strategi pembuatan nama partisi

Anda dapat menggunakan strategi berbeda untuk menghasilkan nama partisi yang terkait dengan isi dari partisi tersebut.

Saat ini, tersedia dua strategi pembuatan nama partisi:

  • Strategi awalan + akhiran: Nama partisi yang dihasilkan berdasarkan strategi ini terdiri dari awalan dan akhiran. Awalan adalah konstanta string, dan akhiran mereferensikan nilai ekspresi SQL dari kunci partisi tipe waktu yang ditentukan. Anda dapat memodifikasi awalan, akhiran, waktu referensi, dan format output untuk menghasilkan nama partisi yang berbeda.

    image

    Penting

    Strategi ini hanya berlaku untuk kunci partisi bertipe waktu. Karena kunci partisi yang direferensikan oleh akhiran bertipe waktu, nilai ekspresi SQL-nya dapat dikonversi menjadi nilai waktu, lalu diformat dan di-output sebagai akhiran nama partisi.

  • Strategi Kustom: Strategi ini menggunakan ekspresi penamaan untuk menghasilkan nama partisi sesuai kebutuhan pengguna. Nilai ekspresi SQL dari kunci partisi dapat direferensikan dalam ekspresi penamaan melalui ${partitioning key}.

    image

Tabel referensi cepat berikut mencantumkan ekspresi umum yang disediakan oleh ODC untuk menghasilkan nama partisi. Kunci partisi dalam tabel harus bertipe numerik atau karakter.

Ekspresi untuk menghasilkan nama partisi dalam mode MySQL

Ekspresi partisi contoh

Ekspresi penamaan

Pratinjau

... values less than (..., 2024, ...)

concat('P', ${partitioning key})

P2024

... values less than (..., '2024', ...)

... values less than (..., 202401, ...)

concat('P', ${partitioning key})

P202401

... values less than (..., '202401', ...)

... values less than (..., '2024-01', ...)

date_format(str_to_date(concat(${partitioning key}, '-01'), '%Y-%m-%d'), 'P%Y%m')

P202401

date_format(str_to_date(concat(${partitioning key}, '-01'), '%Y-%m-%d'), 'P%Y_%m')

P2024_01

... values less than (..., '2024/01', ...)

date_format(str_to_date(concat(${partitioning key}, '/01'), '%Y/%m/%d'), 'P%Y%m')

P202401

date_format(str_to_date(concat(${partitioning key}, '/01'), '%Y/%m/%d'), 'P%Y_%m')

P2024_01

... values less than (..., 20240101, ...)

concat('P', ${partitioning key})

P20240101

... values less than (..., '20240101', ...)

... values less than (..., '2024-01-01', ...)

date_format(str_to_date(${partitioning key}, '%Y-%m-%d'), 'P%Y%m%d')

P20240101

date_format(str_to_date(${partitioning key}, '%Y-%m-%d'), 'P%Y_%m_%d')

P2024_01_01

... values less than (..., '2024/01/01', ...)

date_format(str_to_date(${partitioning key}, '%Y/%m/%d'), 'P%Y%m%d')

P20240101

date_format(str_to_date(${partitioning key}, '%Y/%m/%d'), 'P%Y_%m_%d')

P2024_01_01

... values less than (..., '2024-01-01 00:00:00', ...)

date_format(str_to_date(${partitioning key}, '%Y-%m-%d %H:%i:%s'), 'P%Y%m%d')

P20240101

date_format(str_to_date(${partitioning key}, '%Y-%m-%d %H:%i:%s'), 'P%Y_%m_%d')

P2024_01_01

... values less than (..., '2024/01/01 00:00:00', ...)

date_format(str_to_date(${partitioning key}, '%Y/%m/%d %H:%i:%s'), 'P%Y%m%d')

P20240101

date_format(str_to_date(${partitioning key}, '%Y/%m/%d %H:%i:%s'), 'P%Y_%m_%d')

P2024_01_01

... values less than (..., 1709222400, ...)

Catatan: timestamp, dalam detik

date_format(from_unixtime(${partitioning key}), 'P%Y')

P2024

date_format(from_unixtime(${partitioning key}), 'P%Y%m')

P202401

date_format(from_unixtime(${partitioning key}), 'P%Y_%m')

P2024_01

date_format(from_unixtime(${partitioning key}), 'P%Y%m%d')

P20240101

date_format(from_unixtime(${partitioning key}), 'P%Y_%m_%d')

P2024_01_01

Ekspresi untuk menghasilkan nama partisi dalam mode Oracle

Ekspresi partisi contoh

Ekspresi penamaan

Pratinjau

... values less than (..., 2024, ...)

concat('P', ${partitioning key})

P2024

... values less than (..., '2024', ...)

... values less than (..., 202401, ...)

concat('P', ${partitioning key})

P202401

... values less than (..., '202401', ...)

... values less than (..., '2024-01', ...)

TO_CHAR(TO_DATE(CONCAT(${partitioning key}, '-01'), 'YYYY-MM-DD'), '"P"YYYYMM')

P202401

TO_CHAR(TO_DATE(CONCAT(${partitioning key}, '-01'), 'YYYY-MM-DD'), '"P"YYYY_MM')

P2024_01

... values less than (..., '2024/01', ...)

TO_CHAR(TO_DATE(CONCAT(${partitioning key}, '/01'), 'YYYY/MM/DD'), '"P"YYYYMM')

P202401

TO_CHAR(TO_DATE(CONCAT(${partitioning key}, '/01'), 'YYYY/MM/DD'), '"P"YYYY_MM')

P2024_01

... values less than (..., 20240101, ...)

concat('P', ${partitioning key})

P20240101

... values less than (..., '20240101', ...)

... values less than (..., '2024-01-01', ...)

TO_CHAR(TO_DATE(${partitioning key}, 'YYYY-MM-DD'), '"P"YYYYMMDD')

P20240101

TO_CHAR(TO_DATE(${partitioning key}, 'YYYY-MM-DD'), '"P"YYYY_MM_DD')

P2024_01_01

... values less than (..., '2024/01/01', ...)

TO_CHAR(TO_DATE(${partitioning key}, 'YYYY/MM/DD'), '"P"YYYYMMDD')

P20240101

TO_CHAR(TO_DATE(${partitioning key}, 'YYYY/MM/DD'), '"P"YYYY_MM_DD')

P2024_01_01

... values less than (..., '2024-01-01 00:00:00', ...)

TO_CHAR(TO_DATE(${partitioning key}, 'YYYY-MM-DD HH24:MI:SS'), '"P"YYYYMMDD')

P20240101

TO_CHAR(TO_DATE(${partitioning key}, 'YYYY-MM-DD HH24:MI:SS'), '"P"YYYY_MM_DD')

P2024_01_01

... values less than (..., '2024/01/01 00:00:00', ...)

TO_CHAR(TO_DATE(${partitioning key}, 'YYYY/MM/DD HH24:MI:SS'), '"P"YYYYMMDD')

P20240101

TO_CHAR(TO_DATE(${partitioning key}, 'YYYY/MM/DD HH24:MI:SS'), '"P"YYYY_MM_DD')

P2024_01_01

Strategi penghapusan partisi

Penting
  • Menghapus partisi dari tabel yang berisi indeks global akan membatalkan validitas indeks global. Berhati-hatilah. Memilih untuk membangun kembali indeks global dapat menyebabkan masalah bisnis karena proses yang memakan waktu atau masalah online akibat kegagalan pembangunan ulang.

  • Opsi pembangunan ulang indeks global hanya disediakan dalam mode Oracle. Dalam mode MySQL, indeks global akan dibangun ulang secara default.

  • Saat menetapkan strategi penghapusan partisi, Anda harus mempertimbangkan dampak dari partisi yang telah dibuat sebelumnya dan menghindari penghapusan partisi historis secara tidak sengaja. Sebagai contoh, asumsikan bahwa partisi dihasilkan untuk tabel per bulan. Untuk mempertahankan partisi yang dihasilkan dalam 12 bulan terakhir, tetapkan Jumlah Partisi yang Dipertahankan menjadi12. Jika strategi pembuatan partisi membuat partisi untuk tiga bulan ke depan, partisi yang dibuat dalam sembilan bulan terakhir dan tiga bulan mendatang akan benar-benar dipertahankan.

Strategi penghapusan partisi berlaku untuk partisi yang ada. Saat ini, hanya satu strategi penghapusan yang didukung, yaitu N partisi terbaru dipertahankan dan sisanya dihapus.

Berikut adalah contohnya:

  1. Buat tabel bernama order yang berisi partisi p2023_01 dan p2023_02.partisi.

    CREATE TABLE `order` (
    `time` date NOT NULL,
    `parti_key` int(11),
     `name` varchar(120) DEFAULT NULL
    ) partition by range columns(time, parti_key)
    (partition p2023_01 values less than ('2023-01-01', 20230101),
    partition p2023_02 values less than ('2023-02-01', 20230201))
    
  2. Konfigurasikan strategi penghapusan partisi yang mempertahankan partisi terbaru untuk tabel order .

  3. Pernyataan penghapusan partisi yang dibentuk berdasarkan strategi penghapusan partisi akan menghapus partisi p2023_01 .

Pertimbangan

  • Membuat partisi untuk tabel dalam grup tabel dapat gagal atau merusak status penyeimbangan beban. Berhati-hatilah saat Anda memutuskan untuk mengonfigurasi strategi pembuatan partisi untuk tabel semacam itu.

  • Membuat partisi untuk tabel dalam grup tabel dapat membatalkan validitas grup tabel, karena tabel dalam grup tabel yang sama harus memiliki jumlah partisi yang sama.

  • Menghapus partisi dari tabel yang berisi indeks global akan membatalkan validitas indeks global. Berhati-hatilah. Memilih untuk membangun kembali indeks global dapat menyebabkan masalah bisnis karena proses yang memakan waktu atau masalah online akibat kegagalan pembangunan ulang.

  • Opsi pembangunan ulang indeks global hanya disediakan dalam mode Oracle. Dalam mode MySQL, indeks global akan dibangun ulang secara default.

Referensi