Мониторинг и отладка MySQL
Максимум информации при минимальных потерях
6 июня 2017 года
Света Смирнова
MySQL Troubleshooting
Expert
Света Смирнова
2
∙Введение: конфликт желаний и возможностей
∙Почему мониторинг - это дорого?
∙Как найти "золотую середину"?
∙Включаем по требованию
∙Итоги
Содержание
3
Введение: конфликт желаний и возможностей
∙ При возникновения проблемы нам нужно
Желания
5
∙ При возникновения проблемы нам нужно
∙
Kак можно больше информации
Желания
5
∙ При возникновения проблемы нам нужно
∙
Kак можно больше информации
∙ Для диагностики конкретного случая
Желания
5
∙ При возникновения проблемы нам нужно
∙
Kак можно больше информации
∙ Для диагностики конкретного случая
∙ Сайт не должен замедлиться ни на
наносекунду
Желания
5
∙ Почти любой мониторинг - это дорого
Возможности
6
∙ Почти любой мониторинг - это дорого
∙ Стоит задуматься о
∙
Памяти
∙ Месте на диске
∙ Процессорном времени
∙ Всём сразу
Возможности
6
∙
Всё включено:
general-log
innodb-monitor-enable=all
innodb-print-all-deadlocks=1
innodb-status-file=1
innodb-status-output=1
slow-query-log
performance-schema=1
userstat=1
thread-statistics=1
Тестируем: встроенные инструменты
7
∙
Выключено по максимуму:
general-log=0
innodb-monitor-disable=all
innodb-print-all-deadlocks=0
innodb-status-file=0
innodb-status-output=0
slow-query-log=0
performance-schema=0
userstat=0
thread-statistics=0
Тестируем: встроенные инструменты
8
∙ Instruments: "счётчики"
∙ Блокировки
∙
Временные таблицы
∙ Потраченное время
∙ ...
Тестируем: Performance Schema
9
∙ Instruments: "счётчики"
∙ Consumers
∙ Таблицы, хранящие данные
∙
В памяти
∙ Размер настраивается
Тестируем: Performance Schema
9
∙ Instruments: "счётчики"
∙ Consumers
∙ Instruments и Consumers
∙ Можно включать по требованию
Тестируем: Performance Schema
9
∙ Percona-Server-5.7.17-13
∙ Стандартный OLTP SysBench тест:
for i in ‘echo 1 2 4 8 16 32 36 64 72 128 144 256 512 1024‘
do
echo $i
LD_PRELOAD=/data/sveta/5.7.17/lib/mysql/libjemalloc.so /data/sveta/sbkk/bin/sysbench 
--test=/data/sveta/sysbench/sysbench/tests/db/oltp_prepared.lua --db-driver=mysql 
--oltp-tables-count=8 --oltp-table-size=10000000 --mysql-table-engine=$engine 
--mysql-user=msandbox --mysql-password=msandbox --mysql-socket=/tmp/mysql_sandbox5717.sock 
--num-threads=$i --max-requests=0 --mysql-db=$db --max-time=300 --percentile=0 
run >> $engine-oltp-prepared-$suffix.log
done
Тестируем: встроенные инструменты
10
Диагностика Выключена
11
Диагностика Включена
12
Только Performance Schema
13
Performance Schema: умолчания, MDL и Память
14
Почему мониторинг - это дорого?
∙ General или binary query log может занять
всё свободное место на диске
Логи требуют дискового пространства
16
∙ General или binary query log может занять
всё свободное место на диске
∙
Что делать при нагрузке 40GB/час только на
запись?
Логи требуют дискового пространства
16
∙ General или binary query log может занять
всё свободное место на диске
∙
Что делать при нагрузке 40GB/час только на
запись?
∙ Rotate policy
Логи требуют дискового пространства
16
∙ Performance Schema
∙
Требует выделенной памяти
Память
17
∙ Performance Schema
∙
Требует выделенной памяти
∙ Память выделяется
5.7: При первом использовании
5.6: При старте
Не освобождается
Память
17
∙ Performance Schema
∙
Требует выделенной памяти
∙ Память выделяется
Не освобождается
∙ Размер таблиц history ограничен
Память
17
∙ Performance Schema
∙
Требует выделенной памяти
∙ Память выделяется
Не освобождается
∙ Размер таблиц history ограничен
∙ Information Schema
Память
17
∙ Performance Schema
∙
Требует выделенной памяти
∙ Память выделяется
Не освобождается
∙ Размер таблиц history ограничен
∙ Information Schema
∙ Некоторые запросы требуют чересчур много
Память
17
∙ Performance Schema
∙
Требует выделенной памяти
∙ Память выделяется
Не освобождается
∙ Размер таблиц history ограничен
∙ Information Schema
∙ Некоторые запросы требуют чересчур много
∙
bug #72322
Исправлен в 5.5.44, 5.6.25, 5.7.8, 8.0
Обновитесь!
Память
17
∙ Performance Schema
∙
Работает за счёт кода, срабатывающего при
каждом вызове исследуемой функции
CPU usage
18
∙ Performance Schema
∙
Работает за счёт кода, срабатывающего при
каждом вызове исследуемой функции
∙ Каждый анализируемый участок кода
вызывает срабатывание ещё одного вызова
CPU usage
18
∙ Performance Schema
∙
Работает за счёт кода, срабатывающего при
каждом вызове исследуемой функции
∙ Каждый анализируемый участок кода
вызывает срабатывание ещё одного вызова
∙ Binary log
∙ при использовании sync_binlog добавляются
дополнительные вызовы fsync
CPU usage
18
∙ ProxySQL и другие proxy
∙
Дополнительный слой
Сеть
19
∙ SHOW SLAVE STATUS
∙
5.6: SHOW SLAVE STATUS NONBLOCKING
Только Percona Server!
∙ WL #6402 в 5.7
Внутренние блокировки
20
∙ SHOW SLAVE STATUS
∙ SHOW [GLOBAL] STATUS
∙ Производительность замедляется при
параллельном использовании
∙ Bug #42930
исправлен в 5.7.0
Обновляйтесь!
Внутренние блокировки
20
∙ SHOW SLAVE STATUS
∙ SHOW [GLOBAL] STATUS
∙ Information Schema
Внутренние блокировки
20
∙ SHOW SLAVE STATUS
∙ SHOW [GLOBAL] STATUS
∙ Information Schema
∙ Binary log
Внутренние блокировки
20
∙
Как правило используют те же инструменты
∙
STATUS Variables
∙ MySQL и системные логи
∙ Performance Schema
Приложения с графическим интерфейсом
21
∙
Как правило используют те же инструменты
∙
STATUS Variables
∙ MySQL и системные логи
∙ Performance Schema
∙
Имеют те же ограничения
Приложения с графическим интерфейсом
21
Как найти "золотую середину"?
Нельзя взять и запуститься без логов вообще!
23
∙ MySQL error log
Начинаем с минимально неоходимого
24
∙ MySQL error log
∙ Журналы операционной системы
Начинаем с минимально неоходимого
24
∙ General, slow query log файлы
Кое-что можно включать по требованию
25
∙ General, slow query log файлы
∙ InnoDB Monitors
Кое-что можно включать по требованию
25
∙ General, slow query log файлы
∙ InnoDB Monitors
∙ Consumers в Performance Schema
∙ Performance Schema уже включена
Кое-что можно включать по требованию
25
∙ General, slow query log файлы
∙ InnoDB Monitors
∙ Consumers в Performance Schema
∙ Performance Schema уже включена
∙ Data collection при помощи pt-stalk
Кое-что можно включать по требованию
25
Включаем по требованию
∙ General query/Audit log
Динамически
27
∙ General query/Audit log
∙ Slow query log
Динамически
27
∙ General query/Audit log
∙ Slow query log
∙ InnoDB Monitors
Динамически
27
∙ General query/Audit log
∙ Slow query log
∙ InnoDB Monitors
∙
Performance Schema instruments и consumers
Динамически
27
∙ Error log
Требуется перезапуск
28
∙ Error log
∙ Binary log
Требуется перезапуск
28
∙ Error log
∙ Binary log
∙ Performance Schema
Требуется перезапуск
28
∙ Оптимизация
В зависимости от задачи
29
∙ Таблицы в P_S: statements и stages
mysql> SELECT THREAD_ID TID, SUBSTR(SQL_TEXT, 1, 50) SQL_TEXT, ROWS_SENT RS,
-> ROWS_EXAMINED RE,CREATED_TMP_TABLES,NO_INDEX_USED,NO_GOOD_INDEX_USED
-> FROM performance_schema.events_statements_history
-> WHERE NO_INDEX_USED=1 OR NO_GOOD_INDEX_USED=1G
********************** 1. row **********************
TID: 10124
SQL_TEXT: select emp_no, first_name, last_name from employee
RS: 97750
RE: 397774
CREATED_TMP_TABLES: 0
NO_INDEX_USED: 1
NO_GOOD_INDEX_USED: 0
...
Оптимизация запросов: встроенные инструменты
30
∙ Таблицы в P_S: statements и stages
∙ Slow query log
# Time: 170429 4:54:55
# User@Host: rit[rit] @ sveta.ritfest.ru [192.168.0.4] Id: 9841
# Schema: rit Last_errno: 0 Killed: 0
# Query_time: 24.104919 Lock_time: 0.000185 Rows_sent: 1844819
Rows_examined: 1844819 Rows_affected: 0
# Bytes_sent: 322273552
SET timestamp=1493438095;
SELECT data FROM usertable WHERE YCSB_KEY = ’user100040185076507112’;
Оптимизация запросов: встроенные инструменты
30
∙ Query Analytics в PMM
Оптимизация запросов: графические
31
∙ Query Analytics в PMM
∙ Advice for SQL in Solarwinds
∙ Query Analyzer (QUAN) в MEM
∙
Queries in VividCortex
∙
Другие
Оптимизация запросов: графические
31
∙
InnoDB Monitors
Оптимизация приложения в целом
32
∙
InnoDB Monitors
∙
Performance Schema
Оптимизация приложения в целом
32
∙
InnoDB Monitors
∙
Performance Schema
∙ Сбор данных при необходимости
∙ Запущенные вручную
SHOW
SELECT ... FROM INFORMATION_SCHEMA
∙ pt-stalk
Оптимизация приложения в целом
32
∙
InnoDB Monitors
∙
Performance Schema
∙ Сбор данных при необходимости
∙ Запущенные вручную
SHOW
SELECT ... FROM INFORMATION_SCHEMA
∙ pt-stalk
∙ Графические
∙
OpenSource: PMM
∙ Коммерческие
Оптимизация приложения в целом
32
∙ Оптимизация
∙
Запросов
∙ Приложения в целом
∙ Блокировки
В зависимости от задачи
33
∙ P_S MDL tables
Блокировки
34
∙ P_S MDL tables
∙ InnoDB Monitors
Блокировки
34
∙ P_S MDL tables
∙ InnoDB Monitors
∙ innodb_print_all_deadlocks
Блокировки
34
∙ Оптимизация
∙
Запросов
∙ Приложения в целом
∙ Блокировки
∙ Крэши
В зависимости от задачи
35
∙ Core dumps
Крэши
36
∙ Core dumps
∙ General query log
Крэши
36
∙ Core dumps
∙ General query log
∙ Audit log
Крэши
36
∙ Core dumps
∙ General query log
∙ Audit log
∙ Binary log
∙
Только команды, изменяющие данные
∙ Крэш может быть вызван и SELECT-ом
Крэши
36
∙ Оптимизация
∙
Запросов
∙ Приложения в целом
∙ Блокировки
∙ Крэши
∙ Неожиданное поведение
В зависимости от задачи
37
∙ General query log
Неожиданное поведение
38
∙ General query log
∙ Binary log
∙
Только для непредвиденных данных в базе
Неожиданное поведение
38
Итоги
∙ MySQL error log
∙ Системные логи
Всегда включено
40
∙ P_S
∙ InnoDB Monitors
∙ General, slow, binary log
Включаем по требованию
41
∙ mysqld-option-tables.html
∙ Percona Toolkit
∙ PMM
∙
MySQL Enterprise Monitor
∙
Interactive Demo for SolarWinds
∙
VividCortex
∙
MONYOG
Дополнительная информация
42
???
Время вопросов
43
http://www.slideshare.net/SvetaSmirnova
https://twitter.com/svetsmirnova
https://github.com/svetasmirnova
Спасибо!
44

Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Света Смирнова (Percona)