You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by "Benoit Tellier (Jira)" <se...@james.apache.org> on 2020/12/25 06:22:00 UTC

[jira] [Created] (JAMES-3484) Cassandra mailbox should group copies

Benoit Tellier created JAMES-3484:
-------------------------------------

             Summary: Cassandra mailbox should group copies
                 Key: JAMES-3484
                 URL: https://issues.apache.org/jira/browse/JAMES-3484
             Project: James Server
          Issue Type: Bug
            Reporter: Benoit Tellier
         Attachments: Screenshot from 2020-12-25 13-18-50.png

On one of my production instances, I notice some copy operations are slow. Moving 60 messages takes around 2 seconds (~33ms per message).

More interestingly, a total of 1042 Cassandra queries is generated! (~17 per messages)

The moves is currently performed on a per message basis, sequencially.

However, by grouping updates together we can:
 - Allocate a single MODSEQ thus saving on ModSeq generation
 - Allocate several UIDs at once by asking for a UID range
 - As we are no longer performing id generation for each message, we can parallelize the message insertion...
 - And the tables indexes (applicable flags, mailbox counters) can be grouped instead of being performed for each messages. Other table indexes updates can be further parallelized yielding further enhancements.

In brief, according to the glowroot capture attached we can expect a 75% performance enhancement by:
 - Cassandra query volume reduction
 - Operation parallelization

We also expect a positive impact on overall Cassandra performances from the above enhancements.

Glowroot capture:

{code:java}
 ASYNC
Transaction type: 
Web
Transaction name: 
/jmap
Start: 
2020-12-22 3:40:57.645 pm (+07:00)
Duration: 
2,085.1 milliseconds
Breakdown (Main Thread): 	total (ms) 	count
http request
	0.46 	1
Breakdown (Auxiliary Threads): 	total (ms) 	count
auxiliary thread
	2,744.8 	6,959
jmapMethod
	1,936.4 	1
cassandra query
	50.2 	1,042
Breakdown (Async Timers): 	total (ms) 	count
cassandra query
	3,907.5 	1,042
JVM Thread Stats (Main Thread)
CPU time: 0.42 milliseconds
Blocked time: 0.0 milliseconds
Waited time: 0.0 milliseconds
Allocated memory: 18.5 KB
JVM Thread Stats (Auxiliary Threads)
CPU time: 489.6 milliseconds
Blocked time: 0.0 milliseconds
Waited time: 1,924.0 milliseconds
Allocated memory: 17.6 MB 
{code}




--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org