На что в первую очередь нужно смотреть, при отпимизации php+mysql?

just_php_coder

Новичок
На что в первую очередь нужно смотреть, при отпимизации php+mysql?

Всем привет!
Может баян, но тем не менее вопрос актуальный.

На что в первую очередь нужно смотреть, при отпимизации php+mysql?

Есть сайт время геренации главной страницы составляет 10 секунд, чем больше посетителй в день, тем больше время генерации, доходит до минуты и более. Сгенерированная страница весит в хтмл чуть больше 400 Кб.

Работает с таблицой в которой 130 тыс записей.

Куда копать?

Буду очень признателен.
 

WP

^_^
Очень интересен сайт у которого 400 кб главная страница. Я б на такой точно не пошел. 130 тыс. рядов совсем не много.
А что за таблица? Что за сайт? Может стоит посмотреть в сторону кеширования? Индексов?
 

Фанат

oncle terrible
Команда форума
в первую очередь надо смотреть на места, которые тормозят.
 

just_php_coder

Новичок
Автор оригинала: WP
Очень интересен сайт у которого 400 кб главная страница. Я б на такой точно не пошел. 130 тыс. рядов совсем не много.
А что за таблица? Что за сайт? Может стоит посмотреть в сторону кеширования? Индексов?
Вот поэтому и оптимизируем, то так много весит, и чтобы посетители не уходили.

Изначально код страницы был примерно такой:
PHP:
<?php
function ShowMessages()
{
$hSql = "SELECT * FROM table";
while ($row = mysql_fetch_assoc($hSql))
{
echo ShowRow($row);
}
}

ShowHeader();
ShowMessages();
ShowNavigation();
ShowFooter();
?>
Сейчас код отсался прежним, только переписана функция ShowMessages, оптимизировны SQL-запросы и создан кеш (см. ниже)

Затем, как вследует по логике, было выполненно следующее:
1. Добавить Кеш
2. Отпимизировать SQL-запросы

Получили следующую картину:
Если кеша нету или устарел, то он создается (т.е. генерируется хтмл и пишется в файл), затем этот файл отдается пользователю. При следующих ображениях кеш просто читается.

Далее.
Выполняются запросы.
1. Самое всежее сообщение
[sql]SELECT max(create_date) FROM table LIMIT 1[/sql]
Используется для проверки всежести кеш-файла
Отслальные запросы идут, если нету кеш-файла
2. Кол-во всех вообщений в таблице
[sql]SELECT Count(message_id) as count FROM table[/sql]
3. Выбор сообщений на страницу
[sql]SELECT * FROM table LIMIT {$From}, {$To}[/sql]
4. Выбор пользователей, т.е. тех кто участвовал в создании сообщений, это сделано специально, чтобы не использовать JOIN
[sql]SELECT * FROM table_user IN (<list_of_id>)[/sql]

Вот собственно и все.

Пока страница без кеша генерируется от 4 сек.
С кешом от 1 сек.

Если количество посетителей растет, то время увеличивается.

Что можно еще оптимизировать?
Сейчас странца весит около 70 Кб.
 

just_php_coder

Новичок
Автор оригинала: Фанат
убивать надо таких отвечателей.
ТО, ЧТО ТОРМОЗИТ.
Да индексы есть.

Вот я и пытаюсь выяснить, что торомзит.

Формат таблицы такой

[sql]
CREATE TABLE `table` (
`topic_id` int(11) NOT NULL auto_increment,
`parent_id` int(11) NOT NULL default '0',
`name` varchar(255) default NULL,
`description` text,
`modify_dt` timestamp(14) NOT NULL,
`create_dt` timestamp(14) NOT NULL default '00000000000000',
`author` varchar(255) default NULL,
`author_host` varchar(255) default NULL,
`category_id` int(4) NOT NULL default '0',
`notifyemail` varchar(64) default NULL,
`thread_id` int(11) NOT NULL default '0',
`label` varchar(255) NOT NULL default '',
`user_id` int(11) NOT NULL default '0',
KEY `topic_key` (`topic_id`),
KEY `category_id` (`category_id`),
KEY `parent_id` (`parent_id`),
KEY `thread_id` (`thread_id`),
KEY `label` (`label`),
KEY `create_dt` (`create_dt`),
KEY `user_id` (`user_id`)
) TYPE=MyISAM
[/sql]
 

WP

^_^
1 сек для кеша это очень много.
4 сек для для скольки записей?
Выполни в, например, phpmyadmin, эти запросы и посмотри где какое время. А от этого уже отталкивайся.
 

just_php_coder

Новичок
Автор оригинала: Фанат
в первую очередь надо смотреть на места, которые тормозят.
Как я и писал, Сначала чистили SQL-запросы.
1. Снизили запросы от 1 + (2 * <кол-во сообщений>) + 3 до 4х
2. Затем добавили кеш
3. Облегчили хтмл код.
4. Думаю что делать дальше.
 

Фанат

oncle terrible
Команда форума
1. замерить время выполнения SQL-запросов.
2. выяснить, какие тормозят
3. оптимизировать

-~{}~ 12.05.06 13:43:

не лепить индексы по принципу чем больше - тем лучше, а найти места, который тормозят, выяснить - ПОЧЕМУ, и потом уже, АДРЕСНО оптимизировать.
 

just_php_coder

Новичок
А случаем нет, никакой статьи, где было-бы подробно, в цифрах описано про работу скрипта и об его оптимизации.
Ну к примеру:

Время геренации странцы = Кол-во запросов пользователей * (Кб Кода + Время sql-запросов + Кб Хтмл + кол-во ненужных объектов + что-то еще) и делить все на какую-нить константу
?
 

just_php_coder

Новичок
Автор оригинала: Фанат
похоже, русского языка ты совсем не понимаешь.
Много уважаемый Фанат, я прекрасно все понимаю. Но, я могу интересоваться о каких-то вопросах, это мое право.

Ваше мнение я принял к сведению и пошел разбиратся с проблемой дальше, УЧИТЫВАЯ ВАШИ РЕКОМЕНДАЦИИ.

И поднимать из-за этого флем не нужно.

Зарание благодарен.
 

Фанат

oncle terrible
Команда форума
окей.
про "подробно, в цифрах" ты написал глупость. несустветную.
способ оптимизировать систему есть только один. и я его описал.
поэтому не надо больше ничем интересоваться, а надо пойти и сделать то, что тебе велели.
 

Andreika

"PHP for nubies" reader
он вроде объяснил "места которые тормозят"

Автор оригинала: WP
Очень интересен сайт у которого 400 кб главная страница. Я б на такой точно не пошел. .....
--------------------------------------------------------------------------------

Вот поэтому и оптимизируем


а мож я неправильно его понял :-\
 

just_php_coder

Новичок
Вот где собака зарыта!
Время выполнения SQL-запросов:
1. SELECT max( create_date ) FROM table LIMIT 1
1 - 2 сек.
2. SELECT Count(message_id) FROM table
1 - 2 сек.
3. SELECT * FROM table LIMIT {$From}, {$To}
2-3 сек.
4. SELECT * FROM user_table IN (<list_of_id>)
0 сек.


Куда копать дальше? оптимизация таблиц ?
 

Wicked

Новичок
дальше смотрим EXPLAIN-план этих запросов. Это даст некоторую информацию о том, ПОЧЕМУ эти запросы тормозят. По этим "почему" можно наметить, как можно бороться с тормозами.
 

Фанат

oncle terrible
Команда форума
залетевшего неизвестно откуда дуралея с его дурацкими советами я отсюда убрал.
кто писал по делу, просьба повторить

just_php_coder
я смотрю, по-человечески сделать тебя два дня пришлось уговаривать.
а вот тупые идеи ты воспринимаешь без разговоров.
рекомендую подходить к оценке постов более вдумчиво.
 

just_php_coder

Новичок
Фанат
Я не люблю переходить на личности, но!
Все бы тебе нагрубить кому-нибудь, или
удалить что-нибудь! Прямо создается впечатление что у тебя комплекс неполноценности какой-то.

Люди для чего ходять на форумы? Чтобы выслушать чужие мнения и сделать для себя выводы. Ну а когда участников форума называют дуралеями и т.д. это не очень хорошо.

Если твое мнение авторитетно, то надо это доказывать, приводить факты, ссылки и т.д. а не рубить с плеча и удалять сообщения.
 

Фанат

oncle terrible
Команда форума
В принципе, ты прав.
но есть одно "но".
бывают вопросы, по которым вести дискуссии, о которых ты говоришь, просто смешно.
Ну вот представь - приходишь ты на форум математиков, и спрашиваешь, сколько будет дважды два.
Тебе кто-то отвечает, что пять.
Как ты думаешь - будет с ним кто-то вступать в дискуссии?

ещё один момент. Дискуссии вести можно с оппонентом. С личностью. Если я знаю этого человека, если понимаю, с кем разговариваю - это имеет смысл.
А если он непонятно откуда взялся, то какой смысл с ним беседовать? Где гарантия, что он вообще появится ещё раз?
проще удалить, да и дело с концом.

ещё один момент.
Неверный комментарий уводит в сторону обсуждение. В результате получается куча мусора.
Я понимаю ещё - дискутировать с ТОБОЙ. с АВТОРОМ вопроса. Но какого хрена я должен дискутировать в ЧУЖОМ топике с неизвестно откуда взявшимся ламером?
Если у него есть вопрос - пусть создаст свой топик.

ещё один момент.
форумами в основном пользуются ламеры (это аксиома. поскольку на большинство вопросов можно получить ответ самостоятельно - в документации или поиске). А ламеры очень плохо умеют читать. И из всех вариантов решений, прозвучавших в дискуссии, почему-то выбирают самый идиотский. Поэтому я стараюсь поддерживать чистоту в топиках. Чтобы потом не краснеть за то, что человек в ответ на вопрос, где он взял такой кривой код, говорил "на вашем форуме".

Твой вопрос, кстати, относится к тому самому (весьма немногочисленному) множеству вопросов, которые имеет смысл задавать на форуме. Поскольку вопрос этот не конкретный, а системный. То есть, человеку надо объяснить, как решать такие вопросы В ПРИНЦИПЕ, чтобы он научился, и дальше уже сам решал.

И отсюда следует ещё одна твоя проблема, кстати. Ты-то относишься к своему вопросу, как к конкретному. "Рокажите мне место, где поправить". Воображаешь, будто есть какая-то волшебная формула (это вообще анекдот :).
Нету никаких формул. есть подход - выявить узкие места и оптимизировать.

Тебе ответил УМНЫЙ человек про explain.
Ты же даже ухом не повёл. Там же думать надо. Работать руками и головой. Это неинтересно. А когда ламер тебе пишет чудовищное, но ГОТОВОЕ решение - ты сразу за него хватаешься.

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