Why would you want to set commitlog_sync_batch_window to 1 second long
when commitlog_sync is set to batch mode? The documentation
<https://cassandra.apache.org/doc/stable/cassandra/architecture/storage_engine.html>
on this says:
/This window should be kept short because the writer threads will be
unable to do extra work while waiting. You may need to increase
concurrent_writes for the same reason/
If you want to use batch mode, at least ensure
commitlog_sync_batch_window is reasonably short. The default is 2
millisecond.
On 23/04/2024 18:32, Nathan Marz wrote:
I'm doing some benchmarking of Cassandra on a single m6gd.large
instance. It works fine with periodic or batch commitlog_sync options,
but I'm having tons of issues when I change it to "group". I have
"commitlog_sync_group_window" set to 1000ms.
My client is doing writes like this (pseudocode):
Semaphore sem = new Semaphore(numTickets);
while(true) {
sem.acquire();
session.executeAsync(insert.bind(genUUIDStr(), genUUIDStr(),
genUUIDStr())
.whenComplete((t, u) -> sem.release())
}
If I set numTickets higher than 20, I get tons of timeout errors.
I've also tried doing single commands with BatchStatement with many
inserts at a time, and that fails with timeout when the batch size
gets more than 20.
Increasing the write request timeout in cassandra.yaml makes it time
out at slightly higher numbers of concurrent requests.
With periodic I'm able to get about 38k writes / second, and with
batch I'm able to get about 14k / second.
Any tips on what I should be doing to get group commitlog_sync to work
properly? I didn't expect to have to do anything other than change the
config.