Яка найкраща файлова система для продуктивності вставок на PostgreSQL?


20

Мені цікаво, чи хтось там робив експерименти чи порівняння між файловими системами та продуктивністю бази даних. У Linux мені цікаво, яка оптимальна файлова система для бази даних postgres. Крім того, які налаштування (inode тощо) ідеально підходять для цього? Це щось, що може різко відрізнятися на основі даних у базі даних?

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

Однак я хотів би отримати якомога більше порад щодо виконання вставки на відміну від можливості читати. Дякую за всі чудові відповіді!


7
Найкращою файловою системою було б більше пам'яті? ;)
Оскар Дувеборн

2
+1 для Оскара. Ми щойно перейшли від конфігурації сервера, де оперативна пам’ять становила ~ 33% від загального розміру БД, до нової машини, де загальна оперативна пам’ять була більша за розмір БД. Тепер ми можемо кешувати весь БД в пам'яті. Наш найповільніший запит SQL зараз на 2 порядки швидший.
KevinRae

Відповіді:


14

Купіть копію "високої продуктивності postgresql" Грега Сміта. Це чудова книга, і дві чи більше глав про апаратне забезпечення та файлові системи. Ви багато чого навчитесь.

Якщо коротко: короткої відповіді немає.

Але я спробую влітку:

  • не використовуйте ext2, поки не дізнаєтеся, що ви робите.
  • з ext3 остерігайтеся шипів контрольної точки через дзвінки fsync, див. сторінки 113 та 82 та 79
  • використовувати ext4 або xfs
  • є й інші варіанти

Але оскільки ви справді запитуєте себе, яким FS користуватися, вам слід прочитати книгу!


4
Погоджено, це така тема, яку Грег висвітлює дуже добре. На сайті packtpub.com/sites/default/files/… є зразок глави, якщо ви хочете евакуюватись перед запозиченням або покупкою книги.
sciurus

1
Смішно, коли у мене виникли ці проблеми, книги не існувало. Тепер я дуже вдячний за зусилля, які Грег доклав до цієї книги.
Ілля

Я купив ще одну копію тільки в честь цього велику роботу :-)
Janning

6

Перш за все, ви хочете спочатку надійну файлову систему та швидку одну секунду. Що виключає деякі варіанти ...

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

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


4
Можливо, ви хочете / не / використовувати XFS для зберігання бази даних, а саме тому, що вона (при необхідності) викреслить блоки, які вона не може відновити.
Avery Payne

4

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

  1. Надлишкові журнали збільшують обсяг дискової активності

  2. Макет фізичного диска може бути фрагментованим (хоча деякі файлові системи файлів мають механізми, щоб це очистити).

  3. Журнал може заповнювати велику кількість дискових дій, викликаючи помилкові умови "повного диска".

Я бачив приклад кілька років тому, коли це робилося у файловій системі LFS під час встановлення Baan у вікні HP / UX. У системі були постійні проблеми з продуктивністю та корупцією даних, які не були діагностовані, поки хтось не розробив, що файлові системи відформатовані з LFS.

Об'єм файлів із базами даних, як правило, має невелику кількість великих файлів. Сервери СУБД, як правило, мають налаштування, яке налаштовує кількість блоків, зчитуваних в одному В / В. Менші числа будуть доречними для систем оброблення транзакцій з великим обсягом, оскільки вони мінімізують кешування зайвих даних. Більша кількість була б доречною для таких систем, як сховища даних, які виконували багато послідовних зчитувань. Якщо можливо, налаштуйте розмір блоку виділення файлової системи на такий самий розмір, як і багатоблочний зчитування, на яке встановлено СУБД.

Деякі системи управління базами даних можуть працювати з необробленими дисковими розділами. Це дає різний ступінь підвищення продуктивності, як правило, менше, ніж для сучасної системи з великою кількістю пам'яті. У старих системах з меншим простором для кешування метаданих файлової системи економія на вході / виводу диска була досить значною. Сирі розділи ускладнюють управління системою, але забезпечують найкращу ефективність роботи.

Томи RAID-5 мають більше накладних витрат, ніж обсяги RAID-10, тому зайнята база даних з великою кількістю трафіку запису буде краще (часто набагато краще) на RAID-10. Журнали повинні бути поставлені фізично окремими дисками даних до даних. Якщо ваша база даних велика і здебільшого лише для читання (наприклад, сховище даних), може виникнути випадок розмістити її на томах RAID-5, якщо це не надто сповільнить процес завантаження.

Кешування зворотного запису на контролері може призвести до виграшу в продуктивності за рахунок створення деяких (досить маловірогідних, але можливих) режимів відмов, де дані можуть бути пошкоджені. Найбільша виграш у цьому - навантаження з високим випадковим доступом. Якщо ви хочете це зробити, розгляньте можливість розміщення журналів на окремому контролері та відключення кешування зворотного запису на томах журналу. Тоді журнали матимуть кращу цілісність даних, і жодна помилка не може витягнути і журнал, і обсяги даних. Це дозволяє відновити з резервної копії та прокрутити вперед з журналів.


Журнальні дані погіршують результативність; Журналізація метаданих повинна мати найгірший мінімальний вплив, і, швидше за все, майже жодного. Не обмінювати метадані не рекомендується.
niXar

Я думаю, ви неправильно зрозуміли статтю. Будь-яка файлова система взагалі має метадані файлової системи, і будь-який дисковий трафік вимагатиме читання або запису цього тексту. У сучасних комп’ютерах зазвичай достатньо оперативної пам’яті, щоб легко кешувати метадані цієї файлової системи, але старіші машини цього не зробили. Це означало, що доступ до диска спричинив значні додаткові накладні витрати на введення / виведення (часто цитований показник для Oracle - це 30-відсотковий показник продуктивності над необробленими розділами) для читання або оновлення метаданих файлової системи. У сучасній системі з більшою кількістю оперативної пам’яті метадані файлової системи, швидше за все, будуть кешовані, тому накладні витрати нижче.
ConcernedOfTunbridgeWells

Це містить кілька хороших загальних порад, але я оскаржував, тому що він також містить інформацію, яка не відповідає або невірна для postgresql та сучасних файлових систем, що переводяться в журнал.
sciurus

3

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

Резюме: Я використав pgbench. Планувальник вводу / виводу Linux має дуже мало значення для продуктивності та файлової системи лише небагато. Отже, якщо ви поспішаєте, просто виберіть за замовчуванням. Я обрав JFS.


2

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


Мої орієнтири показали дуже мало змін при зміні планувальника вводу-виводу, можливо, тому, що кожна СУБД вже має власний планувальник.
борцмейєр

MySQL справляється набагато краще під великим навантаженням від використання планувальника термінів.
Девід Пашлі

2

Я кілька місяців тому робив тестування:

У мене була невелика тестова програма, яка створила 50 потоків, де кожен потік вставляв 1000 (або якщо це 10000) рядків у одну таблицю.

  • З базою даних на EXT3 та 4 дисковим RAID5 минуло 50 секунд.
  • Що стосується таблиці на ramdisk (використовуючи простір таблиць), це ще зайняло 50 секунд. Причина, через яку не було швидше, полягає в тому, що все записується в каталог pg_xlog, де ще на тому ж RAID 5.
  • Я перемістив pg_xlog на 4 диск RAID0 (смуга) і та сама програма запустилася за 40 секунд.
  • З метою тестування я перемістив pg_xlog до ramdisk і мав все інше на RAID-диску 4 EXT3. Програма була закінчена через менше 5 секунд.

Але наявність pg___xlog на програмному забезпеченні ramdisk - це не варіант: якщо ви втратите вміст каталогу pg_xlog, postgres не запуститься. (Але існують апаратні рамкові диски з резервним запасом акумулятора, що може зацікавити.)

IMHO: Використовуйте файл файлів, який вам найбільше комфортний для файлів бази даних. Перемістіть файл pg_xlog (із символьним посиланням, див. Документацію) до найшвидшого можливого пристрою.


1
pgbench робить щось подібне і входить до більшості встановлень.
Avery Payne

0

Я бачив, що пам’ятав, що перероблений FreeBSD дасть вам трохи більшу продуктивність на відміну від інших ОС. Хоча я впевнений, що ця інформація застаріла і, мабуть, міф в першу чергу. Але ви можете спробувати все-таки, перегляньте це керівництво щодо налаштувань ядра: http://developer.postgresql.org/pgdocs/postgres/kernel-resources.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.