Масштабування PostgreSQL до 64 ядер?


10

У цій статті Computer World він вказує, що PostgreSQL може масштабувати до ядра 64. Чи означає це для одного багатоядерного процесора 64 ядра? Або кілька процесорів з меншою кількістю ядер?

Причина, чому я запитую, полягає в тому, що я намагаюся знайти, скільки процесорів PostgreSQL може масштабуватися до, але, звичайно, це може бути обмежено типом процесора. Однак я знаходив інші статистичні дані в інших базах даних (наприклад, Microsoft SQL Server тут говорить, що він може масштабувати до 320 логічних процесорів), і вони не визначають їх кількість ядер. Це дуже розпливчаста статистика?

Будь-які думки були б вдячні. Дякую!


1
PostgreSQL не хвилює, чи це 8 8-ядерних процесорів, 32 2-ядерних процесора чи інше. Дбає лише про логічні процесори. Крім того, 64 ядра приблизні і залежать від решти обладнання; 64 ядра не принесуть вам користі, якщо на жорсткому диску 7200 об / хв SATA у вас є лише 4 ГБ оперативної пам’яті для бази даних 1 ТБ. Немає жорсткого технічного обмеження щодо основних чисел, це лише те, що нещодавно було протестовано і доведено, що він масштабується до 64.
Крейг Рінгер

Відповіді:


7

Ні, це дуже точна статистика. "Логічний процесор" - це ядро. І ядро ​​в тому, що це неважливо, як вони поширюються на фізичні процесори.

І якщо ви маєте справу з машиною з більшою кількістю ядер, ніж підтримується число, це не повинно бути проблемою з PostgreSQL. Кожне з'єднання за своєю суттю є однопоточним *, тому незалежно від кількості наявних ядер - це обмеження ефективності та ефективності одночасних з'єднань.

Потрібно говорити, що це також означає, що ви повинні вкладати свої гроші швидше, ніж кількість ядер, якщо ви не хочете об'єднати речі в більш складний метод.

* Оновлення 2017 року: деякі запити (або підзапити) можуть виконуватися паралельно .


1
Needless to say this also means you should put your money in faster cores than quantity of cores unless you want to cluster things in a more complicated method.<- Я погоджуюся з дотриманням цього твердження лише в тому випадку, якщо кількість ядер більше, ніж кількість одночасних клієнтів, і кількість одночасних клієнтів навряд чи збільшиться. Для продуктивності досить важливо мати ядро ​​для кожного бекенда Postgres ...
voretaq7

@ voretaq7 Я в основному погоджуюся, але процесор з більш високою TPS може (очевидно) обробляти більше транзакцій за певний час, тому більше клієнтів. Там буде солодке місце, яке залежить від вашого типу завантаження та бюджету.
Олі

1
логічний процес - це найменший логічний блок виконання, з сучасними технологіями, це не ядро, це потік.
діасний

2
@ voretaq7: Нечасто підключатися до postgresql через якийсь механізм об'єднання з'єднань. Серед інших це робиться тому, що підключення до postgresql є відносно дорогим. Об'єднання може надзвичайно скоротити кількість одночасних підключень до бази даних. Тому я, як правило, віддаю перевагу швидким процесорам понад # ядер. Але як завжди: це залежить від багатьох факторів ...
m.sr

2
@ m.sr Погоджено - механізми об'єднання з'єднань дуже поширені. "Найрозумніші" з них зможуть підключити кілька підключень до Postgres і збалансувати їх (один з наших власних додатків робить це, надаючи кожному процесу Apache власне підключення до Postgres - досить зручне відображення для нашого випадку використання з розумним підключенням -відношення користувачів до користувачів). ІМХО, якщо ваш пул з'єднань створює запити в черзі, а не на нерестовищі, це не приносить вам ніяких переваг, але плюси та мінуси цього було б цікавіше поглибитись у адміністраторів баз даних . Так я запитав!
voretaq7

12

Postgres може масштабувати до тих самих процесорів, скільки ви хочете встановити, і ваша ОС може ефективно працювати з ними. Ви можете встановити Postgres на 128-ядерну машину (або навіть машину з 128 фізичними процесорами), і вона буде добре працювати. Це може працювати навіть краще, ніж на 64-ядерній машині, якщо планувальник ОС може обробляти такі ядра.

Показано, що постгреси лінійно масштабуються до 64 ядер (із застереженнями: ми говоримо про ефективність читання в певній конфігурації (диск, оперативна пам’ять, ОС тощо) - Роберт Хаас має статтю в блозі з гарним графіком, який Я відтворив нижче:

введіть тут опис зображення

Що важливо в цьому графіку?

Відносини лінійні (або майже так) до тих пір, поки кількість клієнтів менше або дорівнює кількості ядер , і тоді починається те, що виглядає приблизно як лінійне зниження рівня продуктивності в журналі, оскільки у вас більше клієнтських з'єднань, ніж у вас виконувати сердечники для запуску Postgres backends, тому що backends починають боротися за процесор (середнє завантаження перевищує 1,0 тощо).

Хоча це було продемонстровано лише до 64 ядер, ви можете узагальнити, що ви можете продовжувати додавати ядра (та клієнтів) та продовжувати покращувати продуктивність, аж до іншої підсистеми (диск, пам'ять, мережа), де процесів більше немає. мають проблеми із суперечливістю процесора, але натомість чекають чогось іншого.

Хааса також є ще одна стаття, де вони довели лінійну масштабованість до 32 ядер, яка має чудовий довідковий матеріал щодо масштабованості взагалі - дуже рекомендується фонове читання!)


2
Між іншим, причина такої лінійної масштабованості згадувалася у відповіді Олі : Postgres використовує для кожного клієнтського з'єднання окремий процес резервного копіювання. Як результат, якщо ви використовуєте лише одне з'єднання, ви не побачите великої (якщо є) користі для декількох ядер - вам потрібні паралельні запити, щоб використовувати декілька ядер.
voretaq7

2

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

Ви можете мати кеші на процесорі, які поділяються між ядрами або призначені для одиночних або підгруп ядер. Наприклад, одна загальна конфігурація - це виділений кеш L1 і спільний кеш L2. У цьому випадку масштабованість одного двоядерного процесора може відрізнятися від двох одноядерних процесорів.

Ці масштабованості впливають на основну пам'ять, коли машини NUMA демонструють іншу поведінку, ніж не-NUMA.

Я наголошую на цьому лише тому, що ОП обговорює питання масштабованості, відповіді яких, як правило, більш нюансовані, ніж "програма X може використовувати Y ядра CPU".


1

У цьому випадку вони мають на увазі декілька процесорів із меншою кількістю ядер ... Деякі з розмов є захищеними від майбутнього. Деякі - маркетингові.

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