Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Мониторинг и отладка MySQL
Максимум информации при минимальных потерях
6 июня 2017 года
Света Смирнова
MySQL Troubleshooting
Expert
Света Смирнова
2
∙Введение: конфликт желаний и возможностей
∙Почему мониторинг - это дорого?
∙Как найти "золотую середину"?
∙Включаем по тр...
Введение: конфликт желаний и возможностей
∙ При возникновения проблемы нам нужно
Желания
5
∙ При возникновения проблемы нам нужно
∙
Kак можно больше информации
Желания
5
∙ При возникновения проблемы нам нужно
∙
Kак можно больше информации
∙ Для диагностики конкретного случая
Желания
5
∙ При возникновения проблемы нам нужно
∙
Kак можно больше информации
∙ Для диагностики конкретного случая
∙ Сайт не должен...
∙ Почти любой мониторинг - это дорого
Возможности
6
∙ Почти любой мониторинг - это дорого
∙ Стоит задуматься о
∙
Памяти
∙ Месте на диске
∙ Процессорном времени
∙ Всём сразу
В...
∙
Всё включено:
general-log
innodb-monitor-enable=all
innodb-print-all-deadlocks=1
innodb-status-file=1
innodb-status-outp...
∙
Выключено по максимуму:
general-log=0
innodb-monitor-disable=all
innodb-print-all-deadlocks=0
innodb-status-file=0
innod...
∙ Instruments: "счётчики"
∙ Блокировки
∙
Временные таблицы
∙ Потраченное время
∙ ...
Тестируем: Performance Schema
9
∙ Instruments: "счётчики"
∙ Consumers
∙ Таблицы, хранящие данные
∙
В памяти
∙ Размер настраивается
Тестируем: Performance ...
∙ Instruments: "счётчики"
∙ Consumers
∙ Instruments и Consumers
∙ Можно включать по требованию
Тестируем: Performance Sche...
∙ 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‘
d...
Диагностика Выключена
11
Диагностика Включена
12
Только Performance Schema
13
Performance Schema: умолчания, MDL и Память
14
Почему мониторинг - это дорого?
∙ General или binary query log может занять
всё свободное место на диске
Логи требуют дискового пространства
16
∙ General или binary query log может занять
всё свободное место на диске
∙
Что делать при нагрузке 40GB/час только на
запи...
∙ General или binary query log может занять
всё свободное место на диске
∙
Что делать при нагрузке 40GB/час только на
запи...
∙ Performance Schema
∙
Требует выделенной памяти
Память
17
∙ Performance Schema
∙
Требует выделенной памяти
∙ Память выделяется
5.7: При первом использовании
5.6: При старте
Не осво...
∙ Performance Schema
∙
Требует выделенной памяти
∙ Память выделяется
Не освобождается
∙ Размер таблиц history ограничен
Па...
∙ Performance Schema
∙
Требует выделенной памяти
∙ Память выделяется
Не освобождается
∙ Размер таблиц history ограничен
∙ ...
∙ Performance Schema
∙
Требует выделенной памяти
∙ Память выделяется
Не освобождается
∙ Размер таблиц history ограничен
∙ ...
∙ Performance Schema
∙
Требует выделенной памяти
∙ Память выделяется
Не освобождается
∙ Размер таблиц history ограничен
∙ ...
∙ Performance Schema
∙
Работает за счёт кода, срабатывающего при
каждом вызове исследуемой функции
CPU usage
18
∙ Performance Schema
∙
Работает за счёт кода, срабатывающего при
каждом вызове исследуемой функции
∙ Каждый анализируемый ...
∙ Performance Schema
∙
Работает за счёт кода, срабатывающего при
каждом вызове исследуемой функции
∙ Каждый анализируемый ...
∙ 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
ис...
∙ 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
Приложения с г...
∙
Как правило используют те же инструменты
∙
STATUS Variables
∙ MySQL и системные логи
∙ Performance Schema
∙
Имеют те же ...
Как найти "золотую середину"?
Нельзя взять и запуститься без логов вообще!
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 уже включена
Кое-ч...
∙ General, slow query log файлы
∙ InnoDB Monitors
∙ Consumers в Performance Schema
∙ Performance Schema уже включена
∙ Dat...
Включаем по требованию
∙ 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_...
∙ Таблицы в P_S: statements и stages
∙ Slow query log
# Time: 170429 4:54:55
# User@Host: rit[rit] @ sveta.ritfest.ru [192...
∙ Query Analytics в PMM
Оптимизация запросов: графические
31
∙ Query Analytics в PMM
∙ Advice for SQL in Solarwinds
∙ Query Analyzer (QUAN) в MEM
∙
Queries in VividCortex
∙
Другие
Опт...
∙
InnoDB Monitors
Оптимизация приложения в целом
32
∙
InnoDB Monitors
∙
Performance Schema
Оптимизация приложения в целом
32
∙
InnoDB Monitors
∙
Performance Schema
∙ Сбор данных при необходимости
∙ Запущенные вручную
SHOW
SELECT ... FROM INFORMATI...
∙
InnoDB Monitors
∙
Performance Schema
∙ Сбор данных при необходимости
∙ Запущенные вручную
SHOW
SELECT ... FROM INFORMATI...
∙ Оптимизация
∙
Запросов
∙ Приложения в целом
∙ Блокировки
В зависимости от задачи
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
∙
Только команды, изменяющие данные
∙ Крэш может быть вызван и S...
∙ Оптимизация
∙
Запросов
∙ Приложения в целом
∙ Блокировки
∙ Крэши
∙ Неожиданное поведение
В зависимости от задачи
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
∙
VividCo...
???
Время вопросов
43
http://www.slideshare.net/SvetaSmirnova
https://twitter.com/svetsmirnova
https://github.com/svetasmirnova
Спасибо!
44
Upcoming SlideShare
Loading in …5
×

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

226 views

Published on

РИТ++ 2017, Backend Conf
Зал Сан-Паулу, 6 июня, 17:00

Тезисы:
http://backendconf.ru/2017/abstracts/2777.html

В сложной ситуации хорошо иметь под рукой детали: сообщения об ошибках, статистику времени выполнения запросов, данные о производительности операционной системы и железа. Много деталей! Современные версии MySQL позволяют собрать информацию практически обо всём. Однако любой включённый мониторинг имеет свою цену: производительность. Именно поэтому универсального решения "всё включено", подходящего для любого MySQL-приложения, не существует. Даже при использовании инструментов с графическим интерфейсом у вас всегда есть выбор: что отслеживать и что нет.

В докладе я хочу обсудить, какие опции должны быть включены всегда, какие опциональны и при каких обстоятельствах их включать. Мы рассмотрим встроенные возможности MySQL, Percona-серверов и внешние решения.

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Мониторинг и отладка MySQL Максимум информации при минимальных потерях 6 июня 2017 года Света Смирнова
  2. 2. MySQL Troubleshooting Expert Света Смирнова 2
  3. 3. ∙Введение: конфликт желаний и возможностей ∙Почему мониторинг - это дорого? ∙Как найти "золотую середину"? ∙Включаем по требованию ∙Итоги Содержание 3
  4. 4. Введение: конфликт желаний и возможностей
  5. 5. ∙ При возникновения проблемы нам нужно Желания 5
  6. 6. ∙ При возникновения проблемы нам нужно ∙ Kак можно больше информации Желания 5
  7. 7. ∙ При возникновения проблемы нам нужно ∙ Kак можно больше информации ∙ Для диагностики конкретного случая Желания 5
  8. 8. ∙ При возникновения проблемы нам нужно ∙ Kак можно больше информации ∙ Для диагностики конкретного случая ∙ Сайт не должен замедлиться ни на наносекунду Желания 5
  9. 9. ∙ Почти любой мониторинг - это дорого Возможности 6
  10. 10. ∙ Почти любой мониторинг - это дорого ∙ Стоит задуматься о ∙ Памяти ∙ Месте на диске ∙ Процессорном времени ∙ Всём сразу Возможности 6
  11. 11. ∙ Всё включено: 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
  12. 12. ∙ Выключено по максимуму: 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
  13. 13. ∙ Instruments: "счётчики" ∙ Блокировки ∙ Временные таблицы ∙ Потраченное время ∙ ... Тестируем: Performance Schema 9
  14. 14. ∙ Instruments: "счётчики" ∙ Consumers ∙ Таблицы, хранящие данные ∙ В памяти ∙ Размер настраивается Тестируем: Performance Schema 9
  15. 15. ∙ Instruments: "счётчики" ∙ Consumers ∙ Instruments и Consumers ∙ Можно включать по требованию Тестируем: Performance Schema 9
  16. 16. ∙ 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
  17. 17. Диагностика Выключена 11
  18. 18. Диагностика Включена 12
  19. 19. Только Performance Schema 13
  20. 20. Performance Schema: умолчания, MDL и Память 14
  21. 21. Почему мониторинг - это дорого?
  22. 22. ∙ General или binary query log может занять всё свободное место на диске Логи требуют дискового пространства 16
  23. 23. ∙ General или binary query log может занять всё свободное место на диске ∙ Что делать при нагрузке 40GB/час только на запись? Логи требуют дискового пространства 16
  24. 24. ∙ General или binary query log может занять всё свободное место на диске ∙ Что делать при нагрузке 40GB/час только на запись? ∙ Rotate policy Логи требуют дискового пространства 16
  25. 25. ∙ Performance Schema ∙ Требует выделенной памяти Память 17
  26. 26. ∙ Performance Schema ∙ Требует выделенной памяти ∙ Память выделяется 5.7: При первом использовании 5.6: При старте Не освобождается Память 17
  27. 27. ∙ Performance Schema ∙ Требует выделенной памяти ∙ Память выделяется Не освобождается ∙ Размер таблиц history ограничен Память 17
  28. 28. ∙ Performance Schema ∙ Требует выделенной памяти ∙ Память выделяется Не освобождается ∙ Размер таблиц history ограничен ∙ Information Schema Память 17
  29. 29. ∙ Performance Schema ∙ Требует выделенной памяти ∙ Память выделяется Не освобождается ∙ Размер таблиц history ограничен ∙ Information Schema ∙ Некоторые запросы требуют чересчур много Память 17
  30. 30. ∙ Performance Schema ∙ Требует выделенной памяти ∙ Память выделяется Не освобождается ∙ Размер таблиц history ограничен ∙ Information Schema ∙ Некоторые запросы требуют чересчур много ∙ bug #72322 Исправлен в 5.5.44, 5.6.25, 5.7.8, 8.0 Обновитесь! Память 17
  31. 31. ∙ Performance Schema ∙ Работает за счёт кода, срабатывающего при каждом вызове исследуемой функции CPU usage 18
  32. 32. ∙ Performance Schema ∙ Работает за счёт кода, срабатывающего при каждом вызове исследуемой функции ∙ Каждый анализируемый участок кода вызывает срабатывание ещё одного вызова CPU usage 18
  33. 33. ∙ Performance Schema ∙ Работает за счёт кода, срабатывающего при каждом вызове исследуемой функции ∙ Каждый анализируемый участок кода вызывает срабатывание ещё одного вызова ∙ Binary log ∙ при использовании sync_binlog добавляются дополнительные вызовы fsync CPU usage 18
  34. 34. ∙ ProxySQL и другие proxy ∙ Дополнительный слой Сеть 19
  35. 35. ∙ SHOW SLAVE STATUS ∙ 5.6: SHOW SLAVE STATUS NONBLOCKING Только Percona Server! ∙ WL #6402 в 5.7 Внутренние блокировки 20
  36. 36. ∙ SHOW SLAVE STATUS ∙ SHOW [GLOBAL] STATUS ∙ Производительность замедляется при параллельном использовании ∙ Bug #42930 исправлен в 5.7.0 Обновляйтесь! Внутренние блокировки 20
  37. 37. ∙ SHOW SLAVE STATUS ∙ SHOW [GLOBAL] STATUS ∙ Information Schema Внутренние блокировки 20
  38. 38. ∙ SHOW SLAVE STATUS ∙ SHOW [GLOBAL] STATUS ∙ Information Schema ∙ Binary log Внутренние блокировки 20
  39. 39. ∙ Как правило используют те же инструменты ∙ STATUS Variables ∙ MySQL и системные логи ∙ Performance Schema Приложения с графическим интерфейсом 21
  40. 40. ∙ Как правило используют те же инструменты ∙ STATUS Variables ∙ MySQL и системные логи ∙ Performance Schema ∙ Имеют те же ограничения Приложения с графическим интерфейсом 21
  41. 41. Как найти "золотую середину"?
  42. 42. Нельзя взять и запуститься без логов вообще! 23
  43. 43. ∙ MySQL error log Начинаем с минимально неоходимого 24
  44. 44. ∙ MySQL error log ∙ Журналы операционной системы Начинаем с минимально неоходимого 24
  45. 45. ∙ General, slow query log файлы Кое-что можно включать по требованию 25
  46. 46. ∙ General, slow query log файлы ∙ InnoDB Monitors Кое-что можно включать по требованию 25
  47. 47. ∙ General, slow query log файлы ∙ InnoDB Monitors ∙ Consumers в Performance Schema ∙ Performance Schema уже включена Кое-что можно включать по требованию 25
  48. 48. ∙ General, slow query log файлы ∙ InnoDB Monitors ∙ Consumers в Performance Schema ∙ Performance Schema уже включена ∙ Data collection при помощи pt-stalk Кое-что можно включать по требованию 25
  49. 49. Включаем по требованию
  50. 50. ∙ General query/Audit log Динамически 27
  51. 51. ∙ General query/Audit log ∙ Slow query log Динамически 27
  52. 52. ∙ General query/Audit log ∙ Slow query log ∙ InnoDB Monitors Динамически 27
  53. 53. ∙ General query/Audit log ∙ Slow query log ∙ InnoDB Monitors ∙ Performance Schema instruments и consumers Динамически 27
  54. 54. ∙ Error log Требуется перезапуск 28
  55. 55. ∙ Error log ∙ Binary log Требуется перезапуск 28
  56. 56. ∙ Error log ∙ Binary log ∙ Performance Schema Требуется перезапуск 28
  57. 57. ∙ Оптимизация В зависимости от задачи 29
  58. 58. ∙ Таблицы в 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
  59. 59. ∙ Таблицы в 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
  60. 60. ∙ Query Analytics в PMM Оптимизация запросов: графические 31
  61. 61. ∙ Query Analytics в PMM ∙ Advice for SQL in Solarwinds ∙ Query Analyzer (QUAN) в MEM ∙ Queries in VividCortex ∙ Другие Оптимизация запросов: графические 31
  62. 62. ∙ InnoDB Monitors Оптимизация приложения в целом 32
  63. 63. ∙ InnoDB Monitors ∙ Performance Schema Оптимизация приложения в целом 32
  64. 64. ∙ InnoDB Monitors ∙ Performance Schema ∙ Сбор данных при необходимости ∙ Запущенные вручную SHOW SELECT ... FROM INFORMATION_SCHEMA ∙ pt-stalk Оптимизация приложения в целом 32
  65. 65. ∙ InnoDB Monitors ∙ Performance Schema ∙ Сбор данных при необходимости ∙ Запущенные вручную SHOW SELECT ... FROM INFORMATION_SCHEMA ∙ pt-stalk ∙ Графические ∙ OpenSource: PMM ∙ Коммерческие Оптимизация приложения в целом 32
  66. 66. ∙ Оптимизация ∙ Запросов ∙ Приложения в целом ∙ Блокировки В зависимости от задачи 33
  67. 67. ∙ P_S MDL tables Блокировки 34
  68. 68. ∙ P_S MDL tables ∙ InnoDB Monitors Блокировки 34
  69. 69. ∙ P_S MDL tables ∙ InnoDB Monitors ∙ innodb_print_all_deadlocks Блокировки 34
  70. 70. ∙ Оптимизация ∙ Запросов ∙ Приложения в целом ∙ Блокировки ∙ Крэши В зависимости от задачи 35
  71. 71. ∙ Core dumps Крэши 36
  72. 72. ∙ Core dumps ∙ General query log Крэши 36
  73. 73. ∙ Core dumps ∙ General query log ∙ Audit log Крэши 36
  74. 74. ∙ Core dumps ∙ General query log ∙ Audit log ∙ Binary log ∙ Только команды, изменяющие данные ∙ Крэш может быть вызван и SELECT-ом Крэши 36
  75. 75. ∙ Оптимизация ∙ Запросов ∙ Приложения в целом ∙ Блокировки ∙ Крэши ∙ Неожиданное поведение В зависимости от задачи 37
  76. 76. ∙ General query log Неожиданное поведение 38
  77. 77. ∙ General query log ∙ Binary log ∙ Только для непредвиденных данных в базе Неожиданное поведение 38
  78. 78. Итоги
  79. 79. ∙ MySQL error log ∙ Системные логи Всегда включено 40
  80. 80. ∙ P_S ∙ InnoDB Monitors ∙ General, slow, binary log Включаем по требованию 41
  81. 81. ∙ mysqld-option-tables.html ∙ Percona Toolkit ∙ PMM ∙ MySQL Enterprise Monitor ∙ Interactive Demo for SolarWinds ∙ VividCortex ∙ MONYOG Дополнительная информация 42
  82. 82. ??? Время вопросов 43
  83. 83. http://www.slideshare.net/SvetaSmirnova https://twitter.com/svetsmirnova https://github.com/svetasmirnova Спасибо! 44

×