All Products
Search
Document Center

E-MapReduce:FAQ

Last Updated:Aug 22, 2026

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.

  1. 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 =
  2. 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
  3. 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.

  1. 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.

  2. 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>.

  3. Gunakan file JAR tersebut. Untuk informasi selengkapnya, lihat Java UDF dan JDBC Catalog.

Bagaimana cara mengatur ulang kata sandi instans?

Penting
  • 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.

  1. Buka halaman detail instans.

    1. Login ke Konsol E-MapReduce.

    2. Pada panel navigasi kiri, pilih EMR Serverless > StarRocks.

    3. Klik nama instans target.

  2. Pada halaman Instance Details, di bagian Basic Information, klik Reset Password.

  3. 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:

    1. 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.

    2. 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 mencakup the 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:

    1. 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 $$
    2. Jalankan pernyataan SQL yang berisi tanda titik koma. Contohnya ditunjukkan di bawah ini:

      INSERT INTO sr_test VALUES 
      (1, 'asdsd,asdsads'), 
      (2, 'sadsad;asdsads');
    3. Kembalikan delimiter default.

      Setelah pernyataan SQL dieksekusi, kembalikan delimiter default (;) agar operasi SQL berikutnya dapat berjalan sebagaimana mestinya.

      delimiter ;
    4. 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.conf dan jalankan sysctl -p untuk 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.

      Catatan

      Kode berikut memerlukan dukungan sistem untuk opsi seperti tcp_keepidle di 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 socket Python mendukung konfigurasi langsung parameter Keepalive TCP.

      Catatan

      Sistem operasi yang berbeda mungkin menggunakan nama parameter yang berbeda. Misalnya, macOS mungkin memerlukan TCP_KEEPALIVE alih-alih TCP_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 net Golang menyediakan konfigurasi Keepalive dasar. Namun, Anda harus menggunakan paket tingkat rendah syscall untuk mengatur parameter terperinci.

      Catatan

      Sistem 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 table
  • Analisis 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 NULL dimasukkan ke kolom yang didefinisikan sebagai NOT NULL. Hal ini melanggar batasan skema tabel dan menyebabkan Pekerjaan pemuatan gagal.

    • Pertama, verifikasi bahwa AccessKey valid. Pastikan accessKeyId dan accessKeySecret yang dikonfigurasi dapat mengakses bucket OSS tujuan.

      • Kesalahan terjadi karena memori yang dikonsumsi oleh indeks kunci primer melebihi batas memori node BE.

      • Periksa konfigurasi mem_limit node BE, yang dapat Anda peroleh dengan menjalankan SHOW FRONTENDS atau SHOW BACKENDS, lalu evaluasi kapasitas memori yang tersedia.

    • Solusi

      • Solusi 1: Aktifkan indeks persisten (direkomendasikan)

        • Kluster shared-nothing: Atur enable_persistent_index ke true.

        • Kluster shared-data: Atur persistent_index_type ke cloud_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 parameter rpc_connect_timeout_ms node BE diubah secara manual.

    • Untuk pekerjaan pemuatan yang menggunakan INSERT INTO, periksa apakah parameter query_timeout dikonfigurasi, seperti query_timeout = 15. StarRocks menetapkan ambang batas timeout RPC menjadi setengah dari nilai query_timeout dan mengonversi hasilnya ke milidetik. Oleh karena itu, jika query_timeout=15, timeout yang sesuai adalah 7500 ms.

  • Langkah troubleshooting detail:

    • Jika Anda memastikan bahwa parameter rpc_connect_timeout_ms node BE diubah: Kembalikan parameter ke nilai default 30000 ms untuk mencegah kesalahan timeout palsu akibat timeout koneksi yang terlalu singkat.

    • Kesalahan Reached timeout=7500ms biasanya 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 dalam DISTRIBUTED 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 NULL ditulis ke kolom yang didefinisikan sebagai NOT 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 NULL untuk 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 accessKeyId dan accessKeySecret yang dikonfigurasi dapat mengakses bucket OSS tujuan.

    • Jika accessKeyId dan accessKeySecret dikonfigurasi 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 BACKENDS untuk 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\G

      Periksa field TotalCapacity dan AvailCapacity. 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 adalah RAM.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 AliyunEMRStarRocksFullAccess kepada 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:ListInstances hilang, buat kebijakan kustom yang hanya memberikan izin ini.

    Pada halaman Policies Konsol RAM, cari AliyunEMRStarRocksFullAccess untuk 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_BY dalam sql_mode memicu kesalahan ini. Saat aturan ini diaktifkan, setiap kolom non-agregat dalam daftar SELECT juga harus muncul dalam klausa GROUP BY.

  • Solusi:

    1. Hubungkan ke instans StarRocks menggunakan SQL Editor di StarRocks Manager atau client MySQL.

    2. Jalankan perintah berikut untuk mengosongkan sql_mode dan menghapus aturan ONLY_FULL_GROUP_BY.

      SET GLOBAL sql_mode='';
    3. Verifikasi bahwa sql_mode kosong.

      SELECT @@GLOBAL.sql_mode;

    Pengaturan SET GLOBAL sql_mode berlaku segera tanpa perlu restart layanan. Menonaktifkan ONLY_FULL_GROUP_BY dapat 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.