Mysql в Twitter

в 7:57, , рубрики: github, mysql, mysql performance, twitter, метки: , , ,

Twitter опубликовала свои улучшения для MySQL.
Исходный код изменений распространяется под модифицированной лицензией BSD и располагается на GitHub
Более подробные изменения читайте под хабракатом.

Дополнительные переменные состояний

Additional status variables have been added, particularly from the internals of InnoDB. This allows us to monitor our systems more effectively and understand their behavior better when handling production workloads. The variables added are:
Разработчиками были добавлены дополнительные переменные состояний, в частности из внутренних компонентов InnoDB, что позволило более эффективно контролировать работу систем и лучше понимать их поведение, особенно в момент нагрузки. Среди добавленных переменных можно назвать:

  • Количество открытых, закрытых, открытых в текущий момент файлов InnoDB и файлов табличного пространства. Ранее эта информация не предоставлялась подсистемой InnoDB.
  • Количество обнаруженных зависаний. Ранее эта информация не предоставлялась подсистемой InnoDB.
  • Текущий регистрационный номер транзакции в журнале (номер LSN), а также номер LSN до наступления контрольной точки и номер LSN, до которого производится сброс. Эта информация ранее была доступна при использовании команды SHOW ENGINE INNODB STATUS.

Оптимизация распределения памяти на базе архитектуры NUMA

Большинство современных многопроцессорных систем использует технологию неравномерного доступа к памяти, или как ее называют NUMA архитектуру, которая позволяет разделить общую память системы между «узлами» NUMA. При выделении большого объема памяти для буферного пула InnoDB, как правило, возникают серьезные проблемы. Более подробную информацию о характерных проблемах, возникающих в NUMA системах, используемых MySQL, можно найти в блоге Джереми Коула. Разработчики внесли следующие изменения, с целью оптимизации системы и устранения проблем:

  • Была добавлена опция для принудительного перераспределения всей памяти буферного пула во время запуска. В первую очередь, это было сделано для того, чтобы заставить систему решать, какие страницы размещать и на каком узле NUMA. Если память буферного пула не может быть полностью распределена по какой-либо причине, подсистема InnoDB прервет работу во время запуска.
  • В mysqld_safe была добавлена опция, позволяющая сворачивать старт mysqld с помощью команды numactl --interleave=all для разделения памяти между всеми доступными узлами NUMA. Это гарантирует, что никакой узел NUMA не имеет преимуществ при распределении памяти, а следовательно память продолжает использоваться равномерно всеми многочисленными узлами NUMA на протяжении всего времени.
  • В mysqld_safe была добавлена опция для очистки буферного кэша операционной системы перед запуском (только для ОС Linux ). Linux, как правило, не освобождает кэш, для того чтобы заново распределить память за исключением случаев, когда система находится в состоянии нехватки памяти, что может привести к тому, что по идее равномерно распределяемая память может быть распределена неравномерно, то есть предпочтение при перераспределении памяти перед запуском будет отдано узлу с наименьшим объемом закэшированной информации. Очистка кэша перед запуском гарантирует, что в системе не будет выделено большого объема памяти под кэш, прежде чем InnoDB распределит память буферного пула.

Серверный тайм-аут запроса

Снижен объем выполняемой ненужной работы сервером, что позволило серверу заранее отменять запросы, которые длятся более определенного времени ожидания с точностью до миллисекунды.

Экспорт и восстановление буферного пула с помощью упреждающей выборки

Экспорт и восстановление буферного пула InnoDB стал возможен, благодаря использованию безопасного и облегченного метода, что позволяет создавать инструменты для перезагрузки сервисов с минимальными последствиями.

Оптимизация для твердотельных накопителей (SSD дисков)

Выполнена оптимизация MySQL для машин, использующих SSD диски, в том числе оптимизация процесса обновления страниц и снижение количества записей на диск с целью увеличения срока службы дисков.
Источник новости: engineering.twitter.com/2012/04/mysql-at-twitter.html
Текст взят из файла README.

Автор: selfchief

Поделиться

* - обязательные к заполнению поля