| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > профилирование запросов в mysql |
| Автор: skyboy 24.9.2009, 09:23 | ||||
| Итак. Все тормозит, код клиентской части просто идеальный, записей в БД "вроде бы немного". Что делать? Заниматься profiling'ом. Что для этого есть в mysql? 1. http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html - механизм, который производит запись запроса в отдельный лог в том случае, если этот запрос выполнялся дольше указанного периода(в секундах - минимально 1, по умолчанию стоит 10 секунд). Хорошо эту штуку включить, если она не включена и есть доступ к конфигам - можно уже после обнаружения "тормозов" посмотреть, как система себя раньше "вела" - появились ли сбои по причине увеличения объема данных или проблема была и раньше, просто была незаметна из-за небольшой нагрузки. 2. http://dev.mysql.com/doc/refman/5.0/en/using-explain.html отображает ход выполнения указанного запроса. надо разобраться с нотацией результатов выполнения этой конструкции, да и информация пригодится только при условии наличия хотя бы базовых знаний о принципе работы СУБД, но здесь лучше разобраться раз и с удовольствием пользоваться. 3. начиная с версии 5.0.37 в mysql появился http://dev.mysql.com/tech-resources/articles/using-new-query-profiler.html, который позволяет в пределах сессиий запоминать время выполнения запросов и по выбранному запросу давать развернутую информацию. пример выполнения скажет за себя:
выдает
на примере видно: основная задержка - checking permissions(без учета их выполнение заняло бы около 0,05 с) --------------------- Типичный процесс исправления узких мест вижу таким: 1. Лезем в загодя включенный slow query log и выуживаем долгие запросы. 2. Через любой клиент выполняем эти запросы, предварительно включив профилирование(set profiling=1;) Выясняем, по какой причине запрос долго выполняется. 3. при помощи explain выясняем, какая именно конструкция приводит к тормозам, если на пункте 2 узким местом оказалось что-то, не имеющее отношения к системе безопасности(checking permissions), передачи данных(sending data) - короче говоря, надо разобраться ещё, что можно ускорить за счет оптимизации запроса, а для чего - надо лезть в конфиги(причем не только mysql сервера). В принципе, пункты 2 и 3 вполне могут идти в другом порядке. Добавлено @ 09:24 Если что-то пропустил, прошу дополнить. |
| Автор: skyboy 2.10.2009, 16:21 |
| Век живи – век учись. В комплекте бинарников mysql идет консольная тулза http://dev.mysql.com/doc/refman/5.1/en/mysqlslap.html, назначение которой - эмуляция клиентской загрузки. По сути - инструмент нагрузочного тестирования. Правда, на хостинге у себя я его не обнаружил, что, пожалуй, оправдано |
| Автор: lumega 26.3.2014, 17:52 |
| Добавлю, что есть графический инструмент для профилирования - http://www.profilesql.com/ru/. Позволяет позволяет делать и профилирование и explain. |
| Автор: kaa 20.4.2015, 11:55 |
| страницей промазал |