Многоядерные и MySQL Performance


38

Важность оперативной памяти является установленным фактом, но доступно гораздо меньше материалов о важности ядер и многопоточности, когда речь заходит об использовании процессора MySQL. Я говорю о разнице запуска MySQL на 4cores против 6cores против 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 ПО ВОСТОЧНОМУ ВРЕМЕНИ

Что касается того, как InnoDB извлекает выгоду из всех ядер, нам нужно держать вещи в перспективе. Ядра также должны заниматься другими вопросами (ОС, диск, память, приложения, мониторинг и т. Д.) На сервере базы данных. Для тех, у кого скромный бюджет, многие, как правило, имеют сервер баз данных, который также предоставляет NFS, мониторинг от Munin, поддержку приложений для JBoss, PHP и так далее. Если вы хотите, чтобы MySQL, точнее InnoDB, использовал больше ядер, сервер баз данных должен быть выделен исключительно для MySQL, а ОС / диск / память должны ориентироваться только на MySQL . Учитывая эту перспективу, InnoDB задействует больше ядер, не сомневаясь .

Что касается плагина InnoDB, было упомянуто просто показать более ранние инициативы по созданию лучшего InnoDB со стороны MySQL (например, Oracle. Извините, язык пока еще не скатился). Новые переменные для вызова большей активности ядра стали очевидны из MySQL 5.1.38.

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

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


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

@Rick - Более подробно обратился к вашему комментарию в моем ответе
RolandoMySQLDBA

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

2
Все зависит от цели использования MyISAM или InnoDB. Что и сколько вы готовы кешировать? Вы полагаетесь на MySQL или другие механизмы кэширования (такие как лак и memcached) для извлечения данных? Правильно ли масштабировано ваше оборудование для InnoDB? 98% ваших SQL SELECTs? Таблица в лучшем формате для высокоскоростного чтения? Ответы на эти вопросы должны помочь нам в выборе механизма хранения, соответствующей конфигурации, выборе оборудования, даже в более глубоких вещах, таких как высокая доступность, топология БД, разделение чтения / записи, и этот список можно продолжить.
RolandoMySQLDBA

9

Я считаю, что разговоры о механизмах хранения, использующих ядра, могут вводить в заблуждение новичков. При условии, что программа достаточно многопоточная, операционная система будет планировать ее на максимально возможном количестве ядер.

Конкретная проблема, которая ограничивает масштабирование процессора, заключается в том, что внутренний код блокировки ( мьютексы ) конфликтует и блокирует одновременную работу потоков. Все механизмы хранения требуют мьютексов, но в MyISAM наверняка есть некоторые горячие.

Если мы на секунду проигнорируем конфликт мьютексов и вернемся к вашему главному вопросу: насколько важно иметь много ядер? -

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

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


5
+1 за упоминание слона в комнате:
мьютексный
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.