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 cache1-10 nsKB-MBvolatile
RAM (main memory)50-100 nsGBvolatile
Flash/SSD0.1 msTBnon-volatile
HDD (magnetic)5-10 msTBnon-volatile
Tape / archivesecondsPBnon-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 Свойства

ПараметрHDDSSD
Random read5-10 ms0.1 ms
Sequential read100-200 MB/s500-7000 MB/s
IOPS (random)~10010K-1M
Цена за GBдёшеводороже, но падает
Износмеханикаограниченный write endurance
Шум/вибрацияестьнет

4.2 Особенности flash

  • Erase block > write block — чтобы переписать страницу, нужно стереть целый блок. Это медленно.
  • Limited endurance — каждая ячейка выдерживает ~1K-100K циклов записи (в зависимости от типа MLC/TLC/QLC).
  • Wear leveling — контроллер размазывает запись по чипу, чтобы не убить одну область.

4.3 NAND типы

ТипБит/ячейкаСкоростьИзнос
SLC1очень быстроочень долго
MLC2быстросредне
TLC3среднеменьше
QLC4медленнеемало

SSD для БД

Дёшево и быстро — TLC. Серверные NVMe SSD дают 1M+ IOPS — на порядок выше HDD. Для современных БД SSD = стандарт.


5. RAID

RAID (Redundant Array of Independent Disks) — объединение нескольких дисков для скорости и/или надёжности. abbreviation

5.1 Уровни

УровеньИдеяПлюсыМинусыMin дисков
RAID 0striping (полосование)скоростьНЕТ резервирования2
RAID 1mirroring (зеркало)надёжность50% места теряется2
RAID 5striping + parityскорость + 1 диск отказамедленная запись3
RAID 6striping + 2 parity2 диска отказамедленнее RAID 54
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:

  1. Прочитать кусок, отсортировать в RAM, записать на диск.
  2. Слить отсортированные куски (merge).

External merge sort

Часть алгоритмов оптимизатора (sort-merge join, GROUP BY) основаны на этом.


7. Метрики производительности диска

МетрикаЧто значит
IOPSI/O operations per second
ThroughputMB/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)
DASdirect-attached, локальные диски

БД обычно живёт на DAS или SAN (для блочного доступа). NAS — реже.


10. Cloud storage

УровеньПример AWS
Block storageEBS
Object storageS3
File systemEFS

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

  1. Seek + rotation + transfer — формула времени доступа HDD.
  2. RAID 0 vs RAID 1 vs RAID 5 vs RAID 10 — знать min дисков и свойства.
  3. RAID ≠ backup.
  4. SSD vs HDD — порядки разницы для random vs sequential.
  5. Volatile vs non-volatile — какие уровни иерархии.
  6. Write-ahead log — sequential write вместо random.
  7. Block size vs row size — DBMS читает блоками, не байтами.

13. Mini-quiz

  1. Почему random read на HDD ~10ms, а sequential ~0.1 ms?
  2. Сколько дисков можно потерять без данных в RAID 5? RAID 6? RAID 10?
  3. Что такое wear leveling и зачем оно SSD?
  4. Какие 3 компонента образуют seek+rotation+transfer?
  5. RAID 1 из 4 дисков — сколько места получим из 4 TB дисков?

Если понял эту главу

Ты понимаешь, как DBMS взаимодействует с железом, почему случайное чтение — это плохо, и как RAID/SSD влияют на производительность. Это фундамент для индексов и буфер-менеджера в следующих главах.