SlideShare a Scribd company logo
<Insert Picture Here>
Введение в отладку производительности MySQL приложений
Света Смирнова
Ведущий инженер технической поддержки MySQL
Никакой рыбы!
Удочки
• Одиночный запрос
• Параллельное выполнение
– Внутренние блокировки
– Борьба за системные ресурсы
• Системные ресурсы
• Репликация
• Инструменты
– Контроль опций
– INFORMATION_SCHEMA
– PERFORMANCE_SCHEMA
– Системные утилиты
Узкое место
Как выявить узкое место
• ...
• <some code>
• Измеряем Время_Начала (операции)
• mysql_real_query(....)
• Измеряем Время_Завершения (операции)
• <some code>
• ....
•
• Нам нужно
• (Время_Завершения - Время_Начала)
С чего начать?
Отлаженные запросы —
основа высокой производительности!
Безграничные возможности: всегда тестируйте!
Настройки
• Переменные
– SET [SESSION|GLOBAL] var_name=NEW_VALUE
– Сессионные (SESSION)
– Глобальные (GLOBAL)
• Параметры командной строки
• Конфигурационные файлы
Параллельное выполнение
Итерации
Binary log, SQL thread и IO thread
Репликация и итерации
Одиночный запрос: где найти?
• При разработке приложения
• PROCESSLIST
– SHOW [FULL] PROCESSLIST
– INFORMATION_SCHEMA.PROCESSLIST
• Лог медленных запросов (slow query log)
– По требованию
– Вывод в таблицу
– mysqldumpslow
• Лог вашего приложения
• Жалобы пользователей
Одиночный запрос: что он делает?
• PERFORMANCE_SCHEMA.EVENTS_STAGES_%
• PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_%
– mysql> SELECT STMTS.SQL_TEXT, STAGES.EVENT_NAME, 
STAGES.TIMER_WAIT FROM 
PERFORMANCE_SCHEMA.EVENTS_STAGES_HISTORY_LONG STAGES JOIN 
PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_HISTORY_LONG STMTS ON 
(STMTS.EVENT_ID=STAGES.NESTING_EVENT_ID) WHERE 
CURRENT_SCHEMA='EMPLOYEES';
– +­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+­­­­­­­­­­­­­­­+
– | sql_text   | event_name                  | timer_wait    |
– +­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+­­­­­­­­­­­­­­­+
– | select co  | stage/sql/init              |     189755000 |
– | select co  | stage/sql/Opening tables    |      40828000 |
– | select co  | stage/sql/System lock       |     185069000 |
• SHOW STATUS LIKE 'Handler_%'
Одиночный запрос: почему?
• EXPLAIN
– EXPLAIN EXTENDED - всегда в 5.7+
– EXPLAIN PARTITIONS - всегда в 5.7+
– EXPLAIN FORMAT=JSON
• INFORMATION_SCHEMA.OPTIMIZER_TRACE
• SHOW INDEX
– Как чинить
• OPTIMIZE или ANALYZE TABLE
• innodb_stats_persistent
Одиночный запрос: устранение проблемы
• Переписать запрос!
• Если нельзя или не помогает:
– Index hints:
• FORCE|USE INDEX
• IGNORE INDEX
• Обязательно тестируйте все обновления!
– Настройки оптимизатора:
• optimizer_search_depth
• optimizer_prune_level
• optimizer_switch
Параллельные запросы и транзакции
• Борьба за системные ресурсы
• Виды блокировок, которые пользователь может
контролировать:
– Уровень таблицы
– Уровень строки
– Metadata
– Есть ещё постраничные, но они использовались только
одним движком
• Что пользователь контролировать может только
относительно:
– Блокировки, несвязанные непосредственно с
обрабатываемыми данными, такие как query cache,
блокировки на уровне движка и т.п.
Параллельные запросы и транзакции:
как вычислить
• Универсальное средство:
– PROCESSLIST,
PERFORMANCE_SCHEMA.EVENTS_STAGES_%
• Locked
• Waiting for *
• На уровне движка:
– SHOW ENGINE INNODB STATUS
– Таблицы INNODB_* в INFORMATION SCHEMA
• INNODB_TRX, INNODB_LOCKS, INNODB_LOCK_WAITS
• Performance Schema
– METADATA_LOCKS, TABLE_HANDLES
– EVENTS_TRANSACTIONS
5.7
Параллельные запросы и транзакции:
средства InnoDB
• Мониторы
– SHOW ENGINE INNODB STATUS
– Опция innodb­status­file
– innodb_status_output
– innodb_status_output_locks
• Больше информации о блокировках
• Всегда включайте!
• TRANSACTIONS
5.6.16
Параллельные запросы и транзакции:
средства InnoDB
• Таблицы Information Schema
– INNODB_TRX, INNODB_LOCK_WAITS
• mysql> SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, BLOCKING_TRX_ID, 
BLOCKING_LOCK_ID, TRX_QUERY FROM INNODB_TRX JOIN 
INNODB_LOCK_WAITS on (INNODB_TRX.TRX_ID = 
INNODB_LOCK_WAITS.REQUESTING_TRX_ID) WHERE TRX_STATE = 'LOCK 
WAIT'G
• ********************* 1. row *********************
• TRX_ID: C2F
• TRX_REQUESTED_LOCK_ID: C2F:0:1352:2
• BLOCKING_TRX_ID: C2C
• BLOCKING_LOCK_ID: C2C:0:1352:2
• TRX_QUERY: update titles set title='Senior Engineer'
• where title='Senior Engineer'
• 1 row in set (0.01 sec)
– INNODB_METRICS
Параллельные запросы и транзакции:
блокировки метаданных
• mysql> select OBJECT_NAME, LOCK_TYPE, LOCK_STATUS, 
OWNER_THREAD_ID from metadata_locksG
• ********************** 1. row **********************
•     OBJECT_NAME: t2
•       LOCK_TYPE: SHARED_WRITE
•     LOCK_STATUS: GRANTED
• OWNER_THREAD_ID: 20
• ...
• ********************** 5. row **********************
•     OBJECT_NAME: t2
•       LOCK_TYPE: EXCLUSIVE
•     LOCK_STATUS: PENDING
• OWNER_THREAD_ID: 21
...
Параллельные запросы и транзакции:
устранение проблем
• Краткосрочное
– Выбрать наименее важную транзакцию и убить её
• KILL <MYSQL_THREAD_ID>
• Долгосрочное
– Спланировать приложение так, чтобы конкурирующие
транзакции разнести по времени выполнения
– Избегать длинных транзакций без необходимости
– Если autocommit=0
• Использовать READ-ONLY транзакции
• Закрывать транзакции после SELECT и ALTER
Борьба за системные ресурсы
• Память
• CPU
• Диск
• Сеть
Память
• Диагностика
– free
– top
– vmstat
• Проблемы
– mysqld использует слишком мало памяти
• Буферы не настроены на высокую производительность
• Система ограничивает ресурсы, которые доступны
mysqld
– mysqld использует слишком много памяти
Диск
• Диагностика
– df
– iostat
– ls -l /proc/{PID_OF_MYSQLD}/fd
• Починка
– Параметры InnoDB
• innodb_adaptive_flushing
• innodb_doublewrite
• innodb_flush_log_at_trx_commit
• innodb_flush_method
• innodb_io_capacity
• innodb_max_dirty_pages_pct
•
– Binary log
• Formats
– ROW
– STATEMENT
– MIXED
• binlog_row_image
• sync_binlog
CPU
• Диагностика
– top
– iostat
– ps
• Параллельность и количество ядер
innodb_thread_concurrency Execution time
1 7.8164
2 4.3959
4 2.5889
8 2.6708
16 3.4669
32 3.4235
Сеть
• Важно!
– Надёжность
– Пропускная способность
– Скорость
• Диагностика
– ping
– --log-warnings=2
– tcpdump
• Послать большой (1G и больше) файл и мониторить
Репликация
• Мастер
– Медленная сеть
– Потери при записи в binary log
• Disk IO
• Блокировки
• Слэйв
– IO thread
• То же, что и у мастера
– SQL thread
• Один поток против нескольких на мастере
• Взаимодействие с другой нагрузкой на mysqld слэйва
Репликация: диагностика
• SHOW SLAVE STATUS
• Performance Schema Replication Tables
– replication_connection_status
• mysql> select SERVICE_STATE, 
RECEIVED_TRANSACTION_SET, LAST_ERROR_NUMBER from 
replication_connection_statusG
• ******************** 1. row *********************
•            SERVICE_STATE: ON
• RECEIVED_TRANSACTION_SET:
• 9fa18fb7­d6f2­11e3­bc7e­a088b4923078:1
•        LAST_ERROR_NUMBER: 0
• 1 row in set (0.00 sec)
– replication_execute_status
5.7
Ссылки
Одиночный запрос:
– http://glebshchepa.blogspot.co.uk/2012/04/optimizer-new-explain-formatjson.html
– http://www.slideshare.net/myxplain/powerful-explain-in-mysql-56
– http://www.slideshare.net/SvetaSmirnova/troubleshooting-my-sqlperformanceaddons
– http://www.slideshare.net/SvetaSmirnova/performance-schema-mysql
Параллельные запросы и транзакции:
– http://shop.oreilly.com/product/0636920021964.do
– http://planet.mysql.com/entry/?id=643406
– https://blogs.oracle.com/mysqlinnodb/entry/get_started_with_innodb_metrics
Общие
– http://dev.mysql.com/doc/refman/5.7/en/index.html
– https://blogs.oracle.com/mysqlinnodb/
– http://marcalff.blogspot.ru/
?
СПАСИБО!
The preceding is intended to outline our general
product direction. It is intended for information
purposes only, and may not be incorporated into any
contract. It is not a commitment to deliver any
material, code, or functionality, and should not be
relied upon in making purchasing decisions.
The development, release, and timing of any
features or functionality described for Oracle’s
products remains at the sole discretion of Oracle.

More Related Content

PDF
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
PDF
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
PDF
Новые возможности отладки MySQL 5.7 на практике
PDF
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
PDF
Производительность MySQL для DevOps
PDF
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
PDF
PostgreSQL performance recipes
PDF
Where is the space, Postgres?
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Новые возможности отладки MySQL 5.7 на практике
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Производительность MySQL для DevOps
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
PostgreSQL performance recipes
Where is the space, Postgres?

What's hot (20)

PDF
MariaDB 10.1 - что нового.
PDF
Отладка производительности СУБД MySQL
PPT
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
PDF
Devconf2013 new-features-in-mysql-and-mariadb
PDF
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
PDF
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
PDF
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
PPTX
СУБД 2013 Лекция №5 "Определение узких мест"
PDF
Лекция 10. Apache Mahout
PDF
Как читать и интерпретировать вывод команды EXPLAIN
PPTX
СУБД 2013 Лекция №9 "Безопасность баз данных"
PPTX
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
PPTX
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
PDF
Эффективная отладка репликации MySQL
PDF
Как делать backup MySQL
PPTX
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
PPTX
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
PDF
Call of Postgres: Advanced Operations (part 1)
PDF
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
MariaDB 10.1 - что нового.
Отладка производительности СУБД MySQL
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Devconf2013 new-features-in-mysql-and-mariadb
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
СУБД 2013 Лекция №5 "Определение узких мест"
Лекция 10. Apache Mahout
Как читать и интерпретировать вывод команды EXPLAIN
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Эффективная отладка репликации MySQL
Как делать backup MySQL
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
Call of Postgres: Advanced Operations (part 1)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Ad

Similar to Введение в отладку производительности MySQL приложений (20)

PDF
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
PDF
OpenSource SQL Databases Enter Millions Queries per Second Era
PPT
MySQL для высоконагруженных проектов
PPT
поиск узких мест в производительности My sql ботанический определитель. г. ру...
ODP
Innodb Scalability And New Features Hl2008 Rus
PDF
Что нужно знать о трёх топовых фичах MySQL
PDF
"Производительность MySQL: что нового?"
PDF
Пётр Зайцев, Percona
PPTX
MySQL Optimization. Russian
PDF
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
PDF
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
PDF
MySQL - checklist для новичка в Highload
PDF
MySQL: чек-лист для новичка в highload / Анастасия Распопина, Света Смирнова ...
PPT
оптимизация My Sql петр зайцев
PDF
MySQL Enterprise Monitor
PDF
Checklistfinal perconaconf
PDF
Kopytov
PDF
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
PPTX
СУБД осень 2012 лекция 9
PDF
MySQL NDB Cluster
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
OpenSource SQL Databases Enter Millions Queries per Second Era
MySQL для высоконагруженных проектов
поиск узких мест в производительности My sql ботанический определитель. г. ру...
Innodb Scalability And New Features Hl2008 Rus
Что нужно знать о трёх топовых фичах MySQL
"Производительность MySQL: что нового?"
Пётр Зайцев, Percona
MySQL Optimization. Russian
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
MySQL: чек-лист для новичка в highload (Cвета Cмирнова, Aнастасия Распопина ...
MySQL - checklist для новичка в Highload
MySQL: чек-лист для новичка в highload / Анастасия Распопина, Света Смирнова ...
оптимизация My Sql петр зайцев
MySQL Enterprise Monitor
Checklistfinal perconaconf
Kopytov
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
СУБД осень 2012 лекция 9
MySQL NDB Cluster
Ad

More from Sveta Smirnova (20)

PDF
War Story: Removing Offensive Language from Percona Toolkit
PDF
MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?
PDF
Database in Kubernetes: Diagnostics and Monitoring
PDF
MySQL Database Monitoring: Must, Good and Nice to Have
PDF
MySQL Cookbook: Recipes for Developers
PDF
MySQL Performance for DevOps
PDF
MySQL Test Framework для поддержки клиентов и верификации багов
PDF
MySQL Cookbook: Recipes for Your Business
PDF
Introduction into MySQL Query Tuning for Dev[Op]s
PDF
MySQL Performance for DevOps
PDF
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
PDF
How to migrate from MySQL to MariaDB without tears
PDF
Modern solutions for modern database load: improvements in the latest MariaDB...
PDF
How Safe is Asynchronous Master-Master Setup?
PDF
How to Avoid Pitfalls in Schema Upgrade with Galera
PDF
How Safe is Asynchronous Master-Master Setup?
PDF
Introduction to MySQL Query Tuning for Dev[Op]s
PDF
Billion Goods in Few Categories: How Histograms Save a Life?
PDF
A Billion Goods in a Few Categories: When Optimizer Histograms Help and When ...
PDF
Billion Goods in Few Categories: How Histograms Save a Life?
War Story: Removing Offensive Language from Percona Toolkit
MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?
Database in Kubernetes: Diagnostics and Monitoring
MySQL Database Monitoring: Must, Good and Nice to Have
MySQL Cookbook: Recipes for Developers
MySQL Performance for DevOps
MySQL Test Framework для поддержки клиентов и верификации багов
MySQL Cookbook: Recipes for Your Business
Introduction into MySQL Query Tuning for Dev[Op]s
MySQL Performance for DevOps
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
How to migrate from MySQL to MariaDB without tears
Modern solutions for modern database load: improvements in the latest MariaDB...
How Safe is Asynchronous Master-Master Setup?
How to Avoid Pitfalls in Schema Upgrade with Galera
How Safe is Asynchronous Master-Master Setup?
Introduction to MySQL Query Tuning for Dev[Op]s
Billion Goods in Few Categories: How Histograms Save a Life?
A Billion Goods in a Few Categories: When Optimizer Histograms Help and When ...
Billion Goods in Few Categories: How Histograms Save a Life?

Введение в отладку производительности MySQL приложений

  • 1. <Insert Picture Here> Введение в отладку производительности MySQL приложений Света Смирнова Ведущий инженер технической поддержки MySQL
  • 3. Удочки • Одиночный запрос • Параллельное выполнение – Внутренние блокировки – Борьба за системные ресурсы • Системные ресурсы • Репликация • Инструменты – Контроль опций – INFORMATION_SCHEMA – PERFORMANCE_SCHEMA – Системные утилиты
  • 5. Как выявить узкое место • ... • <some code> • Измеряем Время_Начала (операции) • mysql_real_query(....) • Измеряем Время_Завершения (операции) • <some code> • .... • • Нам нужно • (Время_Завершения - Время_Начала)
  • 7. Отлаженные запросы — основа высокой производительности!
  • 9. Настройки • Переменные – SET [SESSION|GLOBAL] var_name=NEW_VALUE – Сессионные (SESSION) – Глобальные (GLOBAL) • Параметры командной строки • Конфигурационные файлы
  • 12. Binary log, SQL thread и IO thread
  • 14. Одиночный запрос: где найти? • При разработке приложения • PROCESSLIST – SHOW [FULL] PROCESSLIST – INFORMATION_SCHEMA.PROCESSLIST • Лог медленных запросов (slow query log) – По требованию – Вывод в таблицу – mysqldumpslow • Лог вашего приложения • Жалобы пользователей
  • 15. Одиночный запрос: что он делает? • PERFORMANCE_SCHEMA.EVENTS_STAGES_% • PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_% – mysql> SELECT STMTS.SQL_TEXT, STAGES.EVENT_NAME,  STAGES.TIMER_WAIT FROM  PERFORMANCE_SCHEMA.EVENTS_STAGES_HISTORY_LONG STAGES JOIN  PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_HISTORY_LONG STMTS ON  (STMTS.EVENT_ID=STAGES.NESTING_EVENT_ID) WHERE  CURRENT_SCHEMA='EMPLOYEES'; – +­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+­­­­­­­­­­­­­­­+ – | sql_text   | event_name                  | timer_wait    | – +­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+­­­­­­­­­­­­­­­+ – | select co  | stage/sql/init              |     189755000 | – | select co  | stage/sql/Opening tables    |      40828000 | – | select co  | stage/sql/System lock       |     185069000 | • SHOW STATUS LIKE 'Handler_%'
  • 16. Одиночный запрос: почему? • EXPLAIN – EXPLAIN EXTENDED - всегда в 5.7+ – EXPLAIN PARTITIONS - всегда в 5.7+ – EXPLAIN FORMAT=JSON • INFORMATION_SCHEMA.OPTIMIZER_TRACE • SHOW INDEX – Как чинить • OPTIMIZE или ANALYZE TABLE • innodb_stats_persistent
  • 17. Одиночный запрос: устранение проблемы • Переписать запрос! • Если нельзя или не помогает: – Index hints: • FORCE|USE INDEX • IGNORE INDEX • Обязательно тестируйте все обновления! – Настройки оптимизатора: • optimizer_search_depth • optimizer_prune_level • optimizer_switch
  • 18. Параллельные запросы и транзакции • Борьба за системные ресурсы • Виды блокировок, которые пользователь может контролировать: – Уровень таблицы – Уровень строки – Metadata – Есть ещё постраничные, но они использовались только одним движком • Что пользователь контролировать может только относительно: – Блокировки, несвязанные непосредственно с обрабатываемыми данными, такие как query cache, блокировки на уровне движка и т.п.
  • 19. Параллельные запросы и транзакции: как вычислить • Универсальное средство: – PROCESSLIST, PERFORMANCE_SCHEMA.EVENTS_STAGES_% • Locked • Waiting for * • На уровне движка: – SHOW ENGINE INNODB STATUS – Таблицы INNODB_* в INFORMATION SCHEMA • INNODB_TRX, INNODB_LOCKS, INNODB_LOCK_WAITS • Performance Schema – METADATA_LOCKS, TABLE_HANDLES – EVENTS_TRANSACTIONS 5.7
  • 20. Параллельные запросы и транзакции: средства InnoDB • Мониторы – SHOW ENGINE INNODB STATUS – Опция innodb­status­file – innodb_status_output – innodb_status_output_locks • Больше информации о блокировках • Всегда включайте! • TRANSACTIONS 5.6.16
  • 21. Параллельные запросы и транзакции: средства InnoDB • Таблицы Information Schema – INNODB_TRX, INNODB_LOCK_WAITS • mysql> SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, BLOCKING_TRX_ID,  BLOCKING_LOCK_ID, TRX_QUERY FROM INNODB_TRX JOIN  INNODB_LOCK_WAITS on (INNODB_TRX.TRX_ID =  INNODB_LOCK_WAITS.REQUESTING_TRX_ID) WHERE TRX_STATE = 'LOCK  WAIT'G • ********************* 1. row ********************* • TRX_ID: C2F • TRX_REQUESTED_LOCK_ID: C2F:0:1352:2 • BLOCKING_TRX_ID: C2C • BLOCKING_LOCK_ID: C2C:0:1352:2 • TRX_QUERY: update titles set title='Senior Engineer' • where title='Senior Engineer' • 1 row in set (0.01 sec) – INNODB_METRICS
  • 22. Параллельные запросы и транзакции: блокировки метаданных • mysql> select OBJECT_NAME, LOCK_TYPE, LOCK_STATUS,  OWNER_THREAD_ID from metadata_locksG • ********************** 1. row ********************** •     OBJECT_NAME: t2 •       LOCK_TYPE: SHARED_WRITE •     LOCK_STATUS: GRANTED • OWNER_THREAD_ID: 20 • ... • ********************** 5. row ********************** •     OBJECT_NAME: t2 •       LOCK_TYPE: EXCLUSIVE •     LOCK_STATUS: PENDING • OWNER_THREAD_ID: 21 ...
  • 23. Параллельные запросы и транзакции: устранение проблем • Краткосрочное – Выбрать наименее важную транзакцию и убить её • KILL <MYSQL_THREAD_ID> • Долгосрочное – Спланировать приложение так, чтобы конкурирующие транзакции разнести по времени выполнения – Избегать длинных транзакций без необходимости – Если autocommit=0 • Использовать READ-ONLY транзакции • Закрывать транзакции после SELECT и ALTER
  • 24. Борьба за системные ресурсы • Память • CPU • Диск • Сеть
  • 25. Память • Диагностика – free – top – vmstat • Проблемы – mysqld использует слишком мало памяти • Буферы не настроены на высокую производительность • Система ограничивает ресурсы, которые доступны mysqld – mysqld использует слишком много памяти
  • 26. Диск • Диагностика – df – iostat – ls -l /proc/{PID_OF_MYSQLD}/fd • Починка – Параметры InnoDB • innodb_adaptive_flushing • innodb_doublewrite • innodb_flush_log_at_trx_commit • innodb_flush_method • innodb_io_capacity • innodb_max_dirty_pages_pct • – Binary log • Formats – ROW – STATEMENT – MIXED • binlog_row_image • sync_binlog
  • 27. CPU • Диагностика – top – iostat – ps • Параллельность и количество ядер innodb_thread_concurrency Execution time 1 7.8164 2 4.3959 4 2.5889 8 2.6708 16 3.4669 32 3.4235
  • 28. Сеть • Важно! – Надёжность – Пропускная способность – Скорость • Диагностика – ping – --log-warnings=2 – tcpdump • Послать большой (1G и больше) файл и мониторить
  • 29. Репликация • Мастер – Медленная сеть – Потери при записи в binary log • Disk IO • Блокировки • Слэйв – IO thread • То же, что и у мастера – SQL thread • Один поток против нескольких на мастере • Взаимодействие с другой нагрузкой на mysqld слэйва
  • 30. Репликация: диагностика • SHOW SLAVE STATUS • Performance Schema Replication Tables – replication_connection_status • mysql> select SERVICE_STATE,  RECEIVED_TRANSACTION_SET, LAST_ERROR_NUMBER from  replication_connection_statusG • ******************** 1. row ********************* •            SERVICE_STATE: ON • RECEIVED_TRANSACTION_SET: • 9fa18fb7­d6f2­11e3­bc7e­a088b4923078:1 •        LAST_ERROR_NUMBER: 0 • 1 row in set (0.00 sec) – replication_execute_status 5.7
  • 31. Ссылки Одиночный запрос: – http://glebshchepa.blogspot.co.uk/2012/04/optimizer-new-explain-formatjson.html – http://www.slideshare.net/myxplain/powerful-explain-in-mysql-56 – http://www.slideshare.net/SvetaSmirnova/troubleshooting-my-sqlperformanceaddons – http://www.slideshare.net/SvetaSmirnova/performance-schema-mysql Параллельные запросы и транзакции: – http://shop.oreilly.com/product/0636920021964.do – http://planet.mysql.com/entry/?id=643406 – https://blogs.oracle.com/mysqlinnodb/entry/get_started_with_innodb_metrics Общие – http://dev.mysql.com/doc/refman/5.7/en/index.html – https://blogs.oracle.com/mysqlinnodb/ – http://marcalff.blogspot.ru/
  • 32. ?
  • 34. The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.