Sui.

Post

Share your knowledge.

SuiLover.
Jul 28, 2025
Expert Q&A

What are the limits of Sui's parallel transaction processing?

I’m designing a high-throughput dApp and want to push Sui’s parallel processing to the max. What are the practical limits, and how do I test them?

  • Sui
  • Move
1
14
Share
Comments
.

Answers

14
Ashford.
Jul 31 2025, 07:42

Sui is designed to support high-throughput and parallel transaction processing by utilizing a horizontal scaling model that allows transactions to be processed concurrently without blocking. However, there are certain limits and considerations when it comes to pushing Sui's parallel transaction processing to its maximum capacity.

Key Factors Affecting Parallel Transaction Processing in Sui

  1. Object-Level Concurrency

    • Sui uses an object-centric model where each object (e.g., coin, smart contract state) is processed independently.
    • Parallelization occurs on objects that don't conflict (i.e., different objects can be processed simultaneously if no transaction accesses the same object).
    • If multiple transactions attempt to modify the same object or resource, the transactions will conflict, and only one will be processed at a time.
    • Practical Limit: The more unique objects involved in a transaction (i.e., the more independent state changes), the more parallelism Sui can achieve. However, objects that are accessed or mutated by multiple transactions will limit the throughput of those transactions.
  2. Transaction Contention and Conflicts

    • Transaction conflicts happen when multiple transactions try to access the same object or resources simultaneously. Sui handles these conflicts by rejecting one of the transactions, and this limits parallelism.
    • To maximize parallelism, you need to design your dApp to minimize contention by ensuring that different transactions operate on different objects.
    • Practical Limit: If many users are interacting with the same objects (e.g., in a shared resource like a voting contract or lending pool), the system can experience contention, which reduces throughput.
  3. Transaction Types and Gas Efficiency

    • The complexity of a transaction impacts how much compute and gas it requires. Complex transactions (such as those involving smart contract execution) may be less efficient and more resource-intensive, which reduces parallelism.
    • Practical Limit: Transactions with high gas or compute requirements will reduce the number of parallel transactions that can be processed within the same timeframe.
  4. Validator and Network Throughput

    • The number of validators and their capacity to process transactions is a critical factor. As more validators join the network, Sui can scale horizontally, but each validator’s individual processing capacity can become a bottleneck if not properly managed.
    • The network bandwidth also impacts how quickly transactions can be propagated across validators. High network congestion or insufficient bandwidth may limit the throughput of transactions.
    • Practical Limit: Your dApp's throughput will be constrained by the validators' ability to process transactions, and this depends on their hardware, bandwidth, and configuration.
  5. Sharding and State Partitioning

    • Sui relies on sharding and state partitioning to ensure parallel processing. Each object is assigned to a specific shard, and transactions affecting the same shard need to be processed sequentially, while transactions involving different shards can be processed in parallel.
    • Practical Limit: The more granular the sharding (i.e., the smaller the objects or groups of objects), the more parallelism you can achieve. However, over-partitioning can lead to higher overhead and complexity in managing state.

Testing Parallel Transaction Limits

To understand the practical limits of Sui’s parallel transaction processing for your specific dApp, you should test it under various conditions. Here’s how you can go about it:

  1. Benchmarking Throughput and Latency

    • Use tools to benchmark the throughput (transactions per second) and latency (time per transaction) of your dApp under different loads.
    • Start with small, low-contention transactions and gradually increase the number of transactions or their complexity to observe how throughput and latency change.

    You can use Sui’s CLI tools to simulate transactions and monitor how the system performs under load.

  2. Test with Different Transaction Mixes

    • Independent Transactions: Test transactions that interact with different objects and don’t conflict. This will help you measure Sui’s ability to handle parallel processing without contention.
    • Contention-heavy Transactions: Introduce transactions that access the same objects (e.g., a smart contract that involves shared state). This will help you measure how contention affects throughput.

    By testing with different transaction mixes, you can identify the point at which parallel transaction processing starts to degrade due to conflicts or other bottlenecks.

  3. Simulate Real-world Load

    • Use load testing frameworks (e.g., JMeter, Artillery, or custom scripts) to simulate real-world loads on your dApp.
    • Test how your dApp behaves when multiple users interact simultaneously with different parts of the state.
    • This can give you a sense of the maximum throughput your dApp can achieve while maintaining low latency and high parallelism.
  4. Monitor Validator Performance

    • Use the Sui Validator Dashboard or APIs to monitor how your node and the network validators handle the load.
    • Check metrics like transaction acceptance rate, block processing time, and gas usage per transaction.
    • This can give you insights into how well the validators are scaling and whether network issues (e.g., low validator capacity) are affecting throughput.

Best Practices for Maximizing Parallelism

  1. Design for Low Contention:

    • Ensure that transactions in your dApp target independent objects as much as possible. If you're building a game arena, for example, keep individual player states or battle states isolated from each other to maximize parallelism.
  2. Use Sharding and State Partitioning:

    • Break down large objects into smaller, independent shards or partitions. If you’re building a DAO vote tracker, for example, each vote could be treated as a separate object to avoid contention across voters.
  3. Minimize Gas Usage:

    • Ensure your transactions are gas-efficient. Overly complex operations that require a lot of computation or gas could reduce the number of transactions the system can process simultaneously.
  4. Monitor Network and Validator Health:

    • Ensure the network of validators is well-distributed and performs well under load. Increasing the number of validators and optimizing their performance can help improve horizontal scalability and reduce transaction validation delays.

Conclusion

While Sui’s parallel transaction processing is designed to maximize throughput, its performance is influenced by factors like object contention, gas usage, transaction complexity, and network throughput. To maximize parallelism:

  • Minimize contention by designing your dApp to work on independent objects.
  • Benchmark and test your dApp under high-load scenarios to identify performance bottlenecks.
  • Ensure that validators and network capacity are sufficient to handle your throughput requirements.

By following these best practices and conducting thorough testing, you can optimize your dApp to push Sui’s parallel transaction processing to its maximum capacity.

7
Comments
.
Benjamin XDV.
Jul 31 2025, 09:57

Sui's parallel processing is constrained by object dependencies—transactions touching the same objects are serialized, while independent ones execute simultaneously. The theoretical throughput limit exceeds 100K TPS for non-conflicting operations, but real-world performance depends on validator hardware and network conditions. To test your dApp's limits, use programmable transaction blocks to batch non-overlapping operations and benchmark with sui-benchmark tools. Design around contention hotspots by splitting frequently accessed state into separate objects (e.g., per-user sub-accounts) to maximize parallelism.

7
Comments
.
Alya.
Alya-14
Jul 30 2025, 17:42

Sui’s parallel transaction processing excels when transactions operate on independent objects. The theoretical limit is high (100K+ TPS in lab conditions), but practical throughput depends on:

  1. Object contention: Transactions modifying the same shared object are serialized.
  2. Programmable Transaction Block (PTB) complexity: Large PTBs with many commands hit gas and size limits.
  3. Clock and event limits: 0x2::clock access and event emissions are rate-limited.

To maximize parallelism:

  • Design with fine-grained owned objects (e.g., per-user state).
  • Minimize shared objects; split hotspots.
  • Use sui tx-blocks and sui client validate-transaction-block to test PTB limits.

Test under load using sui-perf or custom scripts that simulate concurrent, non-overlapping transactions. Monitor for TransactionLockConflict errors—these indicate bottlenecks.

5
Comments
.
Evgeniy CRYPTOCOIN.
Jul 28 2025, 11:23

Key Limits of Sui’s Parallel Execution

  1. Object Dependency Bottleneck

    • Transactions touching the same object are serialized.
    • Max throughput: Depends on how well you partition your data (avoid shared objects).
  2. Gas Limits per Transaction Block

    • Default block gas limit: 50M–100M (testnet/mainnet).
    • Each transaction consumes gas, capping total parallelizable work.
  3. RPC Node Throughput

    • Public RPCs: ~2K–4K TPS (varies by provider).
    • Self-hosted nodes: 10K+ TPS possible with optimizations.
  4. CPU/Memory Constraints

    • Validator nodes parallelize work across CPU cores.
    • 32-core servers can process 50K+ TPS in ideal cases (no shared objects).

How to Test Your dApp’s Limits

1. Benchmark with Localnet

# Spin up a high-performance localnet  
sui-test-validator --num-validators 4 --gas-limit 100000000

2. Generate Parallel Workloads

Use the TS SDK to simulate traffic:

// Flood the network with independent transactions  
const txs = await Promise.all(  
  Array(1000).fill(0).map(() =>  
    client.transactionBlock({  
      transactions: [/* independent object ops */],  
      gasBudget: 50_000_000  
    })  
  )  
);
4
Comments
.
Thorfin.
Jul 30 2025, 06:49

Sui’s parallel transaction processing is limited mainly by:

Object Ownership Model: Only transactions touching disjoint (independent) objects can be executed in parallel.

Hot Object Contention: If many transactions access the same object, they serialize and become a bottleneck.

Validator Hardware: Throughput scales with CPU cores and I/O capacity.

Gas + Network Latency: Gas metering and consensus overhead can limit parallelism at very high volume.

How to test:

Create many transactions updating unique owned objects (e.g. independent counters).

Benchmark throughput using tools like Sui Benchmarker.

Observe performance drop when introducing shared object access (e.g. single leaderboard).

Tip: Design your app to minimize shared object updates and maximize disjoint object writes for full parallelism.

3
Comments
.
Bekky.
Bekky1762
Jul 31 2025, 12:33

Pushing Sui's Parallel Processing to the Limit

Sui's parallel execution engine is revolutionary for blockchain throughput, but has practical limits you should understand when designing high-performance dApps.

Key Parallelism Limits

1. Object Contention Bottlenecks

  • Hard Limit: ~100K TPS (theoretical)
  • Practical Limit: 50-80K TPS for real-world workloads
  • Contention Threshold: Performance degrades when >5% of transactions touch shared objects

2. Per-Validator Hardware Limits

ResourceBaseline RequirementHigh-Perf Target
CPU16 cores32+ cores
RAM32GB64-128GB
NVMe Storage1TB2-4TB
Network1 Gbps10 Gbps

Testing Your Limits

Benchmarking Methodology

  1. Isolate Variables:

    # Test owned object throughput
    sui-benchmark --workload owned-objects --tx-count 100000
    
    # Test shared object throughput
    sui-benchmark --workload shared-objects --tx-count 100000 --shared-obj-ratio 0.05
    
  2. Contention Scaling Test:

    for ratio in 0.01 0.05 0.1 0.2; do
      sui-benchmark --shared-obj-ratio $ratio --tx-count 100000
    done
    

Real-World Optimization Patterns

1. Object Sharding

struct HighTrafficPool has key {
    shards: vector<PoolShard>
}

struct PoolShard has key {
    id: UID,
    // Shard-specific state
    balances: Table<address, u64>
}

2. Epoch-Based Processing

struct TradingEpoch has key {
    id: UID,
    current: EpochData,  // Read-only after creation
    next: EpochData      // Mutable accumulation
}

3. Write-Ahead Batching

struct PendingUpdates has key {
    id: UID,
    updates: vector<Update>
}

// Process batch every N blocks
public entry fun flush_updates(
    batch: &mut PendingUpdates,
    state: &mut GlobalState
) {
    // Apply all updates atomically
}

Practical Throughput Targets

Workload TypeExpected TPSOptimization Strategy
Pure owned objects50-100KMinimize dependencies
Mostly owned objects20-50KShard smartly
Balanced workload10-20KBatch shared writes
Shared-object dominant5-10KUse epochs/queues

Monitoring Contention

  1. Built-in Metrics:

    curl http://localhost:9184/metrics | grep "sui_execution_engine"
    
  2. Key Metrics to Watch:

    • sui_execution_engine_conflicted_transactions
    • sui_execution_engine_parallel_degree
    • sui_transaction_manager_shared_lock_wait_time

Pushing Beyond Default Limits

  1. Custom Validator Configuration (validator.yaml):

    execution:
      max_parallel_tasks: 1024  # Default: 256
      shared_object_cache_size: "2GB"  # Default: 500MB
    
  2. Move Code Optimizations:

    // BAD: Serial shared access
    public entry fun update_serial(obj: &mut SharedObj) { ... }
    
    // GOOD: Partitioned access
    public entry fun update_partitioned(
        obj: &mut SharedObj,
        partition_key: u64
    ) { ... }
    

Stress Testing Checklist

  1. Start with 100% owned object transactions
  2. Gradually increase shared object ratio
  3. Monitor validator resource usage
  4. Identify contention hotspots
  5. Implement sharding/partitioning
  6. Repeat until target TPS achieved

Remember: Sui's parallel performance scales with:

  • Number of independent object paths
  • Available hardware resources
  • Smart contention management in your Move code
3
Comments
.
BigSneh.
Jul 28 2025, 04:28

Sui’s parallel transaction processing is enabled by its object-centric data model, which allows non-overlapping transactions to execute simultaneously. However, practical limits arise from resource contention, shared objects, validator throughput, and transaction dependencies. Shared objects serialize execution, so minimizing their use is key to maximizing parallelism. The throughput is also bound by the capacity of validators, especially under high write-load or complex computation.

To test these limits, use tools like sui bench or custom workloads that simulate real-world transaction volume with varying object ownership patterns. Track metrics such as latency, gas usage, failed transactions, and validator CPU/memory usage. Benchmark on Testnet or Localnet clusters with increased load to identify bottlenecks. Use counters and events in Move to monitor internal state, and log at both the application and network levels. Structuring transactions around exclusive owned objects, avoiding unnecessary dependencies, and batching writes are best practices to scale effectively.

2
Comments
.
290697tz.
Jul 28 2025, 04:29

Sui’s parallel transaction processing is built around its object-centric data model, which allows transactions that touch disjoint sets of objects to execute in parallel. The main limit is the number of transactions that can be executed simultaneously without object contention, meaning two transactions must not read or write the same object. If multiple transactions access shared or overlapping objects, they are serialized, reducing parallelism. Therefore, structuring your dApp to minimize shared object usage is critical for maximizing throughput.

Another factor is the performance of the full node or validator hardware, such as CPU cores, disk I/O, and memory, which directly affect how many transactions can be processed in parallel. The transaction scheduler in Sui uses dependency graphs to optimize execution order, but excessive contention or poor object design will limit efficiency. For testing, you can use tools like sui-benchmark or build a custom PTB (Programmable Transaction Block) runner to simulate high-load conditions with varying object access patterns. Track metrics such as TPS, latency, and object lock contention to find bottlenecks. You should also test with shared objects and dynamic fields to see how they impact throughput under realistic usage.

2
Comments
.
Owen.
Owen4662
Jul 30 2025, 03:00

Sui's parallel transaction processing is limited by object ownership and dependencies. Transactions that operate on independent objects can be processed in parallel, maximizing throughput. However, contention on shared objects serializes execution, creating bottlenecks. Owned objects enable full parallelism, while shared objects require consensus coordination, reducing speed. The theoretical limit depends on network conditions, object graph structure, and transaction diversity. To test performance, use the Sui SDK to simulate workloads with varying object contention and measure throughput via the sui_executeTransactionBlock RPC. Analyze results under different load patterns to identify scaling limits.

2
Comments
.
frogit.
Aug 11 2025, 04:19

Sui’s parallel transaction processing is enabled by its object-centric data model, which allows non-overlapping transactions to execute simultaneously. However, practical limits arise from resource contention, shared objects, validator throughput, and transaction dependencies. Shared objects serialize execution, so minimizing their use is key to maximizing parallelism. The throughput is also bound by the capacity of validators, especially under high write-load or complex computation.

To test these limits, use tools like sui bench or custom workloads that simulate real-world transaction volume with varying object ownership patterns. Track metrics such as latency, gas usage, failed transactions, and validator CPU/memory usage. Benchmark on Testnet or Localnet clusters with increased load to identify bottlenecks. Use counters and events in Move to monitor internal state, and log at both the application and network levels. Structuring transactions around exclusive owned objects, avoiding unnecessary dependencies, and batching writes are best practices to scale effectively.

0
Comments
.

Do you know the answer?

Please log in and share it.