Tugas BUILD digunakan untuk membangun ulang partisi yang berisi data baru guna meningkatkan performa baca. Selama proses pembangunan ulang, sistem membuat indeks, membersihkan data redundan, dan mengeksekusi pernyataan DDL secara asinkron.
Ikhtisar
Selama tugas BUILD berjalan, sistem menggabungkan data yang ditulis secara real-time dengan partisi historis terkait, membuat indeks, dan mengeksekusi pernyataan DDL secara asinkron. Setelah pernyataan INSERT, UPDATE, atau DELETE dieksekusi pada data dalam suatu partisi, tugas BUILD dapat dijalankan untuk membangun ulang partisi tersebut. Tugas BUILD tidak akan membangun ulang partisi yang tidak mengalami perubahan data.
Tugas BUILD dijadwalkan pada tingkat tabel. Tugas BUILD dari tabel yang berbeda dapat dijalankan secara paralel. Setelah tugas BUILD dimulai pada suatu tabel, tugas tersebut dibagi menjadi beberapa task pada tingkat shard. Ketiga replika suatu shard masing-masing menjalankan satu task. Tugas BUILD dianggap selesai ketika semua task telah selesai.
Saat Anda mengeksekusi pernyataan DELETE atau REPLACE, data tersebut ditandai untuk dihapus dan dibersihkan secara asinkron oleh tugas BUILD latar belakang. Setelah sejumlah besar pernyataan DELETE atau REPLACE dieksekusi, jika tugas BUILD belum selesai, jumlah baris tabel yang ditampilkan di Storage Overview akan lebih besar daripada hasil yang dikembalikan oleh SELECT COUNT(*): jumlah baris tabel yang ditampilkan di Storage Overview bersumber dari bidang row_count di information_schema.kepler_partitions, yang menghitung jumlah baris fisik termasuk baris yang telah ditandai untuk dihapus namun belum dibersihkan. SELECT COUNT(*) mengembalikan jumlah baris logis yang valid dan tidak menyertakan baris yang telah ditandai untuk dihapus. Anda dapat secara manual mengeksekusi BUILD TABLE untuk membersihkan data yang telah ditandai agar kedua angka tersebut menjadi konsisten.
Catatan penggunaan
-
Selama tugas BUILD berjalan, Anda tidak dapat mengeksekusi pernyataan
INSERT OVERWRITE SELECTuntuk memasukkan data ke dalam tabel hingga tugas BUILD selesai. Jika ingin memasukkan data, Anda dapat mengeksekusi pernyataanINSERT INTO. -
Setelah Anda mengirimkan tugas BUILD, Anda tidak dapat membatalkan tugas tersebut.
-
Secara default, jumlah tugas BUILD konkuren adalah hasil pembulatan ke atas dari
Jumlah core/3dan tidak dapat diubah.Sebagai contoh, jika spesifikasi node kluster AnalyticDB for MySQL adalah 32 core dan memori 128 GB, jumlah tugas BUILD konkuren adalah 11 (hasil pembulatan ke atas dari
32/3). -
Tugas BUILD mengonsumsi sumber daya CPU, memori, dan I/O. Akibatnya, metrik yang terkait disk, seperti utilisasi CPU dan penggunaan I/O disk, mungkin meningkat. Setelah tugas BUILD selesai, metrik tersebut kembali ke nilai normal. Kami merekomendasikan Anda menjalankan tugas BUILD selama jam sepi.
Pemicu otomatis tugas BUILD
Tugas BUILD dipicu secara otomatis ketika salah satu kondisi berikut terpenuhi:
-
Periode waktu sejak tugas BUILD terakhir mencapai interval minimum antar tugas BUILD dan setidaknya 50.000 baris data ditambahkan ke suatu shard dalam tabel.
-
Interval waktu untuk Enterprise Edition, Basic Edition, atau Data Lakehouse Edition: 1,5 jam.
-
Interval waktu untuk Data Warehouse Edition dalam mode elastis: 1,5 jam.
-
Interval waktu untuk Data Warehouse Edition dalam mode reserved: 0,5 jam.
-
-
Dua puluh empat jam telah berlalu sejak tugas BUILD terakhir dan setidaknya satu baris data dimodifikasi.
-
Ketika jumlah data baru yang ditambahkan dalam suatu shard tabel mencapai 1 juta baris, interval waktu antar tugas BUILD diabaikan dan tugas BUILD langsung dieksekusi pada penjadwalan berikutnya.
CatatanAturan ini hanya didukung oleh kluster dengan versi kernel v3.1.8.7, v3.1.9.4, v3.1.10.1, atau v3.2.0 dan yang lebih baru. Untuk informasi tentang cara melihat versi kernel kluster, lihat 如何查看实例版本信息. Ambang batas pemicu aturan ini dapat disesuaikan menggunakan parameter kontrol
RC_BUILD_IGNORE_INTERVAL_TIME_ROW_COUNT. Nilai default-nya adalah1000000(1 juta baris). Penyesuaian berlaku langsung tanpa perlu restart. -
Ketika tabel memiliki tugas asinkron DDL dalam status Waiting, tugas BUILD langsung dieksekusi pada penjadwalan berikutnya.
CatatanAturan ini hanya didukung oleh kluster dengan versi kernel v3.2.0 dan yang lebih baru. Tugas asinkron DDL (seperti mengubah tipe kolom dan memodifikasi kebijakan penyimpanan) hanya berlaku setelah tugas BUILD selesai. Aturan ini mencegah tugas DDL asinkron tetap dalam status Waiting terlalu lama karena menunggu interval waktu antar tugas BUILD. Aturan ini dikendalikan oleh parameter kontrol
RC_AUTO_BUILD_WHEN_HAS_DATA_MODIFY_TASKSdan diaktifkan secara default. Untuk menonaktifkannya, eksekusiSET ADB_CONFIG RC_AUTO_BUILD_WHEN_HAS_DATA_MODIFY_TASKS = false;.
Memicu tugas BUILD secara manual
Jalankan pernyataan BUILD pada partisi yang mengalami perubahan data
-
Tabel XUANWU
BUILD TABLE <table_name>;Metode ini hanya memicu tugas BUILD pada partisi yang datanya dimodifikasi.
-
-
Tabel XUANWU_V2
BUILD TABLE <table_name> [BUILD_OPTION];BUILD_OPTION: hanya mendukung nilaittl, yang merupakan parameter opsional. Jika Anda tidak mengisi parameter ini, metode ini hanya memicu tugas BUILD pada partisi yang datanya dimodifikasi. Jika Anda menentukan parameter ini, metode ini langsung menghapus partisi yang telah kedaluwarsa setelah tugas BUILD selesai.
CatatanUntuk informasi tentang cara menentukan dan menetapkan mesin tabel, lihat bagian "Tentukan mesin tabel" dalam topik XUANWU_V2 engine.
-
Jalankan pernyataan BUILD pada partisi tertentu
BUILD TABLE test force partitions='partition1,partition2';
Anda hanya dapat menjalankan pernyataan BUILD pada partisi tertentu untuk kluster AnalyticDB for MySQL versi V3.1.6.0 atau yang lebih baru. Untuk informasi tentang cara melihat versi minor kluster AnalyticDB for MySQL, lihat 如何查看实例版本信息. Untuk memperbarui versi minor kluster, hubungi dukungan teknis.
Jika suatu tabel berisi volume data yang besar, pernyataan BUILD TABLE <table_name> force = true; mungkin memerlukan waktu eksekusi yang lama. AnalyticDB for MySQL memungkinkan Anda menentukan partitions tempat Anda ingin menjalankan tugas BUILD. Hal ini membantu mengurangi penggunaan sumber daya dan meningkatkan performa tugas BUILD.
Jalankan pernyataan BUILD pada seluruh tabel
BUILD TABLE <table_name> force = true;
Metode ini memicu tugas BUILD dan membuat ulang indeks untuk semua partisi dalam tabel. Secara default, fitur ini dinonaktifkan.
Metode ini membuat ulang indeks untuk semua data yang ada dalam tabel, yang membutuhkan waktu cukup lama. Kami merekomendasikan Anda menjalankan pernyataan BUILD pada partisi tertentu. Sebelum menjalankan pernyataan BUILD pada seluruh tabel, Anda harus mengevaluasi dampak dan risikonya. Untuk mengaktifkan fitur ini, submit a ticket.
Konfigurasi penjadwalan otomatis untuk tugas BUILD
-
Metode konfigurasi
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`<start>,<end>`;Parameter
startdanendmenentukan rentang waktu penjadwalan tugas BUILD. Tetapkan parameter dalam rentang 0 hingga 24 dan sertakan rentang waktu tersebut dalam backtick (` `). Anda dapat mengonfigurasi beberapa rentang waktu. Pisahkan beberapa rentang waktu dengan titik koma (;).Sebagai contoh, Anda dapat mengatur parameter
startke 0 dan parameterendke 6 untuk menjadwalkan tugas BUILD dalam rentang pukul 00.00 hingga 06.59.PentingRentang waktu yang ditentukan digunakan untuk penjadwalan tugas, bukan untuk eksekusi tugas. Oleh karena itu, setelah tugas dijadwalkan, sistem mungkin belum menyelesaikan eksekusi tugas saat rentang waktu berakhir.
-
Contoh
Konfigurasikan tugas BUILD agar dijadwalkan dalam rentang waktu berikut: pukul 00.00–06.59 dan 18.00–22.59.
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`0,6;18,22`;Setelah Anda mengeksekusi pernyataan di atas, sistem akan menjadwalkan tugas BUILD dalam rentang pukul 00.00–06.59 dan 18.00–22.59.
Konfigurasi prioritas penjadwalan untuk tugas BUILD
Urutan penjadwalan tugas BUILD didasarkan pada jumlah data yang ditambahkan ke masing-masing shard tabel. Semakin besar jumlah data yang ditambahkan ke suatu shard tabel, semakin awal tugas tersebut dijadwalkan dan dieksekusi. Anda juga dapat menggunakan hint atau mengeksekusi pernyataan SET ADB_CONFIG untuk mengonfigurasi prioritas penjadwalan tugas BUILD untuk tabel.
-
Anda hanya dapat mengonfigurasi prioritas penjadwalan tugas BUILD untuk kluster AnalyticDB for MySQL versi V3.1.5.0 atau yang lebih baru.
Untuk melihat dan memperbarui versi minor, buka bagian Configuration Information pada halaman Cluster Information di AnalyticDB for MySQL console.
-
Hint hanya mendukung satu tabel. Prioritas yang dikonfigurasi hanya berlaku untuk tugas BUILD saat ini.
-
Pernyataan
SET ADB_CONFIGmendukung satu atau beberapa tabel. Prioritas yang dikonfigurasi berlaku hingga Anda mengonfigurasi prioritas penjadwalan tugas BUILD baru untuk tabel tersebut. -
Jika Anda menggunakan hint dan pernyataan
SET ADB_CONFIGuntuk mengonfigurasi prioritas penjadwalan tugas BUILD yang berbeda untuk suatu tabel, prioritas berbasis hint akan diutamakan dalam tugas saat ini.
Parameter task_priority menentukan prioritas penjadwalan tugas BUILD. Nilainya harus berupa bilangan bulat. Nilai default-nya adalah 0. Nilai yang lebih besar menunjukkan prioritas penjadwalan yang lebih tinggi. Setelah Anda mengonfigurasi prioritas untuk tugas BUILD, node frontend akan menjadwalkan tugas BUILD berdasarkan prioritas tersebut. Jika Anda mengatur parameter task_priority ke nilai kurang dari 0 untuk suatu tabel, penjadwalan otomatis tugas BUILD akan dinonaktifkan untuk tabel tersebut dan node frontend tidak akan menjadwalkan tugas BUILD untuk tabel tersebut.
Metode konfigurasi:
-
Gunakan hint
/*build_task_priority = <task_priority> */ BUILD TABLE <db_name>.<table_name>;Sebagai contoh, atur prioritas penjadwalan tugas BUILD ke 30 untuk tabel
testdalam databaseadb_demo./*build_task_priority = 30 */ Build TABLE adb_demo.test; -
Gunakan pernyataan SET ADB_CONFIG
-
Konfigurasi prioritas penjadwalan tugas BUILD untuk beberapa tabel dalam database yang berbeda.
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.<table1_name>.<task_priority>;<db2_name>.<table2_name>.<task_priority>`;CatatanPisahkan beberapa tabel dengan titik koma (;).
Sebagai contoh, atur prioritas penjadwalan tugas BUILD ke 30 untuk tabel
test1dalam databaseadb_demo1dan ke 10 untuk tabeltest2dalam databaseadb_demo2.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.test1.30;adb_demo2.test2.10`; -
Konfigurasi prioritas penjadwalan tugas BUILD yang sama untuk semua tabel dalam suatu database.
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.*.<task_priority>`;Sebagai contoh, atur prioritas penjadwalan tugas BUILD ke 30 untuk semua tabel dalam database
adb_demo1.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.*.30`; -
Konfigurasi prioritas penjadwalan tugas BUILD yang berbeda antara suatu tabel dan tabel lain dalam database yang sama.
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.*.<task_priority>;<db1_name>.<table_name>.<task_priority>`;Sebagai contoh, atur prioritas penjadwalan tugas BUILD ke 30 untuk tabel
test1dalam databaseadb_demo1dan ke 10 untuk semua tabel lain dalam database tersebut.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.*.10;adb_demo1.test1.30`;
-
Anda dapat mengeksekusi pernyataan SHOW ADB_CONFIG untuk menanyakan prioritas penjadwalan tugas BUILD saat ini.
Tanyakan status tugas BUILD
Setelah tugas BUILD dipicu secara otomatis atau manual, Anda dapat mengeksekusi pernyataan SQL berikut untuk menanyakan status tugas BUILD dalam tiga hari terakhir:
SELECT table_name, schema_name, status FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK ORDER BY create_time DESC LIMIT 10;
Tabel berikut menjelaskan status tugas BUILD berdasarkan nilai parameter status.
|
Nilai |
Deskripsi |
|
INIT |
Tugas sedang diinisialisasi. |
|
RUNNING |
Tugas sedang berjalan. |
|
FINISH |
Tugas selesai. |
FAQ
Mengapa penjadwalan otomatis tugas BUILD tidak berlaku?
Penyebab: Parameter yang terkait waktu tidak disertakan dalam backtick (` `). Akibatnya, parameter tersebut gagal diurai.
Solusi: Saat Anda mengeksekusi pernyataan SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD untuk mengonfigurasi penjadwalan otomatis, sertakan parameter start dan end dalam backtick (` `). Sebagai contoh, SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`0,6`; menentukan bahwa sistem menjadwalkan tugas BUILD dalam rentang 00.00 hingga 06.59.