I have a few questions about how storage server processes store data on-disk. We experienced a scenario where a development FDB cluster operating under a single machine single process configuration (ssd-2
) became unavailable. (Not safe for a production configuration, I know…)
The root cause seems to have been that the storage server sqlite file grew to be greater than the available free space on the system. (E.g. sqlite file is 5GB, free space is 4.5GB) In this scenario, I assume that FDB isn’t able to continue because it needs to somehow make a copy of the whole storage server file, and it doesn’t have the free space to do so.
The questions I have about this are:
-
Is my assumption that the storage server process was trying to copy/move its sqlite database file correct? If so, what FDB process is causing this behaviour? (or, why does the storage server need to do this?)
-
I know a storage server stores data within an sqlite database (
storage-xxxxxxx.sqlite
) in the process’ data directory. Does a storage server always use one single sqlite file, regardless of how large it gets, or does a storage server split into multiple sqlite files when the file size gets too large? (If so, when does that split happen, and is it configurable?) -
Would running multiple storage servers (still on a single machine) help FDB better use all the available disk space on the system before failing? If so, how much would the sqlite files shrink when adding additional storage servers in an
ssd-2
configuration?- E.g. if the sqlite file for 1 SS is 5GB, my intuition would be that:
- 2 SSes would also each use 5GB of space (for a total of 10GB) (since data would be replicated twice)
- but 3 SSes would use 3.3GB each (since data would only be on 2 SSes each)
- and more SSes would use less
- E.g. if the sqlite file for 1 SS is 5GB, my intuition would be that: