Top Banner
Отладка производительности СУБД MySQL За полчаса 29 ноября 2016 Света Смирнова
102

Отладка производительности СУБД MySQL

Feb 08, 2017

Download

Software

Sveta Smirnova
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Отладка производительности СУБД MySQL

Отладка производительности СУБД MySQLЗа полчаса

29 ноября 2016

Света Смирнова

Page 2: Отладка производительности СУБД MySQL

∙ Инженер тех. поддержки MySQL∙ Автор

∙ MySQL Troubleshooting∙ JSON UDF функции∙ FILTER clause для MySQL

∙ Докладчик∙ Percona Live, OOW, Fosdem,

DevConf, ...

Света Смирнова

2

Page 3: Отладка производительности СУБД MySQL

Как рассказать за полчаса?

Page 4: Отладка производительности СУБД MySQL

∙ Плохо написанные запросы∙ SELECT * FROM many_columns_table

∙ Таблицы со странной структурой∙ При отладке поздно улучшать дизайн∙ Причины использовать "плохие практики"

Отладка или настройка производительности?

4

Page 5: Отладка производительности СУБД MySQL

∙ Плохо написанные запросы∙ Таблицы со странной структурой

∙ Не нормализованы∙ Десятки столбцов типа "Characteristic N"

∙ При отладке поздно улучшать дизайн∙ Причины использовать "плохие практики"

Отладка или настройка производительности?

4

Page 6: Отладка производительности СУБД MySQL

∙ Плохо написанные запросы∙ Таблицы со странной структурой∙ При отладке поздно улучшать дизайн

∙ Причины использовать "плохие практики"

Отладка или настройка производительности?

4

Page 7: Отладка производительности СУБД MySQL

∙ Плохо написанные запросы∙ Таблицы со странной структурой∙ При отладке поздно улучшать дизайн∙ Причины использовать "плохие практики"

∙ Legacy приложение∙ Де-нормализация для ускорения SELECT-ов∙ Другие

Отладка или настройка производительности?

4

Page 8: Отладка производительности СУБД MySQL

Connectors: C, JDBC, ODBC, Python, ...

Connection Pool: Authentication, Caches

SQL interface

Parser

Optimizer

Caches and Buffers:Global

Engine-specific

Storage engines: InnoDB, TokuDB, ...

File system: Data, Index, logs, other files

∙ Коннекторы∙ Оптимизатор∙ Кэш и буферы∙ Управление∙ Табличные движки∙ Файловая система

∙ Журналы∙ Данные

Необходимое про архитектуру MySQL

5

Page 9: Отладка производительности СУБД MySQL

Запрос

С чего начать?

6

Page 10: Отладка производительности СУБД MySQL

Запрос

Блокировки

С чего начать?

7

Page 11: Отладка производительности СУБД MySQL

Запрос

Блокировки

Оборудование

С чего начать?

8

Page 12: Отладка производительности СУБД MySQL

Запрос

БлокировкиОборудование

Запрос

9

Page 13: Отладка производительности СУБД MySQL

∙ Журналы вашего приложения

∙ General query log∙ Slow query log∙ performance_schema.events_statements_*∙ Scriptable Proxies∙ Audit Plugin∙ Жалобы пользователей

Как найти медленный запрос?

10

Page 14: Отладка производительности СУБД MySQL

∙ Журналы вашего приложения∙ General query log

∙ Slow query log∙ performance_schema.events_statements_*∙ Scriptable Proxies∙ Audit Plugin∙ Жалобы пользователей

Как найти медленный запрос?

10

Page 15: Отладка производительности СУБД MySQL

∙ Журналы вашего приложения∙ General query log∙ Slow query log

∙ performance_schema.events_statements_*∙ Scriptable Proxies∙ Audit Plugin∙ Жалобы пользователей

Как найти медленный запрос?

10

Page 16: Отладка производительности СУБД MySQL

∙ Журналы вашего приложения∙ General query log∙ Slow query log∙ performance_schema.events_statements_*

∙ Scriptable Proxies∙ Audit Plugin∙ Жалобы пользователей

Как найти медленный запрос?

10

Page 17: Отладка производительности СУБД MySQL

∙ Журналы вашего приложения∙ General query log∙ Slow query log∙ performance_schema.events_statements_*∙ Scriptable Proxies

∙ Audit Plugin∙ Жалобы пользователей

Как найти медленный запрос?

10

Page 18: Отладка производительности СУБД MySQL

∙ Журналы вашего приложения∙ General query log∙ Slow query log∙ performance_schema.events_statements_*∙ Scriptable Proxies∙ Audit Plugin

∙ Жалобы пользователей

Как найти медленный запрос?

10

Page 19: Отладка производительности СУБД MySQL

∙ Журналы вашего приложения∙ General query log∙ Slow query log∙ performance_schema.events_statements_*∙ Scriptable Proxies∙ Audit Plugin∙ Жалобы пользователей

Как найти медленный запрос?

10

Page 20: Отладка производительности СУБД MySQL

Запрос отправлен

Connection Pool: Авторизация, Caches; SQL-интерфейс; Parser

Optimizer

Storage engines

Hardware

Схема выполнения запроса

11

Page 21: Отладка производительности СУБД MySQL

mysql> explain extended select * from t1 join t2 where t1.int_key=1;+----+-------------+-------+-------+---------------+---------+---------+-------+------+------+------------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | f... | Extra |+----+-------------+-------+-------+---------------+---------+---------+-------+------+------+------------------+| 1 | SIMPLE | t1 | ref | int_key,ik | int_key | 5 | const | 4 | 100. | NULL || 1 | SIMPLE | t2 | index | NULL | pk | 9 | NULL | 6 | 100. | Using index; |

Using join buffer |(Block Nested Loop) |

+----+-------------+-------+-------+---------------+---------+---------+-------+------+------+------------------+2 rows in set, 1 warning (0.00 sec)

Note (Code 1003): /* select#1 */ select ‘test‘.‘t1‘.‘pk‘ AS ‘pk‘,‘test‘.‘t1‘.‘int_key‘ AS ‘int_key‘,‘test‘.‘t2‘.‘pk‘AS ‘pk‘,‘test‘.‘t2‘.‘int_key‘ AS ‘int_key‘ from ‘test‘.‘t1‘ join ‘test‘.‘t2‘ where (‘test‘.‘t1‘.‘int_key‘ = 1)

Номер запроса

Тип запроса

Таблицы, для которых выведена информация

Как данные выбираются

Возможные ключи

Использованный ключ

Длина ключа

Какие строки сравнивались с ключом

Сколько строк просмотрено

% отфильтрованных строкrows x filtered / 100 — строки,

которые будут объединены с другой таблицей

Дополнительная информация

Таблица, для которой выведена информация Сколько строк должно быть просмотреноЗдесь 4*6 = 24

Оптимизированный запрос

MySQL EXPLAIN: общее представление

12

Page 22: Отладка производительности СУБД MySQL

∙ EXTENDED

∙ PARTITIONS∙ FORMAT=JSON

Расширения EXPLAIN

13

Page 23: Отладка производительности СУБД MySQL

∙ EXTENDED∙ PARTITIONS

∙ FORMAT=JSON

Расширения EXPLAIN

13

Page 24: Отладка производительности СУБД MySQL

∙ EXTENDED∙ PARTITIONS∙ FORMAT=JSON

Расширения EXPLAIN

13

Page 25: Отладка производительности СУБД MySQL

∙ I_S.OPTIMIZER_TRACE

∙ Handler_%∙ ANALYZE (Только в MariaDB)∙ PROCESSLIST∙ PERFORMANCE_SCHEMA и sys schema

∙ EVENTS_STAGES_*∙ EVENTS_STATEMENTS_*

∙ SHOW INDEX

Другие инструменты

14

Page 26: Отладка производительности СУБД MySQL

∙ I_S.OPTIMIZER_TRACE∙ Handler_%

∙ ANALYZE (Только в MariaDB)∙ PROCESSLIST∙ PERFORMANCE_SCHEMA и sys schema

∙ EVENTS_STAGES_*∙ EVENTS_STATEMENTS_*

∙ SHOW INDEX

Другие инструменты

14

Page 27: Отладка производительности СУБД MySQL

∙ I_S.OPTIMIZER_TRACE∙ Handler_%∙ ANALYZE (Только в MariaDB)

∙ PROCESSLIST∙ PERFORMANCE_SCHEMA и sys schema

∙ EVENTS_STAGES_*∙ EVENTS_STATEMENTS_*

∙ SHOW INDEX

Другие инструменты

14

Page 28: Отладка производительности СУБД MySQL

∙ I_S.OPTIMIZER_TRACE∙ Handler_%∙ ANALYZE (Только в MariaDB)∙ PROCESSLIST

∙ PERFORMANCE_SCHEMA и sys schema∙ EVENTS_STAGES_*∙ EVENTS_STATEMENTS_*

∙ SHOW INDEX

Другие инструменты

14

Page 29: Отладка производительности СУБД MySQL

∙ I_S.OPTIMIZER_TRACE∙ Handler_%∙ ANALYZE (Только в MariaDB)∙ PROCESSLIST∙ PERFORMANCE_SCHEMA и sys schema

∙ EVENTS_STAGES_*∙ EVENTS_STATEMENTS_*

∙ SHOW INDEX

Другие инструменты

14

Page 30: Отладка производительности СУБД MySQL

∙ I_S.OPTIMIZER_TRACE∙ Handler_%∙ ANALYZE (Только в MariaDB)∙ PROCESSLIST∙ PERFORMANCE_SCHEMA и sys schema

∙ EVENTS_STAGES_*∙ EVENTS_STATEMENTS_*

∙ SHOW INDEX

Другие инструменты

14

Page 31: Отладка производительности СУБД MySQL

∙ ANALYZE TABLE

∙ optimizer_switch∙ optimizer_prune_level∙ optimizer_search_depth∙ Index hints: FORCE, USE, IGNORE INDEX∙ Optimizer hints

Особенности MySQL

15

Page 32: Отладка производительности СУБД MySQL

∙ ANALYZE TABLE∙ optimizer_switch

∙ optimizer_prune_level∙ optimizer_search_depth∙ Index hints: FORCE, USE, IGNORE INDEX∙ Optimizer hints

Особенности MySQL

15

Page 33: Отладка производительности СУБД MySQL

∙ ANALYZE TABLE∙ optimizer_switch∙ optimizer_prune_level

∙ optimizer_search_depth∙ Index hints: FORCE, USE, IGNORE INDEX∙ Optimizer hints

Особенности MySQL

15

Page 34: Отладка производительности СУБД MySQL

∙ ANALYZE TABLE∙ optimizer_switch∙ optimizer_prune_level∙ optimizer_search_depth

∙ Index hints: FORCE, USE, IGNORE INDEX∙ Optimizer hints

Особенности MySQL

15

Page 35: Отладка производительности СУБД MySQL

∙ ANALYZE TABLE∙ optimizer_switch∙ optimizer_prune_level∙ optimizer_search_depth∙ Index hints: FORCE, USE, IGNORE INDEX

∙ Optimizer hints

Особенности MySQL

15

Page 36: Отладка производительности СУБД MySQL

∙ ANALYZE TABLE∙ optimizer_switch∙ optimizer_prune_level∙ optimizer_search_depth∙ Index hints: FORCE, USE, IGNORE INDEX∙ Optimizer hints

Особенности MySQL

15

Page 37: Отладка производительности СУБД MySQL

Запрос

Блокировки

Оборудование

Блокировки

16

Page 38: Отладка производительности СУБД MySQL

∙ Блокировки метаданных (MDL)

∙ Табличные блокировки∙ Устанавливаемые табличным движком

∙ Построчные∙ Могут быть любыми или может не быть

вообще

Какие виды блокировок поддерживает MySQL?

17

Page 39: Отладка производительности СУБД MySQL

∙ Блокировки метаданных (MDL)∙ Табличные блокировки

∙ Устанавливаемые табличным движком∙ Построчные∙ Могут быть любыми или может не быть

вообще

Какие виды блокировок поддерживает MySQL?

17

Page 40: Отладка производительности СУБД MySQL

∙ Блокировки метаданных (MDL)∙ Табличные блокировки∙ Устанавливаемые табличным движком

∙ Построчные∙ Могут быть любыми или может не быть

вообще

Какие виды блокировок поддерживает MySQL?

17

Page 41: Отладка производительности СУБД MySQL

Запрос отправлен

Уровень сервера: MDL и табличные блокировки

Уровень движка: построчные; любые другие, поддерживаемые движком

Уровень оборудования: мы можем ими управлять только косвенно

Запрос: когда устанавливаются блокировки

18

Page 42: Отладка производительности СУБД MySQL

∙ Уровень сервера∙ MDL: транзакционные∙ Табличные: нет

∙ Уровень движка∙ Табличные∙ Построчные∙ Любые поддерживаемые

Блокировки и транзакции

19

Page 43: Отладка производительности СУБД MySQL

∙ MDL∙ Какое соединение ждёт освобождения MDL?∙ SHOW PROCESSLIST - 5.5+

I_S.PROCESSLIST - 5.5+P_S.THREADS - 5.7+P_S.METADATA_LOCKS - 5.7+

∙ Табличные∙ Построчные InnoDB

Диагностика

20

Page 44: Отладка производительности СУБД MySQL

∙ MDL∙ Какое соединение ждёт освобождения MDL?∙ Что держит MDL? - 5.7+

mysql> select processlist_id pid, object_type, lock_type, lock_status, source-> from metadata_locks join threads on (owner_thread_id = thread_id)-> where object_schema=’employees’ and object_name=’titles’;

+–––––+–––––––––––––+–––––––––––––––––––+–––––––––––––+–––––––––––––––––––+| pid | object_type | lock_type | lock_status | source |+–––––+–––––––––––––+–––––––––––––––––––+–––––––––––––+–––––––––––––––––––+| 2 | TABLE | SHARED_READ | GRANTED | sql_parse.cc:5937 || 3 | TABLE | SHARED_UPGRADABLE | GRANTED | sql_parse.cc:5937 || 3 | TABLE | EXCLUSIVE | PENDING | mdl.cc:3889 |+–––––+–––––––––––––+–––––––––––––––––––+–––––––––––––+–––––––––––––––––––+3 rows in set (0,00 sec)

∙ Табличные∙ Построчные InnoDB

Диагностика

20

Page 45: Отладка производительности СУБД MySQL

∙ MDL∙ Табличные

∙ Что ждёт освобождения табличнойблокировки?

SHOW PROCESSLISTI_S.PROCESSLIST - 5.1+P_S.THREADS - 5.7 +P_S.TABLE_HANDLES - 5.7+

∙ Построчные InnoDB

Диагностика

20

Page 46: Отладка производительности СУБД MySQL

∙ MDL∙ Табличные

∙ Что ждёт освобождения табличнойблокировки?

∙ Что держит блокировку?P_S.TABLE_HANDLESSHOW ENGINE INNODB STATUS - Table scan и подобные операции

∙ Построчные InnoDB

Диагностика

20

Page 47: Отладка производительности СУБД MySQL

∙ MDL∙ Табличные∙ Построчные InnoDB

∙ Что ждёт освобождения блокировки?∙ INNODB_LOCK_WAITS

InnoDB Monitor (SHOW ENGINE INNODB STATUS)InnoDB Lock Monitor

Диагностика

20

Page 48: Отладка производительности СУБД MySQL

∙ MDL∙ Табличные∙ Построчные InnoDB

∙ Что ждёт освобождения блокировки?∙ Что держит построчную блокировку InnoDB?∙ INNODB_LOCK_WAITS

InnoDB MonitorInnoDB Lock Monitor

Диагностика

20

Page 49: Отладка производительности СУБД MySQL

∙ MDL∙ Табличные∙ Построчные InnoDB

∙ Что ждёт освобождения блокировки?∙ Что держит построчную блокировку InnoDB?∙ Компактное представление∙ I_S.INNODB_LOCKS

Нет информации о том что ждёт и что держит!

Диагностика

20

Page 50: Отладка производительности СУБД MySQL

∙ MDL∙ Табличные∙ Построчные InnoDB

∙ Что ждёт освобождения блокировки?∙ Что держит построчную блокировку InnoDB?∙ Компактное представление∙ Диагностика deadlock-ов

InnoDB Monitorsinnodb_print_all_deadlocks - запись в error log

Диагностика

20

Page 51: Отладка производительности СУБД MySQL

ЗапросБлокировки

Оборудование

Оборудование и настройки

21

Page 52: Отладка производительности СУБД MySQL

∙ Нехватка ресурсов

∙ Сервер "зависает"∙ Запросы выполняются медленно∙ OOM killer убивает процесс mysqld

∙ MySQL не использует имеющиеся ресурсы

Основные проблемы с оборудованием

22

Page 53: Отладка производительности СУБД MySQL

∙ Нехватка ресурсов∙ Сервер "зависает"

∙ Запросы выполняются медленно∙ OOM killer убивает процесс mysqld

∙ MySQL не использует имеющиеся ресурсы

Основные проблемы с оборудованием

22

Page 54: Отладка производительности СУБД MySQL

∙ Нехватка ресурсов∙ Сервер "зависает"∙ Запросы выполняются медленно

∙ OOM killer убивает процесс mysqld∙ MySQL не использует имеющиеся ресурсы

Основные проблемы с оборудованием

22

Page 55: Отладка производительности СУБД MySQL

∙ Нехватка ресурсов∙ Сервер "зависает"∙ Запросы выполняются медленно∙ OOM killer убивает процесс mysqld

∙ MySQL не использует имеющиеся ресурсы

Основные проблемы с оборудованием

22

Page 56: Отладка производительности СУБД MySQL

∙ Нехватка ресурсов∙ Сервер "зависает"∙ Запросы выполняются медленно∙ OOM killer убивает процесс mysqld

∙ MySQL не использует имеющиеся ресурсы∙ Сервер "зависает"

Основные проблемы с оборудованием

22

Page 57: Отладка производительности СУБД MySQL

∙ Нехватка ресурсов∙ Сервер "зависает"∙ Запросы выполняются медленно∙ OOM killer убивает процесс mysqld

∙ MySQL не использует имеющиеся ресурсы∙ Сервер "зависает"∙ Запросы выполняются медленно

Основные проблемы с оборудованием

22

Page 58: Отладка производительности СУБД MySQL

∙ Нехватка ресурсов∙ Сервер "зависает"∙ Запросы выполняются медленно∙ OOM killer убивает процесс mysqld

∙ MySQL не использует имеющиеся ресурсы∙ Сервер "зависает"∙ Запросы выполняются медленно∙ Крэши

Основные проблемы с оборудованием

22

Page 59: Отладка производительности СУБД MySQL

∙ Нехватка ресурсов∙ Сервер "зависает"∙ Запросы выполняются медленно∙ OOM killer убивает процесс mysqld

∙ MySQL не использует имеющиеся ресурсы∙ Сервер "зависает"∙ Запросы выполняются медленно∙ Крэши∙ Вообще-то это хорошее и дорогое

оборудование!

Основные проблемы с оборудованием

22

Page 60: Отладка производительности СУБД MySQL

∙ Нехватка ресурсов∙ Сервер "зависает"∙ Запросы выполняются медленно∙ OOM killer убивает процесс mysqld

∙ MySQL не использует имеющиеся ресурсы∙ Нагрузка в самом деле небольшая

Основные проблемы с оборудованием

22

Page 61: Отладка производительности СУБД MySQL

∙ Память

∙ Процессор

∙ Диск

∙ Сеть

Какое оборудование использует MySQL?

23

Page 62: Отладка производительности СУБД MySQL

∙ Глобальные буферы∙ Выделяются при старте∙ Никогда не освобождаются

∙ Буферы соединений∙ Буферы, специфические для операций∙ "Внутренние" буферы

Как сервер MySQL использует память?

24

Page 63: Отладка производительности СУБД MySQL

∙ Глобальные буферы∙ Буферы соединений

∙ Выделяются для каждого соединения∙ Освобождаются при закрытии

∙ Буферы, специфические для операций∙ "Внутренние" буферы

Как сервер MySQL использует память?

24

Page 64: Отладка производительности СУБД MySQL

∙ Глобальные буферы∙ Буферы соединений∙ Буферы, специфические для операций

∙ Выделяются под операциюjoin_buffer_size - для каждой таблицы в JOINtmp_table_size - для каждой временной таблицы...

∙ Освобождаются при завершении

∙ "Внутренние" буферы

Как сервер MySQL использует память?

24

Page 65: Отладка производительности СУБД MySQL

∙ Глобальные буферы∙ Буферы соединений∙ Буферы, специфические для операций∙ "Внутренние" буферы

∙ Пользователь не может контролировать

Как сервер MySQL использует память?

24

Page 66: Отладка производительности СУБД MySQL

∙ Только в 5.7+!∙ Глобальная статистика

mysql> select thread_id tid, user, current_allocated ca, total_allocated-> from sys.memory_by_thread_by_current_bytes;

+–––––+–––––––––––––––––––––––––+–––––––––––––+–––––––––––––––––+| tid | user | ca | total_allocated |+–––––+–––––––––––––––––––––––––+–––––––––––––+–––––––––––––––––+| 1 | sql/main | 2.53 GiB | 2.69 GiB || 150 | [email protected] | 4.06 MiB | 32.17 MiB || 146 | sql/slave_sql | 1.31 MiB | 1.44 MiB || 145 | sql/slave_io | 1.08 MiB | 2.79 MiB |...| 60 | innodb/io_read_thread | 0 bytes | 384 bytes |+–––––+–––––––––––––––––––––––––+–––––––––––––+–––––––––––––––––+145 rows in set (2.65 sec)

Встроенная диагностика

25

Page 67: Отладка производительности СУБД MySQL

∙ Только в 5.7+!∙ Глобальная статистика∙ Статистика по thread-ам

mysql> select * from sys.memory_by_thread_by_current_bytes-> order by current_allocated desc\G

*************************** 1. row ***************************thread_id: 152

user: [email protected]_count_used: 325current_allocated: 36.00 GiBcurrent_avg_alloc: 113.43 MiBcurrent_max_alloc: 36.00 GiB

total_allocated: 37.95 GiB...

Встроенная диагностика

25

Page 68: Отладка производительности СУБД MySQL

∙ Параллельные thread-ы∙ Соединения

∙ InnoDB threads

∙ Ввод-вывод

Как MySQL использует процессор?

26

Page 69: Отладка производительности СУБД MySQL

∙ Параллельные thread-ы∙ Соединения

∙ InnoDB threads

∙ Ввод-вывод

Как MySQL использует процессор?

26

Page 70: Отладка производительности СУБД MySQL

∙ P_S.THREADS tablemysql> select thread_id, processlist_id, thread_os_id, type, name from threads;+–––––––––––+––––––––––––––––+––––––––––––––+––––––––––––+––––––––––––––––––––––––––––––––––+| thread_id | processlist_id | thread_os_id | type | name |+–––––––––––+––––––––––––––––+––––––––––––––+––––––––––––+––––––––––––––––––––––––––––––––––+| 1 | NULL | 17983 | BACKGROUND | thread/sql/main || 2 | NULL | 17984 | BACKGROUND | thread/sql/thread_timer_notifier || 3 | NULL | 17985 | BACKGROUND | thread/innodb/io_ibuf_thread |...| 23 | 2 | 18009 | FOREGROUND | thread/sql/one_connection || 24 | 3 | 18011 | FOREGROUND | thread/sql/one_connection |+–––––––––––+––––––––––––––––+––––––––––––––+––––––––––––+––––––––––––––––––––––––––––––––––+

Внутренняя диагностика CPU

27

Page 71: Отладка производительности СУБД MySQL

∙ Данные в таблицах

∙ Файлы журналов∙ Binary∙ Движка

InnoDB Redo Log Files

∙ General, Audit∙ Временные таблицы, не помещающиеся в

память

Что пишется на диск?

28

Page 72: Отладка производительности СУБД MySQL

∙ Данные в таблицах∙ Файлы журналов

∙ Binary∙ Движка

InnoDB Redo Log Files

∙ General, Audit

∙ Временные таблицы, не помещающиеся впамять

Что пишется на диск?

28

Page 73: Отладка производительности СУБД MySQL

∙ Данные в таблицах∙ Файлы журналов

∙ Binary∙ Движка

InnoDB Redo Log Files

∙ General, Audit∙ Временные таблицы, не помещающиеся в

память

Что пишется на диск?

28

Page 74: Отладка производительности СУБД MySQL

∙ Временные таблицы и файлы∙ Created_tmp_disk_tables∙ Created_tmp_files

∙ Данные∙ Открытые файлы и таблицы∙ InnoDB ввод-вывод

Диагностика IO: status-переменные

29

Page 75: Отладка производительности СУБД MySQL

∙ Временные таблицы и файлы∙ Данные

∙ Binlog_[stmt_]cache_disk_use∙ Bytes_[received|sent]∙ Handler_write

∙ Открытые файлы и таблицы∙ InnoDB ввод-вывод

Диагностика IO: status-переменные

29

Page 76: Отладка производительности СУБД MySQL

∙ Временные таблицы и файлы∙ Данные∙ Открытые файлы и таблицы

∙ Open[ed]_files∙ Open[ed]_tables∙ Open[ed]_table_definitions

∙ InnoDB ввод-вывод

Диагностика IO: status-переменные

29

Page 77: Отладка производительности СУБД MySQL

∙ Временные таблицы и файлы∙ Данные∙ Открытые файлы и таблицы∙ InnoDB ввод-вывод

∙ Innodb_..._fsyncs∙ Innodb_..._reads∙ Innodb_..._writes∙ Innodb_..._written

Диагностика IO: status-переменные

29

Page 78: Отладка производительности СУБД MySQL

∙ file_instancesmysql> select * from file_instances where OPEN_COUNT > 0\G*************************** 1. row ***************************FILE_NAME: /home/sveta/build/mysql-5.7/mysql-test/var/mysqld.1/data/ibdata1

EVENT_NAME: wait/io/file/innodb/innodb_data_fileOPEN_COUNT: 3*************************** 2. row ***************************FILE_NAME: /home/sveta/build/mysql-5.7/mysql-test/var/mysqld.1/data/ib_logfile0

EVENT_NAME: wait/io/file/innodb/innodb_log_fileOPEN_COUNT: 2*************************** 3. row ***************************FILE_NAME: /home/sveta/build/mysql-5.7/mysql-test/var/mysqld.1/data/ib_logfile1

EVENT_NAME: wait/io/file/innodb/innodb_log_fileOPEN_COUNT: 2...

∙ table_handles∙ events_statements_*,

prepared_statements_instances

Диагностика IO: Performance Schema

30

Page 79: Отладка производительности СУБД MySQL

∙ file_instances∙ table_handles

mysql> select OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME from table_handles\G*************************** 1. row ***************************

OBJECT_TYPE: TABLEOBJECT_SCHEMA: employees

OBJECT_NAME: dept_emp*************************** 2. row ***************************

OBJECT_TYPE: TABLEOBJECT_SCHEMA: employees

OBJECT_NAME: dept_emp...

∙ events_statements_*,prepared_statements_instances

Диагностика IO: Performance Schema

30

Page 80: Отладка производительности СУБД MySQL

∙ file_instances∙ table_handles∙ events_statements_*,

prepared_statements_instances∙ CREATED_TMP_DISK_TABLES

Диагностика IO: Performance Schema

30

Page 81: Отладка производительности СУБД MySQL

∙ Сообщения между клиентом и сервером∙ Обычный клиент

∙ Приложение∙ Replication IO thread∙ Трафик между нодами PXC

Как MySQL использует сеть?

31

Page 82: Отладка производительности СУБД MySQL

∙ Сообщения между клиентом и сервером∙ Обычный клиент∙ Приложение

∙ Replication IO thread∙ Трафик между нодами PXC

Как MySQL использует сеть?

31

Page 83: Отладка производительности СУБД MySQL

∙ Сообщения между клиентом и сервером∙ Обычный клиент∙ Приложение∙ Replication IO thread

∙ Трафик между нодами PXC

Как MySQL использует сеть?

31

Page 84: Отладка производительности СУБД MySQL

∙ Сообщения между клиентом и сервером∙ Обычный клиент∙ Приложение∙ Replication IO thread∙ Трафик между нодами PXC

Как MySQL использует сеть?

31

Page 85: Отладка производительности СУБД MySQL

∙ –log-warnings=2∙ ∙ Не так много информации как хочется

∙ Обрывы соединений

Встроенная диагностика сети

32

Page 86: Отладка производительности СУБД MySQL

∙ –log-warnings=2∙ Status-переменные

∙ Aborted_clients∙ Aborted_connects

Встроенная диагностика сети

32

Page 87: Отладка производительности СУБД MySQL

∙ Таблицы accounts, users, hostsmysql> select user, host, current_connections as cur,

-> total_connections as total from accounts;+––––––+–––––––––––+–––––+–––––––+| user | host | cur | total |+––––––+–––––––––––+–––––+–––––––+| foo | localhost | 0 | 3 || root | localhost | 1 | 3 || NULL | NULL | 14 | 17 |+––––––+–––––––––––+–––––+–––––––+3 rows in set (0.01 sec)

∙ Connection attributes∙ Host Cache

Диагностика в Performance Schema

33

Page 88: Отладка производительности СУБД MySQL

∙ Таблицы accounts, users, hosts∙ Connection attributes

mysql> SELECT ATTR_NAME, ATTR_VALUE FROM session_account_connect_attrs-> WHERE processlist_id != @@pseudo_thread_id;

+–––––––––––––––––+–––––––––––––––––––––––––––––––––––––––––+| ATTR_NAME | ATTR_VALUE |+–––––––––––––––––+–––––––––––––––––––––––––––––––––––––––––+| _os | Linux || _client_name | libmysql || _pid | 4729 || program_name | Troubleshooting webinars || _platform | x86_64 || session | Troubleshooting hardware resource usage || author | Sveta Smirnova || _client_version | 5.7.12 |+–––––––––––––––––+–––––––––––––––––––––––––––––––––––––––––+

∙ Host Cache

Диагностика в Performance Schema

33

Page 89: Отладка производительности СУБД MySQL

∙ Таблицы accounts, users, hosts∙ Connection attributes∙ Host Cache

∙ Содержимое DNS кэша∙ Ошибки: Name Server, соединений,

авторизации, max_connect_errors,max_user_errors и т.д.

Диагностика в Performance Schema

33

Page 90: Отладка производительности СУБД MySQL

∙ Глобальные∙ Контролируют параметры, необходимые для

всего сервераРазмещение файлов: datadir и т.п.Совместно используемые буфераДругие

∙ Сессионные∙ Контролируют параметры, имеющие

отношение к открытой сессии∙ MySQL option tables

Системные переменные: сфера действия

34

Page 91: Отладка производительности СУБД MySQL

∙ Глобальные∙ Контролируют параметры, необходимые для

всего сервераРазмещение файлов: datadir и т.п.Совместно используемые буфераДругие

∙ Сессионные∙ Контролируют параметры, имеющие

отношение к открытой сессии

∙ MySQL option tables

Системные переменные: сфера действия

34

Page 92: Отладка производительности СУБД MySQL

∙ Глобальные∙ Контролируют параметры, необходимые для

всего сервераРазмещение файлов: datadir и т.п.Совместно используемые буфераДругие

∙ Сессионные∙ Контролируют параметры, имеющие

отношение к открытой сессии∙ MySQL option tables

Системные переменные: сфера действия

34

Page 93: Отладка производительности СУБД MySQL

Итоги

Page 94: Отладка производительности СУБД MySQL

∙ Тестируйте!∙ Отладку можно начинать с любого места

∙ Медленные запросы∙ Блокировки∙ Настройки∙ Оборудование

∙ Итерации!

Итоги

36

Page 95: Отладка производительности СУБД MySQL

∙ Медленные запросы∙ EXPLAIN Syntax∙ EXPLAIN FORMAT=JSON is Cool!∙ Дополнительные материалы к семинару∙ Optimizer Hints∙ Custom Hint Plugin∙ Troubleshooting Slow Queries webinar

∙ Блокировки∙ Оборудование∙ Настройки∙ Обо всём

Больше информации

37

Page 96: Отладка производительности СУБД MySQL

∙ Медленные запросы∙ Блокировки

∙ InnoDB Locking Explained With Stick Figures∙ InnoDB блокировки в официальном

руководстве∙ Типы блокировок InnoDB∙ Разбираемся с блокировками в MySQL Server∙ Troubleshooting Locking Issues webinar

∙ Оборудование∙ Настройки∙ Обо всём

Больше информации

37

Page 97: Отладка производительности СУБД MySQL

∙ Медленные запросы∙ Блокировки∙ Оборудование

∙ Linux Performance by Brendan D. Gregg∙ Memory Summary tables in Performance Schema∙ Troubleshooting hardware resource usage webinar

∙ Настройки∙ Обо всём

Больше информации

37

Page 98: Отладка производительности СУБД MySQL

∙ Медленные запросы∙ Блокировки∙ Оборудование∙ Настройки

∙ MySQL Option Tables∙ List of variables introduced in Percona Server∙ Galera Cluster System Variables∙ Troubleshooting configuration issues webinar

∙ Обо всём

Больше информации

37

Page 99: Отладка производительности СУБД MySQL

∙ Медленные запросы∙ Блокировки∙ Оборудование∙ Настройки∙ Обо всём

∙ КнигиMySQL TrouleshootingHigh Performance MySQL

∙ БлогиPlanet MySQLPercona Data Performance Blog

Больше информации

37

Page 100: Отладка производительности СУБД MySQL

???

Место для ваших вопросов

38

Page 101: Отладка производительности СУБД MySQL

http://www.slideshare.net/SvetaSmirnova

https://twitter.com/svetsmirnova

https://github.com/svetasmirnova

Спасибо!

39

Page 102: Отладка производительности СУБД MySQL

DATABASE PERFORMANCEMATTERS