mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-22 14:43:03 +01:00
A bit better wording.
This commit is contained in:
parent
bbe79c49cb
commit
1b83fbc2c8
@ -1,14 +1,14 @@
|
|||||||
|
|
||||||
Since the beginning, Firebird have no rules of how to allocate disk space
|
Since the beginning, Firebird had no rules of how to allocate disk space
|
||||||
for database file(s). It just writes new allocated pages in not determined
|
for database file(s). It just writes new allocated pages in not determined
|
||||||
order (because of dependencies between pages to serve "careful write" strategy).
|
order (because of dependencies between pages to serve "careful write" strategy).
|
||||||
|
|
||||||
This approach is very simple but have some drawbacks :
|
This approach is very simple but has some drawbacks :
|
||||||
|
|
||||||
- because of not determined order of writes, there may be such situation when
|
- because of not determined order of writes, there may be such situation when
|
||||||
page cache contain many dirty pages at time when new allocated page must be
|
page cache contains many dirty pages at time when new allocated page must be
|
||||||
written but can't because of out of disk space. In such cases often all other
|
written but can't because out of disk space. In such cases often all other
|
||||||
dirty pages are lost because of administrators prefer to shutdown database
|
dirty pages are lost because administrators prefer to shutdown database
|
||||||
before making some space on disk available. This leads to serious corruptions.
|
before making some space on disk available. This leads to serious corruptions.
|
||||||
|
|
||||||
- allocating disk space by relatively small chunks may lead to significant file
|
- allocating disk space by relatively small chunks may lead to significant file
|
||||||
@ -17,28 +17,28 @@ order (because of dependencies between pages to serve "careful write" strategy).
|
|||||||
|
|
||||||
|
|
||||||
Using new ODS 11.1, Firebird changes its disk space allocation algorithm to
|
Using new ODS 11.1, Firebird changes its disk space allocation algorithm to
|
||||||
avoid corruptions in out of disk space conditions and to get file system a
|
avoid corruptions in out of disk space conditions and to give the file system a
|
||||||
chance to avoid fragmentation. These changes are described below.
|
chance to avoid fragmentation. These changes are described below.
|
||||||
|
|
||||||
a) Every newly allocated page writes on disk immediately before returning to
|
a) Every newly allocated page is written on disk immediately before returning to
|
||||||
the engine. If page can't be written then allocation not happens, PIP bit
|
the engine. If page can't be written then allocation doesn't happen, PIP bit
|
||||||
is not cleared and appropriate IO error is raised. This error can't lead to
|
is not cleared and appropriate IO error is raised. This error can't lead to
|
||||||
corruptions as we have a guarantee that all dirty pages in cache have disk
|
corruptions as we have a guarantee that all dirty pages in cache have disk
|
||||||
space allocated and can be written safely.
|
space allocated and can be written safely.
|
||||||
|
|
||||||
This change make one additional write of every newly allocated page comparing
|
This change makes one additional write of every newly allocated page compared
|
||||||
with old behavior. So performance penalty is expected during the database file
|
with old behavior. So performance penalty is expected during the database file
|
||||||
growth. To reduce this penalty Firebird groups writes of newly allocated pages
|
growth. To reduce this penalty Firebird groups writes of newly allocated pages
|
||||||
up to 128KB at time and tracks number of "initialized" pages at PIP header.
|
up to 128KB at a time and tracks number of "initialized" pages at PIP header.
|
||||||
|
|
||||||
Note : newly allocated page will be written to disk twice only if this page
|
Note : newly allocated page will be written to disk twice only if this page
|
||||||
allocated first time. I.e. if page was allocated, freed and allocated again
|
is allocated first time. I.e. if page was allocated, freed and allocated again
|
||||||
it will not be written twice on second allocation.
|
it will not be written twice on second allocation.
|
||||||
|
|
||||||
b) To avoid file fragmentation, Firebird used appropriate file system's API to
|
b) To avoid file fragmentation, Firebird used appropriate file system's API to
|
||||||
preallocate disk space by relatively large chunks. Currently such API have
|
preallocate disk space by relatively large chunks. Currently such API exists
|
||||||
only Windows but it was recently added into Linux API and may be implemented
|
only in Windows but it was recently added into Linux API and may be implemented
|
||||||
in such popular file system's as ext2, etc in the future. So this feature
|
in such popular file system's as ext2, etc in the future. So this feature is
|
||||||
currently implemented only in Windows builds of Firebird and may be implemented
|
currently implemented only in Windows builds of Firebird and may be implemented
|
||||||
in Linux builds in the future.
|
in Linux builds in the future.
|
||||||
|
|
||||||
@ -47,12 +47,12 @@ b) To avoid file fragmentation, Firebird used appropriate file system's API to
|
|||||||
chunk size in bytes. Default value is 128MB. When engine needs more disk space
|
chunk size in bytes. Default value is 128MB. When engine needs more disk space
|
||||||
it allocates 1/16th of already allocated space but no less than 128KB and no more
|
it allocates 1/16th of already allocated space but no less than 128KB and no more
|
||||||
than DatabaseGrowthIncrement value. If DatabaseGrowthIncrement is set to zero then
|
than DatabaseGrowthIncrement value. If DatabaseGrowthIncrement is set to zero then
|
||||||
preallocation is disabled. Space for database shadow files are not preallocated.
|
preallocation is disabled. Space for database shadow files is not preallocated.
|
||||||
Also preallocation is disabled if "No reserve" option is set for database.
|
Also preallocation is disabled if "No reserve" option is set for database.
|
||||||
|
|
||||||
Note : preallocation also allows to avoid corruptions in out of disk space
|
Note : preallocation also allows to avoid corruptions in out of disk space
|
||||||
condition - in such case there is a big chance that database have enough space
|
condition - in such case there is a big chance that database has enough space
|
||||||
preallocated to operate until administrator make some disk space available.
|
preallocated to operate until administrator makes some disk space available.
|
||||||
|
|
||||||
|
|
||||||
Author: Vlad Khorsun, <hvlad at users sourceforge net>
|
Author: Vlad Khorsun, <hvlad at users sourceforge net>
|
||||||
|
Loading…
Reference in New Issue
Block a user