Розуміння розмірів блоків


11

Моє запитання орієнтоване на Postgres, але відповіді можуть бути досить хорошими з будь-якого фону бази даних.

Чи правильні мої припущення:

  • Диски мають фіксований розмір блоку?
  • RAID-контролер може мати різний розмір блоку? Чи розбивається один блок RAID на кілька реальних блоків дисків?
  • Файлова система також має незалежний розмір блоку, який знову розбивається на розмір блоку RAID?
  • Postgres працює з фіксованими блоками 8k. Як тут відбувається відображення розміру блоку файлової системи? Чи є файли Postgres 8k об'єднані файловою системою?

Під час налаштування системи найкраще, щоб усі блоки були в 8k? Або налаштування не мають значення? Мені також було цікаво, чи можуть деякі "неправильні" параметри розміру блоку загрожувати цілісності даних у разі аварії? Можливо, якщо блок 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). Якщо масив має (для exmaple) смужку 128k, кожен диск має 128k суміжних даних, а потім наступний набір даних знаходиться на наступному диску. Зазвичай ви можете розраховувати отримати приблизно одну смужку за оборот диска, тому розмір смуги може впливати на продуктивність на певних робочих навантаженнях.

Вирівнювання розділів

Дисковий розділ може або не може точно вирівнюватися з смужкою RAID, і може призвести до погіршення продуктивності через розбиття читання, якщо він не вирівняний. Деякі системи (наприклад, сервер Windows 2008) автоматично налаштовують розділи для вирівнювання за розмірами смуги диска. Деякі (наприклад, сервер Windows 2003) не будуть, і вам потрібно використовувати утиліту розділів, яка підтримує вирівнювання смуг, щоб переконатися, що вони роблять.

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

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

Розмір блоку бази даних

База даних виділить простір у таблиці або індексі у певному розмірі блоку. У випадку з SQL Server це 8K, а 8K за замовчуванням у багатьох системах. У деяких системах, таких як Oracle, це налаштовується, а на PostgreSQL - це параметр часу збирання. У більшості систем розподіл простору для таблиць зазвичай виконується більшими фрагментами, з блоками, виділеними в цих фрагментах.

Невідповідність файлової системи та блоків розподілу даних може генерувати кілька записів вводу / виводу для одного запису блоку, що може призвести до продуктивного штрафу.

I / O Chunking

Зазвичай СУБД насправді виконує введення-виведення в шматки більш ніж одного блоку. Наприклад, на SQL Server усі введення / виведення виконуються в шматки з 8 блоків, 64 к. В цілому). У Oracle це налаштовується. Випадковий огляд документів PostgreSQL не виявляє конкретного опису того, чи робить це PostgreSQL, тому я не впевнений, як це працює на цій платформі.

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

Використання місця на диску

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

  • RAID-смуги та перегородки - розділ повинен починатися на межі смуги RAID.

  • Межі розподілу вводу / виводу файлової системи та межі смуги / перегородки рейду - межа смуги RAID повинна вирівнюватися з одиницею розподілу файлової системи та має бути кратною розміру одиниці розподілу файлової системи.

  • Розмір запису диска та розмір одиниці розподілу файлової системи. Між операціями вводу / виводу бази даних та операціями вводу / виводу файлової системи має бути 1: 1.

Невідповідність не створює більшої проблеми цілісності даних, ніж це було б інакше. База даних та файлова система мають механізми для забезпечення роботи файлової системи атомною. Зазвичай збій диска призведе до втрати даних, але не до питань цілісності даних.


Дуже приємна відповідь. Мені погано, тільки можу дати вам один внесок ...
Франц Кафка

ще одне питання: що саме ви маєте на увазі, коли говорите про вирівнювання? Це множина меншого розміру блоку? Наприклад 32k вирівняно до 8k? Або є інші фактори?
Франц Кафка

@FranzKafka - Ні, це означає, коли щось (як правило, дисковий розділ) починається в місці, яке не є невід'ємним кратним того, з чим він повинен узгоджуватися. Наприклад, якщо у мене розмір смуги RAID 128K і розділ не починається з кратного 128K з "блоку 0", я можу мати логічні зчитування, які розділяються на два фізичні одиниці розподілу, що вимагає двох операцій зчитування, викликаючи виконання штрафу.
ЗанепокоєнийOfTunbridgeWells
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.