Not using defragmentation in aerospike


Hi, Aerospike does a really great job in hiding the SSD’s performance issue by using defragmentation.

Aerospike uses the free disk space for writing the new data- leaving the ssd with no hard garbage collection to do, while doing the garbage collection by itself (defrag).

I have a DB that does mostly updates, hardly ever doing inserts. the writes rate is quite high. no eviction is allowed.

I’m using a pci ssd with great performance, but the problem is that in order to keep up with the updates rate to the disk, even when setting the defrag parameters to do intensive defrag, I’m getting to the point when the disk is full and stop write condition is on. all writes fails until the defrag frees some space on the disk.

In order to keep up with this high writes rate (updates) I need to give more free space- Aerospike recommends 50% free disk. this means that I can’t take advantage in this high performance pci SSD capabilities unless I give free space on it ( for defrag)

my question is:

is it possible to change this way of working? meaning have Aerospike not writing to its’ free space but directly to where the data is?

This way I can use my PCI SSD in a full capacity (let’s say 95% full disk), using the SSD capabilities and save a lot of money- letting the ssd to deal with the writes (even if I have unsteady latency in writes).

This way I could also write continuously without reaching “stop writes” in Aerospike.



No, sorry, we do not have a mode where we write in place.

You will likely get better performance by partitioning the SSD into say ~4 devices and configure the namespace with the 4 devices. The current defrag implementation only uses one thread per device which on standard SSDs proved to be more than enough but this may not hold true for PCI-SSDs. By configuring the namespace with multiple partitions, each partition will have a dedicated defrag-thread.

Just curious, which SSDs are you using?


Thank you very much for your answer,

It’s OCZ Z-Drive 4500