Очередной говноклон билановодов.
В общем поднял я на домашнем опенсервер. Загрузил таблицы, выполняю скрипт с лимитом в 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 года назад. Сейчас такое и близко не прокатит. По сути у вас дор под НЧ
А может это и есть банальный ключ к успеху? На скрине отчет об эффективности за 16 мес. моего мед сайта в ру сегменте.
Ничего из ряда вон не делал - рутинная работа по наполнению контентом и улучшению того что уже есть.
Как видно в августе меня тоже чуток задело, но потом отыграло.
Траф из гугла около 30% к сожалению (второй скрин), есть плавный рост... но оооочнеь плавный