Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Интересная ситуация: если к странице давно не обращались, время её генерации 500 и более мс, если загрузить страницу и через время её обновить, время уменьшится до 50-60 мс.
И дело именно в базе данных.
Что делать в этой ситуации? Как ускорить загрузку страниц?

Ссылка на сообщение
Поделиться на другие сайты

Если к странице обращались не очень давно, то при повторном запросе данные выборки с базы берутся с кэша (именно кэша MYSQL). На хостингах размер кэша настроен по разному. Если сделали INSERT,UPDATE, DELETE то кэш для для таблиц сбрасывается.

Как ускорить загрузку страниц?

Нужно смотреть какие запросы больше всего грузят, и пытаться их переписать по другому. Если у Вас до 50 000 товаров - то должно всё нормально работать на "стандартных симпловских запросах", но опять таки это много зависит от хостинга

Если Вы смотрите page generation time: 0.500 seconds, то сюда входит не только время выполнения запросов, это общее время (php + mysql)

0.500 seconds - это нормально
Ссылка на сообщение
Поделиться на другие сайты

Я смотрю не столько на page generation time, сколько на MYSQL time. Об этом писал выше.
0.5 - неплохо, но хотелось бы раз в 10 быстрее.

Ссылка на сообщение
Поделиться на другие сайты

смотрите тогда, запросы которые выполняются долго и попытайтесь их оптимизировать

Можете поэкспериментировать с настройками MYSQL, если имеете к им доступ

Ссылка на сообщение
Поделиться на другие сайты

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.
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...