Содержание
- 2. Поиск узких мест Есть проблемы с производительностью? Если нет, создайте! например, ускоренный повтор лога апача $
- 3. Структура определителя C конфигурация BEGIN Q запросы END
- 4. BEGIN END C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 Q1 Q2
- 5. С1 - начало $ top Кто съедает процессор? httpd/php/… => С2 mysqld => Q1 треды ядра
- 6. С2 - апач ест ресурсы Заменить апач на lighttpd/nginx + fastcgi или Поменять настройки тредов апача
- 7. С3 – используется ли своп? Используется ли своп? да, память занята httpd/php/… => C2 да, память
- 8. С4 – нагрузка диска $ iostat -x 1 процент использования большой по некоторым дисками или неравномерен
- 9. С5 – проверка железа проверьте диски (smartctl; скорость прямой записи, чтения, свободное место на дисках; статус
- 10. С6
- 11. С6 – настройка query cache mysql> SHOW VARIABLES LIKE ‘query_cache%’; Если есть сложные запросы (например, JOIN
- 12. С7 – настройка размера query cache Дождаться разогрева кэша mysql> SHOW GLOBAL STATUS LIKE ‘Qcache%’; Если
- 13. С8 – тип хранилища mysql> SELECT ENGINE,TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES GROUP BY ENGINE,TABLE_SCHEMA; Какой тип основных таблиц?
- 14. MyISAM key buffer MyISAM кэширует только индексы (вкл. FULLTEXT).
- 15. С9 – MyISAM key buffer MyISAM кэширует только индексы (вкл. FULLTEXT). mysql> SHOW GLOBAL STATUS LIKE
- 16. Буфер InnoDB InnoDB кэширует индексы и данные, размер буфера - параметр innodb_buffer_pool_size
- 17. С10 – InnoDB buffer pool Дождаться разогрева кэша mysql> SHOW GLOBAL STATUS LIKE ‘innodb_buf%’; Innodb_buffer_pool_pages_free увеличить
- 18. С11 – InnoDB options Если innodb_file_per_table=OFF включить innodb_file_per_table ALTER TABLE `tbl` ENGINE=InnoDB; для таблиц InnoDB innodb_flush_log_at_trx_commit:
- 19. С12 – файлы и треды mysql> SHOW GLOBAL STATUS LIKE ‘open_%’; Если opened_tables >> open_tables, увеличить
- 20. Q1 – поиск худшего запроса При пиковой нагрузке выполнить несколько раз подряд: mysql> SHOW FULL PROCESSLIST;
- 21. Q2 – поиск худшего запроса Включить журнал медленных запросов (log_slow_queries; long_query_time=1;) Накопить статистику, включающую пиковое время.
- 22. Q3 – запрос II рода SELECT блокирует другие SELECT только если между ними в очереди UPDATE
- 23. Q4 – оптимизация запроса Запрос содержит ORDER BY + LIMIT => Q9 Запрос содержит подзапросы: независимые
- 24. Q5 – простой запрос В запросе нет WHERE это ошибка => исправьте запрос => Q1 это
- 25. Q6 – создание индекса Составной индекс используется только последовательно без пропусков ALTER TABLE `tbl` ADD KEY(A,B,C)
- 26. Q7 – индекс не используется Удалите избыточные индексы. Например из KEY(A,B), KEY(A), KEY(B) можно оставить KEY(A,B)
- 27. Q8 – составной запрос Выполните EXPLAIN ЗАПРОС Не все JOIN выполняются по индексу => создайте необходимые
- 28. Q9 – ORDER BY+LIMIT (1/4) Самый медленный класс запросов в рунете. Пример из практики: SELECT *
- 29. Q9 – ORDER BY+LIMIT (2/4) EXPLAIN SELECT … id: 1 select_type: SIMPLE table: wp_posts type: ref
- 30. Q9 – ORDER BY+LIMIT (3/4) Как выполняется запрос? Используется индекс post_status=‘publish’ Перебор почти всей таблицы для
- 31. Q9 – ORDER BY+LIMIT (4/4) Решение: разбить запрос Сортировать только значения id Наложить ограничение LIMIT Получить
- 32. Q10 – независимые подзапросы Обычно в контексте WHERE или FROM. Пример: SELECT name FROM clients WHERE
- 33. Q11 – зависимые подзапросы Обычно в контексте SELECT или WHERE. Пример: SELECT clients.id, (SELECT count(*) FROM
- 34. Q12 - выборка большого объема Используйте NOT NULL – сокращает объем данных и размер индексов. Используйте
- 35. Q13 – изменение логики Обдумайте запрос и перепишите его полностью. Может потребоваться: изменение логики приложения изменение
- 36. Q14 – задайте вопрос на SQLinfo.ru Задайте вопрос на форуме http://sqlinfo.ru/forum/ дождитесь ответа => Q1
- 38. Скачать презентацию