[MySQL, Администрирование баз данных] Изучаем использование памяти MySQL с помощью Performance Schema (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Эксперт OTUS - Владислав Родин приглашает всех желающих на бесплатный demo-урок по теме: "Индексы в MySQL: best practices и подводные камни". Урок был подготовлен специально для супер-интенсива «СУБД в высоконагруженных системах».А мы традиционно делимся с вами полезным переводом по теме.
Понимание того, как MySQL использует память, является ключом к настройке системы для достижения оптимальной производительности, также как и для устранения неполадок в случаях ненормального использования памяти, например, когда у вас есть сервер MySQL, использующий намного больше памяти, чем вы ожидаете, исходя из параметров конфигурации.На заре MySQL понимание всех тонкостей и нюансов использования памяти было трудным и включало очень много догадок. Быть может, для выполнения некоторых запросов требуется большая временная таблица или выделение больших объемов памяти для сохраненных пользовательских переменных? Может, какие-либо хранимые процедуры занимают неожиданно большой объем памяти? Причиной чрезмерного использования памяти MySQL могло оказаться что угодно, но у вас не было легких путей понять и быть уверенным, что именно.Все это изменилось в MySQL 5.7, который добавил инструментарий для отслеживания памяти в Performance Schema, а в MySQL 8.0 этот инструментарий стал включен по умолчанию, поэтому вы можете получить эти данные практически с любого работающего инстанса.Если вы ищете сведения об использовании текущей памяти, схема Sys предоставляет фантастический набор сведений:
mysql> select event_name,current_alloc from sys.memory_global_by_current_bytes limit 10;
+---------------------------------------------------------------+---------------+
| event_name | current_alloc |
+---------------------------------------------------------------+---------------+
| memory/innodb/buf_buf_pool | 262.12 MiB |
| memory/temptable/physical_ram | 64.00 MiB |
| memory/performance_schema/events_statements_summary_by_digest | 39.67 MiB |
| memory/sql/TABLE | 33.32 MiB |
| memory/innodb/ut0link_buf | 24.00 MiB |
| memory/innodb/lock0lock | 20.51 MiB |
| memory/innodb/memory | 17.79 MiB |
| memory/innodb/buf0dblwr | 17.08 MiB |
| memory/innodb/ut0new | 16.08 MiB |
| memory/performance_schema/events_statements_history_long | 13.89 MiB |
+---------------------------------------------------------------+---------------+
10 rows in set (0.01 sec)
В этом представлении отображается текущий общий объем выделенной памяти. Вы также можете копнуть глубже, просмотрев память, выделенную соединениям с разных хостов:
mysql> select host,current_allocated from memory_by_host_by_current_bytes;
+-------------------------------+-------------------+
| host | current_allocated |
+-------------------------------+-------------------+
| localhost | 1.19 GiB |
| background | 101.28 MiB |
| li1317-164.members.linode.com | 49.61 MiB |
| li1319-234.members.linode.com | 27.90 MiB |
| li1316-24.members.linode.com | 27.00 MiB |
+-------------------------------+-------------------+
5 rows in set (0.02 sec)
Или даже проверить выделение памяти по заданному thread_id, что может быть очень полезно для диагностики транзакций или запросов, требующих большие объемы памяти:
mysql> select thread_id,user,current_allocated from memory_by_thread_by_current_bytes limit 5;
+-----------+------------------------------------+-------------------+
| thread_id | user | current_allocated |
+-----------+------------------------------------+-------------------+
| 44 | innodb/srv_worker_thread | 1.99 MiB |
| 48 | innodb/srv_worker_thread | 1.16 MiB |
| 54322 | root@localhost | 1.10 MiB |
| 46 | innodb/srv_worker_thread | 777.29 KiB |
| 43881 | app1@li1317-164.members.linode.com | 274.84 KiB |
+-----------+------------------------------------+-------------------+
5 rows in set (0.43 sec)
Изучение текущей статистики не очень полезно в рамках диагностики прошлых инцидентов или даже для ответа на вопрос, нормально ли, что конкретный объект занимает столько памяти, или это уже чрезмерные показатели. Для этого лучше подходит история, доступная для отслеживания… именно для этого и предназначена Percona Monitoring and Management (PMM).К сожалению, начиная с PMM 2.11, мы не включаем в релиз инструментарий для работы с памятью Performance Schema. Однако его довольно легко добавить с помощью пользовательских запросов (Custom Queries).Пользовательские запросы MySQL Пользовательские запросы - отличный функционал, который позволяет вам получать статистику с локального инстанса MySQL с помощью стандартных SQL-запросов и делает их доступными вместе с другими метриками, собираемыми экспортером MySQL. Это можно использовать для таблиц Performance Schema, таблиц Information Schema или даже запросов к вашей собственной схеме, чтобы раскрыть данные, которые вы считаете актуальными для вашего приложения. Для получения более подробной информации читайте нашу статью Пользовательские запросы в Percona Monitoring and Management.Вы можете установить пользовательские запросы для считывания статистики использования памяти из MySQL Performance Schema следующим образом…
cd /usr/local/percona/pmm2/collectors/custom-queries/mysql/medium-resolution
wget https://raw.githubusercontent.com/Percona-Lab/pmm-custom-queries/master/mysql/ps-memory-summary.yml
при установке дашборда мониторинга использовании памяти MySQL (MySQL Memory Usage Details dashboard) из Grafana.com. Посмотрим, что вы получите, установив этот дашборд.Во-первых, у нас есть блок, который не имеет ничего общего с информацией, которую мы получаем из Performance Schema, но дает некоторые полезные сведения для интерпретации этой информации:
Мы можем увидеть, как долго система и процесс MySQL работали, сколько памяти у системы есть и сколько доступно, всякий раз, когда происходит какая-либо агрессивная операция подкачки и т.д., и все это помогает нам узнать, когда MySQL в настоящее время использует слишком много памяти… или слишком мало. Мы можем вывести количество текущих подключений, которое является известным фактором высокого использования памяти, наряду с парой других показателей, которые могут повлиять на потребление памяти.Сводка по использованию памяти MySQL (MySQL Memory Usage Summary) показывает, сколько памяти содержат различные объекты, а также каков общий объем измеряемой памяти, выделенной процессом MySQL.
С сотнями разных мест, где может быть выделена память, даже не самые большие потребители памяти, могут аккумулировать достаточно большие накладные расходы:
Когда память выделяется хостом и пользователем, эти представления покрывают только память, которая может быть отнесена к конкретным соединениям. Но это отличный инструмент, чтобы узнать, существуют ли хосты, пользователи или приложения, которые являются значительными потребителями памяти.
Вы также можете просмотреть сведения об использовании памяти определенными учетными записями (какой-нибудь конкретный пользователь с конкретного хоста). Это все, что касается дашбордов, поскольку конкретные идентификаторы подключения (и идентификаторы потоков), как правило, меняются так быстро, что не особенно полезны в долгосрочном захвате.Возможно, вы также заметили, что я отключил из сводки пользователя pmm@localhost, поскольку похоже, что рабочая нагрузка этого пользователя вызывает ошибку в учете памяти, и сообщаются нереальные цифры (это также то, что вам следует иметь в виду, чтобы не поплатиться за слепое доверие данным, которые вы видите).
Наконец, вы можете посмотреть распределение памяти по различным подсистемам, что может быть весьма полезно для расширенного анализа, когда только глобальные топ потребители не предоставляют достаточно информации.А что думаете вы ? Это было бы для вас полезно, или вы хотели бы увидеть больше дополнительной визуализации, прежде чем мы рассмотрим возможность ее включения в Percona Monitoring and Management?
===========
Источник:
habr.com
===========
===========
Автор оригинала: Peter Zaitsev
===========Похожие новости:
- [Git, DevOps, Облачные сервисы] GitOps — плохой и злой (перевод)
- [Программирование, Big Data, Машинное обучение] Как я регулярно улучшаю точность моделей обучения с 80% до 90+% (перевод)
- [Программирование, Go] Жизнь в одну строчку (перевод)
- [SQL, Администрирование баз данных, Big Data, Data Engineering] Кто ответит за качество аналитики: QA для Хранилища Данных
- [Информационная безопасность, Python, Программирование] Побег из песочницы с Python (перевод)
- [Java] Как Spring Data Jdbc определяет, что объект новый
- [PHP, MySQL, CSS, JavaScript, HTML] RevolveR Contents Management Framework v.1.9.4.9
- [DevOps, Kubernetes] Ansible с AWS и EC2 (перевод)
- [Администрирование баз данных, Визуализация данных, Хранение данных, Разработка для Office 365, Разработка под Windows] Пользователи Excel смогут сами настраивать типы данных
- [Программирование, Scala] 5 уроков, которые я извлек для себя, продолжая осваивать ZIO (перевод)
Теги для поиска: #_mysql, #_administrirovanie_baz_dannyh (Администрирование баз данных), #_mysql, #_subd (субд), #_blog_kompanii_otus._onlajnobrazovanie (
Блог компании OTUS. Онлайн-образование
), #_mysql, #_administrirovanie_baz_dannyh (
Администрирование баз данных
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 08:54
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Эксперт OTUS - Владислав Родин приглашает всех желающих на бесплатный demo-урок по теме: "Индексы в MySQL: best practices и подводные камни". Урок был подготовлен специально для супер-интенсива «СУБД в высоконагруженных системах».А мы традиционно делимся с вами полезным переводом по теме.
mysql> select event_name,current_alloc from sys.memory_global_by_current_bytes limit 10;
+---------------------------------------------------------------+---------------+ | event_name | current_alloc | +---------------------------------------------------------------+---------------+ | memory/innodb/buf_buf_pool | 262.12 MiB | | memory/temptable/physical_ram | 64.00 MiB | | memory/performance_schema/events_statements_summary_by_digest | 39.67 MiB | | memory/sql/TABLE | 33.32 MiB | | memory/innodb/ut0link_buf | 24.00 MiB | | memory/innodb/lock0lock | 20.51 MiB | | memory/innodb/memory | 17.79 MiB | | memory/innodb/buf0dblwr | 17.08 MiB | | memory/innodb/ut0new | 16.08 MiB | | memory/performance_schema/events_statements_history_long | 13.89 MiB | +---------------------------------------------------------------+---------------+ 10 rows in set (0.01 sec) mysql> select host,current_allocated from memory_by_host_by_current_bytes;
+-------------------------------+-------------------+ | host | current_allocated | +-------------------------------+-------------------+ | localhost | 1.19 GiB | | background | 101.28 MiB | | li1317-164.members.linode.com | 49.61 MiB | | li1319-234.members.linode.com | 27.90 MiB | | li1316-24.members.linode.com | 27.00 MiB | +-------------------------------+-------------------+ 5 rows in set (0.02 sec) mysql> select thread_id,user,current_allocated from memory_by_thread_by_current_bytes limit 5;
+-----------+------------------------------------+-------------------+ | thread_id | user | current_allocated | +-----------+------------------------------------+-------------------+ | 44 | innodb/srv_worker_thread | 1.99 MiB | | 48 | innodb/srv_worker_thread | 1.16 MiB | | 54322 | root@localhost | 1.10 MiB | | 46 | innodb/srv_worker_thread | 777.29 KiB | | 43881 | app1@li1317-164.members.linode.com | 274.84 KiB | +-----------+------------------------------------+-------------------+ 5 rows in set (0.43 sec) cd /usr/local/percona/pmm2/collectors/custom-queries/mysql/medium-resolution
wget https://raw.githubusercontent.com/Percona-Lab/pmm-custom-queries/master/mysql/ps-memory-summary.yml Мы можем увидеть, как долго система и процесс MySQL работали, сколько памяти у системы есть и сколько доступно, всякий раз, когда происходит какая-либо агрессивная операция подкачки и т.д., и все это помогает нам узнать, когда MySQL в настоящее время использует слишком много памяти… или слишком мало. Мы можем вывести количество текущих подключений, которое является известным фактором высокого использования памяти, наряду с парой других показателей, которые могут повлиять на потребление памяти.Сводка по использованию памяти MySQL (MySQL Memory Usage Summary) показывает, сколько памяти содержат различные объекты, а также каков общий объем измеряемой памяти, выделенной процессом MySQL. С сотнями разных мест, где может быть выделена память, даже не самые большие потребители памяти, могут аккумулировать достаточно большие накладные расходы: Когда память выделяется хостом и пользователем, эти представления покрывают только память, которая может быть отнесена к конкретным соединениям. Но это отличный инструмент, чтобы узнать, существуют ли хосты, пользователи или приложения, которые являются значительными потребителями памяти. Вы также можете просмотреть сведения об использовании памяти определенными учетными записями (какой-нибудь конкретный пользователь с конкретного хоста). Это все, что касается дашбордов, поскольку конкретные идентификаторы подключения (и идентификаторы потоков), как правило, меняются так быстро, что не особенно полезны в долгосрочном захвате.Возможно, вы также заметили, что я отключил из сводки пользователя pmm@localhost, поскольку похоже, что рабочая нагрузка этого пользователя вызывает ошибку в учете памяти, и сообщаются нереальные цифры (это также то, что вам следует иметь в виду, чтобы не поплатиться за слепое доверие данным, которые вы видите). Наконец, вы можете посмотреть распределение памяти по различным подсистемам, что может быть весьма полезно для расширенного анализа, когда только глобальные топ потребители не предоставляют достаточно информации.А что думаете вы ? Это было бы для вас полезно, или вы хотели бы увидеть больше дополнительной визуализации, прежде чем мы рассмотрим возможность ее включения в Percona Monitoring and Management? =========== Источник: habr.com =========== =========== Автор оригинала: Peter Zaitsev ===========Похожие новости:
Блог компании OTUS. Онлайн-образование ), #_mysql, #_administrirovanie_baz_dannyh ( Администрирование баз данных ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 08:54
Часовой пояс: UTC + 5