Отладка производительности СУБД MySQL
-
Upload
sveta-smirnova -
Category
Software
-
view
164 -
download
6
Transcript of Отладка производительности СУБД MySQL
Отладка производительности СУБД MySQLЗа полчаса
29 ноября 2016
Света Смирнова
∙ Инженер тех. поддержки MySQL∙ Автор
∙ MySQL Troubleshooting∙ JSON UDF функции∙ FILTER clause для MySQL
∙ Докладчик∙ Percona Live, OOW, Fosdem,
DevConf, ...
Света Смирнова
2
Как рассказать за полчаса?
∙ Плохо написанные запросы∙ SELECT * FROM many_columns_table
∙ Таблицы со странной структурой∙ При отладке поздно улучшать дизайн∙ Причины использовать "плохие практики"
Отладка или настройка производительности?
4
∙ Плохо написанные запросы∙ Таблицы со странной структурой
∙ Не нормализованы∙ Десятки столбцов типа "Characteristic N"
∙ При отладке поздно улучшать дизайн∙ Причины использовать "плохие практики"
Отладка или настройка производительности?
4
∙ Плохо написанные запросы∙ Таблицы со странной структурой∙ При отладке поздно улучшать дизайн
∙ Причины использовать "плохие практики"
Отладка или настройка производительности?
4
∙ Плохо написанные запросы∙ Таблицы со странной структурой∙ При отладке поздно улучшать дизайн∙ Причины использовать "плохие практики"
∙ Legacy приложение∙ Де-нормализация для ускорения SELECT-ов∙ Другие
Отладка или настройка производительности?
4
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
Запрос
С чего начать?
6
Запрос
Блокировки
С чего начать?
7
Запрос
Блокировки
Оборудование
С чего начать?
8
Запрос
БлокировкиОборудование
Запрос
9
∙ Журналы вашего приложения
∙ General query log∙ Slow query log∙ performance_schema.events_statements_*∙ Scriptable Proxies∙ Audit Plugin∙ Жалобы пользователей
Как найти медленный запрос?
10
∙ Журналы вашего приложения∙ General query log
∙ Slow query log∙ performance_schema.events_statements_*∙ Scriptable Proxies∙ Audit Plugin∙ Жалобы пользователей
Как найти медленный запрос?
10
∙ Журналы вашего приложения∙ General query log∙ Slow query log
∙ performance_schema.events_statements_*∙ Scriptable Proxies∙ Audit Plugin∙ Жалобы пользователей
Как найти медленный запрос?
10
∙ Журналы вашего приложения∙ General query log∙ Slow query log∙ performance_schema.events_statements_*
∙ Scriptable Proxies∙ Audit Plugin∙ Жалобы пользователей
Как найти медленный запрос?
10
∙ Журналы вашего приложения∙ General query log∙ Slow query log∙ performance_schema.events_statements_*∙ Scriptable Proxies
∙ Audit Plugin∙ Жалобы пользователей
Как найти медленный запрос?
10
∙ Журналы вашего приложения∙ General query log∙ Slow query log∙ performance_schema.events_statements_*∙ Scriptable Proxies∙ Audit Plugin
∙ Жалобы пользователей
Как найти медленный запрос?
10
∙ Журналы вашего приложения∙ General query log∙ Slow query log∙ performance_schema.events_statements_*∙ Scriptable Proxies∙ Audit Plugin∙ Жалобы пользователей
Как найти медленный запрос?
10
Запрос отправлен
Connection Pool: Авторизация, Caches; SQL-интерфейс; Parser
Optimizer
Storage engines
Hardware
Схема выполнения запроса
11
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
∙ EXTENDED
∙ PARTITIONS∙ FORMAT=JSON
Расширения EXPLAIN
13
∙ EXTENDED∙ PARTITIONS
∙ FORMAT=JSON
Расширения EXPLAIN
13
∙ EXTENDED∙ PARTITIONS∙ FORMAT=JSON
Расширения EXPLAIN
13
∙ I_S.OPTIMIZER_TRACE
∙ Handler_%∙ ANALYZE (Только в MariaDB)∙ PROCESSLIST∙ PERFORMANCE_SCHEMA и sys schema
∙ EVENTS_STAGES_*∙ EVENTS_STATEMENTS_*
∙ SHOW INDEX
Другие инструменты
14
∙ I_S.OPTIMIZER_TRACE∙ Handler_%
∙ ANALYZE (Только в MariaDB)∙ PROCESSLIST∙ PERFORMANCE_SCHEMA и sys schema
∙ EVENTS_STAGES_*∙ EVENTS_STATEMENTS_*
∙ SHOW INDEX
Другие инструменты
14
∙ I_S.OPTIMIZER_TRACE∙ Handler_%∙ ANALYZE (Только в MariaDB)
∙ PROCESSLIST∙ PERFORMANCE_SCHEMA и sys schema
∙ EVENTS_STAGES_*∙ EVENTS_STATEMENTS_*
∙ SHOW INDEX
Другие инструменты
14
∙ I_S.OPTIMIZER_TRACE∙ Handler_%∙ ANALYZE (Только в MariaDB)∙ PROCESSLIST
∙ PERFORMANCE_SCHEMA и sys schema∙ EVENTS_STAGES_*∙ EVENTS_STATEMENTS_*
∙ SHOW INDEX
Другие инструменты
14
∙ I_S.OPTIMIZER_TRACE∙ Handler_%∙ ANALYZE (Только в MariaDB)∙ PROCESSLIST∙ PERFORMANCE_SCHEMA и sys schema
∙ EVENTS_STAGES_*∙ EVENTS_STATEMENTS_*
∙ SHOW INDEX
Другие инструменты
14
∙ I_S.OPTIMIZER_TRACE∙ Handler_%∙ ANALYZE (Только в MariaDB)∙ PROCESSLIST∙ PERFORMANCE_SCHEMA и sys schema
∙ EVENTS_STAGES_*∙ EVENTS_STATEMENTS_*
∙ SHOW INDEX
Другие инструменты
14
∙ ANALYZE TABLE
∙ optimizer_switch∙ optimizer_prune_level∙ optimizer_search_depth∙ Index hints: FORCE, USE, IGNORE INDEX∙ Optimizer hints
Особенности MySQL
15
∙ ANALYZE TABLE∙ optimizer_switch
∙ optimizer_prune_level∙ optimizer_search_depth∙ Index hints: FORCE, USE, IGNORE INDEX∙ Optimizer hints
Особенности MySQL
15
∙ ANALYZE TABLE∙ optimizer_switch∙ optimizer_prune_level
∙ optimizer_search_depth∙ Index hints: FORCE, USE, IGNORE INDEX∙ Optimizer hints
Особенности MySQL
15
∙ ANALYZE TABLE∙ optimizer_switch∙ optimizer_prune_level∙ optimizer_search_depth
∙ Index hints: FORCE, USE, IGNORE INDEX∙ Optimizer hints
Особенности MySQL
15
∙ ANALYZE TABLE∙ optimizer_switch∙ optimizer_prune_level∙ optimizer_search_depth∙ Index hints: FORCE, USE, IGNORE INDEX
∙ Optimizer hints
Особенности MySQL
15
∙ ANALYZE TABLE∙ optimizer_switch∙ optimizer_prune_level∙ optimizer_search_depth∙ Index hints: FORCE, USE, IGNORE INDEX∙ Optimizer hints
Особенности MySQL
15
Запрос
Блокировки
Оборудование
Блокировки
16
∙ Блокировки метаданных (MDL)
∙ Табличные блокировки∙ Устанавливаемые табличным движком
∙ Построчные∙ Могут быть любыми или может не быть
вообще
Какие виды блокировок поддерживает MySQL?
17
∙ Блокировки метаданных (MDL)∙ Табличные блокировки
∙ Устанавливаемые табличным движком∙ Построчные∙ Могут быть любыми или может не быть
вообще
Какие виды блокировок поддерживает MySQL?
17
∙ Блокировки метаданных (MDL)∙ Табличные блокировки∙ Устанавливаемые табличным движком
∙ Построчные∙ Могут быть любыми или может не быть
вообще
Какие виды блокировок поддерживает MySQL?
17
Запрос отправлен
Уровень сервера: MDL и табличные блокировки
Уровень движка: построчные; любые другие, поддерживаемые движком
Уровень оборудования: мы можем ими управлять только косвенно
Запрос: когда устанавливаются блокировки
18
∙ Уровень сервера∙ MDL: транзакционные∙ Табличные: нет
∙ Уровень движка∙ Табличные∙ Построчные∙ Любые поддерживаемые
Блокировки и транзакции
19
∙ MDL∙ Какое соединение ждёт освобождения MDL?∙ SHOW PROCESSLIST - 5.5+
I_S.PROCESSLIST - 5.5+P_S.THREADS - 5.7+P_S.METADATA_LOCKS - 5.7+
∙ Табличные∙ Построчные InnoDB
Диагностика
20
∙ 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
∙ MDL∙ Табличные
∙ Что ждёт освобождения табличнойблокировки?
SHOW PROCESSLISTI_S.PROCESSLIST - 5.1+P_S.THREADS - 5.7 +P_S.TABLE_HANDLES - 5.7+
∙ Построчные InnoDB
Диагностика
20
∙ MDL∙ Табличные
∙ Что ждёт освобождения табличнойблокировки?
∙ Что держит блокировку?P_S.TABLE_HANDLESSHOW ENGINE INNODB STATUS - Table scan и подобные операции
∙ Построчные InnoDB
Диагностика
20
∙ MDL∙ Табличные∙ Построчные InnoDB
∙ Что ждёт освобождения блокировки?∙ INNODB_LOCK_WAITS
InnoDB Monitor (SHOW ENGINE INNODB STATUS)InnoDB Lock Monitor
Диагностика
20
∙ MDL∙ Табличные∙ Построчные InnoDB
∙ Что ждёт освобождения блокировки?∙ Что держит построчную блокировку InnoDB?∙ INNODB_LOCK_WAITS
InnoDB MonitorInnoDB Lock Monitor
Диагностика
20
∙ MDL∙ Табличные∙ Построчные InnoDB
∙ Что ждёт освобождения блокировки?∙ Что держит построчную блокировку InnoDB?∙ Компактное представление∙ I_S.INNODB_LOCKS
Нет информации о том что ждёт и что держит!
Диагностика
20
∙ MDL∙ Табличные∙ Построчные InnoDB
∙ Что ждёт освобождения блокировки?∙ Что держит построчную блокировку InnoDB?∙ Компактное представление∙ Диагностика deadlock-ов
InnoDB Monitorsinnodb_print_all_deadlocks - запись в error log
Диагностика
20
ЗапросБлокировки
Оборудование
Оборудование и настройки
21
∙ Нехватка ресурсов
∙ Сервер "зависает"∙ Запросы выполняются медленно∙ OOM killer убивает процесс mysqld
∙ MySQL не использует имеющиеся ресурсы
Основные проблемы с оборудованием
22
∙ Нехватка ресурсов∙ Сервер "зависает"
∙ Запросы выполняются медленно∙ OOM killer убивает процесс mysqld
∙ MySQL не использует имеющиеся ресурсы
Основные проблемы с оборудованием
22
∙ Нехватка ресурсов∙ Сервер "зависает"∙ Запросы выполняются медленно
∙ OOM killer убивает процесс mysqld∙ MySQL не использует имеющиеся ресурсы
Основные проблемы с оборудованием
22
∙ Нехватка ресурсов∙ Сервер "зависает"∙ Запросы выполняются медленно∙ OOM killer убивает процесс mysqld
∙ MySQL не использует имеющиеся ресурсы
Основные проблемы с оборудованием
22
∙ Нехватка ресурсов∙ Сервер "зависает"∙ Запросы выполняются медленно∙ OOM killer убивает процесс mysqld
∙ MySQL не использует имеющиеся ресурсы∙ Сервер "зависает"
Основные проблемы с оборудованием
22
∙ Нехватка ресурсов∙ Сервер "зависает"∙ Запросы выполняются медленно∙ OOM killer убивает процесс mysqld
∙ MySQL не использует имеющиеся ресурсы∙ Сервер "зависает"∙ Запросы выполняются медленно
Основные проблемы с оборудованием
22
∙ Нехватка ресурсов∙ Сервер "зависает"∙ Запросы выполняются медленно∙ OOM killer убивает процесс mysqld
∙ MySQL не использует имеющиеся ресурсы∙ Сервер "зависает"∙ Запросы выполняются медленно∙ Крэши
Основные проблемы с оборудованием
22
∙ Нехватка ресурсов∙ Сервер "зависает"∙ Запросы выполняются медленно∙ OOM killer убивает процесс mysqld
∙ MySQL не использует имеющиеся ресурсы∙ Сервер "зависает"∙ Запросы выполняются медленно∙ Крэши∙ Вообще-то это хорошее и дорогое
оборудование!
Основные проблемы с оборудованием
22
∙ Нехватка ресурсов∙ Сервер "зависает"∙ Запросы выполняются медленно∙ OOM killer убивает процесс mysqld
∙ MySQL не использует имеющиеся ресурсы∙ Нагрузка в самом деле небольшая
Основные проблемы с оборудованием
22
∙ Память
∙ Процессор
∙ Диск
∙ Сеть
Какое оборудование использует MySQL?
23
∙ Глобальные буферы∙ Выделяются при старте∙ Никогда не освобождаются
∙ Буферы соединений∙ Буферы, специфические для операций∙ "Внутренние" буферы
Как сервер MySQL использует память?
24
∙ Глобальные буферы∙ Буферы соединений
∙ Выделяются для каждого соединения∙ Освобождаются при закрытии
∙ Буферы, специфические для операций∙ "Внутренние" буферы
Как сервер MySQL использует память?
24
∙ Глобальные буферы∙ Буферы соединений∙ Буферы, специфические для операций
∙ Выделяются под операциюjoin_buffer_size - для каждой таблицы в JOINtmp_table_size - для каждой временной таблицы...
∙ Освобождаются при завершении
∙ "Внутренние" буферы
Как сервер MySQL использует память?
24
∙ Глобальные буферы∙ Буферы соединений∙ Буферы, специфические для операций∙ "Внутренние" буферы
∙ Пользователь не может контролировать
Как сервер MySQL использует память?
24
∙ Только в 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
∙ Только в 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
∙ Параллельные thread-ы∙ Соединения
∙ InnoDB threads
∙ Ввод-вывод
Как MySQL использует процессор?
26
∙ Параллельные thread-ы∙ Соединения
∙ InnoDB threads
∙ Ввод-вывод
Как MySQL использует процессор?
26
∙ 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
∙ Данные в таблицах
∙ Файлы журналов∙ Binary∙ Движка
InnoDB Redo Log Files
∙ General, Audit∙ Временные таблицы, не помещающиеся в
память
Что пишется на диск?
28
∙ Данные в таблицах∙ Файлы журналов
∙ Binary∙ Движка
InnoDB Redo Log Files
∙ General, Audit
∙ Временные таблицы, не помещающиеся впамять
Что пишется на диск?
28
∙ Данные в таблицах∙ Файлы журналов
∙ Binary∙ Движка
InnoDB Redo Log Files
∙ General, Audit∙ Временные таблицы, не помещающиеся в
память
Что пишется на диск?
28
∙ Временные таблицы и файлы∙ Created_tmp_disk_tables∙ Created_tmp_files
∙ Данные∙ Открытые файлы и таблицы∙ InnoDB ввод-вывод
Диагностика IO: status-переменные
29
∙ Временные таблицы и файлы∙ Данные
∙ Binlog_[stmt_]cache_disk_use∙ Bytes_[received|sent]∙ Handler_write
∙ Открытые файлы и таблицы∙ InnoDB ввод-вывод
Диагностика IO: status-переменные
29
∙ Временные таблицы и файлы∙ Данные∙ Открытые файлы и таблицы
∙ Open[ed]_files∙ Open[ed]_tables∙ Open[ed]_table_definitions
∙ InnoDB ввод-вывод
Диагностика IO: status-переменные
29
∙ Временные таблицы и файлы∙ Данные∙ Открытые файлы и таблицы∙ InnoDB ввод-вывод
∙ Innodb_..._fsyncs∙ Innodb_..._reads∙ Innodb_..._writes∙ Innodb_..._written
Диагностика IO: status-переменные
29
∙ 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
∙ 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
∙ file_instances∙ table_handles∙ events_statements_*,
prepared_statements_instances∙ CREATED_TMP_DISK_TABLES
Диагностика IO: Performance Schema
30
∙ Сообщения между клиентом и сервером∙ Обычный клиент
∙ Приложение∙ Replication IO thread∙ Трафик между нодами PXC
Как MySQL использует сеть?
31
∙ Сообщения между клиентом и сервером∙ Обычный клиент∙ Приложение
∙ Replication IO thread∙ Трафик между нодами PXC
Как MySQL использует сеть?
31
∙ Сообщения между клиентом и сервером∙ Обычный клиент∙ Приложение∙ Replication IO thread
∙ Трафик между нодами PXC
Как MySQL использует сеть?
31
∙ Сообщения между клиентом и сервером∙ Обычный клиент∙ Приложение∙ Replication IO thread∙ Трафик между нодами PXC
Как MySQL использует сеть?
31
∙ –log-warnings=2∙ ∙ Не так много информации как хочется
∙ Обрывы соединений
Встроенная диагностика сети
32
∙ –log-warnings=2∙ Status-переменные
∙ Aborted_clients∙ Aborted_connects
Встроенная диагностика сети
32
∙ Таблицы 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
∙ Таблицы 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
∙ Таблицы accounts, users, hosts∙ Connection attributes∙ Host Cache
∙ Содержимое DNS кэша∙ Ошибки: Name Server, соединений,
авторизации, max_connect_errors,max_user_errors и т.д.
Диагностика в Performance Schema
33
∙ Глобальные∙ Контролируют параметры, необходимые для
всего сервераРазмещение файлов: datadir и т.п.Совместно используемые буфераДругие
∙ Сессионные∙ Контролируют параметры, имеющие
отношение к открытой сессии∙ MySQL option tables
Системные переменные: сфера действия
34
∙ Глобальные∙ Контролируют параметры, необходимые для
всего сервераРазмещение файлов: datadir и т.п.Совместно используемые буфераДругие
∙ Сессионные∙ Контролируют параметры, имеющие
отношение к открытой сессии
∙ MySQL option tables
Системные переменные: сфера действия
34
∙ Глобальные∙ Контролируют параметры, необходимые для
всего сервераРазмещение файлов: datadir и т.п.Совместно используемые буфераДругие
∙ Сессионные∙ Контролируют параметры, имеющие
отношение к открытой сессии∙ MySQL option tables
Системные переменные: сфера действия
34
Итоги
∙ Тестируйте!∙ Отладку можно начинать с любого места
∙ Медленные запросы∙ Блокировки∙ Настройки∙ Оборудование
∙ Итерации!
Итоги
36
∙ Медленные запросы∙ EXPLAIN Syntax∙ EXPLAIN FORMAT=JSON is Cool!∙ Дополнительные материалы к семинару∙ Optimizer Hints∙ Custom Hint Plugin∙ Troubleshooting Slow Queries webinar
∙ Блокировки∙ Оборудование∙ Настройки∙ Обо всём
Больше информации
37
∙ Медленные запросы∙ Блокировки
∙ InnoDB Locking Explained With Stick Figures∙ InnoDB блокировки в официальном
руководстве∙ Типы блокировок InnoDB∙ Разбираемся с блокировками в MySQL Server∙ Troubleshooting Locking Issues webinar
∙ Оборудование∙ Настройки∙ Обо всём
Больше информации
37
∙ Медленные запросы∙ Блокировки∙ Оборудование
∙ Linux Performance by Brendan D. Gregg∙ Memory Summary tables in Performance Schema∙ Troubleshooting hardware resource usage webinar
∙ Настройки∙ Обо всём
Больше информации
37
∙ Медленные запросы∙ Блокировки∙ Оборудование∙ Настройки
∙ MySQL Option Tables∙ List of variables introduced in Percona Server∙ Galera Cluster System Variables∙ Troubleshooting configuration issues webinar
∙ Обо всём
Больше информации
37
∙ Медленные запросы∙ Блокировки∙ Оборудование∙ Настройки∙ Обо всём
∙ КнигиMySQL TrouleshootingHigh Performance MySQL
∙ БлогиPlanet MySQLPercona Data Performance Blog
Больше информации
37
???
Место для ваших вопросов
38
http://www.slideshare.net/SvetaSmirnova
https://twitter.com/svetsmirnova
https://github.com/svetasmirnova
Спасибо!
39
DATABASE PERFORMANCEMATTERS