Какой хороший способ устранения неполадок в скрипте с точки зрения производительности (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 % загрузки процессора.

Author: Bill Karwin, 2009-06-23

4 answers

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

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

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

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

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

Другими хорошими ресурсами являются Блог производительности MySQL и книга "Высокопроизводительный MySQL". Если вы серьезно относитесь к запуску веб-сайта на основе MySQL, вам следует проконсультироваться с этими ресурсы часто.

 1
Author: Bill Karwin, 2009-06-23 19:48:51

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

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

 3
Author: jjclarkson, 2009-06-23 18:46:57

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

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

Ной

 1
Author: g33kz0r, 2009-06-23 21:12:00

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

 0
Author: Todd Gardner, 2009-06-23 18:27:48