Topik ini menjawab pertanyaan yang sering diajukan tentang penggunaan StarRocks.
-
Perencanaan dan evaluasi sistem
-
Model data dan definisi tabel
-
Ketika Routine Load mengalami masalah performa, bagaimana cara menyetel parameternya?
-
Pembelian
-
Pertanyaan penggunaan umum
-
Bagaimana fungsi COUNT bekerja pada berbagai model data StarRocks?
-
Bagaimana cara mengurangi penggunaan disk direktori /mnt/disk1/starrocks/storage/trash/?
-
Apa yang harus dilakukan jika terjadi error saat membuat materialized view?
-
Mengapa saya tidak dapat mengakses kluster melalui port 8030 atau 8040?
-
Bagaimana cara mereset kluster untuk memulihkan dari exception data?
-
Mengapa node tugas yang ditambahkan saat scaling out tidak digunakan untuk komputasi?
Persyaratan hardware
-
Konfigurasi mesin secara keseluruhan
Kami merekomendasikan agar node BE memiliki minimal CPU 16 core dan memori 64 GB, serta node FE memiliki minimal CPU 8 core dan memori 16 GB.
Di lingkungan produksi, node FE biasanya memiliki CPU 16 core, memori 32 GB atau 64 GB, serta SSD NVMe berkapasitas 200 GB hingga 500 GB.
-
Disk
-
Anda dapat menggunakan Hard Disk Drive (HDD) atau SSD.
-
Perkirakan kapasitas disk yang dibutuhkan dengan rasio kompresi 3:1 dan pemanfaatan disk maksimum 70% hingga 75%.
-
Jika Anda mengimpor data Hive dalam format Parquet atau ORC ke StarRocks, gunakan rasio kompresi 1:1 untuk estimasi.
Misalnya, jika data Hive sumber berukuran 3 TB, ukuran data di StarRocks juga akan menjadi 3 TB setelah diimpor.
-
-
CPU
-
CPU harus mendukung set instruksi Advanced Vector Extensions 2 (AVX2). Anda dapat menjalankan perintah
cat /proc/cpuinfo |grep avx2untuk memverifikasi dukungan tersebut. -
Mesin eksekusi vektorisasi bekerja optimal dengan set instruksi CPU yang kompatibel. Jika CPU mesin Anda tidak mendukung set instruksi yang diperlukan, kami merekomendasikan untuk melakukan upgrade hardware.
-
-
Jaringan
Kami merekomendasikan penggunaan kartu antarmuka jaringan (NIC) dan switch Ethernet 10 Gigabit.
Persyaratan konfigurasi software
Untuk informasi lebih lanjut tentang konfigurasi software, lihat Konfigurasi parameter.
Konfigurasi replika
Di lingkungan produksi tipikal, dua atau tiga replika sudah cukup. Kami merekomendasikan mengatur jumlah replika menjadi tiga.
Mem-partisi tabel
Partisi yang tepat dapat secara efektif mengurangi jumlah data yang dipindai.
-
Umumnya, Anda memilih kunci partisi berdasarkan cara bisnis Anda mengelola data. Misalnya, Anda dapat menggunakan kolom waktu atau wilayah sebagai kunci partisi.
-
Jika Anda perlu membuat partisi secara otomatis, Anda dapat menggunakan partisi dinamis.
Menggunakan bucketing
-
Pilih kolom dengan kardinalitas tinggi sebagai kunci bucketing untuk mencegah kesenjangan data antar bucket.
-
Jika terdapat ID unik, kami merekomendasikan menggunakannya untuk bucketing.
-
Jika Anda mengalami kesenjangan data yang parah, Anda dapat menggunakan beberapa kolom sebagai kunci bucketing. Namun, hindari penggunaan terlalu banyak kolom.
-
-
Perkirakan ukuran tablet optimal dan jumlah total bucket berdasarkan volume data total Anda serta panduan berikut.
-
Untuk data mentah yang tidak dikompresi, seperti data dalam format CSV, ukuran tablet yang direkomendasikan berkisar antara 1 GB hingga 10 GB.
-
Untuk data dalam format Parquet, kami merekomendasikan ukuran tablet sekitar 1 GB.
-
-
Untuk memaksimalkan pemanfaatan resource pada jumlah mesin yang sedikit, hitung jumlah bucket menggunakan rumus berikut:
Jumlah BE * Jumlah core CPU / 2.
Merancang sort key
Rancang sort key berdasarkan pola kueri Anda:
-
Untuk mempercepat kueri, gunakan kolom yang sering digunakan dalam kondisi filter dan klausa GROUP BY sebagai sort key.
-
Jika workload Anda melibatkan banyak pencarian titik (point lookups), letakkan kolom ID yang digunakan untuk pencarian sebagai kolom pertama sort key.
Misalnya, jika Anda sering menjalankan kueri konkurensi tinggi seperti
select sum(revenue) from lineorder where user_id='aaa100';, kami sangat merekomendasikan menjadikanuser_idsebagai kolom pertama sort key. -
Jika kueri Anda sebagian besar berupa agregasi dan pemindaian, letakkan kolom dengan kardinalitas rendah di awal sort key.
Misalnya, untuk kueri seperti
select region, nation, count(*) from lineorder_flat group by region, nation, lebih baik mengaturregionsebagai kolom pertama dannationsebagai kolom kedua.
Memilih tipe data
Gunakan tipe data yang paling tepat. Misalnya, gunakan tipe integer alih-alih string jika memungkinkan, dan pilih INT daripada BIGINT jika rentang data memungkinkan. Penggunaan tipe data yang tepat meningkatkan performa database.
Menyetel parameter Routine Load
Strategi penyetelan parameter
Jika Anda mengalami masalah performa dengan Routine Load, pertimbangkan untuk menyetel parameter berikut:
-
Siklus penjadwalan tugas
Untuk mempercepat konsumsi data, perpendek siklus penjadwalan tugas dengan mengubah parameter max_batch_interval.
PentingSiklus penjadwalan tugas minimum adalah 5 detik.
-
Paralelisme tugas
Jika Anda memiliki banyak partisi dan node BE, Anda dapat meningkatkan nilai parameter berikut untuk mempercepat eksekusi tugas. Namun, peningkatan paralelisme dapat menyebabkan konsumsi CPU yang lebih tinggi.
-
max_routine_load_task_concurrent_num
-
desired_concurrent_number
StarRocks membagi satu pekerjaan Routine Load menjadi beberapa sub-tugas berdasarkan jumlah partisi topik Kafka dan node BE yang tersedia. Sub-tugas ini kemudian didistribusikan ke BE untuk dieksekusi. Paralelisme tugas adalah jumlah sub-tugas yang dihasilkan dari satu pekerjaan.
Paralelisme tugas aktual dihitung menggunakan rumus berikut.
concurrent_num = Min( Min( partition_num, Min( desired_concurrent_num, alive_be_num ) ),Config.max_routine_load_task_concurrent_num ) -
-
Ukuran batch tugas
-
routine_load_task_consume_second: Percepat konsumsi data dengan memperpanjang durasi pembacaan tunggal.
-
max_routine_load_batch_size: Percepat konsumsi data dengan meningkatkan jumlah data yang dibaca dalam satu batch.
Anda dapat memeriksa log berikut untuk menentukan apakah parameter ukuran batch saat ini terlalu rendah. Biasanya, nilai 0 atau lebih pada field
left_bytesdalam log ini menunjukkan bahwa jumlah data yang dibaca dalam satu batch belum melebihi batas max_routine_load_batch_size. Nilai negatif menunjukkan bahwa max_routine_load_batch_size terlalu kecil.I0325 20:27:50.410579 15259 data_consumer_group.cpp:131] consumer group done: 41448fb1a0ca59ad-30e34dabfa7e47a0. consume time(ms)=3261, received rows=179190, received bytes=9855450, eos: 1, left_time: -261, left_bytes: 514432550, blocking get time(us): 3065086, blocking put time(us): 24855 1 -
Parameter Routine Load
|
Parameter |
Tipe |
Nilai default |
Deskripsi |
|
max_routine_load_job_num |
fe.conf |
100 |
Jumlah maksimum pekerjaan Routine Load dalam status NEED_SCHEDULE, RUNNING, atau PAUSED. |
|
max_routine_load_task_concurrent_num |
fe.conf |
5 |
Paralelisme maksimum untuk satu pekerjaan Routine Load. |
|
max_routine_load_task_num_per_be |
fe.conf |
5 |
Jumlah maksimum tugas Routine Load yang dapat dijadwalkan pada satu node BE. |
|
max_routine_load_batch_size |
fe.conf |
500 MB |
Jumlah maksimum data yang dibaca dari Kafka dalam satu batch. |
|
routine_load_task_consume_second |
fe.conf |
3 |
Waktu maksimum untuk membaca data dari Kafka dalam satu batch. |
|
routine_load_task_timeout_second |
fe.conf |
15 |
Timeout untuk satu tugas Routine Load. |
|
max_consumer_num_per_group |
be.conf |
3 |
Jumlah maksimum konsumen per kelompok konsumen. |
|
desired_concurrent_number |
properties |
3 |
Paralelisme yang diinginkan untuk pekerjaan Routine Load. Paralelisme aktual dihitung berdasarkan rumus berikut: |
|
max_batch_interval |
properties |
10s |
Interval penjadwalan untuk pekerjaan Routine Load. |
|
max_batch_rows |
properties |
200000 |
Parameter ini menentukan ukuran jendela deteksi error. Ukuran jendela adalah |
|
max_error_number |
properties |
0 |
Jumlah maksimum baris error yang diizinkan dalam jendela sampling. Nilainya harus 0 atau lebih. Nilai default 0 berarti tidak ada baris error yang diizinkan. Penting
Baris yang difilter oleh klausa WHERE tidak dihitung sebagai baris error. |
|
strict_mode |
properties |
true |
Menentukan apakah mode ketat diaktifkan. Nilai default adalah true. Dalam mode ketat, baris akan difilter jika kolom sumber non-null diubah menjadi NULL. |
Memilih model data
StarRocks menyediakan empat model data. Pilih model yang paling sesuai dengan kasus penggunaan Anda:
|
Model data |
Skenario |
|
duplicate key model |
|
|
aggregate key model |
|
|
unique key model |
Ideal untuk analisis real-time data yang sering diperbarui. |
|
primary key model |
Ideal untuk analisis real-time data yang sering diperbarui. Jika Anda memiliki pembaruan kolom parsial, kami merekomendasikan untuk membatasi jumlah kolom di bawah 200. |
Fungsi COUNT pada model data
StarRocks menyediakan empat model data: duplicate key model, unique key model, aggregate key model, dan primary key model. Perilaku fungsi COUNT berbeda signifikan di antara model-model tersebut.
-
duplicate key model: Model ini tidak memerlukan operasi merge, sehingga operasi COUNT cepat.
-
unique key dan aggregate key model: Implementasi COUNT melibatkan operasi merge multi-versi, sehingga relatif lebih lambat.
Jika kuncinya bertipe string, operasi COUNT secara teoretis bahkan lebih lambat.
-
primary key model: Saat membaca data, model ini menggunakan indeks in-memory dan vektor penghapusan, sehingga tidak memerlukan operasi merge. Akibatnya, operasi COUNT lebih cepat dibandingkan model unique key dan aggregate key.
Gunakan model ini untuk workload yang melibatkan operasi pembaruan.
Mengurangi penggunaan disk direktori trash
Direktori /mnt/disk1/starrocks/storage/trash/ menyimpan data yang telah dihapus. Untuk mengurangi penggunaan disk direktori ini, Anda dapat mengurangi nilai parameter trash_file_expire_time_sec dalam file be.conf untuk memperpendek periode retensi direktori trash. Nilai default adalah 259.200 detik (72 jam).
Error saat membuat materialized view
-
Gejala: Saat Anda mencoba membuat materialized view, error berikut terjadi.
mysql> CREATE MATERIALIZED VIEW test_bl1_mvte AS select timed, event, count(userId) as PV from test_bl1 group by timed, event; ERROR 1064 (HY000): table [test_bl1] is not stable. Some tablets of this table may not be healthy or are being scheduled. You need to repair the table first or stop cluster balance. See 'help admin;'. mysql> -
Solusi:
-
Jalankan perintah
show proc "/cluster_balance";danshow proc "/statistic";. -
Periksa apakah ada tablet yang sedang di-rebalance:
-
Jika ada tablet yang sedang di-rebalance, tunggu hingga proses selesai.
-
Jika tidak, jalankan perintah
set disable_balance=truelalu coba buat kembali materialized view.
-
-
Troubleshooting kueri lambat
Kami merekomendasikan metode troubleshooting berikut:
-
Aktifkan pelaporan profil dan lihat informasi profil di UI StarRocks.
Jalankan perintah
SET is_report_success = true;untuk mengaktifkan pelaporan profil. -
Ikuti langkah-langkah troubleshooting dasar berikut:
-
Atur paralelisme.
-
Pipeline
SET pipeline_dop = 8; SET enable_pipeline_engine = true; -
Mesin non-pipeline
SET enable_pipeline_engine=false; SET parallel_fragment_exec_instance_num=8;
-
-
Periksa distribusi tablet.
show data xxx;CatatanUkuran tablet yang direkomendasikan berkisar antara 1 GB hingga 10 GB.
-
Periksa definisi tabel.
-
Periksa
iotimedalam profil. Jika nilainya tinggi, Anda dapat menghapus indeks yang tidak perlu, seperti jumlah indeks bitmap yang berlebihan. -
Periksa model data tabel dan pilih model yang sesuai. Misalnya, dalam unique key model, penurunan predikat tidak dapat diterapkan hingga kompaksi selesai, yang sering menyebabkan kueri lambat.
-
-
Kegagalan akses pada port 8030 atau 8040
Port default untuk load_url dan webserver_port bergantung pada versi EMR Anda. Untuk EMR V5.8.0/V3.42.0 dan versi sebelumnya, gunakan port 8030 dan 8040 secara berturut-turut. Untuk EMR V5.9.0/V3.43.0 dan versi setelahnya, gunakan port 18030 dan 18040.
Anda dapat menjalankan perintah show frontends untuk melihat port aktual yang digunakan.
Ketersediaan wilayah EMR StarRocks
EMR StarRocks tersedia di semua wilayah.
Disk data BE dan distribusi data
Secara default, empat disk cloud ESSD PL1 yang ditingkatkan dipasang. StarRocks secara otomatis menyeimbangkan data di seluruh node berdasarkan beban, bucketing, dan faktor lainnya. Setiap replika tablet disimpan sepenuhnya pada satu disk.
Mereset kluster untuk pemulihan data
Operasi berikut menghapus semua data di kluster. Lakukan dengan hati-hati.
-
Hentikan layanan kluster (FE dan BE).
-
Bersihkan direktori metadata FE.
-
Periksa file fe.conf di direktori
/opt/apps/STARROCKS/starrocks-current/fe/conf/untuk menemukan direktori yang dikonfigurasi untukmeta_dir. -
Hapus folder bdb dari direktori yang dikonfigurasi.
-
Kosongkan folder image di direktori yang dikonfigurasi.
-
-
Bersihkan data dan metadata BE.
-
Periksa file be.conf di direktori
/opt/apps/STARROCKS/starrocks-current/be/conf/untuk menemukan direktori yang dikonfigurasi untukstorage_root_path. -
Hapus semua folder dan file dari direktori yang dikonfigurasi kecuali folder data dan meta.
-
Kosongkan folder data dan meta di direktori yang dikonfigurasi.
CatatanKonfigurasi mungkin menentukan beberapa path. Anda harus melakukan operasi ini untuk setiap path.
-
-
Nyalakan kembali layanan kluster (FE dan BE).
Menampilkan log
Direktori log biasanya ditemukan di path berikut:
-
FE
-
/opt/apps/STARROCKS/starrocks-current/fe/log/
-
/mnt/disk1/log/starrocks/
-
-
BE
-
/opt/apps/STARROCKS/starrocks-current/be/log/
-
/mnt/disk1/log/starrocks/
-
Node tugas yang ditambahkan saat scaling out tidak digunakan untuk komputasi
Gejala
Setelah Anda melakukan scaling out kluster StarRocks dengan menambahkan tiga node tugas, node baru tersebut ditetapkan sebagai compute node (CN) tetapi tidak secara otomatis menjalankan tugas komputasi. Meskipun node BE yang ada berada di bawah beban tinggi, node tugas baru tetap kurang dimanfaatkan, dengan data pemantauan menunjukkan beban yang konsisten rendah.
Penyebab
Dalam arsitektur integrasi komputasi dan penyimpanan, CN dalam kluster StarRocks hanya dapat digunakan untuk kueri pada tabel eksternal. Oleh karena itu, jika aplikasi terutama melibatkan kueri pada tabel internal, node BE menangani tugas tersebut, sehingga CN baru kurang dimanfaatkan.
Solusi
Sebelum menjalankan tugas kueri, eksekusi perintah SQL berikut untuk memprioritaskan CN dalam eksekusi tugas.
SET GLOBAL prefer_compute_node=true;
Menampilkan password kluster StarRocks
Password untuk kluster StarRocks adalah password yang Anda atur untuk pengguna root saat membuat kluster. Jika Anda lupa password tersebut, Anda dapat meresetnya. Untuk informasi lebih lanjut, lihat Bagaimana cara mereset kata sandi logon kluster?