Today I've made some simple tests of
Firebird's nbackup and
InterBase 2007 online dump features.
They have some differences, but one main point. Let's
describe what
nbackup or online dump is:
You know that if you try to copy database when connections are active, you'll get broken copy. Because copying works sequentially, while database is a random access file. The idea of
nbackup and online dump is to copy pages (by server) from database using timestamp marks. When such copying starts, server does not write changes to database file, but into special temporary file. When copy is done, server writes those modified pages back to database (and maybe to online dump). So,
original database can be read and written during this process, and resulting copy is consistent.
This is fine, and according to
nbackup documentation you can organize incremental backups, using "backup levels". When you make
nbackup level 0, full copy of database is made. When you make
nbackup level 1, only changes from previous full
nbackup is written to difference file. And so on.
Example of "practical
nbackup application" says that you can use full backup monthly, level 1 backup daily, and level 2 backup hourly. This is fine, but "hourly backups" can become impossible.
Why these "hourly backups" looks suspicious to me?
Because each time you run
nbackup (any level) in
Firebird or online dump in
InterBase 2007, server reads every page in
original database.
I took 13
gb database from
tpc-c test to check what time is needed to read the whole database.
At first I tried to copy database from one
SATA drive to another. This took 6 minutes.
Then I created backup level 0 with
FB and online dump with
IB 2007. Both reads database and writes it's full copy:
- Firebird - 6 minutes
- InterBase 2007 - 8 minutes
Not a big difference, but let's run test again (
nbackup level 1, and online dump):
- Firebird - 6 minutes
- InterBase 2007 - 6 minutes
This time both servers only reads original database, and writes nothing, because database was not changed.
So, there is no difference what backup level you use - database will be read 100% each time. And, you see that reading 13
gb database took 6 minutes when no users were connected. I think that when there will be some activity, "backup" time will be
definitely longer. Since reading each page of the database is not an easy operation for
HDD, this will of course lower server performance.
Here, I think that running
nbackup or online dump each hour for 10
gb database is not a good idea. And I'm sure that if you have ~50
gb database, you will not be able to do incremental backups each hour, when users work with database.
If you don't believe this - make this simple test, and send me results.
BTW: At least you must be sure that you have fast and well configured RAID controller, and disks that you use for database and its "copy" have the same performance.
p.s. Don't try to place incremental backups on the same hard drive, even on different logical disks - if your hard drive fails, you will loose both - database and backup. And, nbackup/online dump time will be 2-3 times slower.