Какой хороший способ устранения неполадок в скрипте с точки зрения производительности (php/mysql)?
Я написал CMS сайта с нуля, и теперь, когда сайт медленно начинает получать трафик (30-40 тыс./день) Я вижу, что загрузка сервера намного выше, чем должна быть. Он постоянно колеблется в районе 6-9 на четырехъядерном компьютере с 8 Гб оперативной памяти. Я написал сценарии, которые прекрасно работали на сайтах 400-500 тыс. в день, поэтому мне хотелось бы думать, что я не совсем некомпетентен.
Я сократил количество запросов, выполняемых на каждой странице, почти на 60%, объединив запросы, исключив некоторые mysql вызывает полностью и заменяет некоторые разделы сайта статическими текстовыми файлами, которые при необходимости обновляются с помощью php. Все эти изменения повлияли на время выполнения страницы (индекс загружается за 0,3 с, а не за 1,7, как раньше).
IOwait практически отсутствует, а база данных mysql составляет всего 30 мб. Сайт работает под управлением lighttpd, php 5.2.9, mysql 5.0.77
Что я могу сделать, чтобы разобраться в том, что именно вызывает высокую нагрузку? Я действительно хочу локализовать проблему, так как "топ" просто говорит мне его mysql, который постоянно колеблется между 50-95 % загрузки процессора.
4 answers
Лучшее, что вы можете сделать, - это профилировать свой код приложения. Выясните, какие звонки потребляют так много ваших ресурсов. Вот несколько вариантов (первые три хита Google для "профилировщика php"):
У вас могут быть очень медленные SQL-запросы, но если они выполняются нечасто, они, вероятно, не являются основной причиной ваших проблем с производительностью. Может быть, у вас есть SQL-запросы, которые более быстры, но выполняются так часто, что их чистое влияние на производительность больше. Профилирование приложения поможет идентифицировать их.
Наиболее универсальный совет по повышению производительности приложений в отношении использования базы данных состоит в том, чтобы идентифицировать данные, которые меняются нечасто, и помещать эти данные в кэш для более быстрого извлечения. Вам решать, какие данные выиграют от этого больше всего, так как это очень зависит от использования вашего приложения узоры.
Что касается технологии кэширования, APC и memcached являются вариантами с хорошей поддержкой в PHP.
Вы также можете внимательно прочитать главу оптимизации MySQL , чтобы определить любые улучшения, которые имеют отношение к вашему приложению.
Другими хорошими ресурсами являются Блог производительности MySQL и книга "Высокопроизводительный MySQL". Если вы серьезно относитесь к запуску веб-сайта на основе MySQL, вам следует проконсультироваться с этими ресурсы часто.
Используйте ОБЪЯСНЕНИЕ , чтобы помочь вам оптимизировать/устранять неполадки в ваших запросах. Он покажет вам, как ссылаются на таблицы и сколько строк читается. Это очень полезно.
Также, если вы внесли какие-либо изменения в свою конфигурацию MySQL, вы можете вернуться к этому.
Mytop - хорошее место для начала. Это в основном топ для MySQL, и он даст вам представление о том, что именно делает ваша БД:
Http://jeremy.zawodny.com/mysql/mytop/
Ной
Это может быть по разным причинам, так что может потребоваться много усилий. Хорошим первым шагом было бы включить медленный журнал запросов и просмотреть его вручную или с помощью анализатора . Вы можете выбрать конкретные часто используемые, медленные запросы для оптимизации (возможно, те, которые попали во что-то неиндексированное)