Vladimir Ozerov created IGNITE-6930:
---------------------------------------
Summary: Non-persistent free lists
Key: IGNITE-6930
URL: https://issues.apache.org/jira/browse/IGNITE-6930
Project: Ignite
Issue Type: Task
Security Level: Public (Viewable by anyone)
Components: cache
Reporter: Vladimir Ozerov
Assignee: Taras Ledkov
Fix For: 2.4
When cache entry is created, we need to write update the free list. When entry
is updated, we need to update free list(s) several times. Currently free list
is persistent structure, so every update to it must be logged to be able to
recover after crash. This may incur significant overhead, especially for small
entries.
E.g. this is how WAL for a single update looks like. "D" - updates with real
data, "F" - free-list management:
{code}
1. [D] DataRecord [writeEntries=[UnwrapDataEntry[k = key, v = [ BinaryObject
[idHash=2053299190, hash=1986931360, typeId=-1580729813]], super = [DataEntry
[cacheId=94416770, op=UPDATE, writeVer=GridCacheVersion [topVer=122147562,
order=1510667560607, nodeOrder=1], partId=0, partCnt=4]]]], super=WALRecord
[size=0, chainSize=0, pos=null, type=DATA_RECORD]]
2. [F] PagesListRemovePageRecord [rmvdPageId=0001000000000005,
pageId=0001000000000006, grpId=94416770, super=PageDeltaRecord [grpId=94416770,
pageId=0001000000000006, super=WALRecord [size=37, chainSize=0, pos=null,
type=PAGES_LIST_REMOVE_PAGE]]]
3. [D] DataPageInsertRecord [super=PageDeltaRecord [grpId=94416770,
pageId=0001000000000005, super=WALRecord [size=129, chainSize=0, pos=null,
type=DATA_PAGE_INSERT_RECORD]]]
4. [F] PagesListAddPageRecord [dataPageId=0001000000000005,
super=PageDeltaRecord [grpId=94416770, pageId=0001000000000008, super=WALRecord
[size=37, chainSize=0, pos=null, type=PAGES_LIST_ADD_PAGE]]]
5. [F] DataPageSetFreeListPageRecord [freeListPage=281474976710664,
super=PageDeltaRecord [grpId=94416770, pageId=0001000000000005, super=WALRecord
[size=37, chainSize=0, pos=null, type=DATA_PAGE_SET_FREE_LIST_PAGE]]]
6. [D] ReplaceRecord [io=DataLeafIO[ver=1], idx=0, super=PageDeltaRecord
[grpId=94416770, pageId=0001000000000004, super=WALRecord [size=47,
chainSize=0, pos=null, type=BTREE_PAGE_REPLACE]]]
7. [F] DataPageRemoveRecord [itemId=0, super=PageDeltaRecord [grpId=94416770,
pageId=0001000000000005, super=WALRecord [size=30, chainSize=0, pos=null,
type=DATA_PAGE_REMOVE_RECORD]]]
8. [F] PagesListRemovePageRecord [rmvdPageId=0001000000000005,
pageId=0001000000000008, grpId=94416770, super=PageDeltaRecord [grpId=94416770,
pageId=0001000000000008, super=WALRecord [size=37, chainSize=0, pos=null,
type=PAGES_LIST_REMOVE_PAGE]]]
9. [F] DataPageSetFreeListPageRecord [freeListPage=0, super=PageDeltaRecord
[grpId=94416770, pageId=0001000000000005, super=WALRecord [size=37,
chainSize=0, pos=null, type=DATA_PAGE_SET_FREE_LIST_PAGE]]]
10. [F] PagesListAddPageRecord [dataPageId=0001000000000005,
super=PageDeltaRecord [grpId=94416770, pageId=0001000000000006, super=WALRecord
[size=37, chainSize=0, pos=null, type=PAGES_LIST_ADD_PAGE]]]
11. [F] DataPageSetFreeListPageRecord [freeListPage=281474976710662,
super=PageDeltaRecord [grpId=94416770, pageId=0001000000000005, super=WALRecord
[size=37, chainSize=0, pos=null, type=DATA_PAGE_SET_FREE_LIST_PAGE]]]
{code}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)