Медленная загрузка на локальной машине
Здравствуйте! Наблюдаю странно долгую загрузку страниц на локальной машине. От 2 до 7(!) секунд. Две разных установки LS, обе нулевые (плагины только из коробки). Вот цифры:
denwer3: Livestreet 1.0.1, Apache 2.2.4, PHP 5.2.12, MySQL 5.1.40 (InnoDB)
OpenServer: Livestreet 1.0.3, Apache/2.2.25, PHP 5.3.27, MySQL 5.5.33 (InnoDB), Memcached 1.4.5
Поиском нашлось два решения. Первое. Переключение file/memory в конфиге изменений не дает. Отключение кеша тоже, вот цифры:
Второе. Надо заменить InnoDB на MyISAM. Удалил в БД на денвере все foreign keys вручную, так же перевел все на MyISAM.
Результаты остались ровно те же.
Подскажите, такие цифры нормальны? Или что я делаю не так? Спасибо!
denwer3: Livestreet 1.0.1, Apache 2.2.4, PHP 5.2.12, MySQL 5.1.40 (InnoDB)
MySql query: 12 time: 0.186 Cache query: 37 — set: 9 — get: 28 time: 0.25816 PHP time load modules: 1.058 full time: 2.767
OpenServer: Livestreet 1.0.3, Apache/2.2.25, PHP 5.3.27, MySQL 5.5.33 (InnoDB), Memcached 1.4.5
MySql query: 7 time: 0.109 Cache query: 24 — set: 4 — get: 20 time: 0.14063 PHP time load modules: 1.125 full time: 2.688
Поиском нашлось два решения. Первое. Переключение file/memory в конфиге изменений не дает. Отключение кеша тоже, вот цифры:
MySql query: 27 time: 0.047 Cache query: 0 — set: 0 — get: 0 time: 0 PHP time load modules: 0.984 full time: 2.141
Второе. Надо заменить InnoDB на MyISAM. Удалил в БД на денвере все foreign keys вручную, так же перевел все на MyISAM.
Результаты остались ровно те же.
Подскажите, такие цифры нормальны? Или что я делаю не так? Спасибо!
42 комментария
нужно использовать только InnoDB, никак не MyISAM. Нужно как для целостности данных так и для скорости работы
Насчет InnoDB/MyISAM. Я просто попробовал варианты, которые нагуглил тут на сайте. Кому-то смена типа на myisam как раз помогла, хотя да, все говорят, что целостность-безопасность-итп.
И будет вам счастье.
А у ТС загрузка около 2-7 сек. Думаю проблема скорее в «незаточенности» железа под сервер.
Стали появляться цифры 1,6-2,1 вместо 2,1-2,6 но на некоторых страницах все равно вылетает и 4,6. Но 1,6 уже лучше (:
Вот весь конфиг innodb:
как я уже писал, при прочих равных innodb_flush_log_at_trx_commit = 2 очень увеличивает скорость INSERT/UPDATE. где вы почувствуется эффект от этого? — там где они есть, а ничего другого нет. Например Ajax запроса на "+" или "-" заметки или топика, или добавление нового комментария — должны заработать намного быстрее.
Я добавил только и цифра общего времени упала до 1,6 сек.
Тогда вернулись с чего начинали, если это не БД, тогда что? Причем да, меня удивляло, что в цифрах в футере MysQL time: 0.109, Cache time: 0.14063, PHP time load modules: 1.125, а full time: 2.688. То есть, 0.109+0.14063+1.125 = 1.37463 != 2.688 Куда-то уходят еще 1.31337 сек.
И 1.125 сек на php на пустой странице? Это нормально?
И, кстати, все равно 0.04688 > 0.
И все равно, около секунды куда-то уходит, помимо перечисляемых потребителей.
а как узнать точно? в phpinfo ни «fpm», ни «fastcgi» не употребляется.
копать тут livestreet.ru/blog/dev_documentation/14961.html
Забудьте про существование MyISAM. Никогда не используйте MyISAM.
Еще пишут, что разница в нагрузочных характеристиках проявляется уже при довольно высоких значениях кол-ва посетителей. Можно ли без проблем конвертировать базу при достижении этих чисел?
просто сконвертировать — можно, но это будет уже не та база, если она была изначально в иннодб.
У него пул в 5 персистент-коннектов к БД. Обрабатывает успешно 200 инсерт/апдейт запросов. Таблицы все в MyISAM.
Таблица, куда пишется стата, участвует в выборке.
На работе сайта никак не сказывается.
Однозначно нельзя так говорить. InnoDB лучше в плане надежности. Но на нагруженных проектах у вас эта надежность аукнется тем, что инсерт и апдейт запросы по базе будут увеличиваться по времени из-за большого количества селектов в это время. У InndoDB да, блокировка может осуществляться на уровне строк, но по сути оно навесит вам еще блоки на все реляции.
У меня лично траблы с InnoDB начались после 50к посетителей из-за innodb_flush_log_at_trx_commit = 1 (2 существенно не влияло). И решались установкой параметра в 0, из-за чего вся надежность исчезала. После чего пришлось перейти на MyISAM.
Да если думаете, что во всем виновато железо, то работает все на Intel® Xeon® CPU E5-2620 0 @ 2.00GHz 64Гб ОЗУ. Так что для мускула простора много.
Во-первых MyISAM не хуже InnoDB в плане надёжности. Целостность данных и надёжность — это не одно и то же.
Во-вторых, просто в силу своей природы, при хоть какой-то параллельной нагрузке MyISAM проигрывает InnoDB в производительности всегда. И чем больше такая нагрузка — тем больше проигрыш. И с какого-то момента (high load), MyISAM умирает полностью.
Однако, бывают «single thread» конфигурации, для отдельного класса задач, и вот там — да, MyISAM имеет смысл. Но это совершено точно, не случай LiveStreet.
innodb_flush_log_at_trx_commit = 0 не убивает вам надёжность. C этой опцией вы имеете шанс потерять изменения за последние несколько секунд в случае краша MySQL демона или сервера. Ужасная потеря для LS :).
innodb_flush_log_at_trx_commit = 2 — тоже самое что выше, но только при краше сервера. Краш MySQL демона к потере данных не приведет.
Если вам innodb_flush_log_at_trx_commit = 0 помогает, а innodb_flush_log_at_trx_commit = 2 — нет, то это уже знак знак где копать. например в конфигурации лога: innodb_log_file_size?
Ну и innodb_locks_unsafe_for_binlog = 1 всё же рекомендую. :)
Я просто дал советы по практическому использованию. Разные проекты имеют разное отношение запросов insert/update/select. И в выигрыше по производительности InnodB над MyISAM в зависимости от преобладания тех или иных запросов не все так однозначно.
MyISAM — мёртв, за исключением узкого класса специфических задач. И то. для тех задач есть лучшие решения уже. там вообще лучше не связываться с MySQL.
В контексте LiveStreet (конкурентная среда с большой мещаниной разнотипных запросов) — не вариант никогда и нигде.
tag1consulting.com/mysql_engines_myisam_vs_innodb
Статья старая. 5 лет, типа того. Вся правда о том кто лучше (и в том числе быстрее) MyISAM или InnoDB. C тех пор InnoDB стал намного мощнее.