Issue Details (XML | Word | Printable)

Key: CORE-4556
Type: Improvement Improvement
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Vlad Khorsun
Reporter: Vlad Khorsun
Votes: 1
Watchers: 5
Operations

If you were logged in you would be able to see more operations.
Firebird Core

Allocate data pages in group of sequential ordered pages (extents)

Created: 18/Sep/14 10:30 PM   Updated: 23/Sep/15 12:19 PM
Component/s: Engine
Affects Version/s: None
Fix Version/s: 3.0 Beta 1

QA Status: Cannot be tested


 Description  « Hide
DIscussed in fb-devel (see "RFC: Data page allocation algorithm" at 26 Dec 2013)

I offer to allocate data pages not one-by-one (as currently) but in group of sequential ordered pages. Such group of pages is often called "extent".

I offer to change page allocation algorithm for tables as follows:
- if table is empty or small (have no full extent allocated) then data pages is allocated one-by-one (as currently)
- if table already have at least one full extent allocated, next request for new page will allocate the whole extent of pages
- size of extent is 8 pages
- every such extent is aligned at 8-pages boundary

This new algorithm will:
- reduce page-level fragmentation (all pages in extent are adjacent),
- allow OS-level prefetch to work more efficient (it will read not just a bunch of pages of random objects but pages related to the same table), and
- allow in the future to read and write in a large chunks making IO more efficient.

 All   Comments   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Vlad Khorsun made changes - 18/Sep/14 10:30 PM
Field Original Value New Value
Assignee Vlad Khorsun [ hvlad ]
Vlad Khorsun made changes - 18/Sep/14 10:32 PM
Status Open [ 1 ] Open [ 1 ]
Fix Version/s 3.0 Beta 1 [ 10332 ]
Sean Leyne made changes - 18/Sep/14 11:21 PM
Description DIscussed in fb-devel (see "RFC: Data page allocation algorithm" at 26 Dec 2013)

    I offer to allocate data pages not one-by-one (as currently) but in group of sequential ordered pages.
Such group of pages is often called "extent". I offer to change page allocation algorithm for tables as following:
- if table is empty or small (have no full extent allocated) then data pages is allocated one-by-one (as currently)
- if table already have at least one full extent allocated, next request for new page will allocate the whole extent of pages
- size of extent is 8 pages
- every such extent is aligned at 8-pages boundary

    Such algoritm will reduce page-level fragmentation (all pages in extent are adjacent), allows
OS-level prefetch to work more efficient (it will read not just a bunch of pages of random objects but
pages related to the same table) and allows us in the future to read and write in a large chunks
making IO more efficient.
DIscussed in fb-devel (see "RFC: Data page allocation algorithm" at 26 Dec 2013)

I offer to allocate data pages not one-by-one (as currently) but in group of sequential ordered pages. Such group of pages is often called "extent".

I offer to change page allocation algorithm for tables as follows:
- if table is empty or small (have no full extent allocated) then data pages is allocated one-by-one (as currently)
- if table already have at least one full extent allocated, next request for new page will allocate the whole extent of pages
- size of extent is 8 pages
- every such extent is aligned at 8-pages boundary

This new algorithm will:
- reduce page-level fragmentation (all pages in extent are adjacent),
- allow OS-level prefetch to work more efficient (it will read not just a bunch of pages of random objects but pages related to the same table), and
- allow in the future to read and write in a large chunks making IO more efficient.
Vlad Khorsun made changes - 28/Sep/14 09:49 AM
Status Open [ 1 ] Resolved [ 5 ]
Resolution Fixed [ 1 ]
Pavel Zotov made changes - 02/Jun/15 05:20 AM
Status Resolved [ 5 ] Resolved [ 5 ]
QA Status Cannot be tested
Pavel Cisar made changes - 23/Sep/15 12:19 PM
Status Resolved [ 5 ] Closed [ 6 ]