Minn Fong
05/14/2026, 7:52 PMRocky
05/14/2026, 7:52 PMbash
# Example for v3.3.3 on Ubuntu
docker pull starrocks/artifacts-ubuntu:3.3.3
docker run --rm starrocks/artifacts-ubuntu:3.3.3 tar -cf - -C /release . | tar -xvf -
* Version Recommendation: For the best performance and compatibility on ARM, it is recommended to use v3.3.0 or later, as these versions include specific instruction-level optimizations for ARM.
Support Summary:
Feature | Status
AWS Graviton (ARM) | Fully Supported & Optimized
Minimum Version | Recommended v3.3+ for performance; v3.1.14+/v3.2.10+ for standard ARM Docker images
Performance | Optimized for ARM instruction sets; benchmarks show parity or better than x86 in several workloads
References
• faq/Deploy_faq.md
• integrations/authenticate_to_aws_resources.md
• deployment/environment_configurations.md
• release_notes/release-3.3.mdMinn Fong
05/14/2026, 7:56 PMRocky
05/14/2026, 7:56 PMstarrocks/artifacts-ubuntu). Official .tar.gz downloads on the website are often x86-only.
* Running "Raw": You can pull the Docker image, extract the binaries, and then run them directly on your raw EC2 instance (manual deployment). This avoids any (minimal) Docker networking overhead and fits into traditional systemd-based management.
To get raw ARM binaries:
bash
# Pull the artifacts image for your version
docker pull starrocks/artifacts-ubuntu:3.3.3
# Extract the binaries to the current directory
docker run --rm starrocks/artifacts-ubuntu:3.3.3 tar -cf - -C /release . | tar -xvf -
Recommendation
* Use ARM (v3.3+): If performance and cost are your primary drivers, choose AWS Graviton (ARM) instances.
* Deployment Choice:
* Use Docker/Kubernetes if your infrastructure is already containerized; the performance overhead is negligible on Linux.
* Use Raw EC2 (Manual Deployment) if you prefer managing processes via systemd or want to squeeze out every bit of networking performance. You simply use the Docker method above to download the files first.
Crucial Note: Ensure you use v3.3.0 or later to benefit from the ARM-specific performance optimizations. Older versions will run but won't show the same performance gains.
References
• deployment/prepare_deployment_files.md
• release_notes/release-3.3.md
• faq/Deploy_faq.md
References
• deployment/prepare_deployment_files.md
• developers/build-starrocks/Build_in_docker.md
• developers/mac-compile-run-test.mdMinn Fong
05/16/2026, 3:05 AMRocky
05/16/2026, 3:05 AMSHOW CREATE TABLE <table_name>; and look for "store_type" = "column_with_row" in the PROPERTIES section.
* Prerequisite Config: The FE configuration enable_experimental_rowstore must be set to true for this feature to be available:
sql
ADMIN SET FRONTEND CONFIG ("enable_experimental_rowstore" = "true");
2. Verify Query Execution (The "Short Circuit")
The primary benefit of hybrid storage is the "Short Circuit Scan," which allows StarRocks to bypass the columnar engine and fetch the entire row directly from the row store for point queries.
1. Enable Short Circuiting: Ensure the session variable is active:
sql
SET enable_short_circuit = true;
2. Run EXPLAIN: Perform a point query (using all primary key columns in the WHERE clause with = or IN) and check the plan:
sql
EXPLAIN SELECT * FROM users WHERE id = 1;
3. Look for the Flag: In the output, locate the OlapScanNode. If hybrid storage is being utilized correctly, you will see:
Short Circuit Scan: true
3. Key Indicators
* Performance: You should notice significantly lower latency and higher concurrency for point lookups compared to standard columnar tables.
* Storage: Hybrid tables will consume more disk space (often 2x or more) because data is stored in both columnar and row formats (the row data is stored in a hidden __row column).
References
• table_design/hybrid_table.md
• administration/management/FE_configuration.md
• sql-reference/sql-statements/prepared_statement.md
References
• table_design/hybrid_table.md
• administration/management/FE_configuration.mdMinn Fong
05/16/2026, 3:23 AMRocky
05/16/2026, 3:23 AM__row column) in one contiguous read. This drastically reduces IOPS and the "Apply" time, which is why your publish latency dropped so significantly.
2. Efficiency in Partial Updates
If your table has many columns (a "wide table"), the row store makes partial updates much more stable. Instead of the CPU and Disk IO scaling with the number of columns in the table, it scales mostly with the row size. This provides:
* Reduced IO contention: Fewer file handles and disk seeks during the write-apply phase.
* Faster Version Publishing: Since the "Apply" step (where the PK index is updated and delete vectors are generated) is faster, the data becomes "Visible" (published) much sooner.
3. Support for Server-Side Prepared Statements
Hybrid storage is required for Server-Side Prepared Statements.
* If you plan to use PREPARE and EXECUTE for your queries, StarRocks uses the row store to achieve sub-millisecond response times. Without the row store, prepared statements don't get the "short-circuit" optimization and are processed through the standard (slower) OLAP engine.
4. High-Concurrency Query Scaling
Even if you don't do "point queries" (looking up a single ID), the row store helps with small-range scans (fetching a few rows). Because it uses less CPU to reconstruct these rows compared to the columnar engine (which has to stitch columns back together), your BEs can handle a much higher number of concurrent small queries before hitting a bottleneck.
Is it worth the 2x Disk Cost?
If you absolutely do not intend to use point queries or prepared statements, and your previous ingestion latency (3s vs 1s) was acceptable:
* The benefit is stability: You have bought "headroom." As your table grows or your update frequency increases, the columnar-only Apply phase would eventually become a major bottleneck (high Write_Amp). The row store keeps this cost constant.
* The cost is storage: You are trading disk space for write-path stability and data freshness.
Summary of benefits beyond point queries:
1. Lower Write Amplification: Faster row reconstruction for partial updates.
2. Stable Ingestion: Publish latency remains low even as the number of columns in your table increases.
3. Prepared Statements: Required for high-performance server-side prepared statements.
4. Concurrency: Higher throughput for "fetch by ID" or "fetch small batch" style workloads.
References
• table_design/hybrid_table.md
• table_design/table_types/primary_key_table.md
• sql-reference/sql-statements/prepared_statement.md
References
• table_design/table_types/primary_key_table.md
• best_practices/primarykey_table.mdMinn Fong
05/16/2026, 3:03 PMRocky
05/16/2026, 3:03 PMRECOVER
Before attempting to pull data from S3, check if the table is still in the StarRocks "Trash." When you drop a table, StarRocks keeps the metadata and data for a period (default is 1 day, controlled by catalogtrashexpire_second).
* Command: RECOVER TABLE table_name;
* Benefit: This is instantaneous and requires no data movement.
──────────
2. The Fastest Way via S3: RESTORE
If the table is gone from the trash and you must use S3 backups, here is how to optimize the process:
A. Do you have to restore partition by partition?
* If the partitions are in ONE snapshot: No. You can restore the entire table in one command:
sql
RESTORE SNAPSHOT snapshot_name
FROM your_repo
ON (TABLE your_table);
* If you have separate snapshots for each partition: Yes, you must trigger a RESTORE for each snapshot. However, StarRocks has a limitation: only one RESTORE job can run per database at a time.
B. How to speed up the RESTORE
To maximize speed when dealing with many snapshots:
1. Reduce Replication: Use replication_num = 1 during the restore to avoid the overhead of the cluster copying data between nodes while it's being downloaded from S3.
sql
RESTORE SNAPSHOT snapshot_name FROM your_repo
ON (TABLE your_table)
PROPERTIES ("replication_num" = "1", "backup_timestamp" = "...");
_After the restore is complete, run ALTER TABLE your_table SET ("replication_num" = "3"); to let the cluster replicate data in the background._
2. Parallelize via Temporary Databases: Since you can only run one restore per DB, you can restore different snapshots into temporary databases simultaneously.
* RESTORE ... DATABASE temp_db1 ...
* RESTORE ... DATABASE temp_db2 ...
_ Once finished, you can use INSERT INTO destination_db.table SELECT _ FROM temp_db1.table or swap them.
*3. Alternative: `INSERT INTO ... SELECT * FROM files()`*
If your hourly "backups" are actually raw files (like Parquet or CSV) stored in S3 rather than StarRocks snapshots, the fastest way is often using the files() table function:
sql
INSERT INTO your_table
SELECT * FROM files(
"path" = "<s3://your-bucket/backups/partition_date=2023-10-01/*>",
"format" = "parquet",
...
);
This is often faster for bulk loading than the RESTORE command because it leverages the full compute power of all BE nodes in parallel without the metadata overhead of the snapshot system.
Summary Recommendation
1. Try RECOVER TABLE first.
2. If using RESTORE, use replication_num = 1 to save time.
3. If you have dozens of separate snapshots, script the restore to run sequentially, or parallelize across multiple temporary databases.
References
• sql-reference/sql-statements/backup_restore/RECOVER.md
• administration/management/Backup_and_restore.md
• sql-reference/sql-statements/backup_restore/RESTORE.md
• sql-reference/sql-functions/table-functions/files.md
References
• sql-reference/sql-statements/backup_restore/RECOVER.md
• sql-reference/sql-statements/backup_restore/RESTORE.md
• administration/management/Backup_and_restore.md
ReferencesRocky
05/16/2026, 3:03 PMMinn Fong
05/16/2026, 3:12 PMRocky
05/16/2026, 3:12 PMr6in instances have excellent network bandwidth, they are limited by the maximum throughput and IOPS a single EC2 instance can push to EBS. Your 1000 MB/s limit is likely the Amazon EC2 instance-level throughput limit for that size, meaning adding more IOPS to your EBS volume won't help.
The Ideal Machine Type: AWS i4i Family
For StarRocks BE nodes in high-I/O scenarios (especially Primary Key tables with Persistent Index and Row Store), the i4i (Intel) or i3en families are the gold standard.
* Instance Recommendation: i4i.8xlarge (to match your current 32 vCPU / 256 GiB RAM).
* Why it's better:
* Local NVMe SSDs: You get AWS Nitro SSDs directly attached to the physical host.
* I/O Performance: A single i4i.8xlarge provides roughly 3,750 MB/s read throughput and 2,500 MB/s write throughput with hundreds of thousands of IOPS. This is 3–4x your current EBS cap.
* Lower Latency: Local NVMe latency is measured in microseconds (μs) vs. milliseconds (ms) for EBS. This drastically speeds up the Persistent Index lookups and Row Store reads during the "Apply" phase of your updates.
Comparison Table
Feature | r6in.8xlarge (Current) | i4i.8xlarge (Recommended)
Storage Type | EBS Only (Remote) | Local NVMe SSD (Direct)
Disk Throughput | ~1,000 MB/s (Max Instance) | ~3,750 MB/s
Disk IOPS | 10k–16k (Typical) | Hundreds of thousands
Memory | 256 GiB | 256 GiB
Best For | High Network/Memory | High I/O / High Concurrency Updates
Strategic Advice for your Bottleneck
1. Move to Local Storage: For a shared-nothing cluster, using EBS is essentially "shared-data performance with shared-nothing complexity." By switching to i4i instances, you eliminate the EBS network-storage bottleneck entirely.
2. Persistent Index on NVMe: Since you are using Primary Key tables, ensure the Persistent Index is enabled. On local NVMe, the random I/O required for the index to check for duplicates will be significantly faster than on EBS.
3. RAID 0 for Local Disks: If the instance provides multiple local NVMe drives (like i3en), use RAID 0 to strip them for maximum throughput.
4. Note on Data Safety: Because local NVMe is ephemeral (data is lost if the instance is terminated/fails), ensure you are running with 3 replicas (replication_num = 3). StarRocks will handle the background recovery if a node fails.
Summary: Your r6in nodes are CPU/RAM rich but "I/O starved" for your write load. Moving to i4i.8xlarge will likely drop your Disk IO util from 90%+ to under 30% and significantly improve your transaction commit/apply stability.
References
• deployment/deployment_prerequisites.md
• deployment/plan_cluster.md
• best_practices/primarykey_table.md
References
• deployment/deployment_prerequisites.md
• deployment/plan_cluster.md
• best_practices/primarykey_table.md
• introduction/Architecture.md
• table_design/table_types/primary_key_table.md
• table)
• administration/management/monitoring/Monitor_and_Alert.md
References
• best_practices/primarykey_table.mdRocky
05/16/2026, 3:12 PMMinn Fong
05/16/2026, 3:15 PMRocky
05/16/2026, 3:15 PMr6in.8xlarge instances are actually capable of much more than you are currently getting. According to AWS specs, an r6in.8xlarge has a maximum EBS-optimized throughput of 3,125 MB/s and 100,000 IOPS. You are currently capped at ~1,000 MB/s and 10k IOPS because of your EBS volume configuration, not the machine itself.
1. Upgrade to io2 Block Express
Standard gp3 volumes max out at 1,000 MB/s throughput. If you need more from a single volume, switch to io2 Block Express.
* Performance: A single io2 volume can provide up to 4,000 MB/s and 256,000 IOPS.
* StarRocks Benefit: This will immediately remove the I/O wait you are seeing without requiring more EC2 nodes. Since io2 is persistent, your data survives instance stops/starts.
2. Multi-EBS Volume Striping (Shared-Nothing)
StarRocks BEs can handle multiple storage paths. Instead of one large EBS volume, you can attach 4x gp3 volumes (each provisioned at 750 MB/s and 25k IOPS) to each BE.
* How to do it: In be.conf, set storage_root_path = /data1;/data2;/data3;/data4.
* Result: StarRocks will strip data across these volumes, allowing you to hit the 3,125 MB/s limit of your r6in instance. This is often more cost-effective than a single large io2 volume.
3. Move to Shared-Data Architecture (StarRocks 3.x)
If your primary concern is that data "needs to be able to survive" and you don't want storage to be tied to EC2 count, the Shared-Data (Storage-Compute Separation) architecture is the architectural solution.
* How it works: All persistent data is stored in S3 (non-ephemeral, unlimited). Your BEs (called CNs in this mode) use EBS or local SSDs strictly as a cache.
* Durability: If a node goes down, zero data is lost. A new node can spin up, connect to S3, and start serving queries immediately.
* Performance: For the 30k QPS update workload you mentioned, StarRocks 3.2+ includes "Batch Publish" optimizations specifically for S3 to keep latency low.
* Index: You can use persistent_index_type = CLOUD_NATIVE, which stores the Primary Key index on S3, removing the local disk capacity constraint for your indexes.
4. BE Configuration for High-Throughput Storage
When you move to higher-performing storage (like io2 or striped gp3), ensure the BE is configured to utilize it:
* flush_thread_num_per_store: Increase this (e.g., to 8 or 16) to allow more concurrent flush threads to hit your disks.
* update_stop_and_wait_threshold: If you see "too many versions" errors during your 30k QPS updates, you may need to tune this to allow the compaction threads more breathing room on your new faster storage.
Recommendation
* Short term: Stick with your current instances but attach multiple gp3 volumes per node or a single io2 Block Express volume to reach the 3,125 MB/s instance cap.
* Long term: Migrate to the Shared-Data architecture. This decouples your storage from your EC2 count entirely, provides the best "non-ephemeral" guarantee (S3), and lets you use the local EBS volumes purely as a performance accelerator (fast) cache.
References
• deployment/shared_data/s3.md
• administration/management/BE_configuration.md
• best_practices/primarykey_table.md
References
• best_practices/primarykey_table.md
• table_design/table_types/primary_key_table.mdMinn Fong
05/16/2026, 3:17 PMRocky
05/16/2026, 3:17 PMm7i or c7i Family
Your current r6in.8xlarge has a 1:8 CPU-to-Memory ratio (32 vCPUs to 256 GiB RAM). This is generally overkill for StarRocks unless you are using a fully in-memory index.
For your specific high-update workload, you should transition to a family with a better CPU-to-RAM balance and newer architecture:
* Recommended Instance: m7i.8xlarge or m7i.12xlarge.
* Why: The m7i uses Sapphire Rapids (latest Intel) which offers better single-threaded performance and AVX-512 instruction support that StarRocks' vectorized engine leverages heavily.
* Ratio: It moves you to a 1:4 ratio, which is the StarRocks "Golden Ratio." You get more compute power per dollar spent compared to the r (memory-optimized) series.
* Alternative for pure throughput: c7i.12xlarge.
* Ratio: 1:2 ratio. If your memory monitoring shows you are using less than 64-96 GiB of RAM per node, moving to the c (compute-optimized) series will give you the most "Apply" and "Compaction" power for your budget.
2. Why CPU matters more than RAM here
* Update "Apply" Phase: StarRocks uses transaction_apply_worker_count to process updates. If your CPU is saturated, these workers queue up, causing "version too many" errors or ingestion lag.
* Compaction: High-frequency updates generate many small versions. StarRocks must constantly merge these (compaction). This is a purely CPU-driven process in a shared-nothing cluster once the data is read from the Page Cache.
3. Tuning for High QPS Updates
Since you have 12 nodes and I/O is fine, ensure you aren't hitting software concurrency limits before swapping hardware. Check these be.conf settings:
* transaction_apply_worker_count: Increase this (default is often 8 or 16). For an 8xlarge instance, try setting this to 24 or 32 to allow more concurrent update processing.
* transaction_publish_version_worker_count: Increase this to speed up the final commit phase of your stream loads.
* paimon_worker_count / compaction_threads: Ensure background compaction can keep up with the 30k QPS update stream. If "Cumulative Compaction" is falling behind, your read performance will eventually degrade even if I/O is low.
Summary Recommendation
1. Switch to m7i or m7i.flex: You will get newer, faster CPU cores. The r6in is great for network/RAM, but you are paying a "memory tax" that isn't helping your update throughput.
2. Verify Memory Usage: Run SHOW BACKENDS and check MemUsed. If you are consistently using <100GB, move to m7i (128GB RAM) immediately. If you are using <60GB, move to c7i (64GB RAM) to maximize CPU core count.
3. Scale Out vs. Up: If you move to a 12xlarge (48 cores) and still see CPU bottlenecks, it is better to scale out to more nodes (e.g., 18 nodes of 8xlarge) rather than scaling up to a single massive node. StarRocks' MPP architecture thrives on more nodes for update-heavy workloads.
References
• deployment/plan_cluster.md
• best_practices/primarykey_table.md
• administration/management/BE_configuration.md
References
• deployment/plan_cluster.md
• best_practices/primarykey_table.mdRocky
05/16/2026, 3:17 PMMinn Fong
05/16/2026, 3:22 PMMinn Fong
05/16/2026, 3:24 PMRocky
05/16/2026, 3:25 PMr6in series to a standard m6i or even m7i is a downgrade in terms of EBS throughput headroom.
The r6in is an outlier—the "n" signifies it is specifically optimized for high network and EBS performance. A r6in.8xlarge can push up to 3,125 MB/s to EBS, whereas a standard m7i.8xlarge or r7i.8xlarge is capped at 1,250 MB/s.
The Paradox: If I/O is Not the Issue
If your disk I/O utilization is low (<50%) and you are no longer hitting the EBS throughput limits, your 30k QPS update workload is likely CPU-bound. In the StarRocks Primary Key engine, the "Apply" phase (calculating delete vectors and merging versions) is extremely compute-intensive.
The ideal machine for you depends on whether you want to prioritize CPU power or keep the EBS headroom just in case.
Option 1: Prioritize CPU Performance (The m7i Family)
If you are confident that you don't need >1,250 MB/s of disk throughput, the m7i (4th Gen Intel Sapphire Rapids) is the ideal choice.
* Why: Even though it has a lower EBS cap than the r6in, it has a much newer CPU architecture. Clock-for-clock, Sapphire Rapids is significantly faster at the vectorized operations StarRocks uses for high-speed updates.
* Throughput Check: Since you mentioned you were maxing out at 1,000 MB/s, the m7i.8xlarge (1,250 MB/s) still gives you more than you are currently using, without the price premium of the "n" series.
* Recommendation: m7i.12xlarge. This gives you 48 vCPUs (up from 32) and 1,875 MB/s of EBS throughput, which is a significant upgrade to your CPU while still providing more disk throughput than your current 1,000 MB/s bottleneck.
Option 2: Keep the High EBS Headroom (The r6in Up-scale)
If you want to keep the massive 3,125 MB/s EBS pipe of the r6in but solve the CPU bottleneck:
* Recommendation: r6in.12xlarge.
* Why: You move from 32 to 48 vCPUs, and your EBS throughput cap increases to 4,687 MB/s. This is the safest move if you think your updates might eventually spike back into high I/O.
Comparing the Options
Instance Type | vCPU | RAM | Max EBS Throughput | Architecture
r6in.8xlarge (Current) | 32 | 256 GiB | 3,125 MB/s | 3rd Gen Intel
m7i.8xlarge | 32 | 128 GiB | 1,250 MB/s | 4th Gen Intel (Faster)
m7i.12xlarge | 48 | 192 GiB | 1,875 MB/s | 4th Gen Intel (Faster)
r6in.12xlarge | 48 | 384 GiB | 4,687 MB/s | 3rd Gen Intel
Final Recommendation for High Updates
If you are hitting CPU limits on your 30k QPS updates (check your BE CPU usage), move to the m7i generation. You lose "theoretical" EBS headroom that you aren't using, but you gain newer, faster CPU cores that process the "Apply" and "Compaction" tasks much more efficiently.
Pro Tip: If your memory usage is low (e.g., < 100GB), the m family (1:4 ratio) is the most cost-effective. If you need the 256GB RAM you currently have, stick with the r family but move to the r7i (Sapphire Rapids) for the CPU boost.
References
• deployment/plan_cluster.md
• best_practices/primarykey_table.md
• administration/management/BE_configuration.md
References
• deployment/plan_cluster.md
• best_practices/primarykey_table.md
• administration/management/BE_configuration.md
• table_design/table_types/primary_key_table.md
• administration/management/monitoring/Monitor_and_Alert.md
ReferencesMinn Fong
05/16/2026, 3:27 PMRocky
05/16/2026, 3:27 PMn (Network Optimized) variant you are currently using (r6in) has significantly higher EBS and network ceilings than the standard m6i or r6i families. However, there is a nuance in how AWS prices and specs these.
1. EBS Throughput Comparison (8xlarge)
Instance Type | EBS Bandwidth (Mbps) | EBS Throughput (MB/s) | Max IOPS (16KB)
r6in.8xlarge (Current) | 20,000 | 2,500 | 80,000
m6i.8xlarge | 10,000 | 1,250 | 40,000
m7i.8xlarge | 10,000 | 1,250 | 40,000
You are right: the m6i has exactly half the EBS throughput of your r6in. The "n" suffix on your current machine is specifically designed for high-throughput storage and networking. The reason m6i is cheaper is primarily the RAM-to-vCPU ratio (4:1 vs 8:1) and the lower network/EBS overhead.
2. If Disk I/O is NOT the issue (CPU-Bound)
If your I/O utilization is now under 50% (perhaps due to better batching or the Persistent Index finally warming up), then your bottleneck has shifted to CPU instruction efficiency.
In this case, the m7i (7th Gen) is actually superior to your r6in (6th Gen) despite having lower EBS "ceilings":
* Newer Architecture: m7i uses Intel Sapphire Rapids. In StarRocks' vectorized engine, the architectural improvements in the 7th gen often result in 15-25% better throughput per core for the same clock speed.
* The "EBS Bottleneck" Trap: Even though m7i "caps" at 1,250 MB/s, if your actual workload is only pushing 500-700 MB/s (which is typical for a 50% util on a 1000MB/s setup), the `r6in`'s 2,500 MB/s ceiling is "unused runway." You are paying for a high ceiling you aren't hitting.
3. The Ideal "Middle Ground": m7i or c7i
If you want to maximize performance for a 60k/30k QPS update workload without the "ephemeral" risk of NVMe:
* For pure performance/price: m7i.8xlarge. You lose the extreme EBS ceiling of the n series, but you gain much faster CPU cores. Since you are currently at <50% I/O util, the 1,250 MB/s limit of the m7i is still a comfortable buffer.
* If you want the best of both worlds: r7iz (High frequency). These have the fastest clock speeds (up to 3.9 GHz) and high EBS throughput. They are expensive, but for high-concurrency Primary Key updates, single-core speed is king.
Why was your I/O high before?
A common reason for high I/O util on Primary Key tables that then "disappears" is the Persistent Index.
* When a node starts or a new large load occurs, StarRocks may need to read the index from disk. This spikes I/O.
* Once the index is cached or the "Apply" phase catches up, I/O drops and CPU becomes the limit.
Final Recommendation
If you are CPU-bound and your I/O is stable:
1. Move to m7i.8xlarge: It’s the most cost-effective way to get more "Apply" power for your updates.
2. Scale Out: Instead of 12x r6in.8xlarge, consider 16x m7i.8xlarge. This gives you more CPU cores to handle the 30k QPS update "Apply" tasks while staying well within the EBS limits of the M series.
3. Check update_stop_and_wait_threshold: If you see performance degradation during peaks, ensure this is set high enough so your ingest doesn't "pause" to wait for compaction.
References
• deployment/plan_cluster.md
• administration/management/BE_configuration.md
• best_practices/primarykey_table.md
References
• deployment/plan_cluster.md
• administration/management/BE_configuration.md
• best_practices/primarykey_table.mdRocky
05/16/2026, 3:27 PMRocky
05/16/2026, 3:27 PMRocky
05/16/2026, 3:27 PMRocky
05/16/2026, 3:27 PMRocky
05/16/2026, 3:27 PMRocky
05/16/2026, 3:27 PMRocky
05/16/2026, 3:27 PMRocky
05/16/2026, 3:27 PMRocky
05/16/2026, 3:27 PMRocky
05/16/2026, 3:27 PMr6in, you should look at the m6in and c6in families.
These are the "network and storage optimized" variants of the standard 6th-gen Intel instances. They provide the exact same high-performance EBS pipe as your r6in but with a more efficient CPU-to-RAM ratio.
1. The Best "Balanced" Choice: m6in.8xlarge
If your BEs are using 60-80 GB of RAM, this is the most logical move.
* Specs: 32 vCPU | 128 GiB RAM (1:4 ratio) | 3,125 MB/s EBS Throughput.
* Why: It gives you plenty of breathing room for your 80GB RAM usage but stops paying for the extra 128GB of memory you aren't using on the r6in. You keep the exact same storage performance.
2. The Best "Performance" Choice: c6in.12xlarge
If you are currently CPU-bound (which is likely with 30k updates/sec), this is the "sweet spot" for StarRocks.
* Specs: 48 vCPU | 96 GiB RAM (1:2 ratio) | 4,687 MB/s EBS Throughput.
* Why:
* More CPU: You get 50% more vCPUs (48 vs 32) to handle background compaction and update "Apply" tasks.
* Higher EBS Cap: It actually increases your EBS headroom significantly over your current machine.
* Memory Fit: 96 GiB of RAM perfectly accommodates your current 60-80 GB usage while minimizing wasted spend.
Comparison Table
Instance Type | vCPU | RAM | Max EBS Throughput | RAM Ratio
r6in.8xlarge (Current) | 32 | 256 GiB | 3,125 MB/s | 1:8
m6in.8xlarge | 32 | 128 GiB | 3,125 MB/s | 1:4
c6in.12xlarge | 48 | 96 GiB | 4,687 MB/s | 1:2
Why not the 7th Gen (m7i / c7i)?
The standard 7th-gen Intel instances (Sapphire Rapids) have faster CPU cores, but their EBS throughput is much lower. A m7i.8xlarge is capped at 1,250 MB/s, which is a 60% reduction from what you have now. Unless you move to very large sizes (like m7i.24xlarge), you cannot match the EBS performance of the "n" series.
Summary Recommendation
Switch to c6in.12xlarge.
You will gain 50% more compute power and 50% more EBS throughput headroom while likely lowering your hourly cost by cutting out the 160+ GB of unused RAM per node. This will directly address the primary bottleneck of a 30k QPS update workload (CPU for compaction) while ensuring your storage pipe never becomes the bottleneck.