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.

Reply via email to