Jika kinerja penulisan data ke tabel Hologres atau pembaruan data di dalamnya tidak memenuhi harapan bisnis Anda, Anda dapat menganalisis penyebabnya menggunakan metode yang disediakan dalam topik ini. Penyebabnya bisa berupa pembacaan data yang lambat dari tabel sumber atau hambatan sumber daya Hologres. Dengan cara ini, Anda dapat menggunakan metode optimasi yang sesuai untuk meningkatkan kinerja penulisan dan pembaruan data.
Informasi latar belakang
Sebagai mesin gudang data real-time satu atap, Hologres mendukung penulisan dan pembaruan sejumlah besar data secara real-time serta memberikan kinerja tinggi dengan latensi rendah dalam skenario big data.
Cara kerjanya
Sebelum mempelajari cara mengoptimalkan kinerja penulisan atau pembaruan, Anda harus memahami cara kerja Hologres. Ini membantu Anda lebih baik memperkirakan kinerja penulisan Hologres dalam mode penulisan yang berbeda saat menggunakan Hologres dalam bisnis nyata.
Kinerja penulisan atau pembaruan bervariasi berdasarkan mode penyimpanan tabel.
Jika Anda menulis data ke atau memperbarui data di semua kolom tabel, mode penyimpanannya terdaftar dalam urutan menurun berdasarkan kinerja sebagai berikut:
Penyimpanan Berorientasi Baris > Penyimpanan Berorientasi Kolom > Penyimpanan Hibrid Baris-Kolom.Jika Anda menulis data ke atau memperbarui data di kolom tertentu tabel, mode penyimpanannya terdaftar dalam urutan menurun berdasarkan kinerja sebagai berikut:
Penyimpanan Berorientasi Baris > Penyimpanan Hibrid Baris-Kolom > Penyimpanan Berorientasi Kolom.
Kinerja penulisan atau pembaruan bervariasi berdasarkan mode penulisan.
Tabel berikut menjelaskan mode penulisan yang berbeda dari Hologres.
Mode Penulisan
Deskripsi
Insert
Menulis data ke tabel dalam mode Append-Only jika tidak ada primary key yang dikonfigurasikan untuk tabel tujuan.
InsertOrIgnore
Membuang data yang ingin Anda tulis jika Anda menulis data yang nilai primary key-nya sudah ada.
InsertOrReplace
Mengganti data yang ada jika Anda menulis data yang nilai primary key-nya sudah ada. Jika data yang ditulis tidak mencakup semua kolom, nilai null dimasukkan ke dalam kolom yang hilang dalam data baru.
InsertOrUpdate
Memperbarui data yang ada jika Anda menulis data yang nilai primary key-nya sudah ada. Mode penulisan ini melibatkan pembaruan seluruh baris dan pembaruan kolom tertentu dari sebuah baris. Jika data yang ditulis tidak mencakup semua kolom, kolom yang hilang dalam data baru tidak diperbarui.
Kinerja penulisan tabel berorientasi kolom bervariasi berdasarkan mode penulisan:
Tabel tujuan tanpa primary key memiliki kinerja tertinggi.
Jika tabel tujuan memiliki primary key, mode penulisannya terdaftar dalam urutan menurun berdasarkan kinerja:
InsertOrIgnore > InsertOrReplace ≥ InsertOrUpdate (seluruh baris) > InsertOrUpdate (kolom tertentu).
Mode penulisan tabel berorientasi baris terdaftar dalam urutan menurun berdasarkan kinerja:
InsertOrReplace = InsertOrUpdate (seluruh baris) ≥ InsertOrUpdate (kolom tertentu) ≥ InsertOrIgnore.
Mode penyimpanan tabel yang memiliki binary logging diaktifkan terdaftar dalam urutan menurun berdasarkan kinerja penulisan atau pembaruan:
Penyimpanan Berorientasi Baris > Penyimpanan Hibrid Baris-Kolom > Penyimpanan Berorientasi Kolom.
Pemecahan masalah kinerja penulisan
Jika kinerja penulisan rendah saat Anda menulis data ke atau memperbarui data di tabel, Anda dapat melihat metrik Penggunaan CPU (%) pada halaman Informasi Pemantauan di konsol Hologres untuk menemukan masalah kinerja.
Penggunaan CPU rendah.
Ini menunjukkan bahwa sumber daya Hologres tidak sepenuhnya digunakan dan bahwa masalah kinerja tidak terjadi di Hologres. Anda dapat memeriksa apakah ada masalah lain seperti pembacaan data yang lambat dari tabel sumber.
Penggunaan CPU tinggi. Misalnya, CPU berjalan pada 100% untuk waktu yang lama.
Ini menunjukkan bahwa penggunaan sumber daya Hologres telah mencapai batas atas. Anda dapat menggunakan metode berikut untuk mendiagnosis masalah:
Gunakan metode optimasi dasar untuk memeriksa apakah penggunaan sumber daya tinggi disebabkan oleh pengaturan dasar yang tidak valid. Untuk informasi lebih lanjut, lihat Metode Optimasi Dasar dalam topik ini.
Setelah menyelesaikan operasi optimasi dasar, periksa layanan sinkronisasi data seperti Flink atau Data Integration dan lakukan operasi optimasi lanjutan untuk lebih mengidentifikasi dan mendiagnosis masalah penulisan. Untuk informasi lebih lanjut, lihat Optimalkan Kinerja Penulisan Flink, Optimalkan Kinerja Penulisan Data Integration, dan Metode Optimasi Lanjutan.
Periksa apakah kinerja penulisan dipengaruhi oleh query. Operasi penulisan dan query bersamaan dapat menyebabkan penggunaan sumber daya tinggi. Anda dapat menggunakan log query lambat untuk memeriksa konsumsi sumber daya CPU dari query pada saat operasi penulisan dilakukan. Jika query memengaruhi kinerja penulisan secara negatif, Anda dapat mengonfigurasi penerapan high-availability multi-instance. Untuk informasi lebih lanjut, lihat Konfigurasikan Pembagian Baca/Tulis untuk Instance Utama dan Sekunder (Penyimpanan Bersama).
Setelah semua operasi optimasi selesai, jika kinerja penulisan tidak memenuhi harapan, Anda dapat melakukan scale out instance Hologres.
Metode optimasi dasar
Hologres dapat memberikan kinerja penulisan tinggi dalam sebagian besar kasus. Jika kinerja penulisan tidak memenuhi harapan Anda saat menulis data, Anda dapat menggunakan metode berikut untuk mengoptimalkan kinerja:
Sambungkan ke instance Hologres melalui jaringan pribadi untuk mengurangi overhead jaringan.
Hologres mendukung berbagai jenis jaringan seperti Virtual Private Clouds (VPC), jaringan klasik, dan Internet. Untuk informasi lebih lanjut tentang skenario aplikasi Hologres dalam berbagai jenis jaringan, lihat Informasi Jaringan dalam topik "Konfigurasi Instance". Kami merekomendasikan Anda menyambungkan ke instance Hologres melalui VPC untuk penulisan data terutama saat menggunakan aplikasi seperti Java Database Connectivity (JDBC) dan PostgreSQL. Internet membatasi lalu lintas, dan lebih tidak stabil dibandingkan VPC.
Gunakan rencana tetap untuk melakukan operasi penulisan.
Gambar berikut menunjukkan proses eksekusi pernyataan SQL di Hologres. Untuk informasi lebih lanjut, lihat QE.

Jika pernyataan SQL sesuai dengan karakteristik online analytical processing (OLAP), Hologres mengikuti proses implementasi yang ditunjukkan di sisi kiri gambar. Hologres menggunakan komponen seperti Query Optimizer (QO) dan Query Engine (QE) untuk memproses pernyataan SQL. Saat Anda menulis data ke atau memperbarui data di tabel, seluruh tabel dikunci. Jika pernyataan seperti
INSERT,UPDATE, danDELETEdieksekusi secara bersamaan, pernyataan SQL berikutnya hanya dapat dieksekusi setelah eksekusi pernyataan SQL saat ini selesai. Ini meningkatkan latensi.Jika pernyataan SQL sesuai dengan karakteristik rencana tetap, Hologres mengikuti proses implementasi yang ditunjukkan di sisi kanan gambar. Dalam proses ini, rencana tetap digunakan. Tanpa komponen seperti QO, query dapat dilakukan dengan cara sederhana menggunakan rencana tetap. Saat Anda menulis data ke atau memperbarui data di baris, hanya baris tersebut yang dikunci. Ini sangat meningkatkan konkurensi dan kinerja query.
Oleh karena itu, Anda dapat menggunakan rencana tetap untuk melakukan operasi penulisan atau pembaruan saat mengoptimalkan kinerja penulisan atau pembaruan.
Lakukan operasi penulisan atau pembaruan menggunakan rencana tetap
Pernyataan SQL yang dapat dieksekusi menggunakan rencana tetap harus sesuai dengan karakteristik rencana tetap. Dalam skenario berikut, rencana tetap tidak didukung:
Pernyataan
INSERT ON CONFLICTdieksekusi untuk menyisipkan data ke beberapa baris. Contoh pernyataan:INSERT INTO test_upsert(pk1, pk2, col1, col2) VALUES (1, 2, 5, 6), (2, 3, 7, 8) ON CONFLICT (pk1, pk2) DO UPDATE SET col1 = excluded.col1, col2 = excluded.col2;Pernyataan
INSERT ON CONFLICTdieksekusi untuk pembaruan sebagian, dan beberapa kolom data yang dimasukkan tidak dipetakan ke kolom di tabel tujuan.Tabel tujuan berisi kolom tipe data SERIAL.
Properti
Defaultdikonfigurasikan untuk tabel tujuan.Operasi
UPDATEatauDELETEdilakukan berdasarkan primary key. Contoh:update table set col1 = ?, col2 = ? where pk1 = ? and pk2 =?;.Tipe data beberapa kolom tidak didukung oleh rencana tetap.
Jika Anda mengeksekusi pernyataan SQL tanpa menggunakan rencana tetap, jenis pernyataan tersebut ditampilkan sebagai
INSERTdi bagianReal-time Import (RPS) metricpada halaman Informasi Pemantauan di konsol Hologres, seperti yang ditunjukkan pada gambar berikut.
Dalam hal ini, Hologres menggunakan Hologres Query Engine (HQE) atau PostgreSQL Query Engine (PQE) untuk memproses pernyataan SQL. Dalam sebagian besar kasus, operasi penulisan diproses menggunakan HQE. Jika operasi penulisan atau pembaruan lambat, Anda dapat mengeksekusi pernyataan berikut untuk menanyakan log query lambat dan memeriksa jenis mesin yang digunakan dalam query. Jenis mesin ditentukan oleh parameter engine_type.-- Query the INSERT, UPDATE, and DELETE statements that are executed without using fixed plans in the previous 3 hours. SELECT * FROM hologres.hg_query_log WHERE query_start >= now() - interval '3 h' AND command_tag IN ('INSERT', 'UPDATE', 'DELETE') AND ARRAY['HQE'] && engine_type ORDER BY query_start DESC LIMIT 500;Ubah pernyataan SQL yang diproses menggunakan HQE menjadi pernyataan SQL Software Development Kit (SDK) yang sesuai dengan karakteristik rencana tetap. Ini meningkatkan kinerja. Tabel berikut mencantumkan parameter Grand Unified Configuration (GUC) yang dapat digunakan untuk mendukung penggunaan rencana tetap. Kami merekomendasikan Anda mengatur parameter ke on di tingkat database. Untuk informasi lebih lanjut tentang cara menggunakan rencana tetap, lihat Percepat Eksekusi Pernyataan SQL dengan Menggunakan Rencana Tetap.
Skenario
Pengaturan GUC
Deskripsi
Gunakan rencana tetap untuk mengeksekusi pernyataan
INSERT ON CONFLICTuntuk menyisipkan data ke beberapa baris.alter database <databasename> set hg_experimental_enable_fixed_dispatcher_for_multi_values =on;Kami merekomendasikan Anda mengatur parameter GUC ini ke on di tingkat database.
Gunakan rencana tetap untuk menulis data ke kolom tipe data SERIAL.
alter database <databasename> set hg_experimental_enable_fixed_dispatcher_autofill_series =on;Kami merekomendasikan Anda tidak menentukan tipe data SERIAL untuk tabel. Tipe data ini memengaruhi kinerja penulisan secara negatif. Parameter GUC ini diatur ke
onsecara default di Hologres V1.3.25 dan versi lebih baru.Gunakan rencana tetap untuk menulis data ke kolom yang memiliki properti default yang dikonfigurasikan.
Di Hologres V1.3 dan versi lebih baru, jika Anda mengeksekusi pernyataan
INSERT ON CONFLICTuntuk menulis data ke kolom yang memiliki properti default yang dikonfigurasikan, rencana tetap digunakan secara default.Kami merekomendasikan Anda tidak mengonfigurasikan properti default untuk tabel. Properti default memengaruhi kinerja penulisan secara negatif. Di Hologres V1.1, pernyataan pada kolom yang memiliki properti default yang dikonfigurasikan tidak dapat diproses menggunakan rencana tetap. Di Hologres V1.3 dan versi lebih baru, pernyataan pada kolom yang memiliki properti default yang dikonfigurasikan dapat diproses menggunakan rencana tetap.
Gunakan rencana tetap untuk melakukan operasi UPDATE berdasarkan primary key.
alter database <databasename> set hg_experimental_enable_fixed_dispatcher_for_update =on;Di Hologres V1.3.25 dan versi lebih baru, parameter GUC ini diatur ke
onsecara default.Gunakan rencana tetap untuk melakukan operasi DELETE berdasarkan primary key.
alter database <databasename> set hg_experimental_enable_fixed_dispatcher_for_delete =on;Di Hologres V1.3.25 dan versi lebih baru, parameter GUC ini diatur ke
onsecara default.Jika pernyataan SQL dieksekusi menggunakan rencana tetap, jenis pernyataan tersebut ditampilkan sebagai
SDKdi bagianReal-time Import(RPS) metricpada halaman Informasi Pemantauan di konsol Hologres, seperti yang ditunjukkan pada gambar berikut. Jenis mesin yang ditentukan olehengine_typedari pernyataan SQL adalahSDKdi log query lambat.
Kinerja penulisan tidak ditingkatkan dengan menggunakan rencana tetap
Penyebab potensial untuk kinerja penulisan yang buruk setelah rencana tetap digunakan:
SDK berbasis rencana tetap dan HQE digunakan pada saat yang sama untuk menulis data ke atau memperbarui data di tabel. HQE menyebabkan tabel terkunci. Akibatnya, penulisan data menggunakan SDK harus menunggu kunci dilepaskan, yang memakan waktu. Anda dapat mengeksekusi pernyataan SQL berikut untuk memeriksa pernyataan yang diproses menggunakan HQE. Ubah pernyataan tersebut menjadi pernyataan SQL SDK berdasarkan kebutuhan bisnis Anda. Anda dapat menggunakan fitur Query Insight dari HoloWeb untuk dengan cepat memeriksa apakah query yang menggunakan rencana tetap sedang menunggu kunci yang disebabkan oleh HQE dilepaskan. Untuk informasi lebih lanjut, lihat Query Insight.
-- Query the INSERT, UPDATE, and DELETE statements that are executed without using fixed plans in the previous 3 hours. SELECT * FROM hologres.hg_query_log WHERE query_start >= now() - interval '3 h' AND command_tag IN ('INSERT', 'UPDATE', 'DELETE') AND ARRAY['HQE'] && engine_type AND table_write = '<table_name>' ORDER BY query_start DESC LIMIT 500;Jika data ditulis menggunakan SDK tetapi kinerja penulisan buruk, periksa metrik
CPU Utilization (%). Jika penggunaan CPU tetap tinggi, lakukan scale out instance Anda.
Nonaktifkan pencatatan biner untuk meningkatkan throughput penulisan
Log biner Hologres mencatat perubahan data yang disebabkan oleh mengeksekusi pernyataan INSERT, UPDATE, atau DELETE, termasuk perubahan data di setiap baris. Kode contoh berikut menunjukkan pernyataan UPDATE yang dieksekusi untuk memperbarui data tabel yang memiliki pencatatan biner diaktifkan:
update tbl set body =new_body where id='1';Log biner mencatat data dari semua kolom dalam baris. Untuk pembuatan log biner, diperlukan query titik pada semua kolom dalam baris tabel tujuan berdasarkan bidang filter. Dalam contoh ini, query titik dilakukan berdasarkan bidang
id. Query titik pada tabel berorientasi kolom mengonsumsi lebih banyak sumber daya dibandingkan yang dilakukan pada tabel berorientasi baris. Mode penyimpanan diurutkan dalam urutan menurun berdasarkan kinerja dalam menulis data ke tabel dengan pencatatan biner diaktifkan:Tabel Berorientasi Baris > Tabel Berorientasi Kolom.Cegah melakukan operasi penulisan real-time dan offline pada saat yang sama
Jika Anda menulis data dalam mode offline, misalnya, dari MaxCompute ke tabel Hologres, tabel Hologres terkunci. Jika Anda menggunakan Flink atau DataWorks Data Integration untuk menulis data ke tabel Hologres secara real-time menggunakan rencana tetap, hanya baris tempat Anda menyisipkan data yang terkunci. Jika operasi penulisan offline dan real-time dilakukan pada tabel yang sama secara bersamaan, tabel akan terkunci karena operasi penulisan offline. Ini meningkatkan latensi dan mengurangi kinerja penulisan real-time. Oleh karena itu, kami merekomendasikan Anda mencegah melakukan operasi penulisan real-time dan offline pada tabel yang sama secara bersamaan.
Optimalkan kinerja penulisan Holo Client atau JDBC
Anda dapat menggunakan metode berikut untuk meningkatkan kinerja penulisan saat menulis data menggunakan klien seperti Holo Client atau JDBC.
Lakukan operasi penulisan batch
Saat menulis data menggunakan klien, operasi penulisan batch mencapai throughput lebih tinggi dibandingkan operasi penulisan tunggal. Operasi penulisan batch meningkatkan kinerja penulisan.
Saat menggunakan Holo Client, Hologres secara otomatis melakukan operasi penulisan batch. Kami merekomendasikan Anda menggunakan pengaturan default Holo Client. Untuk informasi lebih lanjut, lihat Holo Client.
Saat menggunakan JDBC, atur parameter
WriteBatchedInsertske true untuk mengimplementasikan operasi penulisan batch. Contoh kode berikut menunjukkan perintah yang digunakan untuk mengimplementasikan operasi penulisan batch. Untuk informasi lebih lanjut tentang JDBC, lihat JDBC.jdbc:postgresql://{ENDPOINT}:{PORT}/{DBNAME}?ApplicationName={APPLICATION_NAME}&reWriteBatchedInserts=true
Contoh berikut menunjukkan cara mengubah dua pernyataan SQL terpisah yang tidak mendukung operasi penulisan batch menjadi satu pernyataan SQL yang mendukung operasi penulisan batch:
-- Dua pernyataan SQL yang tidak mendukung operasi penulisan batch: insert into data_t values (1, 2, 3); insert into data_t values (2, 3, 4); -- Pernyataan SQL yang mendukung operasi penulisan batch: insert into data_t values (1, 2, 3), (4, 5, 6); -- Pernyataan SQL lain yang mendukung operasi penulisan batch: insert into data_t select unnest(ARRAY[1, 4]::int[]), unnest(ARRAY[2, 5]::int[]), unnest(ARRAY[3, 6]::int[]);Tulis data dengan mengeksekusi pernyataan yang disiapkan
Hologres kompatibel dengan ekosistem PostgreSQL dan dibangun di atas protokol yang diperluas dari PostgreSQL. Hologres memungkinkan Anda mengeksekusi pernyataan yang disiapkan untuk menyimpan hasil kompilasi SQL server. Ini mengurangi overhead yang disebabkan oleh komponen seperti frontend (FE) dan QO, serta meningkatkan kinerja penulisan.
Untuk informasi lebih lanjut tentang cara mengeksekusi pernyataan yang disiapkan untuk menulis data menggunakan JDBC atau Holo Client, lihat JDBC.
Optimalkan kinerja penulisan Flink
Catat hal-hal berikut:
Tabel Sumber Log Biner
Jika Anda menentukan tabel yang berisi kolom tipe data SMALLINT atau tipe data lain yang tidak didukung untuk deployment, sistem mungkin gagal menjalankan deployment meskipun kolom-kolom ini tidak ditentukan untuk konsumsi. Realtime Compute for Apache Flink versi VVR-6.0.3-Flink-1.15 atau lebih baru dapat mengonsumsi log biner Hologres dalam mode JDBC. Dalam mode ini, kolom dengan berbagai tipe data dapat dikonsumsi.
Kami merekomendasikan Anda menentukan mode penyimpanan berorientasi baris untuk tabel yang memiliki pencatatan biner diaktifkan. Jika Anda menentukan mode penyimpanan berorientasi kolom untuk tabel yang memiliki pencatatan biner diaktifkan, lebih banyak sumber daya diperlukan, dan kinerja penulisan dipengaruhi secara negatif.
Tabel Dimensi
Tabel dimensi harus menggunakan penyimpanan berorientasi baris atau penyimpanan hibrid baris-kolom. Tabel berorientasi kolom memiliki overhead besar dalam query titik.
Saat membuat tabel berorientasi baris, Anda harus mengonfigurasikan primary key. Kinerjanya lebih baik jika primary key juga digunakan sebagai clustering key.
Saat menggabungkan tabel dimensi Hologres dengan tabel lain, Anda harus menentukan semua bidang dalam primary key tabel dimensi dalam klausa ON.
Tabel Hasil
Jika Anda ingin menggabungkan tabel lebar atau memperbarui sebagian data dalam tabel lebar di Hologres, Anda harus mengonfigurasikan primary key untuk tabel lebar tersebut. Kolom primary key harus dideklarasikan dan nilai primary key harus ditulis ke setiap tabel hasil dalam mode
InsertOrUpdate. Parameterignoredeleteharus diatur ketrueuntuk setiap tabel hasil. Ini mencegah pesan retraction menghasilkan permintaan penghapusan.Jika tabel lebar adalah tabel berorientasi kolom dan sejumlah besar permintaan diinisiasi per detik, penggunaan CPU menjadi tinggi. Kami merekomendasikan Anda menonaktifkan
dictionary encodinguntuk bidang dalam tabel.Jika primary key dikonfigurasikan untuk tabel hasil, kami merekomendasikan Anda mengonfigurasikan properti
segment_key. Ini membantu dengan cepat menemukan file dasar tempat data berada saat Anda menulis atau memperbarui data. Kami merekomendasikan Anda mengonfigurasikan propertisegment_keyuntuk kolom yang menunjukkan timestamp atau tanggal, dan menulis data yang memiliki korelasi kuat dengan waktu penulisan ke kolom tersebut.
Saran Pengaturan Parameter Flink
Nilai default parameter untuk konektor Hologres adalah nilai optimal dalam sebagian besar kasus. Jika salah satu dari masalah berikut terjadi, Anda dapat mengubah nilai parameter berdasarkan kebutuhan bisnis Anda.
Latensi Tinggi Konsumsi Log Biner
Secara default, jumlah baris baca yang ditentukan oleh parameter
binlogBatchReadSizeadalah 100. Jika ukuran data dalam satu baris yang ditentukan oleh parameterbyte sizekecil, Anda dapat meningkatkan nilai parameter binlogBatchReadSize untuk mengurangi latensi konsumsi.Kinerja Buruk Query Titik pada Tabel Dimensi
Atur parameter
asyncketrueuntuk mengaktifkan mode asinkron. Dalam mode asinkron, beberapa permintaan dan respons diproses secara bersamaan. Ini mempercepat query dan meningkatkan throughput query. Namun, permintaan tidak diproses dalam urutan mutlak dalam mode asinkron.Jika tabel dimensi berisi sejumlah besar data dan jarang diperbarui, kami merekomendasikan Anda menggunakan cache tabel dimensi untuk mengoptimalkan kinerja query. Tambahkan pengaturan
cache = 'LRU'dan atur parametercacheSizeke nilai lebih besar dari nilai default 10000 berdasarkan kebutuhan bisnis Anda.
Koneksi Tidak Mencukupi
Secara default,
connectionsdiimplementasikan menggunakan JDBC. Sejumlah besar deployment Flink dapat menyebabkan jumlah koneksi yang dialokasikan ke Hologres tidak mencukupi. Dalam hal ini, Anda dapat mengonfigurasikan parameterconnectionPoolNameuntuk berbagi koneksi di antara tabel yang dialokasikan ke pool yang sama dalam TaskManager yang sama.
Metode Pengembangan Deployment yang Direkomendasikan
Flink SQL lebih mudah dirawat dan portabel dibandingkan DataStream. Oleh karena itu, kami merekomendasikan Anda menggunakan Flink SQL untuk mengimplementasikan deployment. Jika DataStream diperlukan, kami merekomendasikan Anda menggunakan konektor Hologres DataStream. Untuk informasi lebih lanjut, lihat Konektor Hologres DataStream. Jika Anda ingin menggunakan konektor DataStream kustom, kami merekomendasikan Anda menggunakan Holo Client daripada JDBC. Metode pengembangan deployment diurutkan dalam urutan menurun berdasarkan prioritas rekomendasi:
Flink SQL > Flink DataStream (connector) > Flink DataStream (Holo Client) > Flink DataStream (JDBC).Diagnosis Kinerja Penulisan yang Buruk
Dalam sebagian besar kasus, kinerja penulisan yang buruk mungkin disebabkan oleh langkah-langkah lain dalam deployment Flink. Anda dapat membagi deployment Flink menjadi beberapa node dan memeriksa tekanan balik dalam deployment Flink. Jika tekanan balik terjadi di sumber data atau beberapa node komputasi kompleks, operasi penulisan pada tabel hasil lambat. Dalam hal ini, masalah terjadi di Flink.
Jika penggunaan CPU instance Hologres berada pada nilai tinggi seperti 100% untuk waktu yang lama, dan latensi penulisan tinggi, masalah terjadi di Hologres.
Untuk informasi lebih lanjut tentang pengecualian umum lainnya dan metode pemecahan masalah, lihat FAQ tentang Masalah Blink dan Flink.
Optimalkan kinerja penulisan Data Integration
Jumlah Thread dan Jumlah Koneksi
Jumlah koneksi ke Data Integration dalam mode non-skrip adalah 3 per thread. Dalam mode skrip, Anda dapat menggunakan parameter
maxConnectionCountuntuk mengonfigurasikan jumlah total koneksi dalam tugas, atau menggunakan parameterinsertThreadCountuntuk mengonfigurasikan jumlah koneksi dalam satu thread. Dalam sebagian besar kasus, nilai default jumlah thread dan jumlah koneksi dapat memastikan kinerja penulisan optimal. Anda dapat memodifikasi pengaturan berdasarkan kebutuhan bisnis Anda.Grup Sumber Daya Eksklusif
Sebagian besar pekerjaan Data Integration diproses dalam grup sumber daya eksklusif. Oleh karena itu, spesifikasi grup sumber daya eksklusif menentukan kinerja puncak pekerjaan. Untuk memastikan kinerja tinggi, kami merekomendasikan Anda mengalokasikan satu core CPU dalam grup sumber daya eksklusif untuk satu thread. Jika spesifikasi grup sumber daya kecil tetapi jumlah pekerjaan bersamaan besar, memori Java virtual machine (JVM) mungkin tidak mencukupi. Jika bandwidth untuk grup sumber daya eksklusif habis, kinerja penulisan pekerjaan juga terpengaruh. Dalam hal ini, kami merekomendasikan Anda membagi pekerjaan menjadi pekerjaan-pekerjaan kecil dan menetapkan pekerjaan-pekerjaan tersebut ke grup sumber daya yang berbeda. Untuk informasi lebih lanjut tentang spesifikasi dan metrik grup sumber daya eksklusif dalam Data Integration, lihat Metrik Kinerja dalam topik "Penagihan Grup Sumber Daya Eksklusif untuk Data Integration (langganan)".
Diagnosis Kinerja Penulisan yang Buruk
Saat menulis data ke Hologres menggunakan Data Integration, jika waktu tunggu yang dikonsumsi pada sumber lebih lama daripada yang dikonsumsi pada tujuan, masalah terjadi di sumber.
Jika penggunaan CPU instance Hologres berada pada nilai tinggi seperti 100% untuk waktu yang lama, dan latensi penulisan tinggi, masalah terjadi di Hologres.
Metode optimasi lanjutan
Setelah menggunakan metode optimasi yang dijelaskan dalam bagian sebelumnya dari topik ini untuk mengoptimalkan kinerja penulisan, kinerja penulisan dapat ditingkatkan dalam sebagian besar kasus. Jika kinerja penulisan tidak memenuhi harapan Anda, periksa faktor lain yang memengaruhi kinerja penulisan, seperti pengaturan indeks dan distribusi data. Bagian ini memperkenalkan metode optimasi lanjutan untuk meningkatkan kinerja penulisan berdasarkan metode optimasi dasar. Metode optimasi lanjutan digunakan untuk mengoptimalkan kinerja dalam hal prinsip teknis Hologres.
Distribusi Data yang Tidak Merata
Jika data didistribusikan secara tidak merata atau kunci distribusi yang ditentukan tidak valid, sumber daya komputasi instance Hologres tidak dapat didistribusikan secara merata. Ini mengurangi efisiensi penggunaan sumber daya dan memengaruhi kinerja penulisan. Untuk informasi lebih lanjut tentang pemecahan masalah distribusi data yang tidak merata dan solusinya, lihat Query Alokasi Shard di Antara Worker.
Pengaturan Kunci Segmen yang Tidak Valid
Saat menulis data ke tabel berorientasi kolom yang mana kunci segmen yang ditentukan untuk tabel tidak sesuai, kinerja penulisan terpengaruh. Seiring dengan meningkatnya volume data tabel, kinerja penulisan menurun. Kunci segmen digunakan untuk membagi file dasar. Saat menulis data ke atau memperbarui data dalam tabel, Hologres memeriksa data lama berdasarkan primary key. Untuk tabel berorientasi kolom, Hologres menemukan file dasar berdasarkan kunci segmen. Sejumlah besar file perlu dipindai selama query data jika tidak ada atau kunci segmen yang tidak valid ditentukan untuk tabel berorientasi kolom atau kolom yang membentuk kunci segmen tidak memiliki korelasi kuat dengan waktu. Misalnya, data dalam kolom yang membentuk kunci segmen tidak berurutan. Dalam hal ini, sejumlah besar operasi I/O dilakukan, dan sejumlah besar sumber daya CPU dikonsumsi. Akibatnya, kinerja penulisan menurun, dan beban pada instance meningkat. Dalam bagian metrik
I/O Throughputpada halaman Informasi Pemantauan di konsol Hologres, nilai metrikReadtinggi meskipun pekerjaan yang sedang berlangsung melibatkan terutama operasi penulisan.Oleh karena itu, kami merekomendasikan Anda menentukan kolom tipe data TIMESTAMP atau DATE sebagai kunci segmen, dan pastikan bahwa data yang ingin Anda sisipkan memiliki korelasi kuat dengan waktu penulisan.
Pengaturan Kunci Kluster yang Tidak Tepat
Jika primary key ditentukan untuk tabel, Hologres memeriksa data lama dalam tabel berdasarkan primary key saat Anda menulis data ke atau memperbarui data dalam tabel.
Untuk tabel berorientasi baris, jika kunci kluster tidak konsisten dengan primary key, Hologres memeriksa data berdasarkan primary key dan kunci kluster secara terpisah. Ini meningkatkan latensi penulisan. Oleh karena itu, kami merekomendasikan Anda mengonfigurasikan kolom yang sama sebagai kunci kluster dan primary key untuk tabel berorientasi baris.
Untuk tabel berorientasi kolom, pengaturan kunci kluster terutama memengaruhi kinerja query tetapi tidak memengaruhi kinerja penulisan.