Topik ini menjelaskan cara mengonfigurasi parameter Channel Control untuk tugas sinkronisasi batch guna meminimalkan kesalahan konfigurasi dan permintaan dukungan, serta menguraikan hubungan antara konkurensi dan pembatasan kecepatan dalam sinkronisasi batch.
Konsep utama dan praktik terbaik
Konkurensi
Bagian ini menjawab pertanyaan berikut:
-
Pertanyaan 1: Bagaimana cara mengonfigurasi konkurensi untuk tugas sinkronisasi data?
-
Pertanyaan 2: Mengapa tugas sinkronisasi data saya berjalan lambat dengan konkurensi aktual yang tidak mencukupi?
-
Pertanyaan 3: Mengapa tugas sinkronisasi saya tetap lambat meskipun telah mengonfigurasi konkurensi tinggi, dan mengapa kelompok sumber daya eksklusif saya sering menunggu alokasi sumber daya?
Konkurensi mengacu pada jumlah maksimum thread yang dapat membaca data dari sumber dan menulis data ke tujuan secara paralel dalam satu tugas sinkronisasi data. Untuk meningkatkan efisiensi sinkronisasi data, Anda dapat menyesuaikan konkurensi tugas guna mengurangi waktu migrasi data. Pengaturan ini dapat dikonfigurasi di bagian Channel Control pada halaman konfigurasi tugas sinkronisasi data menggunakan daftar drop-down Desired Maximum Task Parallelism. Nilai yang Anda atur merupakan konkurensi yang dikonfigurasi untuk tugas tersebut.
-
Saat membaca dari database relasional seperti MySQL, PolarDB, SQL Server, PostgreSQL, atau Oracle, tugas tidak dapat membagi dan membaca data tabel secara paralel tanpa kunci pemisahan (splitPk) yang valid dan dikonfigurasi. Kunci pemisahan harus bertipe integer. Untuk Oracle, kolom bertipe waktu juga didukung selain tipe integer.
-
Untuk PolarDB-X (DRDS), data dibagi menjadi irisan untuk dibaca berdasarkan topologi fisik tabel logis. Konkurensi aktual dibatasi oleh jumlah shard tabel fisik jika nilainya lebih kecil daripada konkurensi yang dikonfigurasi.
-
Untuk sumber berbasis file (OSS, FTP, HDFS, dan S3), data dibaca secara konkuren per file. Konkurensi aktual dibatasi oleh jumlah file yang akan dibaca jika nilainya lebih kecil daripada konkurensi yang dikonfigurasi.
-
Jika distribusi data di sumber sangat tidak merata, beberapa irisan data mungkin memerlukan waktu pemrosesan lebih lama. Pada tahap akhir eksekusi tugas, setelah irisan lain selesai, konkurensi aktual akan turun di bawah konkurensi yang dikonfigurasi.
Praktik terbaik untuk mengonfigurasi konkurensi:
-
Semakin tinggi konkurensi, semakin banyak sumber daya yang perlu dialokasikan oleh tugas tersebut. Data Integration mengalokasikan sumber daya berdasarkan prinsip first-in, first-out (FIFO), artinya tugas yang diajukan lebih awal akan dialokasikan sumber daya terlebih dahulu. Konfigurasikan konkurensi yang wajar untuk menghindari tugas berdurasi panjang dengan konkurensi tinggi yang menghalangi tugas berikutnya mendapatkan sumber daya.
-
Untuk tabel dengan volume data kecil, konfigurasikan konkurensi rendah. Hal ini memerlukan lebih sedikit sumber daya, sehingga tugas dapat dengan cepat memperoleh sumber daya terfragmentasi dan mulai berjalan. Karena volumenya kecil, waktu eksekusi tetap berada dalam rentang yang wajar.
-
Untuk tugas sinkronisasi pada sumber data yang sama, atur waktu eksekusi secara bergantian. Hal ini membantu menyeimbangkan pemanfaatan sumber daya kelompok sumber daya dan mengurangi tekanan akses konkuren pada sumber data.
Kecepatan sinkronisasi
Bagian ini menjawab pertanyaan berikut:
-
Pertanyaan 1: Bagaimana cara mengonfigurasi kecepatan sinkronisasi data? Bagaimana memahami mode throttling dan non-throttling?
-
Pertanyaan 2: Mengapa pembatasan kecepatan (throttling) terkadang tidak berlaku untuk sinkronisasi data?
-
Pertanyaan 3: Mengapa kecepatan sinkronisasi data aktual terkadang jauh lebih rendah daripada ambang batas throttling?
Kecepatan sinkronisasi dan Desired Maximum Task Concurrency merupakan parameter yang saling terkait erat. Keduanya bersama-sama melindungi sumber dan tujuan dari tekanan baca/tulis berlebihan, sehingga mencegah tugas sinkronisasi data menyebabkan beban signifikan pada sumber data dan memengaruhi stabilitasnya.
Kecepatan sinkronisasi (non-throttling) berarti tugas berjalan dengan Desired Maximum Task Concurrency yang dikonfigurasi (asumsikan konkurensi aktual adalah ActualConcurrent), dan setiap irisan konkuren berjalan tanpa batas kecepatan (asumsikan kecepatan aktual tiap irisan adalah Speed). Kecepatan aktual keseluruhan tugas adalah ActualConcurrent × Speed. Dalam mode non-throttling, Data Integration memberikan performa transfer maksimum yang mungkin dicapai berdasarkan konfigurasi tugas saat ini (konkurensi dan memori) serta lingkungan perangkat keras (spesifikasi sumber data dan jaringan). Untuk menggunakan mode ini, pilih Non-throttling untuk Synchronization Speed di bagian Channel Control.
Kecepatan sinkronisasi (throttling) berarti tugas berjalan dengan batas kecepatan keseluruhan dan konkurensi maksimum yang dikonfigurasi. Saat Data Integration membuat rencana eksekusi, kecepatan tiap irisan konkuren dihitung sebagai (kecepatan tugas / konkurensi tugas, dibulatkan ke atas). Kecepatan minimum per irisan adalah 1 MB/s. Oleh karena itu, batas atas kecepatan aktual tugas adalah konkurensi aktual × batas kecepatan aktual per irisan. Untuk menggunakan mode ini, pilih Throttling dan masukkan nilai kecepatan (dalam MB/s) di bidang di sebelah kanan. Contoh umum berikut menggambarkan skenario throttling:
-
Jika Anda mengonfigurasi konkurensi 5 dan batas kecepatan 5 MB/s, tugas akan mencoba membagi menjadi 5 irisan untuk eksekusi konkuren, dengan tiap irisan dibatasi hingga 1 MB/s.
-
Jika konkurensi aktual adalah 5, kecepatan maksimum keseluruhan adalah 5 MB/s, yang kurang dari atau sama dengan batas kecepatan tugas.
-
Konkurensi eksekusi aktual bergantung pada karakteristik spesifik sumber data. Konkurensi aktual mungkin kurang dari 5 yang dikonfigurasi (lihat bagian tentang Desired Maximum Task Concurrency). Jika konkurensi aktual hanya 1, kecepatan maksimum keseluruhan adalah 1 MB/s, yang kurang dari atau sama dengan batas kecepatan tugas.
-
-
Jika Anda mengonfigurasi konkurensi 5 dan batas kecepatan 3 MB/s, tugas akan mencoba membagi menjadi 5 irisan untuk eksekusi konkuren, dengan kecepatan tiap irisan dihitung sebagai 3 / 5, dibulatkan ke atas menjadi 1 MB/s.
-
Jika konkurensi eksekusi aktual adalah 5, kecepatan maksimum keseluruhan adalah 5 MB/s, yang melebihi batas kecepatan tugas.
-
Jika konkurensi eksekusi aktual adalah 1, kecepatan maksimum keseluruhan adalah 1 MB/s, yang kurang dari atau sama dengan batas kecepatan tugas.
-
-
Jika Anda mengonfigurasi konkurensi 5 dan batas kecepatan 10 MB/s, tugas akan mencoba membagi menjadi 5 irisan untuk eksekusi konkuren, dengan kecepatan tiap irisan dihitung sebagai 10 / 5 = 2 MB/s.
-
Jika konkurensi eksekusi aktual adalah 5, kecepatan maksimum keseluruhan adalah 10 MB/s, yang kurang dari atau sama dengan batas kecepatan tugas.
-
Jika konkurensi eksekusi aktual adalah 1, kecepatan maksimum keseluruhan adalah 2 MB/s, yang kurang dari atau sama dengan batas kecepatan tugas.
-
Pemrosesan terdistribusi
Bagian ini menjawab pertanyaan berikut:
-
Pertanyaan 1: Dalam skenario apa saya perlu mengonfigurasi mode terdistribusi untuk pekerjaan sinkronisasi?
-
Pertanyaan 2: Mengapa pekerjaan sinkronisasi tetap lambat meskipun berjalan dalam mode terdistribusi?
Tanpa mode terdistribusi, konkurensi yang dikonfigurasi hanya berjalan pada satu mesin sebagai paralelisme tingkat proses dan tidak dapat memanfaatkan komputasi multi-mesin. Mode eksekusi terdistribusi mendistribusikan irisan tugas Anda ke beberapa node eksekusi untuk diproses secara konkuren. Hal ini memungkinkan kecepatan sinkronisasi meningkat secara horizontal seiring dengan ukuran kluster, sehingga mengatasi bottleneck mesin tunggal. Jika Anda memiliki persyaratan performa sinkronisasi yang tinggi, gunakan mode terdistribusi. Selain itu, mode terdistribusi dapat memanfaatkan sumber daya terfragmentasi di berbagai mesin, yang meningkatkan pemanfaatan sumber daya.
Batasan dan praktik terbaik:
-
Dalam mode eksekusi terdistribusi, mengonfigurasi konkurensi tinggi dapat menimbulkan tekanan akses signifikan pada penyimpanan data Anda. Evaluasi beban akses penyimpanan data Anda sebelum menggunakan mode ini.
-
Jika kelompok sumber daya eksklusif Anda hanya memiliki satu mesin, mode eksekusi terdistribusi tidak disarankan karena proses eksekusi tetap didistribusikan pada satu node pekerja, sehingga tidak memaksimalkan manfaat pemrosesan terdistribusi multi-mesin.
-
Untuk tugas sinkronisasi dengan volume data kecil, mode terdistribusi tidak disarankan. Sebagai gantinya, konfigurasikan tugas mesin tunggal dengan konkurensi rendah.
-
Mode terdistribusi hanya dapat diaktifkan jika konkurensi bernilai 8 atau lebih tinggi.
Batasan data kotor
Bagian ini menjawab pertanyaan berikut:
-
Pertanyaan 1: Apa itu data kotor dalam sinkronisasi data?
-
Pertanyaan 2: Bagaimana cara mengonfigurasi batasan data kotor untuk tugas sinkronisasi data?
-
Pertanyaan 3: Apa hubungan antara kecepatan sinkronisasi data dan data kotor?
Batasan data kotor mengontrol perilaku tugas saat menemui data kotor. Data kotor mengacu pada catatan data yang mengalami pengecualian selama proses penulisan ke sumber data tujuan. Karena kompleksitas dan perbedaan pemrosesan data di berbagai sistem heterogen, kebijakan saat ini menyatakan bahwa semua data yang gagal ditulis diklasifikasikan sebagai data kotor. Dalam beberapa skenario sinkronisasi data, data kotor dapat menurunkan efisiensi sinkronisasi. Misalnya, saat menulis ke database relasional, mode default adalah penulisan batch. Saat menemui data kotor, proses beralih ke mode penulisan satu per satu (untuk mengidentifikasi catatan mana dalam batch yang kotor dan memastikan catatan normal berhasil ditulis). Namun, penulisan satu per satu jauh lebih lambat daripada penulisan batch, sehingga menemui banyak data kotor dapat memperlambat performa tugas secara signifikan.
Saat ini, sebagian besar channel Data Integration mendukung batasan ambang data kotor. Untuk channel yang mendukung fitur ini, skenario konfigurasi umum dijelaskan sebagai berikut:
-
Tidak ada batasan data kotor yang dikonfigurasi: Semua data kotor ditoleransi, data kotor tidak menyebabkan tugas gagal, dan bidang errorLimit dalam konfigurasi tugas dibiarkan kosong.
-
Batasan data kotor diatur ke 0: Tidak ada data kotor yang ditoleransi. Tugas gagal ketika ditemukan lebih dari 1 catatan data kotor.
-
Batasan data kotor diatur ke bilangan bulat positif N: Maksimal N catatan data kotor ditoleransi. Tugas gagal ketika jumlah catatan data kotor melebihi N. Masukkan ambang data kotor di bidang Error Count Exceeds di bagian Channel Control. Biarkan bidang ini kosong untuk menunjukkan tidak ada batasan.
Praktik terbaik:
-
Untuk skenario yang sensitif terhadap kualitas data, seperti database relasional (MySQL, SQL Server, PostgreSQL, Oracle, PolarDB, dan PolarDB-X), Hologres, ClickHouse, dan AnalyticDB for MySQL, atur batasan data kotor ke 0 untuk mengidentifikasi risiko kualitas data secara tepat waktu.
-
Untuk skenario yang tidak sensitif terhadap kualitas data, jangan konfigurasi batasan data kotor, atau atur ambang data kotor yang wajar berdasarkan kebutuhan bisnis Anda. Hal ini membantu mengurangi beban operasional penanganan data kotor sehari-hari.
-
Konfigurasikan peringatan kegagalan dan latensi untuk tugas kritis guna mendeteksi masalah secara tepat waktu.
-
Untuk tugas yang dapat dijalankan ulang, konfigurasikan pengulangan otomatis saat gagal untuk mengurangi dampak masalah lingkungan sesekali.
Batasan kuota koneksi sumber data
Bagian ini menjawab pertanyaan berikut:
-
Pertanyaan 1: Apa itu batasan kuota koneksi sumber data, dan bagaimana cara mengonfigurasi batas koneksi yang wajar?
-
Pertanyaan 2: Mengapa tugas sinkronisasi batch penuh dalam solusi sinkronisasi data berjalan lambat dan tetap berada dalam status Submit dalam waktu lama?
Fitur batasan koneksi sumber data mencakup:
-
Konkurensi penulisan tujuan: Jumlah maksimum thread yang menulis data ke tujuan dalam tugas sinkronisasi real-time. Konfigurasikan nilai ini berdasarkan ukuran kelompok sumber daya dan skala aktual tujuan. Batas atas yang dapat dikonfigurasi adalah 32, dan nilai default adalah 3.
-
Koneksi baca sumber maksimum: Selama fase inisialisasi data penuh batch dalam solusi sinkronisasi data, koneksi JDBC dibuat ke database untuk membaca semua data historis. Pengaturan ini mengontrol jumlah maksimum koneksi JDBC ke sumber, mencegah banyak tugas dimulai secara bersamaan dan menghabiskan kolam koneksi database, yang dapat memengaruhi stabilitas database. Konfigurasikan nilai ini berdasarkan kapasitas aktual sumber daya database Anda. Nilai default adalah 15. Jika Anda menemukan bahwa tugas tetap berada dalam status Submit dalam waktu lama, hal ini biasanya disebabkan oleh batas koneksi sumber data maksimum (coba atur waktu eksekusi tugas secara bergantian atau tingkatkan batas koneksi maksimum).
Anda dapat mengonfigurasi batasan kuota koneksi sumber data dalam solusi sinkronisasi data sebagai berikut: Di langkah Runtime Resource Settings, Anda dapat mengatur Destination Write Concurrency di bagian sinkronisasi real-time (default: 3, batas atas yang dapat dikonfigurasi: 32). Di bagian 6.2 Batch Full Synchronization, Anda dapat mengatur Maximum Source Read Connections (default: 15) untuk mengontrol jumlah koneksi JDBC ke database selama fase inisialisasi data penuh.