Pekerjaan BUILD membangun ulang partisi setelah data ditulis, membuat indeks, dan membersihkan data redundan untuk meningkatkan performa baca. Selama pekerjaan BUILD berjalan, sistem menggabungkan data yang ditulis secara real time dengan partisi historis, membuat indeks, serta mengeksekusi pernyataan DDL yang tertunda secara asinkron.
Cara kerja
Pekerjaan BUILD beroperasi pada dua tingkat:
Tingkat tabel: Tabel-tabel berbeda menjalankan pekerjaan BUILD secara paralel.
Tingkat shard: Setelah pekerjaan BUILD suatu tabel dimulai, pekerjaan tersebut dibagi menjadi tugas-tugas di seluruh shard. Ketiga replika dari setiap shard menjalankan tugasnya secara independen. Pekerjaan BUILD selesai ketika semua tugas shard selesai.
Pekerjaan BUILD hanya memproses partisi yang mengalami perubahan data—partisi tanpa operasi INSERT, UPDATE, atau DELETE baru akan dilewati.
Catatan penggunaan
Selama pekerjaan BUILD berjalan,
INSERT OVERWRITE SELECTdiblokir. GunakanINSERT INTOsebagai gantinya.Anda tidak dapat membatalkan pekerjaan BUILD setelah dikirim.
Jumlah pekerjaan BUILD konkuren sama dengan
ceil(jumlah core / 3)dan tidak dapat diubah. Untuk kluster 32-core, jumlah ini adalah 11 pekerjaan konkuren.Pekerjaan BUILD mengonsumsi sumber daya CPU, memori, dan I/O. Utilisasi CPU dan penggunaan I/O disk mungkin melonjak saat pekerjaan berjalan dan kembali normal setelah selesai. Jalankan pekerjaan BUILD selama jam sepi.
Memicu pekerjaan BUILD secara otomatis
Pekerjaan BUILD dipicu secara otomatis ketika salah satu kondisi berikut terpenuhi:
Kondisi 1: Data baru yang cukup telah terakumulasi
Waktu sejak pekerjaan BUILD terakhir mencapai interval minimum *dan* setidaknya 50.000 baris telah ditambahkan ke suatu shard.
| Edisi | Minimum Interval |
|---|---|
| Enterprise Edition | 1,5 jam |
| Basic Edition | 1,5 jam |
| Data Lakehouse Edition | 1,5 jam |
| Data Warehouse Edition (elastic mode) | 1,5 jam |
| Data Warehouse Edition (reserved mode) | 0,5 jam |
Kondisi 2: Cadangan berbasis waktu
Telah berlalu 24 jam sejak pekerjaan BUILD terakhir dan setidaknya satu baris telah dimodifikasi.
Memicu pekerjaan BUILD secara manual
Build hanya partisi yang berubah
Perilaku default—membangun ulang hanya partisi yang mengalami perubahan data.
Tabel XUANWU
BUILD TABLE <table_name>;Tabel XUANWU_V2
CatatanUntuk informasi tentang cara menentukan dan menetapkan mesin tabel, lihat bagian "Tentukan mesin tabel" dalam topik mesin XUANWU_V2.
BUILD TABLE <table_name> [BUILD_OPTION];BUILD_OPTIONhanya menerimattl(opsional). Jika ditentukan, partisi yang kedaluwarsa akan dihapus segera setelah pekerjaan BUILD selesai. Jika dihilangkan, hanya partisi yang berubah yang dibangun ulang.
Build partisi tertentu
Tersedia untuk kluster AnalyticDB for MySQL yang menjalankan V3.1.6.0 atau lebih baru.
BUILD TABLE test force partitions='partition1,partition2';Gunakan pendekatan ini ketika tabel berisi volume data besar dan menjalankan BUILD seluruh tabel akan membutuhkan banyak sumber daya. Menargetkan partisi tertentu mengurangi penggunaan sumber daya dan mempercepat pekerjaan.
Untuk melihat versi minor kluster Anda, lihat Bagaimana cara melihat versi minor kluster? Untuk memperbarui versi minor, hubungi dukungan teknis.
Membangun seluruh tabel
Operasi ini membuat ulang indeks untuk semua data yang ada dan dapat memakan waktu lama untuk diselesaikan. Evaluasi dampak dan risiko sebelum melanjutkan. Fitur ini dinonaktifkan secara default—ajukan tiket untuk mengaktifkannya. Gunakan pendekatan partisi tertentu di atas bila memungkinkan.
BUILD TABLE <table_name> force = true;Ini membuat ulang indeks untuk semua partisi dalam tabel, termasuk yang tidak mengalami perubahan data.
Penjadwalan pekerjaan BUILD
Secara default, pekerjaan BUILD dijalankan seiring akumulasi data. Untuk membatasinya hanya pada jendela waktu tertentu—misalnya menghindari jam sibuk bisnis—konfigurasikan jadwal.
Tetapkan jendela waktu
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`<start>,<end>`;| Parameter | Deskripsi | Rentang valid |
|---|---|---|
start | Awal jendela penjadwalan (jam) | 0–24 |
end | Akhir jendela penjadwalan (jam) | 0–24 |
Pisahkan beberapa jendela waktu dengan titik koma. Lampirkan semua nilai dalam backtick.
Jendela waktu mengontrol kapan pekerjaan *dijadwalkan*, bukan kapan pekerjaan selesai. Pekerjaan yang dijadwalkan sebelum jendela ditutup dapat terus berjalan setelah jendela berakhir.
Contoh: Jadwalkan pekerjaan BUILD antara pukul 00.00–06.59 dan 18.00–22.59.
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`0,6;18,22`;Tetapkan prioritas penjadwalan
Tersedia untuk kluster AnalyticDB for MySQL yang menjalankan V3.1.5.0 atau lebih baru.
Secara default, pekerjaan BUILD diprioritaskan berdasarkan volume data yang ditambahkan ke setiap shard sejak pekerjaan BUILD terakhir—shard dengan lebih banyak data baru dijadwalkan terlebih dahulu. Untuk mengganti perilaku ini, tetapkan prioritas khusus menggunakan hint atau SET ADB_CONFIG.
Parameter task_priority adalah bilangan bulat (default: 0). Nilai yang lebih tinggi berarti prioritas lebih tinggi. Mengatur nilai negatif akan menonaktifkan penjadwalan otomatis untuk tabel tersebut.
Untuk melihat atau memperbarui versi minor Kluster Anda, masuk ke Konsol AnalyticDB for MySQL, lalu buka bagian Configuration Information pada halaman Cluster Information.
Gunakan hint (berlaku untuk satu tabel, hanya untuk pekerjaan saat ini)
/*build_task_priority = <task_priority> */ BUILD TABLE <db_name>.<table_name>;Contoh: Tetapkan prioritas 30 untuk tabel test dalam database adb_demo.
/*build_task_priority = 30 */ Build TABLE adb_demo.test;Gunakan SET ADB_CONFIG (persisten, mendukung beberapa tabel)
Tetapkan prioritas untuk beberapa tabel di berbagai database:
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.<table1_name>.<task_priority>;<db2_name>.<table2_name>.<task_priority>`;Contoh: Prioritas 30 untuk
adb_demo1.test1, prioritas 10 untukadb_demo2.test2.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.test1.30;adb_demo2.test2.10`;Tetapkan prioritas yang sama untuk semua tabel dalam satu database:
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.*.<task_priority>`;Contoh: Prioritas 30 untuk semua tabel dalam
adb_demo1.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.*.30`;Tetapkan prioritas berbeda antara satu tabel dan sisanya dalam satu database:
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.*.<task_priority>;<db1_name>.<table_name>.<task_priority>`;Contoh: Prioritas 30 untuk
adb_demo1.test1, prioritas 10 untuk semua tabel lain dalamadb_demo1.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.*.10;adb_demo1.test1.30`;
Jika hint dan SET ADB_CONFIG dikonfigurasi untuk tabel yang sama, hint memiliki prioritas lebih tinggi untuk pekerjaan saat ini.
Untuk memeriksa konfigurasi prioritas saat ini, jalankan SHOW ADB_CONFIG.
Memantau status pekerjaan BUILD
Kueri status pekerjaan BUILD selama tiga hari terakhir:
SELECT table_name, schema_name, status
FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK
ORDER BY create_time DESC
LIMIT 10;| Status | Deskripsi |
|---|---|
INIT | Pekerjaan sedang diinisialisasi. |
RUNNING | Pekerjaan sedang berjalan. |
FINISH | Pekerjaan selesai. |
FAQ
Penjadwalan otomatis tidak berlaku
Parameter waktu dalam SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD harus dilampirkan dalam backtick. Tanpa backtick, nilai-nilai tersebut gagal diurai dan penjadwalan diabaikan.
Sintaksis yang benar:
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`0,6`;Ini menjadwalkan pekerjaan BUILD antara pukul 00.00 dan 06.59.