Багатоядерні та продуктивність MySQL


38

Важливість оперативної пам’яті є усталеним фактом, але набагато менше матеріалів доступно про важливість ядер та багатопотоковості, коли мова йде про використання процесора MySQL. Я говорю про різницю запуску MySQL на 4cores vs 6cores vs 8cores тощо.

Чи різні механізми зберігання даних використовують процесор по-різному?



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

1
Справді. Ось чому голосування "закрити як дублікат" немає
gbn

Це чудова спільнота, я все ще вчусь користуватися цим сайтом.
Рік Джеймс

Привіт приятелю, подивіться тут: mysql-cluster-blog.com ви знайдете що-небудь щось

Відповіді:


30

Що стосується MySQL, серед двигунів зберігання немає порівняння, за винятком того, що він поділяється на дві основні категорії:

MySQL пропонує використання декількох двигунів зберігання даних

Щодо перелічених двигунів зберігання даних, єдиними, які мають відповідність ACID, є InnoDB та NDB. Чому це важливо згадати? Дві причини:

  • Іншим двигунам зберігання даних просто не користується наявністю більше ядер, крім основного дискового вводу / виводу, використання процесора та загальної пропускної здатності.
  • Код для кожного не транзакційного накопичувача, який в основному диктує 14 внутрішніх операцій незалежно від двигуна зберігання, не був розроблений з метою використання доступу до декількох ядер.

InnoDB під MySQL 5.5, InnoDB плагін) та XtraDB сервера Percona Server мають параметри, які можна встановити для доступу до декількох ядер (Percona Server займається цим довше). Насправді Percona вводить близько 30 000 рядків коду спеціально для підвищення продуктивності InnoDB з кожним новим випуском GA вихідного коду MySQL. Ми можемо бути впевнені, що Oracle включив власні вдосконалення зі свого власного аналітичного центру для роботи в InnoDB для багатоядерної роботи (починаючи з MySQL 5.1.38).

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

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

ОНОВЛЕННЯ 2011-09-20 08:03 EDT

Що стосується того, що InnoDB отримує вигоду від усіх ядер, нам потрібно тримати речі в персепсиві. Сердечники повинні також стосуватися інших питань (ОС, диск, пам'ять, програми, моніторинг тощо) на сервері баз даних. Для тих, хто має скромні бюджети, у багатьох, як правило, сервер баз даних також надає NFS, моніторинг від Munin, підтримку додатків для JBoss, PHP і список продовжується. Якщо ви хочете, щоб MySQL, більш конкретно InnoDB, використовував більше ядер, сервер баз даних повинен бути призначений виключно для MySQL, а ОС / диск / пам'ять повинен мати властивість лише MySQL . Враховуючи таку перспективу, InnoDB залучатиме більше ядер без сумнівів .

Що стосується InnoDB Plugin, то згадувалося просто для демонстрації попередніх ініціатив щодо покращення InnoDB з боку MySQL (наприклад, Oracle. Вибачте, поки що мова ще не скачується). Нові змінні для виклику більшої активності стали очевидними з MySQL 5.1.38.

Наприклад, innodb_read_io_threads та innodb_write_io_threads (обидва з MySQL 5.1.38) виділяють вказану кількість потоків для читання та запису. За замовчуванням - 4, а максимум - 64. Налаштування за замовчуванням та макс. Значення настільки різні (4 - 64) показує, що InnoDB настільки багатопоточний та основний, як ви його налаштовуєте !!!

Задоволення потреб спільноти MySQL для доступу до більшої кількості ядер з InnoDB вела компанія Percona. Отже, MySQL почав наслідувати його. Я мушу визнати, що Oracle (yuck) вніс необхідні вдосконалення для більшої активності.


InnoDB під налаштуваннями MySQL 5.5, як ви запропонували вище, може отримати вигоду від усіх ядер? {трохи заплутався у плагіні InnoDB}
Рік Джеймс

@Rick - Далі звернувся до вашого коментаря у моїй відповіді
RolandoMySQLDBA

Тут здається, що це зовсім інша історія, і MyISAM, здається, падає на обличчя, коли справа доходить до використання декількох ядер, але з іншого боку, на dba.stackexchange.com/questions/5974/best-of-myisam-and-innodb MyISAM має переваги. Тож, здається, краватка вирішує, яким шляхом йти.
Рік Джеймс

2
Все залежить від мети, яку ви маєте використовувати MyISAM або InnoDB. Що і скільки ви готові кешувати? Ви покладаєтесь на MySQL або інші механізми кешування (такі як лак та запам'ятовується) для пошуку даних? Чи правильно розроблено обладнання для InnoDB? 98% ваших SQL SELECT? Чи таблиця найкращого формату для швидкісного читання? Відповіді на ці запитання заздалегідь повинні орієнтувати нас на вибір двигуна зберігання, відповідну конфігурацію, вибір обладнання, навіть досягнення глибших речей, таких як висока доступність, топологія БД, розділення читання / запису, і цей список може продовжуватися.
RolandoMySQLDBA

9

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

Конкретна проблема, яка обмежує масштабування процесора, полягає в тому, що код внутрішнього блокування ( мутекси ) містить суперечки і блокує потоки одночасно. Усі двигуни зберігання вимагатимуть мутекси, але, безумовно, є деякі гарячі в MyISAM.

Якщо ми на секунду ігноруємо суперечки з мютексами і повернемося до вашого головного питання: наскільки важливо мати багато ядер? -

Мені подобається мати багато ядер для робочих навантажень, які обслуговують запити користувачів. Наявність багатьох може зменшити відхилення між часом запитів. Подумайте про це як про вишику на суперринку з 12 відкритими проходами проти 2-х.

Оновлення : Я написав допис у блозі про те, чому важлива вертикальна масштабованість (багатоядерні).


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