You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Dmitry Konstantinov (Jira)" <ji...@apache.org> on 2026/02/05 07:24:00 UTC
[jira] [Updated] (CASSANDRA-21141) Reduce memory allocation during transformation of BatchStatement to Mutation
[ https://issues.apache.org/jira/browse/CASSANDRA-21141?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dmitry Konstantinov updated CASSANDRA-21141:
--------------------------------------------
Reviewers: Chris Lohfink
Status: Review In Progress (was: Patch Available)
> Reduce memory allocation during transformation of BatchStatement to Mutation
> ----------------------------------------------------------------------------
>
> Key: CASSANDRA-21141
> URL: https://issues.apache.org/jira/browse/CASSANDRA-21141
> Project: Apache Cassandra
> Issue Type: Improvement
> Components: CQL/Interpreter
> Reporter: Dmitry Konstantinov
> Assignee: Dmitry Konstantinov
> Priority: Normal
> Fix For: 5.x
>
> Attachments: CASSANDRA-21141_alloc.html, CASSANDRA-21141_cpu.html, CASSANDRA-21141_wall.html, batch_profile_seq.yaml, cassandra.yaml, image-2026-01-28-09-39-38-183.png, jvm-server.options, jvm17-server.options, trunk_alloc.html, trunk_cpu.html, trunk_wall.html
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> We allocate a lot of objects during a transformation of BatchStatement to Mutation. In many typical scenarios we can have a fast path and reduce the amount of allocated objects (as well as make the correspondent logic faster)
> Allocation framegraph:
> !image-2026-01-28-09-39-38-183.png|width=600!
> * [^trunk_alloc.html]
> * [^trunk_cpu.html]
> * [^trunk_wall.html]
> Suggested optimisations:
> * force hash3_x64_128 inlining to help JIT with escape analysis and long[] heap allocation elimination, so the hash function value (long[2]) is not allocated on heap - [link|https://github.com/apache/cassandra/pull/4589/changes/02d5ae650c9581ea061fb1255e2078a278697b6d]
> * serializedRowBodySize: avoid capturing lambda allocation per cell by moving capturing arguments to SerializationHelper (same optimization as it was done in serializeRowBody for flushing some time ago) - [link|https://github.com/apache/cassandra/pull/4589/changes/34a3d7126351630eb91be1ba9546a6e3c84d9359]
> * UpdateParameters: allocate DeletionTime on demand (it is not needed if we do insert/updates) - [link|https://github.com/apache/cassandra/pull/4589/changes/f8f57ea14f0c40fabb0f049a79146f403c88a009]
> * Add fast path in valuesAsClustering logic for the typical scenario when we specify a single clustering key (a single row) to modify -
> [link|https://github.com/apache/cassandra/pull/4589/changes/e11961cf457a4545951cbfa0d20e2b929d5ae453]
> * Add fast path in nonTokenRestrictionValues logic for the typical scenario when we specify a single partition key (a single row) to modify, optimize also the case if a partition or clustering key is a single column - [link|https://github.com/apache/cassandra/pull/4589/changes/b7fe9cc34c0a6c0c3d20b12fc2ccd8a11f98f460]
> * BatchStatement: check if many similar rows for the same table are written unconditionally, in this case we can avoid columns info merging and builders allocation - [link|https://github.com/apache/cassandra/pull/4589/changes/d011dfa68b88fa2d52c9a661d4945c719febf1d5]
> * Avoid ClusteringIndexSliceFilter allocation if a write does not required a read (plain usual write), avoid iterator allocation, use array instead of ArrayList for perStatementOptions which does not grow dynamically - [link|https://github.com/apache/cassandra/pull/4589/changes/0e4abb36105457d7f5e630d6e8b40b560794ae2e]
> Profiles after the changes:
> * [^CASSANDRA-21141_alloc.html]
> * [^CASSANDRA-21141_cpu.html]
> * [^CASSANDRA-21141_wall.html]
> Reduction for heap allocations in a batch write test ~ 20% (see the comment with test results for more details)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org