Понимание размеров блока

11

Мой вопрос нацелен на Postgres, но ответы могут быть достаточно хорошими, если исходить из любой базы данных.

Верны ли мои предположения:

  • Диски имеют фиксированный размер блока?
  • RAID-контроллер может иметь другой размер блока? Один блок RAID разделен на несколько блоков реального диска?
  • Файловая система также имеет независимый размер блока, который снова разделяется на размер блока RAID.
  • Postgres работает с фиксированными блоками 8k. Как происходит сопоставление с размером блока файловой системы? Файловая система объединяет блоки Postgres 8k?

При настройке системы лучше всего иметь все блоки по 8к? Или настройки не имеют значения? Мне также было интересно, могут ли некоторые «неправильные» настройки размера блока поставить под угрозу целостность данных в случае сбоя? Может быть, если блок Postgres 8k нужно разделить на несколько дисковых блоков?

Или ничего не объединяется, и поэтому я теряю место на диске при каждом несоответствии между определенными размерами блоков?

Франц Кафка
источник

Ответы:

16

Дисковые сектора

Диск имеет фиксированный размер сектора, обычно 512 байт или 4096 байт на некоторых современных дисках; эти диски также будут иметь режим, в котором они эмулируют сектора размером 512 байт. На диске будут дорожки с разным количеством секторов; дорожки, расположенные ближе к внешней стороне диска, имеют больше секторов, поскольку у них больше места для заданной битовой плотности. Это позволяет более эффективно использовать дисковое пространство; как правило, дорожка будет иметь что-то вроде 1000 секторов по 512 байт на современном диске.

Некоторые структуры форматирования также могут включать в себя корректирующую информацию в разделах, что проявляется в форматировании дисков низкого уровня с секторами 520 или 528 байт. В этом случае сектор все еще имеет 512 байтов пользовательских данных. Ни Windows, ни Linux не поддерживают это напрямую, хотя i5OS (IBM iSeries) и различные контроллеры SAN поддерживают.

Обычно сектор / заголовок / дорожка преобразуется в адрес логического блока; Из-за исторических проблем с обратной совместимостью геометрия (головки x секторов x дорожки), видимая операционной системой (особенно на дисках IDE и SATA), обычно имеет мало общего с ее физической структурой.

Размер полосы RAID

Контроллер RAID может иметь размер чередования для массива с использованием чередования (например, RAID-5 или RAID-10). Если массив имеет (например, полосу 128 КБ), каждый диск содержит 128 КБ непрерывных данных, а затем следующий набор данных находится на следующем диске. Обычно вы можете рассчитывать получить примерно одну полосу за оборот диска, поэтому размер полосы может повлиять на производительность при определенных рабочих нагрузках.

Выравнивание раздела

Раздел диска может или не может точно совмещаться с полосой RAID и может привести к снижению производительности из-за разделения чтения, если он не выровнен. Некоторые системы (например, сервер Windows 2008) автоматически настраивают разделы в соответствии с размерами чередующихся разделов диска. Некоторые из них (например, сервер Windows 2003) этого не сделают, и вам нужно использовать утилиту разбиения, которая поддерживает выравнивание по полосам, чтобы убедиться, что они это делают.

Размер блока файловой системы

Файловая система будет распределять блоки хранения порциями определенного размера. Обычно это настраивается - например, NTFS будет поддерживать единицы размещения от (IIRC) 4K до 64K. Неправильное выравнивание разделов и блоков файловой системы по полосам RAID может привести к тому, что чтение одного блока файловой системы приведет к множественному доступу к диску, где потребуется только один, если блоки файловой системы будут правильно совмещены с полосами RAID.

Размер блока базы данных

База данных будет выделять пространство в таблице или индексе в некотором заданном размере блока. В случае SQL Server это 8 КБ, а во многих системах по умолчанию 8 КБ. В некоторых системах, таких как Oracle, это настраивается, а в PostgreSQL это опция времени сборки. В большинстве систем выделение пространства для таблиц обычно выполняется большими блоками, причем блоки размещаются в этих блоках.

Неверное выравнивание файловой системы и блоков выделения данных может привести к нескольким операциям ввода-вывода для одной записи блока, что может привести к снижению производительности.

Блок ввода / вывода

Обычно СУБД фактически выполняет свои операции ввода-вывода частями более одного блока. Например, на SQL Server все операции ввода-вывода выполняются блоками по 8 блоков, всего 64 КБ). На Oracle это настраивается. Случайная проверка документации PostgreSQL не показывает конкретного описания того, делает ли PostgreSQL это, поэтому я не уверен, как это работает на этой платформе.

Когда блок ввода-вывода превышает размер блока файловой системы или смещен по границам полосы RAID, запись на диск из БД может вызвать многократную запись на диск, что приводит к снижению производительности.

Использование дискового пространства

Дисковое пространство не теряется - ввод-вывод базы данных будет использовать одну или несколько физических операций ввода-вывода на диске для завершения, но неправильно настроенный ввод-вывод может привести к неэффективности, которая замедлит работу базы данных. Основные вещи, которые должны быть в выравнивании:

  • Полосы и разделы RAID - раздел должен начинаться с границы полосы RAID.

  • Распределение ввода-вывода файловой системы и границы полосы / раздела рейда - граница полосы RAID должна совпадать с единицей выделения файловой системы и должна быть кратна размеру единицы размещения файловой системы.

  • Размер записи на диск и размер единицы размещения файловой системы. Должна быть связь 1: 1 между операциями ввода-вывода базы данных и операциями ввода-вывода файловой системы.

Смещение не создает большую проблему целостности данных, чем в противном случае. База данных и файловая система имеют механизмы, обеспечивающие атомарную работу файловой системы. Обычно сбой диска приводит к потере данных, но не к проблемам целостности данных.

ConcernedOfTunbridgeWells
источник
Очень хороший ответ. Я чувствую себя плохо, только будучи в состоянии дать вам одно голосование ...
Франц Кафка
только еще один вопрос: что именно вы имеете в виду, говоря о выравнивании? Это кратно меньшему размеру блока? Например, 32k выровнен к 8k? Или есть другие факторы?
Франц Кафка
@FranzKafka - Нет, это означает, что что-то (обычно раздел диска) начинается в месте, которое не является целым кратным тому, с чем оно должно совпадать. Например, если у меня размер полосы RAID 128 КБ, а раздел не запускается на кратных 128 КБ от «блока 0», то у меня могут быть логические операции чтения, которые разбиты на две единицы физического выделения, что требует двух операций чтения, что вызывает снижение производительности.
ConcernedOfTunbridgeWells