MVCC Snapshot
Есть следующий алгоритм для оптимизации снашота.
Для каждого спейса:
1. Создаем MVCC индекс, в котором будут хранится все необходимые данные для итерации по индексу с LSN на момент создания (некий SNAPSHOT индекса)
2. Обходим индекс, сохраняем таплы в снапшот, сохраняем LSN момента старта
3. Дропаем mvcc индекс
4. Переходим к следующему спейсу
В итоге получаем снапшот, в котором consistent состояние для каждого спейса.
При накатке WAL скипаем по LSN.
Pros:
- Консистентное состояние для каждого спейса
- copy-on-write per space (не копируются другие спейсы, Lua и прочее)
- Overhead максимум на размер индекса одного спейса и измененных таплов (сейчас на все индексы и весь salloc)
- уход от fork, возможность более плотно использовать треды
Cons:
- Консистетное состояние будет для min(space[].lsn)
Blueprint information
- Status:
- Not started
- Approver:
- None
- Priority:
- Undefined
- Drafter:
- None
- Direction:
- Needs approval
- Assignee:
- None
- Definition:
- Drafting
- Series goal:
- None
- Implementation:
- Unknown
- Milestone target:
- None
- Started by
- Completed by