абы немного раздражает, если ваш сайт нуждается в печенье и т.д., абы слишком просто.
В основном, из моего опыта в фиксируя несколько разрушающихся PHP веб-сайтов, как правило, выглядит следующим образом:
1) Люди используют MySQL
Вы можете полностью использовать MySQL, facebook и Flickr это сделать (MySQL фанаты любят те), если вы знаете Gotchas, которые:
- Если у вас есть, не только для чтения MyISAM таблицы и любой запрос, больше, чем 100 мкс (даже выбирает) вы мертвы
На одном из сайтов, который я исправил, парень арендовал двухъядерный сервер, потому что «его сайт нуждается в мощности». Я смотрю на его сайт, я смотрю на свой предыдущий сайт с членами> 100K и торрент-трекером, который бежал на чертовском микро-половинном сервере Pizzabox Via C7, и я ему говорю, ваш сайт отлично работает на Celeron 300, который находится в моем подвал, и это даже перебор, я могу арендовать его вам за половину цены вашего Xeon, lol.
Оказалось, что парень был хороший разработчик и реальный хороший парень, но он сосал MySQL, так что его сайт был типичный поисковый запрос из ада, который может убить любой веб-сайт:
- 10 поисковых запросов из ада в секунду (у него был как 300K членов на его незаконном сайте вареза)
- поисковый запрос из ада занимает около 0,1 - 0,2 секунды
- немного потока одновременных обновлений к одной и той же таблице MyISAM приправить вещи
=> полная сериализация (блокировки записи MyISAM) всех запросов. 1 ядро 100%, 7 ядер без нагрузки, loadavg> 1000 (да, он использовал apache), время страницы> 30 секунд, работы.
Исправление было простым: оптимизируйте поисковый запрос из ада, исправьте точку 2) ниже, переключитесь на InnoDB, переключитесь на lighttpd. loadavg упал до 0,02
2) модифицирует
Noone заинтересован в счетчиках страниц. Проблема 1 ОБНОВЛЕНИЕ для каждого просмотра страницы, и вы мертвы. Добавьте несколько MyISAM для получения дополнительных эффектов. Также убийца на InnoDB, а не о блокировке, а скорее о синхронизации IO ожидания.
3) FULLTEXT
- MyISAM не могут быть использованы для таблиц чтения-записи из-за блокировки.
- MyISAM так же надежен, как и ramdisk (на самом деле, меньше: вам нужно аварийное завершение ОС, чтобы повредить ramdisk, повредить таблицы MyISAM, просто нужно сбой в MySQL или просто слишком сильно ударить его одновременно, вы получите «неизвестный движок таблицы» ошибка», я видел это много раз)
- FULLTEXT не доступен на InnoDB
- Любые вставки в полнотекстовый индекс вызывает почти полное перестроение индекса (когда я вставил форум пост он восстанавливал 400 МБ индекса)
==> Если вам нужна полная индексация текста, производительность и надежность, используйте Sphinx или Xapian.
Я не пробовал Sphinx (люди говорят об этом хорошо), но Xapian счастливо просматривает 4 ГБ текста в мгновение ока.
4) Люди используют apache.
Это прекрасно сочетается с перечисленными выше пунктами.
В отличие от соответствующего сервера, такого как lighttpd, использование которого невозможно обнаружить (crummy Via C7 обслуживает 100 HTTP-запросов/s, а lighttpd использует менее 1% процессора), apache убьет вашу коробку.
Когда MySQL начинает умирать (он легко умирает), клиенты начинают сильно ударяться по F5, и вскоре у вас будет около 1000 процессов apache, каждый из которых имеет PHP-интерпретатор, и каждый интерпретатор PHP имеет свободное соединение MySQL, ожидая блокировка MyISAM, за исключением одного, который выполняет некоторые тривиальные UPDATE вашего счетчика просмотров страниц, но это занимает некоторое время, потому что сервер ушел на ланч-обмен, из-за 1000 apache и 1000 php и 1000 mysql-процессов.
Lighttpd не использует процессор для статических страниц. Единственный способ, чтобы lighttpd насыщал ваш процессор, - это если вы сильно ударились с apachebench, например, 20K запросов. Затем Lighttpd говорит с несколькими, как и с 10 php-fcgi бэкендами (2-4 на ядро хорошо), которые говорят с несколькими соединениями MySQL. В результате все происходит намного быстрее, и когда он перегружен, он грациозно, а не взрывоопасно.
Чтобы получить исходный вопрос, вы определенно хотите просмотреть свои SQL-запросы. Добавьте журнал запросов в ваше приложение PHP, которое отображает (только для вас), список запросов и время, которое они берут, а также время от начала сценария PHP до конца (заголовок/нижний колонтитул - это хорошее место для это).
Для сложной страницы (за исключением поиска) вы ожидаете около 3 мс MySQL и 3 мс PHP, это хорошая цель. Конечно, вам нужен скомпилированный кэш кода PHP.
Вы за работу на стороне? –
Что вы имеете в виду? – peufeu