Novecheg Posted October 3, 2012 Report Share Posted October 3, 2012 Интересная ситуация: если к странице давно не обращались, время её генерации 500 и более мс, если загрузить страницу и через время её обновить, время уменьшится до 50-60 мс.И дело именно в базе данных.Что делать в этой ситуации? Как ускорить загрузку страниц? Quote Link to post Share on other sites
Novecheg Posted October 3, 2012 Author Report Share Posted October 3, 2012 ап Quote Link to post Share on other sites
Novecheg Posted October 4, 2012 Author Report Share Posted October 4, 2012 ап Quote Link to post Share on other sites
noname00 Posted October 4, 2012 Report Share Posted October 4, 2012 Если к странице обращались не очень давно, то при повторном запросе данные выборки с базы берутся с кэша (именно кэша MYSQL). На хостингах размер кэша настроен по разному. Если сделали INSERT,UPDATE, DELETE то кэш для для таблиц сбрасывается.Как ускорить загрузку страниц? Нужно смотреть какие запросы больше всего грузят, и пытаться их переписать по другому. Если у Вас до 50 000 товаров - то должно всё нормально работать на "стандартных симпловских запросах", но опять таки это много зависит от хостингаЕсли Вы смотрите page generation time: 0.500 seconds, то сюда входит не только время выполнения запросов, это общее время (php + mysql)0.500 seconds - это нормально Quote Link to post Share on other sites
Novecheg Posted October 4, 2012 Author Report Share Posted October 4, 2012 Я смотрю не столько на page generation time, сколько на MYSQL time. Об этом писал выше.0.5 - неплохо, но хотелось бы раз в 10 быстрее. Quote Link to post Share on other sites
noname00 Posted October 4, 2012 Report Share Posted October 4, 2012 смотрите тогда, запросы которые выполняются долго и попытайтесь их оптимизироватьМожете поэкспериментировать с настройками MYSQL, если имеете к им доступ Quote Link to post Share on other sites
Novecheg Posted October 5, 2012 Author Report Share Posted October 5, 2012 как посмотреть и как оптимизировать? Quote Link to post Share on other sites
noname00 Posted October 5, 2012 Report Share Posted October 5, 2012 api/Database.php public function query() { $time_start = microtime(true); $args = func_get_args(); $q = call_user_func_array(array($this, 'placehold'), $args); if($this->link) { // В отладочном режиме ведем лог if($this->config->debug) { $start = microtime(true); $this->res_id = mysql_query($q, $this->link); $end = microtime(true); //$this->log->write('Executing query: '.$q."\r\nExecution time: ".($end-$start).' seconds'); write_log('Executing query: '.$q."\r\nExecution time: ".($end-$start).' seconds'); } else { $this->res_id = mysql_query($q, $this->link); } } else { $error_msg = "Could not execute query to database, wrong database link. [$q]"; trigger_error($error_msg, E_USER_WARNING); return false; } if(!$this->res_id) { $error_msg = mysql_error($this->link).' ['.$q.']'; trigger_error($error_msg, E_USER_WARNING); return false; } $time_end = microtime(true); $exec_time = round(($time_end-$time_start)*1000, 0); //print "$exec_time ms <br>$q<br><br>"; return $this->res_id; } Сама ф-ция $db_debug = ''; function write_log($s){ global $db_debug; $s = str_replace(array("\n", "\r\n", "\t") ," ", $s)."\r\n"; $db_debug .= '<p>'.$s.'</p>'; if ($file = fopen('files/log/log.txt','a')){ fwrite($file, $s); fclose($file); } } и в index.php вывод// Отладочная информацияif(1){ //print "<!--\r\n"; echo $db_debug; $time_end = microtime(true); $exec_time = $time_end-$time_start; if(function_exists('memory_get_peak_usage')) print "memory peak usage: ".memory_get_peak_usage()." bytes\r\n"; print "page generation time: ".$exec_time." seconds\r\n"; //print "-->";}Если Вы не знаете структуры БД симплы или оптимизацию запросов к MYSQL, то лучше самому не править, обратитесь к специалисту.Если у Вас товаров не слишком много до 50 000 вариантов товаров, и нет явно выраженного медленного запроса, то не целесообразно переписывать запросы. Лучше увеличить ресурсы MYSQL. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.