Перейти к содержимому


Оптимизация нагрузки. Коэффицент нагрузки и все о нем.


Сообщений в теме: 13

#1 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 31 Октябрь 2014 - 22:58

Итак, сага о том как я обновил аккаунт на 203 и резко коэф. нагрузки пошли вверх. ТП отписала следующее:

Цитата


**** Коэфициент нагрузки — это условная величина, которая показывает степень нагрузки SaaS-аккаунта на сервер и вычисляется на основе двух параметров: количество просмотренных страниц и количество SQL-запросов. При превышении допустимой нагрузки Вам будет рекомендовано перейти на более высокий тарифный план.

Цитата

Наибольшее число запросов (~7500) было зафиксировано в задании Cron "Формирование писем". В связи с этим есть рекомендация, оптимизировать шаблоны рассылки, а также вычисления в таблицах, которые участвуют в рассылках, в частности сократить количество вычислений на отображение. Возможно, стоит очистить архив рассылок (f_mail_archive) и список потоков рассылок (f_mail_threads), количество запросов в этом случае тоже может снизиться. Вторым по количеству запросов (~4500) идёт задание напоминаний. Возможно, тут тоже стоит оптимизировать вычисления на отображение полей, которые участвуют в тексте сообений напоминания. Также можно очистить архив напоминаний (f_tips_show_arhive). Примерно такое же количество запросов (~4500) зафиксировано при изменении данных в подтаблице "Позиции заказов". Необходимо оптимизировать вычисления в данной таблице.

Цитата

Вы можете открыть базу данных, используемую Вашим аккаунтом через скрипт edit_sql.php. В базе данных вы увидите таблицу f_perfomance_stat - в ней можно отсортировать скрипты по количеству запросов и понять в каких местах стоит провести оптимизацию.

Пойдем по порядку что влияет на этот показатель:

Цитата

количество пользователей в системе (работающих одновременно),
количество записей в базе,
количество правил и групп доступа,
количество напоминаний, цветовых форматирований, фильтров и т.д.,
количество вычислений (а также их сложность),
количество заданий выполняемых в фоновом режиме,
количество запущенных рассылок (электронной почты и СМС),
количество отчетов,
объем лога программы.

Цитата

вычисления в таблицах, которые участвуют в рассылках, в частности сократить количество вычислений на отображение

Я правильно понимаю что, код при отображении срабатывает каждый раз, когда формируется список рассылки для всех записей? Если так, то почему не сделать запуск только для записей которые подпадают под рассылку? К тому же вы уже показываете вычисляемое это поле или нет.

Что такое "оптимизировать шаблоны рассылки"? если я правильно понимаю, то отрабатывают все вычисления при отображении. А что еще? Для чего нужна таблица f_mail_threads?
Как архив рассылок рассылок может влиять на нагрузку?
Следующий вопрос, архив напоминаний? Каким образом это может влиять на нагрузку, это же архив. Если его не просматривать намеренно, то о какой нагрузке может идти речь?

Залез я f_perfomance_stat https://nimbus.everh...IdB8Hz4h2Bu61r/.
task 111 - формирование писем, что входит в формирование писем?
task 1 - напоминания.

Что касается логов написали вот это:

Цитата

Вам нужно почистить ЛОГИ
1. Перейти в Настройки(значок шестеренки в правом верхнем углу программы) и выбрать Логи.
2. В открывшемся окне перейти во вкладку "Архив" и если там имеются файлы архива, то чтобы их удалить нужно нажать на крестик рядом с файлом.
3.В случае если нет архивов, но нужно удалить логи которые на данный момент есть в системе, то их сначала нужно выгрузить. Для этого нужно нажать на кнопку "Выгрузить лог в архив" и затем удалить его.
4. Так же логи прежде чем удалять из системы, можно выгрузить их на компьютер, нажав на название самого архива лога.

Как наличие логов влияет на нагрузку? C какой периодичностью обновляется значение нагрузки?

Сообщение отредактировал wondertalik: 01 Ноябрь 2014 - 11:07


#2 bryukhov

    Активный участник

  • Пользователи
  • PipPipPip
  • 317 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 05 Ноябрь 2014 - 00:57

то же самое,
работа в базе минимум, а сообщения сыпятся о нагрузке постоянно.
Страница без cron формируется 80 секунд...

и предложение заплатить больше денег????

#3 Гость_Roman_*

  • Гости

Отправлено 05 Ноябрь 2014 - 09:42

Просмотр сообщенияwondertalik (31 Октябрь 2014 - 22:58) писал:

Я правильно понимаю что, код при отображении срабатывает каждый раз, когда формируется список рассылки для всех записей? Если так, то почему не сделать запуск только для записей которые подпадают под рассылку? К тому же вы уже показываете вычисляемое это поле или нет.
Код при отображении срабатывает единожды при формировании писем.

Просмотр сообщенияwondertalik (31 Октябрь 2014 - 22:58) писал:

Что такое "оптимизировать шаблоны рассылки"? если я правильно понимаю, то отрабатывают все вычисления при отображении. А что еще? Для чего нужна таблица f_mail_threads?
Возможно, каким-то образом облегчить вёрстку, оптимизировать конструкции Smarty. В таблице f_mail_threads содержится информация о потоках рассылки.

Просмотр сообщенияwondertalik (31 Октябрь 2014 - 22:58) писал:

Как архив рассылок рассылок может влиять на нагрузку?
Чем больше архив и количество потоков рассылки - тем больше запросов выполняется к БД при формировании писем - идёт проверка потоков и добавление писем в нужный поток.

Просмотр сообщенияwondertalik (31 Октябрь 2014 - 22:58) писал:

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

Просмотр сообщенияwondertalik (31 Октябрь 2014 - 22:58) писал:

Залез я f_perfomance_stat https://nimbus.everh...IdB8Hz4h2Bu61r/.
task 111 - формирование писем, что входит в формирование писем?
task 1 - напоминания.
Формирование писем - добавление писем в очередь расслыки на основании какого-либо потока.

Просмотр сообщенияwondertalik (31 Октябрь 2014 - 22:58) писал:

Как наличие логов влияет на нагрузку? C какой периодичностью обновляется значение нагрузки?
Нагрузка при логах может возникать только при просмотре.
Коэфициент нагрузки обновляется раз в час.

#4 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 05 Ноябрь 2014 - 10:21

Цитата

Чем больше архив и количество потоков рассылки - тем больше запросов выполняется к БД при формировании писем - идёт проверка потоков и добавление писем в нужный поток.
Что такое поток в таком случае? Как очистить архив рассылок?


Цитата

Расхождение (88885)

Как возможно очистить расхождения? И напомните что это такое. А еще зашел в эту вкладку и понеслась загрузка огромного кол-ва записей. У Вас там нет разбивки постраничной?

Цитата

Дело в том, что задание напоминаний в Cron проверяет так же и актуальность напоминаний, в том числе и архивных.
Как удалить архивные напоминания?

Другой аккаунт тоже поднял коэф нагрузки. И это как только обновился с 199 на 203. http://prntscr.com/53c4ik . Проблемные моменты - крон формирование писем и напоминаний. Также смущают первые 4 строки. Как их понимать? Как определять что же дает 10000 запросов. Да там вычислений столько просто напросто нет, чтобы к базе стучался столько раз. И вычислений на отображение тоже нет.

Сообщение отредактировал wondertalik: 05 Ноябрь 2014 - 21:13


#5 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 10 Ноябрь 2014 - 15:41

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

#6 Гость_Roman_*

  • Гости

Отправлено 17 Ноябрь 2014 - 11:02

Просмотр сообщенияwondertalik (05 Ноябрь 2014 - 10:21) писал:

Что такое поток в таком случае? Как очистить архив рассылок?
Поток в данном случае - это название рассылки. Архив можно очисить через БД, очистив таблицу f_mail_archive

Просмотр сообщенияwondertalik (05 Ноябрь 2014 - 10:21) писал:

Как возможно очистить расхождения? И напомните что это такое. А еще зашел в эту вкладку и понеслась загрузка огромного кол-ва записей. У Вас там нет разбивки постраничной?
Расхождения очищаются только вместе с логами. Расхождения появляются, если содержание записи лога не совпадает с подписью. Подпись составляется в результате хэширования содержания записи лога, даты, пользователя и т.д. Также расхождение появляется если между id записями логов есть промежуток. В этой вкладке может и нет постраничной загрузки.

Просмотр сообщенияwondertalik (05 Ноябрь 2014 - 10:21) писал:

Как удалить архивные напоминания?
Очистить таблицу f_tips_show_archive

Просмотр сообщенияwondertalik (05 Ноябрь 2014 - 10:21) писал:

Другой аккаунт тоже поднял коэф нагрузки. И это как только обновился с 199 на 203. http://prntscr.com/53c4ik . Проблемные моменты - крон формирование писем и напоминаний. Также смущают первые 4 строки. Как их понимать? Как определять что же дает 10000 запросов. Да там вычислений столько просто напросто нет, чтобы к базе стучался столько раз. И вычислений на отображение тоже нет.
Права, форматирование, сложные фильтры. Тут надо рассматривать в комплексе все моменты.

#7 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 17 Ноябрь 2014 - 11:39

Цитата

Архив можно очистить через БД, очистив таблицу f_mail_archive

Добавлю: в самом архиве рассылок в программе есть красный крестик "Удалить все рассылки", в шапке с названиями столбцов.

#8 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 21 Ноябрь 2014 - 10:17

Цитата

Права, форматирование, сложные фильтры. Тут надо рассматривать в комплексе все моменты.
Мне кажется для записи, которая вставляется кодом, форматирование, фильтры и тд не должны играть никакой роли. Даже правила и те отрабатывают при браузенге.

$config['script_noauth']=1;
include "common.php";
data_insert(89, EVENABLE, $data);

И здесь 10тыс мне говорят в тп. Подозрительно.

Сообщение отредактировал wondertalik: 21 Ноябрь 2014 - 10:17


#9 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 05 Декабрь 2014 - 01:22

И снова возвращаюсь к вопросу о 203

require_once "include/customs_function.php";
require_once "dev/edit.php";
$sqlQuery = "SELECT `fio` FROM " . USERS_TABLE . " WHERE id = '" . addslashes($line['userID']) . "' LIMIT 1";
$result = mysql_query($sqlQuery) or die(mysql_error() . "<br />" . $sqlQuery);
$row2 = sql_fetch_assoc($result);
$form = "
<div id='w_head' style='background-color: #0075CE; width: 420; height: 40px; padding: 20px;'>
  <span id='w_head_name' style='color: white; font-size: 30px; padding: 100px;'>TAOPOSREDNIK</span>
</div>

<p style='text-align: center; margin-top: 20px; margin-bottom: 20px; font-weight: bold;'>{$row2['fio']}</p>
<form method='post' enctype='multipart/form-data'>
  <table style='margin-top: 20px;'>
    <tbody>
	  <tr>
	    <td>
	    <div class='w_left_name'>
		  Сумма пополнения<span style='color: red;'>*</span>, грн:
	    </div></td>
	    <td>
	    <div class='w_right_name'>
		  <input id='sum' name='w_sum' type='text' style='width: 280px;'>
	    </div></td>
	  </tr>
	 
	  <tr>
	    <td>
	    <div class='w_left_name'>
		  Примечания:
	    </div></td>
	    <td>
	    <div class='w_right_name'>
		  <input id='w_note' name='w_note' type='text' style='width: 280px;'>
	    </div></td>
	  </tr>
 
	  <tr>
	    <td colspan='2'>
	    <p style='margin-top: 20px'>
		  <span style='color: red;'>*</span> - поля, обязательные для заполнения
	    </p></td>
	  </tr>
	  <tr>
	    <td colspan='2' align='right'>
	    <input name='w_submit' id='submit' value='Пополнить баланс' type='submit' style='padding: 5px;'>
	    <input type='hidden' name='csrf' value='{$csrf}' />
	    </td>
	  </tr>
    </tbody>
  </table>
</form>
";
echo $form;
if (isset($_POST['w_submit'])) {
  if (empty($_POST['w_sum'])) {
    echo "<script>alert('Необходимо заполнить поле \'Сумма пополнения\'');</script>";
    return 0;
  }
  //Если не пустые примечания
  if (!empty($_POST['w_note'])) {
    $data_insert['Примечания'] = $_POST['w_note'];
  }
  $data_insert['Тип движения'] = "Пополнение";
  $data_insert['Сумма, грн'] = form_eng_number($_POST['w_sum']);
  $data_insert['Связь'] = $line['ID'];
  $line_insert_id = insert_query($data_insert, "Движения в балансе");
  //Если баланс пололожительный
  if (Other::consider_balance($line['ID']) > 0) {
    //Находим, если есть заказ со статусом не оплатили
    $sqlQuery = "SELECT `id`, `f1461` as id_zakaza FROM " . DATA_TABLE . "111 WHERE `status` = 0 AND `f1811`  = 'За заказ'
    AND `f961` = " . intval($line['ID']) . " AND `f1831` = 'Не оплатили' LIMIT 1";
    $result = mysql_query($sqlQuery) or die(mysql_error() . "<br />" . $sqlQuery);
    if (sql_num_rows($result) > 0) {
	  $row = sql_fetch_assoc($result);
	 
	  //Так как денег хватило для оплаты, меняем статус оплаты заказа на оплатили.
	  $update_balance['Статус оплаты'] = "Оплатили";
	  update_query($update_balance, "Движения в балансе", "`id`=" . intval($row['id']));
	 
	  $sqlQuery = "SELECT `f621` as date_zakaza FROM ".DATA_TABLE."91 WHERE  `id` = " . intval($row['id_zakaza']);
	  $result3 = mysql_query($sqlQuery) or die(mysql_error() . "<br />" . $sqlQuery);
	  $row3 = sql_fetch_assoc($result3);
	 
	  //Меняем статус заказа на в работе
	  $update_data['Статус заказа'] = "В работе";
	  $update_data['Дата заказа'] = change_order_date($row3['date_zakaza']);
	  update_query($update_data, "Заказы", "`id`=" . intval($row['id_zakaza']));
    }
  }
  if ($line_insert_id) {
    echo "<script>alert('Баланс пополнен');</script>";
    //Закрываем окно
    echo "<script>";
    echo "window.opener.location.reload(1);";
    // Перезагружаем родительское окно
    echo "window.close();";
    echo "</script>";
  } else {
    echo "
<script>alert('Баланс не пополнен, пожалуйста попробуйте отправить еще раз!');</script>";
  }
}
Вот это доп. действие кочевало с версии к версии и работало без проблем. И вот я посмотрел perfomance и обнаружил что доп. действие вызывает 100 000 запросов. Я могу посмотреть что это за запросы такие?

#10 maksn

    Активный участник

  • Пользователи
  • PipPipPip
  • 314 сообщений
  • Пол:Мужчина

Отправлено 06 Декабрь 2014 - 23:48

Просмотр сообщенияwondertalik (05 Декабрь 2014 - 01:22) писал:

Вот это доп. действие кочевало с версии к версии и работало без проблем. И вот я посмотрел perfomance и обнаружил что доп. действие вызывает 100 000 запросов. Я могу посмотреть что это за запросы такие?

$config['sql_log']=1; // Включить лог всех запросов к базе данных в файл sql_log.txt, лог генерируется каждый раз заново при вызове любой страницы программы.
Может быть так?
Кстати, что это? $result = mysql_query($sqlQuery) и sql_fetch_assoc($result);

$sqlQuery = "SELECT `fio` FROM " . USERS_TABLE . " WHERE id = '" . addslashes($line['userID']) . "' LIMIT 1";
$result = mysql_query($sqlQuery) or die(mysql_error() . "<br />" . $sqlQuery);
$row2 = sql_fetch_assoc($result);


Сообщение отредактировал maksn: 06 Декабрь 2014 - 23:50

"...Сижу, паяю. CRM починяю..."
Мои разработки

#11 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 08 Декабрь 2014 - 10:17

Просмотр сообщенияmaksn (06 Декабрь 2014 - 23:48) писал:

$config['sql_log']=1; // Включить лог всех запросов к базе данных в файл sql_log.txt, лог генерируется каждый раз заново при вызове любой страницы программы.
Может быть так?
Кстати, что это? $result = mysql_query($sqlQuery) и sql_fetch_assoc($result);

$sqlQuery = "SELECT `fio` FROM " . USERS_TABLE . " WHERE id = '" . addslashes($line['userID']) . "' LIMIT 1";
$result = mysql_query($sqlQuery) or die(mysql_error() . "<br />" . $sqlQuery);
$row2 = sql_fetch_assoc($result);

Не усмотрел, этот код очень-очень старый). Ну да не суть, на кол-во запросов, это никоем случае не влияет

#12 maksn

    Активный участник

  • Пользователи
  • PipPipPip
  • 314 сообщений
  • Пол:Мужчина

Отправлено 08 Декабрь 2014 - 12:02

Просмотр сообщенияwondertalik (08 Декабрь 2014 - 10:17) писал:

Не усмотрел, этот код очень-очень старый). Ну да не суть, на кол-во запросов, это никоем случае не влияет
Ну тогда все же попробуйте $config['sql_log']=1;
Все запросы будут видны в логе
"...Сижу, паяю. CRM починяю..."
Мои разработки

#13 bottrop

    Активный участник

  • Пользователи
  • PipPipPip
  • 153 сообщений
  • Пол:Мужчина
  • Город:Армавир

Отправлено 30 Октябрь 2015 - 19:45

У меня нагрузку создаёт /events.php, кто знает что за функция и как её усмирить?....жутко тормозит базаКстати на форуме нет информации об этом php. Я думаю будет полезно разобраться в его действии.

Сообщение отредактировал bottrop: 30 Октябрь 2015 - 19:50


#14 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 31 Октябрь 2015 - 16:18

Это не функция, это php-скрипт, работающий в фоновом режиме и подгружающий текущие события, например напоминания или сообщения чата. Проблема с нагрузкой нам известна, находится в процессе решения.





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных