Проблема с dle, нагрузка на бд

12
L
На сайте с 18.02.2012
Offline
83
2674

Здравствуйте уважаемы посетители форума.

У меня проблема с сайтом, сайт на dle, сайту 4 года, сайт на системе dle версия скрипта 9.5

Хостер часто пишет что сайт даёт большую нагрузку на хостинг, а точнее на бд.

Посещаемость на сайте от 800 до 1500

На сайте посторонний скрипт s-block, это скрипт для вывода новостных блоков.


По данным статистики нагрузка на сервер:
Дата, нагрузка на CPU, нагрузка на MySQL, сервер
2013-03-17 12.34 5178 certus
2013-03-16 8.09 1929 certus
2013-03-15 8.34 2471 certus

на сайте 35.000 новостей, недавно проверял одним скриптом на шелы и вирусы, ничего не нашло подозрительного.

саму систему dle обгрейживал, начиная с 7.0 версии или с 6.0, не помню какая там была 4 года назад.

что сделать в первую очередь ?

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

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#1

Попробуйте найти долгие запросы, потом EXPLAIN, либо кому-то показать.

Подпись))
siv1987
На сайте с 02.04.2009
Offline
427
#2

Благо хоть в ДЛЕ все запросы выполняются через один метод. Откройте /engine/classes/mysqli.class.php, раскомментируйте строки удалив перед ними //


// $this->query_list[] = array( 'time' => ($this->get_real_time() - $time_before),
// 'query' => $query,
// 'num' => (count($this->query_list) + 1));

добавьте в классе метод для логирования запросов


function writeLog()
{
$dfile = ROOT_DIR . '/uploads/sql_debug_'.date('d_m_Y').'.cgi';

if(! is_array($this->query_list) OR ! count($this->query_list))
{
return;
}
if( ! ($fh = @fopen($dfile, 'a')) )
{
return;
}

$str = "";
foreach($this->query_list as $log)
{
if( $log['time'] > 1 )
{
$str .= "\r\nTime Taken: " . $log['time'];
$str .= "\r\nQuery: " . $log['query'];
$str .= "\r\n----------------------------------------------------------------------------";
}
}
if( $str )
{
$_str .= "----------------------------------------------------------------------------";
$_str .= "\r\nDate: ". date( 'r' );
$_str .= "\r\nURL: " . $_SERVER['REQUEST_URI'];
$_str .= "\r\n----------------------------------------------------------------------------";

$str = $_str . $str."\r\n\r\n";
fputs($fh, $str);
}

fclose($fh);
}

а в методе close сделайте вызов нашего writeLog


function close()
{
@mysqli_close($this->db_id);
$this->writeLog();
}

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

L
На сайте с 18.02.2012
Offline
83
#3
siv1987:
Благо хоть в ДЛЕ все запросы выполняются через один метод. Откройте /engine/classes/mysqli.class.php, раскомментируйте строки удалив перед ними //


// $this->query_list[] = array( 'time' => ($this->get_real_time() - $time_before),
// 'query' => $query,
// 'num' => (count($this->query_list) + 1));


добавьте в классе метод для логирования запросов

function writeLog()
{
$dfile = ROOT_DIR . '/uploads/sql_debug_'.date('d_m_Y').'.cgi';

if(! is_array($this->query_list) OR ! count($this->query_list))
{
return;
}
if( ! ($fh = @fopen($dfile, 'a')) )
{
return;
}

$str = "";
foreach($this->query_list as $log)
{
if( $log['time'] > 1 )
{
$str .= "\r\nTime Taken: " . $log['time'];
$str .= "\r\nQuery: " . $log['query'];
$str .= "\r\n----------------------------------------------------------------------------";
}
}
if( $str )
{
$_str .= "----------------------------------------------------------------------------";
$_str .= "\r\nDate: ". date( 'r' );
$_str .= "\r\nURL: " . $_SERVER['REQUEST_URI'];
$_str .= "\r\n----------------------------------------------------------------------------";

$str = $_str . $str."\r\n\r\n";
fputs($fh, $str);
}

fclose($fh);
}



а в методе close сделайте вызов нашего writeLog

function close()
{
@mysqli_close($this->db_id);
$this->writeLog();
}


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

спасибо за совет:

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

что дадут мне эти настройки ? я буду отслеживать какие то запросы ?

а мне бы еще понять что в них смотреть и что с ними делать :)

я так понимаю запросы будут тут /uploads/

---------- Добавлено 19.03.2013 в 11:44 ----------

/public_html/engine/classes/mysqli.class.php on line 205

ошибка :)

siv1987
На сайте с 02.04.2009
Offline
427
#4
l17l:
а мне бы еще понять что в них смотреть и что с ними делать

Если уж все так плохо, лучше тогда обратится к специалистам, они знают куда код добавить и поймут что в логах смотреть. Хотя и без всяких логов проблема скорее всего в скрипте s-block

L
На сайте с 18.02.2012
Offline
83
#5
siv1987:
Если уж все так плохо, лучше тогда обратится к специалистам, они знают куда код добавить и поймут что в логах смотреть. Хотя и без всяких логов проблема скорее всего в скрипте s-block

я щас тогда отключу его на пару дней и посмотрим как стабилизируется статистика по нагрузке.

я добавить могу, правда я не все понял куда именно добавлять.

пошагово бы ) между какими строчками вставить. 🍿

---------- Добавлено 20.03.2013 в 09:43 ----------

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

а вообще в с блоке стоит обновление :

Частота обновления кэша блока, (секунд)

Раз во сколько секунд кэш блока будет очищаться (3600 с. = 1 час). Оставте поле пустым или поставьте '0', чтобы кэш очищался в общем порядке средствами DLE

3200 - ставил, а так же кэш в дле включил. но это не помогло.....

siv1987
На сайте с 02.04.2009
Offline
427
#6
l17l:
а вообще я помню отключал блок и разница в нагрузке не изменилась, у меня на другом хостинге на такой же системе около 20 сайтов, на 3 их зних стоит данный с-блок и нагрузка там маленькая.

Значит вам без логов не обойтись.

l17l:
я добавить могу, правда я не все понял куда именно добавлять.

можете перед function close() добавить

GS
На сайте с 20.03.2013
Offline
24
#7
У меня проблема с сайтом, сайт на dle, сайту 4 года

Насколько мне известно DLE сайты с годами наращивают приличный размер БД, в следствии чего возрастает нагрузка на mysql сервер. Единственное что вам поможет это чистка базы от ненужных новостей, с целью уменьшения размера БД.

------------------
L
На сайте с 18.02.2012
Offline
83
#8
GoldSolution:
Насколько мне известно DLE сайты с годами наращивают приличный размер БД, в следствии чего возрастает нагрузка на mysql сервер. Единственное что вам поможет это чистка базы от ненужных новостей, с целью уменьшения размера БД.

отключил s-block, нагрузка стала гораздо меньше, щас еще пару дней посмотрю что будет происходить, может это старая версия с блока делают большую нагрузку.

L
На сайте с 18.02.2012
Offline
83
#9

отключил с-блок, обновил движек на 9.8, нагрузка все равно есть.

народ помогайте че делать :)

Pro-host
На сайте с 06.07.2011
Offline
22
#10

Посмотрите для начала что подключено в index.php или же в init.php.

Также, можете посмотреть сколько сейчас запросов у Вас на сайте, измените в index.php:

GzipOut (0);

на

GzipOut (1);

В исходном коде будет при загрузке сайта.

хостинг с защитой от DDoS атак (http://pro-host.ws/)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий