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

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

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

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