Что хорошего в устранении неполадок сценария с точки зрения производительности (php / mysql)? - PullRequest
2 голосов
/ 23 июня 2009

Я написал сайт CMS с нуля, и теперь, когда сайт медленно начинает получать трафик (30-40 тыс. В день), я вижу нагрузку на сервер намного выше, чем должна быть. Он постоянно колеблется около 6-9 на четырехъядерной машине с 8 ГБ оперативной памяти. Я написал сценарии, которые прекрасно выполнялись на сайтах 400-500 тыс. / День, поэтому я хотел бы думать, что я не совсем некомпетентен.

Я сократил количество запросов, выполняемых на каждой странице, почти на 60%, объединив запросы, полностью исключив некоторые вызовы mysql и заменив некоторые разделы сайта статическими TXT-файлами, которые при необходимости обновляются с помощью php. Все эти изменения повлияли на время выполнения страницы (индекс загружается за 0.3 с, а не за 1.7, как раньше).

IOwait практически отсутствует, а база данных mysql составляет всего 30 МБ. На сайте работает lighttpd, php 5.2.9, mysql 5.0.77

Что я могу сделать, чтобы понять, что именно вызывает высокую нагрузку? Я действительно хочу локализовать проблему, так как «top» просто сообщает мне свой mysql, который постоянно колеблется в пределах 50-95% загрузки ЦП.

Ответы [ 4 ]

3 голосов
/ 23 июня 2009

Используйте ОБЪЯСНИТЬ , чтобы помочь вам оптимизировать / устранить неполадки в ваших запросах. Он покажет вам, как на таблицы ссылаются и сколько строк читается. Это очень полезно.

Кроме того, если вы внесли какие-либо изменения в конфигурацию MySQL , вы можете вернуться к этому.

1 голос
/ 23 июня 2009

Лучшее, что вы можете сделать, это профилировать код вашего приложения. Узнайте, какие звонки потребляют так много ваших ресурсов. Вот несколько вариантов (первые три хита Google для "php profiler"):

Возможно, некоторые SQL-запросы выполняются очень медленно, но если они выполняются нечасто, они, вероятно, не являются основной причиной проблем с производительностью. Возможно, у вас есть более быстрые SQL-запросы, но они выполняются так часто, что их общее влияние на производительность оказывается выше. Профилирование приложения поможет идентифицировать их.

Наиболее универсальный совет для повышения производительности приложений в отношении использования базы данных - идентифицировать данные, которые изменяются нечасто, и помещать эти данные в кэш для более быстрого поиска. Вы сами должны определить, какие данные извлекут из этого наибольшую пользу, поскольку они очень зависят от моделей использования вашего приложения.

Что касается технологии для кэширования, APC и memcached - варианты с хорошей поддержкой в ​​PHP.

Вы также можете внимательно прочитать главу по оптимизации MySQL , чтобы определить любые улучшения, относящиеся к вашему приложению.

Другие полезные ресурсы: MySQL Performance Blog и книга « High Performance MySQL ». Если вы серьезно относитесь к запуску веб-сайта на базе MySQL, вам следует часто обращаться к этим ресурсам.

1 голос
/ 23 июня 2009

mytop - хорошее место для начала. Это в основном топ для MySQL, и даст вам представление о том, что именно делает ваша БД:

http://jeremy.zawodny.com/mysql/mytop/

Noah

0 голосов
/ 23 июня 2009

Это может быть любое количество причин, поэтому может потребоваться много усилий. Хорошим первым шагом было бы включить медленный журнал запросов и просмотреть его вручную или с помощью parser . Вы можете выбрать конкретные, интенсивно используемые, медленные запросы для оптимизации (возможно, те, которые попадают во что-то неиндексированное)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...