Пересмотр - MySQL 5.1 против 5.5

Много месяцев назад, когда MySql 5.5 еще находился в бета-версии, этот вопрос задавался ранее. Теперь, когда он был выпущен и есть несколько обновлений обслуживания, что вы все думаете?

2 ответа

ВЫПУСК № 1) Полусинхронная репликация

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

С другой стороны, простые ведущие-подчиненные, круговые повторы и многократные повторы работают быстро ИМХО.

ВЫПУСК № 2) Несколько буферных пулов InnoDB

У меня есть клиент с сервером 3 БД, настроенный следующим образом:
Двойной HexaCore (12 процессоров)
192 ГБ ОЗУ
2 ТБ SAS RAID10

Клиент имеет 480 ГБ данных, распределенных по 780 базам данных.
Циркулярная репликация работает среди трех серверов БД.

Определенно, одна из самых мощных функций, которые я активировал для InnoDB - это:

innodb_read_io_threads = 64
innodb_write_io_threads = 64
innodb_io_capacity = 65536
innodb_buffer_pool_instances = 1
(по умолчанию) innodb_bufer_pool_size=162G

MySQL 5.5 работает как мечта для этого клиента. Все данные клиента клиента фактически кэшируются в памяти. Все 12 процессоров полностью задействованы из-за высокой активности InnoDB. Все динамит быстро. Грязные страницы InnoDB для пула буферов настолько малы и выкладываются так быстро.

Сначала я попытался установить буферный пул таким образом (160 ГБ)

innodb_buffer_pool_instances = 64 (максимальное значение)
innodb_buffer_pool_size = 2560M (2,5 ГБ)

Это создало много потоков блокировки. Я подозреваю, что это связано с кэшированием связанных данных в разных буферных пулах. Попытка получить доступ к этим сегментам данных привела к некоторому мьютексированию среди буферных пулов. Сотрудник на моей работе (который является сертифицированным мастером Oracle) сказал мне, что Oracle имеет подобную инфраструктуру, которую вы можете использовать, и блокировка потоков также является проблемой, поэтому они не продают ее использование.

Все проблемы блокировки потоков клиента полностью исчезли, когда я установил следующее:

innodb_buffer_pool_instances = 1
(по умолчанию) innodb_bufer_pool_size=162G

Мой вывод о нескольких буферных пулах InnoDB

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

Если у вас очень маленькие базы данных арендаторов, но их много, можно использовать несколько буферных пулов. Все еще будут проблемы с блокировкой потоков, но они не будут такими серьезными.

ИМХО, я бы уклонялся от нескольких буферных пулов для больших установок. Гигантский буферный пул с большим количеством потоков работает более эффективно. Я бы определенно сосредоточился на использовании большего количества потоков innodb и использовании большего количества процессоров, что является явным преимуществом по сравнению с MySQL 5.0/5.1.

Re: проблемы с innodb_buffer_pool_size и innodb_buffer_pool_instances:

Я думаю, что есть несоответствие с тем, как эти переменные связаны. innodb_buffer_pool_size - это общий доступный пул буферов. Затем он делится на число потоков, на которые есть ссылки в innodb_buffer_pool_instances.

В приведенном выше неэффективном примере 2,5 ГБ были разделены между 64 экземплярами, что оставляет 40 МБ на экземпляр. Рекомендуемый минимум (если вы используете эти параметры) составляет 1 ГБ на экземпляр. Я мог полностью видеть, как 40 МБ на экземпляр привели бы к низкой производительности.

В нашей производственной среде мы используем серверы с 3 экземплярами, пул 3 ГБ, по 1 ГБ на экземпляр, без чрезмерного подкачки страниц. Мы также запускаем 4 экземпляра, пул 10 ГБ, также без лишней подкачки (более новое оборудование, почему бы не воспользоваться этой памятью).

Надеюсь, это поможет.

Другие вопросы по тегам