mvcc — скилл для Claude Code: что делает и как установить
Справочник по экспериментальному MVCC в кодовой базе Turso: многоверсионность строк, изоляция снимков и ограничения памяти. Пригодится при отладке и разработке ядра базы данных.
npx skills add tursodatabase/turso --skill mvcc -a claude-codeЧто делает mvcc
Скилл передаёт агенту контекст по Multi-Version Concurrency Control в кодовой базе Turso. Он описывает изоляцию снимков на уровне строк, формат логического журнала .db-log и структуру MvStore на базе crossbeam_skiplist. Основной код реализации сосредоточен в core/mvcc/database/mod.rs и занимает около 3000 строк.
Включается режим во время выполнения базы данных командой PRAGMA journal_mode = 'mvcc'. Документ прямо предупреждает: это незавершённая работа, непригодная для продакшена. Сборка мусора пока отсутствует, старые версии строк накапливаются в памяти, а сброс данных через чекпоинт блокирует даже чтение.
Внутри описаны правила запуска тестов через cargo test mvcc и make test-mvcc, а также макрос #[turso_macros::test(mvcc)]. Если ошибка не связана напрямую с MVCC, инструкция требует полностью игнорировать этот модуль при отладке.
Какие задачи решает
- Разобраться в архитектуре
MvStoreи многоверсионности строк - Настроить порог сброса страниц через
PRAGMA mvcc_checkpoint_threshold - Запустить специализированные тесты через
cargo test mvcc - Учесть блокировки читателей при чекпоинтах во время отладки
Примеры запросов агенту
- Объясни, чем изоляция строк в MVCC отличается от стандартного WAL в Turso
- Как написать тест с атрибутом #[turso_macros::test(mvcc)]?
- Какие файлы отвечают за логический журнал и чекпоинты в core/mvcc?
Как установить mvcc
1Через Skills CLI (Vercel)
npx skills add tursodatabase/turso --skill mvcc -a claude-code2Вручную: положить файлы
~/.claude/skills/mvcc/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/mvcc/
1Через Skills CLI (Vercel)
npx skills add tursodatabase/turso --skill mvcc -a codex2Вручную: положить файлы
.agents/skills/mvcc/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add tursodatabase/turso --skill mvcc -a cursor2Вручную: положить файлы
.cursor/skills/mvcc/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install tursodatabase/turso mvcc2Вручную: положить файлы
.github/skills/mvcc/SKILL.md1Через Skills CLI (Vercel)
npx skills add tursodatabase/turso --skill mvcc -a gemini-cli2Командой платформы
gemini skills install https://github.com/tursodatabase/turso --path .claude/skills/mvccВручную: положить файлы
.devin/skills/mvcc/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add tursodatabase/turso --skill mvcc -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
Из того же набора10
Весь набор →Похожие
Вопросы о mvcc
Как установить mvcc в Claude Code?
Выполните команду npx skills add tursodatabase/turso --skill mvcc -a claude-code. Агент получит правила и архитектурное описание модуля.
Что делает скилл mvcc?
Он предоставляет агенту документацию по экспериментальной подсистеме MVCC в Turso, описывая структуры памяти MvStore, журнал .db-log и отличия от WAL.
Готов ли этот режим к использованию в продакшене?
Нет, разработка ещё не завершена. В ней нет сборки мусора и восстановления из лога после перезапуска, а чекпоинты блокируют даже чтение.
Исходный текст
SKILL.md · MIT
---
name: mvcc
description: Overview of Experimental MVCC feature - snapshot isolation, versioning, limitations
---
# MVCC Guide (Experimental)
Multi-Version Concurrency Control. **Work in progress, not production-ready.**
**CRITICAL**: Ignore MVCC when debugging unless the bug is MVCC-specific.
## Enabling MVCC
```sql
PRAGMA journal_mode = 'mvcc';
```
Runtime configuration, not a compile-time feature flag. Per-database setting.
## How It Works
Standard WAL: single version per page, readers see snapshot at read mark time.
MVCC: multiple row versions, snapshot isolation. Each transaction sees consistent snapshot at begin time.
### Key Differences from WAL
| Aspect | WAL | MVCC |
|--------|-----|------|
| Write granularity | Every commit writes full pages | Affected rows only
| Readers/Writers | Don't block each other | Don't block each other |
| Persistence | `.db-wal` | `.db-log` (logical log) |
| Isolation | Snapshot (page-level) | Snapshot (row-level) |
### Versioning
Each row version tracks:
- `begin` - timestamp when visible
- `end` - timestamp when deleted/replaced
- `btree_resident` - existed before MVCC enabled
## Architecture
```
Database
└─ mv_store: MvStore
├─ rows: SkipMap<RowID, Vec<RowVersion>>
├─ txs: SkipMap<TxID, Transaction>
├─ Storage (.db-log file)
└─ CheckpointStateMachine
```
**Per-connection**: `mv_tx` tracks current MVCC transaction.
**Shared**: `MvStore` with lock-free `crossbeam_skiplist` structures.
## Key Files
- `core/mvcc/mod.rs` - Module overview
- `core/mvcc/database/mod.rs` - Main implementation (~3000 lines)
- `core/mvcc/cursor.rs` - Merged MVCC + B-tree cursor
- `core/mvcc/persistent_storage/logical_log.rs` - Disk format
- `core/mvcc/database/checkpoint_state_machine.rs` - Checkpoint logic
## Checkpointing
Flushes row versions to B-tree periodically.
```sql
PRAGMA mvcc_checkpoint_threshold = <pages>;
```
Process: acquire lock → begin pager txn → write rows → commit → truncate log → fsync → release.
## Current Limitations
**Not implemented:**
- Garbage collection (old versions accumulate)
- Recovery from logical log on restart
**Known issues:**
- Checkpoint blocks other transactions, even reads!
- No spilling to disk; memory use concerns
## Testing
```bash
# Run MVCC-specific tests
cargo test mvcc
# TCL tests with MVCC
make test-mvcc
```
Use `#[turso_macros::test(mvcc)]` attribute for MVCC-enabled tests.
```rust
#[turso_macros::test(mvcc)]
fn test_something() {
// runs with MVCC enabled
}
```
## References
- `core/mvcc/mod.rs` documents data anomalies (dirty reads, lost updates, etc.)
- Snapshot isolation vs serializability: MVCC provides the former, not the latter
© tursodatabase · MIT · tursodatabase/turso