Topik ini menjawab pertanyaan umum mengenai EMR Serverless StarRocks.
Bagaimana cara mengakses OSS lintas akun?
Secara default, EMR Serverless StarRocks menyediakan akses tanpa kata sandi ke bucket OSS dalam akun yang sama. Untuk mengakses sumber daya OSS di akun lain, Anda harus menonaktifkan pengaturan default ini, mengonfigurasi pasangan AccessKey akun target, lalu menerapkan konfigurasi baru tersebut.
-
Nonaktifkan akses tanpa kata sandi: Pada tab Parameter Configuration, hapus nilai item konfigurasi berikut dalam file yang ditentukan.
-
core-site.xml
fs.oss.credentials.provider = -
jindosdk.cfg
fs.oss.provider.format = fs.oss.provider.endpoint =
-
-
Tambahkan pasangan AccessKey untuk akun target: Pada tab Parameter Configuration, klik Add Configuration Item dan tambahkan konfigurasi berikut ke file yang ditentukan.
-
core-site.xml
fs.oss.accessKeyId = AccessKey ID of the target account fs.oss.accessKeySecret = AccessKey Secret of the target account -
jindosdk.cfg
fs.oss.accessKeyId = AccessKey ID of the target account fs.oss.accessKeySecret = AccessKey Secret of the target account
-
-
Terapkan konfigurasi: Pada tab Parameter Configuration, klik Submit Parameters.
Gunakan driver UDF dan JDBC connector
Sebelum menggunakan UDF dan driver JDBC, Anda harus memperoleh file JAR yang diperlukan dari sumber eksternal.
-
Unggah file JAR ke OSS. Untuk informasi selengkapnya, lihat Upload files.
Saat mengunggah file, atur object ACL ke Public Read/Write untuk memberikan izin baca-tulis publik pada file JAR tersebut.
-
Dapatkan URL untuk setiap file JAR.
Di Konsol OSS, temukan tautan untuk setiap file JAR yang berhasil diunggah. Gunakan URL HTTP dari titik akhir internal, yang harus dalam salah satu format berikut:
-
Untuk driver JDBC:
http://<YourBucketName>.oss-cn-xxxx-internal.aliyuncs.com/mysql-connector-java-*.jar. -
Untuk UDF:
http://<YourBucketName>.oss-cn-xxxx-internal.aliyuncs.com/<YourPath>/<jar_package_name>.
-
-
Gunakan file JAR tersebut. Untuk informasi selengkapnya, lihat Java UDF dan JDBC Catalog.
Bagaimana cara mengatur ulang kata sandi instans?
-
Mengatur ulang kata sandi instans akan mengganggu koneksi antara client dan server. Untuk meminimalkan dampak pada lingkungan produksi, lakukan operasi ini selama jam sepi.
-
Hanya pengguna dengan izin AliyunEMRStarRocksFullAccess yang dapat mengatur ulang kata sandi.
-
Buka halaman detail instans.
-
Login ke Konsol E-MapReduce.
-
Pada panel navigasi kiri, pilih EMR Serverless > StarRocks.
-
Klik nama instans target.
-
-
Pada halaman Instance Details, di bagian Basic Information, klik Reset Password.
-
Pada kotak dialog yang muncul, masukkan dan konfirmasi kata sandi baru, lalu klik OK.
Kesalahan saat menulis data ke tabel Paimon
-
Gejala: Saat Anda menggunakan StarRocks untuk menulis data ke tabel Paimon, Anda mungkin menerima pesan kesalahan berikut:
(5025, 'Backend node not found. Check if any backend node is down.') -
Penyebab: Pemeriksaan izin pada tabel Paimon dapat mencegah StarRocks mengidentifikasi node BE secara benar selama operasi penulisan.
-
Solusi:
-
Upgrade versi (Direkomendasikan): Jika versi instans Anda lebih awal dari salah satu versi berikut, lakukan peningkatan versi minor untuk menerapkan perbaikan.
-
StarRocks 3.2: 3.2.11-1.89 atau lebih baru
-
StarRocks 3.3: 3.3.8-1.88 atau lebih baru
-
-
Solusi sementara: Pada tab Parameter Configuration instans StarRocks, tambahkan item konfigurasi berikut ke file
core-site.xml.dlf.permission.clientCheck=false
-
Saat membuat tabel eksternal di StarRocks, jika Anda menerima kesalahan
not a RAM user
, apa yang harus dilakukan?
-
Gejala: Saat membuat tabel eksternal di StarRocks, Anda mungkin menerima pesan kesalahan berikut:
current user is not a RAM user -
Penyebab: Kesalahan ini disebabkan oleh izin yang tidak mencukupi atau versi instans yang sudah usang.
-
Solusi:
-
Periksa izin pengguna RAM: Pastikan pengguna Resource Access Management (RAM) memiliki izin yang diperlukan untuk StarRocks. Untuk informasi selengkapnya, lihat Grant permissions to a RAM user.
-
Jika izin sudah benar, periksa dan tingkatkan versi kernel pada halaman Instance Details StarRocks.
Jika versi instans Anda lebih awal dari salah satu versi berikut, lakukan peningkatan versi minor untuk menerapkan perbaikan.
-
StarRocks 3.2: 3.2.11-1.89 atau lebih baru
-
StarRocks 3.3: 3.3.8-1.88 atau lebih baru
-
-
Kesalahan dengan tanda titik koma di SQL Editor
-
Gejala: Saat menjalankan pernyataan SQL yang berisi tanda titik koma (
;) di SQL Editor, Anda menerima kesalahan. Pesan kesalahan mencakupthe most similar input is {a legal identifier}.Kode kesalahan adalah 1064, dan detailnya juga mencakup
Unexpected input '<EOF>', yang menunjukkan kesalahan sintaksis pada baris 3, kolom 11. -
Kesalahan ini terjadi karena SQL Editor menggunakan tanda titik koma (
;) sebagai terminator pernyataan secara default. Jika pernyataan SQL Anda berisi tanda titik koma (;), terjadi kesalahan penguraian sintaksis. -
Solusi:
-
Atur delimiter kustom.
Sebelum menjalankan pernyataan SQL yang berisi tanda titik koma, atur delimiter kustom untuk mencegah kesalahan penguraian sintaksis. Misalnya, Anda dapat mengubah delimiter menjadi
$$.delimiter $$ -
Jalankan pernyataan SQL yang berisi tanda titik koma. Contohnya ditunjukkan di bawah ini:
INSERT INTO sr_test VALUES (1, 'asdsd,asdsads'), (2, 'sadsad;asdsads'); -
Kembalikan delimiter default.
Setelah pernyataan SQL dieksekusi, kembalikan delimiter default (
;) agar operasi SQL berikutnya dapat berjalan sebagaimana mestinya.delimiter ; -
Verifikasi hasilnya.
Jalankan kueri untuk memverifikasi bahwa data telah dimasukkan dengan benar.
delimiter ; SELECT * FROM sr_test;Output test_id test_desc 0 1 asdsd,asdsads 1 2 sadsad;asdsads
-
Kegagalan impor data atau akses ke tabel eksternal
-
Gejala: Saat menggunakan EMR Serverless StarRocks untuk mengimpor data atau mengakses tabel eksternal, impor atau koneksi dapat gagal jika tujuannya adalah alamat IP publik.
-
Penyebab: Instans EMR Serverless StarRocks berjalan di lingkungan Virtual Private Cloud (VPC) secara default, yang mungkin tidak memiliki akses langsung ke Internet. Oleh karena itu, permintaan ke sumber daya publik, seperti untuk impor data atau kueri tabel eksternal, gagal kecuali akses Internet dikonfigurasi.
-
Solusi: Anda dapat men-deploy Gateway NAT Internet di VPC dan mengaktifkan fitur SNAT. Hal ini memungkinkan instans EMR Serverless StarRocks mengakses sumber daya publik melalui gateway tersebut. Untuk informasi selengkapnya, lihat Use the SNAT feature of an Internet NAT gateway to access the Internet.
Cegah penutupan koneksi oleh timeout idle SLB/CLB
-
Gejala: Saat menggunakan SLB dengan instans StarRocks, SLB memaksa menutup koneksi client jika kueri SQL berjalan lebih dari 900 detik, sehingga kueri tidak dapat mengembalikan hasil. Untuk informasi selengkapnya tentang mengaktifkan SLB, lihat Manage gateways.
-
Penyebab: SLB menutup koneksi TCP apa pun yang idle selama lebih dari 900 detik. Hal ini dapat terjadi selama kueri SQL berjalan lama, sehingga mengganggu koneksi sebelum StarRocks mengembalikan hasil.
-
Solusi: Konfigurasikan parameter Keepalive TCP di sisi client untuk mencegah SLB menutup koneksi idle.
-
Pengaturan parameter kernel global (tingkat sistem)
Ubah parameter kernel sistem operasi untuk mengaktifkan dan mengonfigurasi pengaturan Keepalive TCP yang sesuai untuk semua koneksi TCP. Hal ini membantu memantau status koneksi jaringan. Tabel berikut menjelaskan parameter yang perlu dikonfigurasi.
Parameter
Deskripsi
Nilai yang direkomendasikan
-
Linux:
net.ipv4.tcp_keepalive_time -
FreeBSD/macOS:
net.inet.tcp.keepidle
Periode ketidakaktifan dalam detik setelah probe Keepalive pertama dikirim.
600 detik
-
Linux:
net.ipv4.tcp_keepalive_intvl -
FreeBSD/macOS:
net.inet.tcp.keepintvl
Interval dalam detik antara retransmisi probe Keepalive.
60 detik
-
Linux:
net.ipv4.tcp_keepalive_probes -
FreeBSD/macOS:
net.inet.tcp.keepcnt
Jumlah probe gagal berturut-turut setelah koneksi diputus.
5
Linux
-
Terapkan pengaturan sementara
# Setel parameter Keepalive global (memerlukan izin root) sudo sysctl -w net.ipv4.tcp_keepalive_time=600 # Sesuai dengan keepidle (600 detik) sudo sysctl -w net.ipv4.tcp_keepalive_intvl=60 # Sesuai dengan keepintvl (60 detik) sudo sysctl -w net.ipv4.tcp_keepalive_probes=5 # Sesuai dengan keepcount (5) -
Terapkan pengaturan permanen
Tambahkan konten berikut ke
/etc/sysctl.confdan jalankansysctl -puntuk menerapkan pengaturan.echo "net.ipv4.tcp_keepalive_time = 600" >> /etc/sysctl.conf echo "net.ipv4.tcp_keepalive_intvl = 60" >> /etc/sysctl.conf echo "net.ipv4.tcp_keepalive_probes = 5" >> /etc/sysctl.conf
FreeBSD/macOS
-
Terapkan pengaturan sementara
# Setel parameter Keepalive global (memerlukan izin root) sudo sysctl -w net.inet.tcp.keepidle=600 sudo sysctl -w net.inet.tcp.keepintvl=60 sudo sysctl -w net.inet.tcp.keepcnt=5 -
Terapkan pengaturan permanen
Tambahkan konten berikut ke
/etc/sysctl.conf.echo "net.inet.tcp.keepidle = 600" >> /etc/sysctl.conf echo "net.inet.tcp.keepintvl = 60" >> /etc/sysctl.conf echo "net.inet.tcp.keepcnt = 5" >> /etc/sysctl.conf
-
-
Pengaturan tingkat aplikasi
Anda dapat menggunakan API khusus bahasa pemrograman untuk mengatur parameter Keepalive TCP untuk satu koneksi.
Java
Pustaka standar Java memiliki dukungan terbatas untuk Keepalive TCP. Namun, Anda dapat mengimplementasikannya dengan menggunakan refleksi atau opsi soket tingkat rendah.
CatatanKode berikut memerlukan dukungan sistem untuk opsi seperti
tcp_keepidledi Linux atau FreeBSD. Selain itu, beberapa metode, seperti refleksi, mungkin tidak berfungsi karena perbedaan versi JVM. Kami menyarankan Anda menguji kompatibilitas sebelum digunakan di lingkungan produksi.import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketOption; import java.nio.channels.SocketChannel; public class TcpKeepaliveExample { public static void main(String[ ] args) { try (Socket socket = new Socket()) { // 1. Aktifkan Keepalive socket.setKeepAlive(true); // 2. Atur parameter Keepalive (memerlukan opsi soket tingkat rendah) SocketChannel channel = socket.getChannel(); if (channel != null) { // Atur Keepidle (waktu idle) channel.setOption(StandardSocketOptions.SO_KEEPALIVE, true); // Keepalive harus diaktifkan terlebih dahulu setSocketOptionInt(socket, "tcp_keepidle", 600); // Memerlukan dukungan sistem // Atur Keepintvl (interval retransmisi) setSocketOptionInt(socket, "tcp_keepintvl", 60); // Atur Keepcount (jumlah kegagalan) setSocketOptionInt(socket, "tcp_keepcnt", 5); // Catatan: Nama parameter dapat berbeda tergantung sistem } // Hubungkan ke server socket.connect(new InetSocketAddress("example.com", 80)); // ... Operasi lainnya ... } catch (IOException e) { e.printStackTrace(); } } // Gunakan refleksi untuk mengatur opsi soket spesifik sistem (seperti di Linux/FreeBSD) private static void setSocketOptionInt(Socket socket, String optionName, int value) { try { Class<?> clazz = Class.forName("java.net.Socket$SocketOptions"); Object options = clazz.getDeclaredMethod("options").invoke(socket); Class<?> optionsClass = options.getClass(); optionsClass.getDeclaredMethod("setOption", String.class, int.class) .invoke(options, optionName, value); } catch (Exception e) { throw new RuntimeException("Gagal mengatur opsi soket " + optionName, e); } } }Python
Modul
socketPython mendukung konfigurasi langsung parameter Keepalive TCP.CatatanSistem operasi yang berbeda mungkin menggunakan nama parameter yang berbeda. Misalnya, macOS mungkin memerlukan
TCP_KEEPALIVEalih-alihTCP_KEEPIDLE. Beberapa parameter mungkin memerlukan izin root untuk diatur.import socket def create_keepalive_socket(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 1. Aktifkan Keepalive sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) # 2. Atur parameter Keepalive (Linux/FreeBSD) # Keepidle: 600 detik sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 600) # Keepintvl: 60 detik sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 60) # Keepcount: 5 sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 5) return sock # Contoh sock = create_keepalive_socket() sock.connect(("example.com", 80)) # ... Operasi lainnya ... sock.close()Golang
Paket
netGolang menyediakan konfigurasi Keepalive dasar. Namun, Anda harus menggunakan paket tingkat rendahsyscalluntuk mengatur parameter terperinci.CatatanSistem operasi yang berbeda mungkin menggunakan nama parameter yang berbeda. Beberapa parameter mungkin memerlukan izin root untuk diatur.
package main import ( "fmt" "net" "syscall" ) func main() { // Buat koneksi TCP conn, err := net.Dial("tcp", "example.com:80") if err != nil { panic(err) } defer conn.Close() // Dapatkan deskriptor file dasar file, err := conn.(*net.TCPConn).File() if err != nil { panic(err) } defer file.Close() fd := int(file.Fd()) // Aktifkan Keepalive err = syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 1) if err != nil { panic(fmt.Errorf("set SO_KEEPALIVE: %v", err)) } // Atur Keepidle (waktu idle) err = syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPIDLE, 600) if err != nil { panic(fmt.Errorf("set TCP_KEEPIDLE: %v", err)) } // Atur Keepintvl (interval retransmisi) err = syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPINTVL, 60) if err != nil { panic(fmt.Errorf("set TCP_KEEPINTVL: %v", err)) } // Atur Keepcount (jumlah kegagalan) err = syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPCNT, 5) if err != nil { panic(fmt.Errorf("set TCP_KEEPCNT: %v", err)) } // ... Operasi lainnya ... }
-
StarRocks备份数据报错Unexpected exception: Table '' is not a OLAP table
Gejala: Saat melakukan backup snapshot data menggunakan StarRocks, muncul pesan kesalahan berikut.
Unexpected exception: Table '<table_name>' is not a OLAP tableAnalisis penyebab:
Instans menggunakan mode pemisahan penyimpanan dan komputasi
Instans StarRocks dengan arsitektur pemisahan penyimpanan dan komputasi tidak mendukung fitur backup dan pemulihan data; hanya instans dengan arsitektur terintegrasi yang mendukung fitur ini.
Jenis mesin tabel tidak kompatibel
Fitur backup StarRocks hanya mendukung tabel dengan mesin OLAP. Jika jenis mesin tabel bukan OLAP, kesalahan ini akan muncul.
Solusi:
Periksa jenis instans.
Di 实例列表 StarRocks, periksa 实例类型. Jika instance menggunakan tipe 存算分离版, fitur pencadangan dan pemulihan data tidak didukung. Disarankan untuk menggunakan instance dengan arsitektur terpadu komputasi-penyimpanan agar fitur pencadangan dan pemulihan dapat diaktifkan. Untuk informasi selengkapnya, lihat Pencadangan dan pemulihan.
Periksa jenis mesin tabel.
Periksa definisi DDL tabel target dan pastikan telah menetapkan
ENGINE=OLAP.SHOW CREATE TABLE <table_name>;Jika mesin tabel bukan OLAP, buat ulang tabel sesuai kebutuhan bisnis dan pastikan menentukan
ENGINE=OLAP.
Pemuatan data ke tabel Primary Key gagal dengan pesan kesalahan: Cancelled, msg: Primary-key index exceeds the limit
Masalah: Saat memuat data ke tabel StarRocks, muncul error berikut:
Error: NULL value in non-nullable column 'xxx'.Saat Anda menulis data secara terus-menerus ke tabel StarRocks menggunakan Flink Connector, muncul galat berikut:
because of too many versions, current/limit: 1009/1000.Pendekatan troubleshooting:
Analisis penggunaan memori saat ini pada node BE untuk menentukan apakah terjadi bottleneck sumber daya.
Tentukan apakah kluster menggunakan arsitektur shared-nothing atau shared-data, lalu periksa item konfigurasi yang sesuai.
Penyebab: Nilai
NULLdimasukkan ke kolom yang didefinisikan sebagaiNOT NULL. Hal ini melanggar batasan skema tabel dan menyebabkan Pekerjaan pemuatan gagal.Pertama, verifikasi bahwa AccessKey valid. Pastikan
accessKeyIddanaccessKeySecretyang dikonfigurasi dapat mengakses bucket OSS tujuan.Kesalahan terjadi karena memori yang dikonsumsi oleh indeks kunci primer melebihi batas memori node BE.
Periksa konfigurasi
mem_limitnode BE, yang dapat Anda peroleh dengan menjalankanSHOW FRONTENDSatauSHOW BACKENDS, lalu evaluasi kapasitas memori yang tersedia.
Solusi
Solusi 1: Aktifkan indeks persisten (direkomendasikan)
Kluster shared-nothing: Atur
enable_persistent_indexketrue.Kluster shared-data: Atur
persistent_index_typekecloud_native.
Solusi 2: Rancang partisi secara tepat
Buat partisi pada tabel Primary Key berdasarkan dimensi yang sesuai, seperti waktu atau wilayah, untuk menghindari penulisan ke seluruh tabel.
Setelah tabel dipartisi, setiap penulisan hanya memengaruhi subset partisi. Indeks kunci primer hanya perlu memuat data dari partisi yang terpengaruh, sehingga mengurangi tekanan memori pada setiap operasi penulisan.
Pekerjaan pemuatan gagal dengan kesalahan "[E1008]Reached timeout=xxx ms"
Masalah:
Saat pekerjaan Flink memuat data ke StarRocks, terjadi kesalahan berikut:
Message: [E1008] Reached timeout=7500ms @x.x.x.x:8060.Saat data dimuat menggunakan
INSERT INTO, terjadi kesalahan berikut:java.sql.SQLException: [E1008] Reached timeout=7500ms @10.106.7.182:8060.
Troubleshooting:
Jika nilai timeout dalam kesalahan bukan 30000 ms, yaitu nilai default
rpc_connect_timeout_ms, periksa apakah parameterrpc_connect_timeout_msnode BE diubah secara manual.Untuk pekerjaan pemuatan yang menggunakan
INSERT INTO, periksa apakah parameterquery_timeoutdikonfigurasi, sepertiquery_timeout = 15. StarRocks menetapkan ambang batas timeout RPC menjadi setengah dari nilaiquery_timeoutdan mengonversi hasilnya ke milidetik. Oleh karena itu, jikaquery_timeout=15, timeout yang sesuai adalah 7500 ms.
Langkah troubleshooting detail:
Jika Anda memastikan bahwa parameter
rpc_connect_timeout_msnode BE diubah: Kembalikan parameter ke nilai default 30000 ms untuk mencegah kesalahan timeout palsu akibat timeout koneksi yang terlalu singkat.Kesalahan
Reached timeout=7500msbiasanya menunjukkan beban thread brpc yang tinggi pada node BE. Hal ini menunda pemrosesan permintaan RPC dan akhirnya memicu timeout.Jalankan
SHOW TABLET FROM <destination_database>.<destination_table> ORDER BY RowCount DESC; untuk menganalisis distribusi data tabel tujuan dan menentukan apakah data didistribusikan secara merata di antara tablet. Misalnya, jika jumlah data dalam satu tablet jauh melebihi rentang yang direkomendasikan (1 GB hingga 10 GB), beberapa node BE mungkin kelebihan beban, sehingga menurunkan kinerja penulisan.Solusi:
Solusi 1 (direkomendasikan):
Optimalkan strategi bucketing tabel. Pilih bidang dengan kardinalitas tinggi yang sesuai sebagai kunci bucketing dalamDISTRIBUTED BY HASH(...)untuk mendistribusikan data secara merata di antara tablet.Solusi 2 (mitigasi sementara):
Jika Penggunaan CPU dan I/O pada node BE belum mencapai batasnya, sesuaikan parameter berikut secara tepat:Tingkatkan
brpc_num_threads. Nilai default adalah jumlah core CPU pada node BE. Anda dapat mencoba mengatur parameter menjadi dua atau empat kali nilai default. Jangan melebihi empat kali nilai default karena dapat meningkatkan kontensi thread.Tingkatkan
flush_thread_num_per_store. Nilai default adalah 2. Anda dapat mengatur parameter menjadi 4 untuk meningkatkan konkurensi saat data di-flush ke disk.
Pekerjaan pemuatan gagal dengan kesalahan "Error:NULL value in non-nullable column 'xxx'"
Masalah: Saat memuat data ke tabel StarRocks, terjadi kesalahan berikut:
Error: NULL value in non-nullable column 'xxx'.Penyebab: Nilai
NULLditulis ke kolom yang didefinisikan sebagaiNOT NULL. Hal ini melanggar batasan skema tabel dan menyebabkan pekerjaan pemuatan gagal.Solusi:
Solusi 1: Perbaiki data hulu
Sebelum data ditulis ke StarRocks, filter atau ganti nilai
NULLuntuk memastikan data memenuhi batasan tabel tujuan.Solusi 2: Ubah skema tabel
Jika logika bisnis memungkinkan bidang tersebut berisi nilai NULL, ubah skema tabel dan hapus batasan
NOT NULL.
Kesalahan "because of too many versions, current/limit: 1009/1000" terjadi saat mengimpor data menggunakan Flink Connector
Masalah:
Saat terus-menerus menulis data ke tabel StarRocks menggunakan Flink Connector, terjadi kesalahan berikut:
because of too many versions, current/limit: 1009/1000.Penyebab:Pada model Primary Key StarRocks atau model Unique Key yang menggunakan Merge-on-Write, setiap impor data menghasilkan versi baru. Untuk mencegah pembengkakan metadata dan memastikan kinerja kueri, sistem secara default membatasi setiap partisi hanya boleh menyimpan hingga 1.000 versi.
Solusi:
Periksa Skor Compaction partisi
Jalankan pernyataan SQL berikut untuk memeriksa beban compaction setiap partisi pada tabel tujuan:
SELECT TABLE_NAME, PARTITION_NAME, AvgCS AS avg_compaction_score, MaxCS AS max_compaction_score FROM information_schema.partitions_meta WHERE TABLE_NAME = 'your_table_name';Jika nilai
MaxCS—Skor Compaction maksimum—partisi yang terpengaruh jauh lebih besar dari 100, artinya partisi tersebut berisi banyak versi kecil yang menunggu untuk digabung. Hal ini menunjukkan bahwa compaction belum selesai tepat waktu.Picu compaction secara manual
Jalankan pernyataan berikut:
ALTER TABLE your_db.your_table COMPACT PARTITION your_partition_name;Optimalkan parameter sink Flink
Tingkatkan nilai parameter sink Flink berikut:
sink.buffer-flush.max-bytes,sink.buffer-flush.max-rows,sink.buffer-flush.interval-ms. Hal ini mengurangi frekuensi impor data dan mencegah pembuatan versi kecil yang berlebihan.
Kesalahan "Failed to get status for file xxx" saat mengkueri data menggunakan External Catalog
Masalah:
Saat mengkueri tabel di data lake eksternal, seperti Paimon atau Iceberg, terjadi kesalahan berikut:
(1064, 'Failed to get status for file: oss://data-lakehouse-oss-normal/dataware.db/dwd_annotation2_user/metadata/00097-10647858-814a-499e-b300-51c570ee7ee0.metadata.json')API OSS mengembalikan kesalahan berikut:<Error> <Code>AccessDenied</Code> <Message>You have no right to access this object because of bucket acl.</Message> <RequestId>68EC744EB6CD8C3539FAB32A</RequestId> <HostId>data-lakehouse-oss-normal.oss-cn-shenzhen-internal.aliyuncs.com</HostId> <EC>0003-00000001</EC> <RecommendDoc>https://api.alibabacloud.com/troubleshoot?q=0003-00000001</RecommendDoc> </Error>Penyebab: StarRocks bergantung pada akses ke layanan penyimpanan objek, seperti Alibaba Cloud OSS, saat mengkueri tabel di data lake eksternal, seperti Hive, Iceberg, atau Hudi, menggunakan External Catalog. Izin atau konfigurasi yang salah dapat mencegah StarRocks membaca file metadata atau data.
Solusi:
Pertama, verifikasi bahwa AccessKey valid. Pastikan
accessKeyIddanaccessKeySecretyang dikonfigurasi dapat mengakses bucket OSS tujuan.Jika
accessKeyIddanaccessKeySecretdikonfigurasi dengan benar, periksa apakah bucket OSS diakses lintas akun Alibaba Cloud. Untuk akses lintas akun ke bucket OSS, modifikasi konfigurasi terkait. Untuk informasi selengkapnya, lihat How do I access OSS across accounts? .
Bagaimana cara melihat ruang disk yang ditempati oleh indeks persisten pada node CN dan BE?
Setelah indeks persisten diaktifkan dengan mengatur enable_persistent_index = true atau persistent_index_type = 'cloud_native', indeks kunci primer disimpan di disk. Anda dapat mengkueri tabel information_schema.be_tablets untuk mendapatkan penggunaan disk-nya.
-- Kueri ukuran indeks setiap tabel dan urutkan hasilnya berdasarkan ukuran indeks secara menurun.
SELECT
tables_config.TABLE_NAME,
t1.TABLE_ID,
t1.index_sum_mb
FROM (
-- Hitung total ukuran indeks setiap tabel dalam MB.
SELECT
TABLE_ID,
SUM(INDEX_DISK)/1024/1024 AS index_sum_mb
FROM information_schema.be_tablets
GROUP BY TABLE_ID
) t1
JOIN tables_config ON tables_config.TABLE_ID = t1.TABLE_ID
ORDER BY index_sum_mb DESC
-- Opsional: Tambahkan klausa LIMIT untuk membatasi jumlah baris yang dikembalikan jika set hasil terlalu besar.
-- LIMIT 100
;Bagaimana cara melihat transaksi penulisan yang sedang berlangsung dan tablet yang terkait dengan batch transaksi berbeda?
Lacak pekerjaan pemuatan yang sedang berlangsung atau baru saja selesai untuk mengidentifikasi tablet tempat data ditulis.
SELECT
txn_table.*,
tc.table_name
FROM (
SELECT
bt.TABLET_ID,
bt.COMMIT_TIME,
bt.PUBLISH_TIME,
bt.TABLE_ID
FROM information_schema.be_txns bt
JOIN information_schema.be_tablets btt
ON bt.TABLET_ID = btt.TABLET_ID
) AS txn_table
JOIN information_schema.tables_config tc
ON txn_table.TABLE_ID = tc.TABLE_ID;Bagaimana cara menganalisis lonjakan beban CPU atau memori secara tiba-tiba selama periode tertentu?
Gunakan log audit untuk mengidentifikasi kueri yang mengonsumsi banyak sumber daya.
SELECT
queryId,
timestamp,
ROUND(memCostBytes / 1024 / 1024 / 1024, 2) AS memCostGB,
cpuCostNs
FROM _starrocks_audit_db_.starrocks_audit_tbl
WHERE timestamp BETWEEN '2025-xx-xx hh:mm:ss' AND '2025-xx-xx hh:mm:ss'
ORDER BY cpuCostNs DESC, memCostGB DESC
LIMIT 20;Bagaimana cara menganalisis lonjakan beban I/O secara tiba-tiba selama periode tertentu?
Lonjakan I/O biasanya disebabkan oleh pemindaian skala besar, seperti pemindaian tabel penuh atau kueri yang tidak dapat menggunakan pemangkasan partisi atau indeks.
SELECT
queryId,
timestamp,
ROUND(scanBytes / 1024 / 1024 / 1024, 2) AS scanTotalGB
FROM _starrocks_audit_db_.starrocks_audit_tbl
WHERE timestamp BETWEEN '2025-xx-xx hh:mm:ss' AND '2025-xx-xx hh:mm:ss'
ORDER BY scanTotalGB DESC
LIMIT 20;Kesalahan kapasitas penyimpanan tidak mencukupi saat melakukan skala-masuk node BE di kluster StarRocks yang dikelola sepenuhnya
Masalah:
Saat melakukan skala-masuk node BE dari konsol kluster StarRocks yang dikelola sepenuhnya, muncul kesalahan berikut:
invalid status: [insufficient storage].Penyebab: Persyaratan validasi penyimpanan untuk operasi skala-masuk tidak terpenuhi. Sistem hanya mengizinkan operasi jika kapasitas penyimpanan total setelah skala-masuk memenuhi persyaratan berikut:
Penyimpanan terpakai < Kapasitas total setelah skala-masuk × 0,7
Nilai-nilai tersebut dihitung sebagai berikut:
Kapasitas total setelah skala-masuk = Kapasitas gabungan node yang tersisa setelah node yang ditentukan dihapus
Penyimpanan terpakai = Jumlah (kapasitas total − kapasitas tersedia) di semua node
Jalankan
SHOW BACKENDSuntuk mendapatkan totalCapacity dan availCapacity.
Solusi:
Periksa kapasitas kluster saat ini.
Jalankan pernyataan SQL berikut untuk mendapatkan kapasitas total dan tersedia setiap node BE:
SHOW BACKENDS\GPeriksa field
TotalCapacitydanAvailCapacity. Tentukan apakah penyimpanan terpakai melebihi 70% dari kapasitas total setelah skala-masuk.Perluas disk dan coba lagi.
Jika kapasitas disk tidak mencukupi, perluas disk node BE di Konsol EMR. Pastikan bahwa
Penyimpanan terpakai < Kapasitas total setelah skala-masuk × 0,7, lalu coba lagi operasi skala-masuk.
RAM.Permission.NotAllow dilaporkan saat login ke StarRocks Manager
Masalah:
Saat menggunakan pengguna RAM untuk login ke StarRocks Manager, muncul pesan
"You are not authorized to perform the operation". Kode kesalahan adalahRAM.Permission.NotAllow.Penyebab: Pengguna RAM tidak memiliki izin yang diperlukan untuk melakukan operasi pada EMR Serverless StarRocks sehingga tidak dapat mengakses StarRocks Manager. Untuk informasi selengkapnya, lihat Authorize a RAM user.
Solusi:
Metode 1: Berikan kebijakan sistem.
Login ke Konsol RAM dan berikan kebijakan sistem
AliyunEMRStarRocksFullAccesskepada pengguna RAM. Pengguna RAM tersebut kemudian memiliki izin penuh untuk melakukan operasi pada EMR Serverless StarRocks.Metode 2: Berikan izin detail halus.
Jika Anda tidak ingin memberikan izin penuh, gunakan RequestId dalam pesan kesalahan untuk mengidentifikasi izin yang hilang dan berikan kepada pengguna RAM di Konsol RAM. Misalnya, jika izin
emr-serverless-starrocks:ListInstanceshilang, buat kebijakan kustom yang hanya memberikan izin ini.
Pada halaman Policies Konsol RAM, cari
AliyunEMRStarRocksFullAccessuntuk melihat semua izin yang termasuk dalam kebijakan sistem tersebut.
Bagaimana cara mengatasi kesalahan "must be an aggregate expression or appear in GROUP BY clause" di StarRocks?
-
Gejala: Saat menjalankan kueri SQL yang berisi klausa GROUP BY di StarRocks, terjadi kesalahan berikut jika daftar SELECT berisi kolom non-agregat yang tidak termasuk dalam klausa GROUP BY.
Getting analyzing error: ... must be an aggregate expression or appear in GROUP BY clause -
Penyebab: Aturan
ONLY_FULL_GROUP_BYdalamsql_modememicu kesalahan ini. Saat aturan ini diaktifkan, setiap kolom non-agregat dalam daftar SELECT juga harus muncul dalam klausa GROUP BY. -
Solusi:
-
Hubungkan ke instans StarRocks menggunakan SQL Editor di StarRocks Manager atau client MySQL.
-
Jalankan perintah berikut untuk mengosongkan
sql_modedan menghapus aturanONLY_FULL_GROUP_BY.SET GLOBAL sql_mode=''; -
Verifikasi bahwa
sql_modekosong.SELECT @@GLOBAL.sql_mode;
Pengaturan
SET GLOBAL sql_modeberlaku segera tanpa perlu restart layanan. MenonaktifkanONLY_FULL_GROUP_BYdapat menghasilkan nilai yang tidak akurat untuk kolom non-agregat dalam kueri GROUP BY. Uji perubahan ini di lingkungan pengujian sebelum menerapkannya di lingkungan produksi. Operasi ini mengubah pengaturan global. -