Основная проблема с оптимизацией чего-либо для твердотельных накопителей связана с тем, как они записывают данные. Традиционный жесткий диск обычно хранит данные в небольших секторах размером около 512 байт и может фактически манипулировать секторами непосредственно на этом уровне или даже ниже этого уровня.
SSD имеют некоторые недостатки в отношении записи:
- Минимальный размер записи блока составляет около 4-8 КБ.
- Запись может быть выполнена только на полной странице размером обычно 256 КБ.
- Только пустые блоки могут быть записаны в.
Типичный сценарий кошмара, называемый усилением записи , - это когда вы хотите записать один байт в место на диске, где уже используются некоторые блоки. Чтобы записать туда, вам нужно сначала скопировать всю страницу размером 256 КБ в память, стереть весь блок, изменить один байт на странице, а затем записать обратно всю измененную страницу размером 256 КБ. Таким образом, чтобы записать один байт, было около половины мегабайта «трафика»!
Существует множество оптимизаций для этой проблемы, реализованных на уровне SSD, контроллера и даже операционной системы, но, несомненно, СУБД могут выиграть, приспособив эти оптимизации к своей конкретной работе.
Однако это не то, о чем должны думать пользователи базы данных (например, при использовании базы данных в своем приложении), поскольку это будет сильно зависеть от решений по проектированию / реализации на уровне СУБД.