10 — Physical Storage Systems
Зачем эта тема: чтобы понимать, почему запросы работают именно так быстро/медленно, нужно знать, на чём они физически живут. Эта глава — про железо: память, диски, SSD, RAID. Без неё нельзя понять, зачем нужны индексы и почему “случайное чтение” — это медленно.
🎯 Практический квиз
30 вопросов с ответами и объяснениями для самопроверки → https://sdu.javazhan.tech/questions/7/categories/31
1. Storage hierarchy — иерархия памяти
Память в компьютере организована пирамидой: чем быстрее, тем дороже и меньше.
| Уровень | Скорость доступа | Размер | Энергозависимость |
|---|---|---|---|
| CPU registers | <1 ns | байты | volatile |
| L1/L2/L3 cache | 1-10 ns | KB-MB | volatile |
| RAM (main memory) | 50-100 ns | GB | volatile |
| Flash/SSD | 0.1 ms | TB | non-volatile |
| HDD (magnetic) | 5-10 ms | TB | non-volatile |
| Tape / archive | seconds | PB | non-volatile |
Главный принцип DBMS
RAM маленькая и быстрая. Диск большой и медленный. Задача DBMS — минимизировать доступ к диску (буфер-менеджер, индексы, оптимизатор).
volatile — память, теряющая данные без питания (RAM, cache). dbterm
non-volatile — память, сохраняющая данные (HDD, SSD, flash). dbterm
primary storage — RAM, кэш. dbterm
secondary storage — HDD, SSD. dbterm
tertiary storage — backup tapes, optical disks. dbterm
2. RAM — main memory
- Volatile — отключил питание → потерял данные.
- Адресуется байтом.
- Очень быстрая, но дорогая.
- В современных серверах — десятки/сотни GB.
DBMS использует RAM как буфер: часто читаемые страницы держатся в памяти, чтобы не лазить на диск.
3. Magnetic Disk (HDD)
3.1 Устройство
[ Disk arm ]
\
\— [ Read/write head ]
↓
[ Platter ] ──── круглая магнитная пластина
рядом ещё несколько platter в стопке
| Термин | Что |
|---|---|
| Platter | физический “блин” |
| Track | концентрическая дорожка |
| Sector | сегмент дорожки (обычно 512B или 4KB) |
| Cylinder | все track-и одного радиуса на всех platter |
| Block / page | единица передачи (4-16 KB обычно) |
3.2 Время доступа
Чтение блока с HDD = seek + rotation + transfer:
| Компонент | Что | Типично |
|---|---|---|
| Seek time | подвести головку к нужной дорожке | 5-10 ms |
| Rotational latency | подождать, пока нужный сектор подъедет | 4-8 ms (≈ 1/2 оборота при 7200 RPM) |
| Transfer time | прочитать блок | 0.1 ms |
Итого: 5-15 ms на случайное чтение. За это время CPU делает миллионы инструкций.
Random vs sequential
Sequential чтение HDD — относительно быстро (нет seek-ов). Random чтение — катастрофически медленно. Поэтому DBMS старается выстроить данные так, чтобы читать последовательно (B+ tree, кластеризация).
3.3 RPM
Скорость вращения шпинделя:
- 5400 RPM — медленные (для laptop).
- 7200 RPM — стандарт.
- 10000-15000 RPM — серверные, быстрые, шумные.
Чем выше RPM, тем меньше rotational latency.
4. Flash Memory / SSD
SSD (Solid State Drive) — non-volatile память на flash чипах. Нет движущихся частей. abbreviation
4.1 Свойства
| Параметр | HDD | SSD |
|---|---|---|
| Random read | 5-10 ms | 0.1 ms |
| Sequential read | 100-200 MB/s | 500-7000 MB/s |
| IOPS (random) | ~100 | 10K-1M |
| Цена за GB | дёшево | дороже, но падает |
| Износ | механика | ограниченный write endurance |
| Шум/вибрация | есть | нет |
4.2 Особенности flash
- Erase block > write block — чтобы переписать страницу, нужно стереть целый блок. Это медленно.
- Limited endurance — каждая ячейка выдерживает ~1K-100K циклов записи (в зависимости от типа MLC/TLC/QLC).
- Wear leveling — контроллер размазывает запись по чипу, чтобы не убить одну область.
4.3 NAND типы
| Тип | Бит/ячейка | Скорость | Износ |
|---|---|---|---|
| SLC | 1 | очень быстро | очень долго |
| MLC | 2 | быстро | средне |
| TLC | 3 | средне | меньше |
| QLC | 4 | медленнее | мало |
SSD для БД
Дёшево и быстро — TLC. Серверные NVMe SSD дают 1M+ IOPS — на порядок выше HDD. Для современных БД SSD = стандарт.
5. RAID
RAID (Redundant Array of Independent Disks) — объединение нескольких дисков для скорости и/или надёжности. abbreviation
5.1 Уровни
| Уровень | Идея | Плюсы | Минусы | Min дисков |
|---|---|---|---|---|
| RAID 0 | striping (полосование) | скорость | НЕТ резервирования | 2 |
| RAID 1 | mirroring (зеркало) | надёжность | 50% места теряется | 2 |
| RAID 5 | striping + parity | скорость + 1 диск отказа | медленная запись | 3 |
| RAID 6 | striping + 2 parity | 2 диска отказа | медленнее RAID 5 | 4 |
| RAID 10 (1+0) | mirror + stripe | скорость + надёжность | 50% места | 4 |
5.2 RAID 0 — striping
Данные режутся на полосы и пишутся параллельно на N дисков.
- Скорость: ×N.
- Любой отказ → потеря всего.
5.3 RAID 1 — mirroring
Каждая запись копируется на 2 (или больше) диска.
- Чтение быстрее (можно читать с любого).
- Запись та же.
- Отказ одного диска — данные сохранены.
5.4 RAID 5 — striping + parity
N дисков. Данные + одна “контрольная сумма” (parity), размазанная по всем.
- Любой 1 диск может отказать → восстанавливается из остальных.
- Запись медленная (при каждой записи перевычисляется parity).
5.5 RAID 6 — двойная parity
Выдерживает отказ 2 дисков. Ещё медленнее на запись.
5.6 RAID 10 — комбинация
Сначала пары зеркалируем (RAID 1), потом режем по парам (RAID 0).
- Лучшее сочетание скорости и надёжности.
- Стандарт для БД на проде.
Какой RAID для БД
- OLTP: RAID 10 (быстрая запись + отказоустойчивость).
- Read-heavy archive: RAID 5/6.
- Никогда RAID 0 для production data — один диск умер → всё пропало.
RAID ≠ backup
RAID защищает от аппаратного отказа диска. Не защищает от:
DROP TABLE, шифровальщика, ошибки разработчика, пожара. Бэкап обязателен.
6. Оптимизация работы с диском
6.1 Block-oriented IO
DBMS читает не байтами, а блоками (4-16 KB). Если нужен один байт — всё равно читается весь блок.
Это объясняет важность кластеризации
Если связанные записи лежат в одном блоке — одно чтение и всё. Если разбросаны — много seek-ов.
6.2 Buffer cache
DBMS держит часто используемые блоки в RAM (см. ch11).
6.3 Write-ahead log (WAL)
Изменения сначала пишутся в журнал на диск (sequential write — быстро), потом применяются в основные блоки. Это защищает от потери данных при crash и ускоряет (sequential vs random).
6.4 Группировка записей
DBMS группирует множественные записи и пишет их одним IOP, чтобы амортизировать seek.
6.5 Sorting на диске
Для больших данных, не помещающихся в RAM, используется external sort:
- Прочитать кусок, отсортировать в RAM, записать на диск.
- Слить отсортированные куски (merge).
External merge sort
Часть алгоритмов оптимизатора (sort-merge join, GROUP BY) основаны на этом.
7. Метрики производительности диска
| Метрика | Что значит |
|---|---|
| IOPS | I/O operations per second |
| Throughput | MB/s |
| Latency | время на одну операцию (ms) |
| Queue depth | сколько IO в очереди |
Связь
IOPS × block_size = throughput. SSD даёт высокие IOPS на random, HDD — нет. Поэтому БД на SSD летает.
8. NUMA и серверная архитектура
В современных серверах несколько CPU socket-ов, у каждого — своя локальная RAM. Это NUMA (Non-Uniform Memory Access). abbreviation
Доступ к “своей” RAM быстрее, чем к “чужой”. DBMS на больших серверах настраивают NUMA-aware scheduler.
9. Storage area networks (SAN, NAS)
| Что | |
|---|---|
| SAN | блочное хранилище по сети (Fibre Channel/iSCSI) — выглядит как локальный диск |
| NAS | файловое хранилище (NFS/SMB) |
| DAS | direct-attached, локальные диски |
БД обычно живёт на DAS или SAN (для блочного доступа). NAS — реже.
10. Cloud storage
| Уровень | Пример AWS |
|---|---|
| Block storage | EBS |
| Object storage | S3 |
| File system | EFS |
EBS под БД — фактически “сетевой SSD”. Параметры (gp3/io1/io2) определяют IOPS и throughput. S3 — для бэкапов, архивов, не для оперативной работы БД.
Provisioned IOPS
На облачных дисках можно “купить” IOPS — например,
io2с 64K IOPS для БД с высокой нагрузкой.
11. Endurance и failure planning
11.1 MTBF / AFR
- MTBF — Mean Time Between Failures.
- AFR — Annualized Failure Rate (вероятность отказа за год).
Для HDD AFR ~1-3%, для SSD на enterprise ~0.5%.
11.2 Hot spare
Запасной диск в RAID, который автоматически вступает при отказе.
11.3 Backup
Регулярные снимки на отдельное хранилище. 3-2-1: 3 копии, 2 разных типа носителя, 1 off-site.
Disaster recovery
Если БД на одном RAID-массиве — это не disaster recovery. Нужны бэкапы в отдельный регион / off-site, и план восстановления, который проверен.
12. Часто на экзамене
Exam traps
- Seek + rotation + transfer — формула времени доступа HDD.
- RAID 0 vs RAID 1 vs RAID 5 vs RAID 10 — знать min дисков и свойства.
- RAID ≠ backup.
- SSD vs HDD — порядки разницы для random vs sequential.
- Volatile vs non-volatile — какие уровни иерархии.
- Write-ahead log — sequential write вместо random.
- Block size vs row size — DBMS читает блоками, не байтами.
13. Mini-quiz
- Почему random read на HDD ~10ms, а sequential ~0.1 ms?
- Сколько дисков можно потерять без данных в RAID 5? RAID 6? RAID 10?
- Что такое wear leveling и зачем оно SSD?
- Какие 3 компонента образуют seek+rotation+transfer?
- RAID 1 из 4 дисков — сколько места получим из 4 TB дисков?
Если понял эту главу
Ты понимаешь, как DBMS взаимодействует с железом, почему случайное чтение — это плохо, и как RAID/SSD влияют на производительность. Это фундамент для индексов и буфер-менеджера в следующих главах.