A system and method for backing up a database, where the system has read threads running simultaneously, write threads, and data buffers. Each read thread repeats the following operations until all the data is backed up: read a block of data from the database, compress the data using a dynamic compression ratio which is initialized and adjusted after every compression, write the data to an available data buffer until the data buffer is full, write to the next available data buffer once the data buffer is full, and determine a new compression ratio. A controller determines the new compression ratio using either a method that monitors the timing of system components and / or a method that monitors CPU consumption.