Dram

Рейтинг
1114
Регистрация
28.06.2008
selish56:
Мне вот просто интересно.
Ни на одном из своих сайтов "биланоякубовичей" ни разу не видел.

Очередной говноклон билановодов.

В общем поднял я на домашнем опенсервер. Загрузил таблицы, выполняю скрипт с лимитом в 200. Выполнился за 125 сек. Блин долго нет смысла. Проверяю сколько скан = 1. Ровно 200! Вспомниаю что хотел перевести таблицы в мемори. Первожу, выполняю скрипт - 38 сек!!! Смотрю сколько скан = 1, уже 398!!! А не 400 как должно. Еще раз 5 запускаю скрипт - кол-во скан плавно уменьшается от 200 к нулю. Т.е. поведение скрипта полностью такое же как и на сервере. Нужно пересмотреть его логику...

В итоге за ночь скрипт затормозился и делал обновление 2-3 записей при лимите 200.

Как такое возможно?

Простые запросы, четкий лимит. Скрипт начал работать ровно так как от него и ожидали - четко соблюдая лимит и потом затормозился, что может вызвать такое?

Эти поля из таблицы 2, там есть индексы. Вторая таблица вообще не обновляется, только сравнивается. Может этот lock виноват, как корректно убрать его?

Я итак знаю сколько записей в 1 и 2 таблице. скрип обновляет поле scan - ставит туда 1, это значит эта запись проанализирована.

В самом конце скрипта есть такое

function lock($name)

{
$lock = sys_get_temp_dir() . "/$name.lock";
$fp = fopen($lock, 'wb');
if (!flock($fp, LOCK_EX | LOCK_NB)) {
return false;
}

register_shutdown_function(function () use ($fp, $lock) {
flock($fp, LOCK_UN);
fclose($fp);
unlink($lock);
});

return true;
}

а в начале такое

if (lock('data_table_level_process')) {

define('DB_HOST', 'localhost');
define('DB_NAME', 'test');
define('DB_USER', 'test');
define('DB_PASS', 'ПАРОЛЬ');

try {
$db = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->exec("SET NAMES utf8");
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}

кодер его написавший тоже без понятия почему скрипт так странно работает.

В таблице №1 есть только первичный ключ на ID и индекс на поле scan

Я не привел весь скрипт, может в итоге логики лимит потом и станет в конец. Но работать он должен как я описал. И он работал так в первые запуски. Чего по фатку столько? В таблицу скан записывается 1 когда она обработана, всего записей 350.000.

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

weblad, установил эти правила в фаервол /ru/forum/958253 и забудешь о проблеме.

Только исключи апи своего сервера из правил.

Вопрос лишенный смысла.

Нужно смотреть конкретно вашу ситуацию.

Был у меня один плагин на джумле который вешал сервер с топовым Ксеноном и 24 гигами оперативы при 10 юзерах онлайн ибо код кривой.

Другая ситуация - те же сайты на Джумле уже с годами вылезанные и оптимизированные спокойно крутятся на ВПС за 17 евро (4 ядра 16 гигов оперативы) при трафе 80.000 в сутки.

Так что обсуждение вашего вопроса бессмысленно, нужно смотреть конкретно ваш сервер.

Не жалейте денег - заплатите спецу.

Было несколько аналогичных проектов - все умерли в итоге. При чем это было 1-3 года назад. Сейчас такое и близко не прокатит. По сути у вас дор под НЧ

Alex2Fast:
В финале статьи такой обстоятельной, когда я дочитал, в голове эхом прозвучала рекомендация "Продолжайте улучшать свой сайт, делайте его для пользователей" и... может быть вам повезет.

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

Ничего из ряда вон не делал - рутинная работа по наполнению контентом и улучшению того что уже есть.

Как видно в августе меня тоже чуток задело, но потом отыграло.

Траф из гугла около 30% к сожалению (второй скрин), есть плавный рост... но оооочнеь плавный

jpg Снимок экрана в 2019-01-18 09-18-17.jpg
jpg Снимок экрана в 2019-01-18 09-21-40.jpg
Всего: 6924