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

seosniks
На сайте с 13.08.2007
Offline
389
949

Добрый день, гении сего раздела.

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

Код примерно такой


set_time_limit(0);
ignore_user_abort(true);
include_once("cfg.php");
$date_chek= date("Y-m-j H:i:s");//Дата поста

$ch = curl_init();
$sql = mysql_query("SELECT * FROM xxxxx WHERE id and `chek`='0' limit 1000");
if(mysql_num_rows($sql) >0) {
while($r = mysql_fetch_array($sql)) {
$id= $r["id"];



тут идет обновление ID и значение chek`='1'

"UPDATE `domen_ru` SET `chek`='1' WHERE `id` = $ids";




далее curl проверяет полученный SELECTом контент, контент примерно 3-50 цифро- букв

Одна итерация цикла одно значение.

}

Затем в таблицу 2 добавляется провернное значение, но только в том случае- если оно соответствует условию.

INSERT IGNORE INTO `xxxxx2`  VALUES 

в конце

 curl_close($ch);

mysql_close();

В базе очень много значений 3-4 миллиона .

Как можно оптимизировать данный скрипт? Буду вам очень благодарен за помощь.

Может какую очистку использоать типа ob_start flush и тд.

На экран данные не выводлятся.

Берется в одной таблице, проверяется обновляется, попутно по условию дублируется в таблицу 2

P.S С миллионами еще не работал.:popcorn:

LEOnidUKG
На сайте с 25.11.2006
Offline
1731
#1

Оптимизировать для чего?! он медленно работает или работает не корректно? Какая цель то?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
minor
На сайте с 04.10.2010
Offline
70
#2

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

PHP experience 2 year, comprehend seo
V
На сайте с 03.12.2007
Offline
94
#3

"SELECT * FROM xxxxx WHERE id and `chek`='0' limit 1000"

выбирать желательно не все поля, а те, которые используются в скрипте - будет быстрее.

выложите весь код, и да, какая цель оптимизации?

Ayavryk
На сайте с 11.10.2003
Offline
209
#4
vavenko:
"SELECT * FROM xxxxx WHERE id and `chek`='0' limit 1000"
выбирать желательно не все поля, а те, которые используются в скрипте - будет быстрее

Как вы оцените затраты по времени против последующей операции проверки внешнего сайта?

minor:
на крон это все дело поставить если еще не стоит, и по кусочкам

+1 Делаю ровно так как написано. Из-за того что проверяемый хост может не откликаться проверю по одному хосту. Выставляю признак начала проверки. Если скрипт не завершиться за положеные N секунд этот признак остается в бд и сигнализирует что сайт не отзывается. Если отдает ошибку - увеличиваю счетчик ошибок и перепроверяю через несколько дней. Но это возможно специфика задачи - у меня не миллион сайтов в проверке.

Тынгыр, мынгыр, комсомол (http://erum.ru). Ехари, ехари, (жалобно) аяврик. /народная тунгусская песня/
seosniks
На сайте с 13.08.2007
Offline
389
#5
LEOnidUKG:
Оптимизировать для чего?! он медленно работает или работает не корректно? Какая цель то?

Нет работает корректно, без ошибок. Выполняется по крону, как вариант установить лимит времени минуты 3, я думаю за это время 1000 обработает.

Ayavryk
На сайте с 11.10.2003
Offline
209
#6
seosniks:
лимит времени минуты 3, я думаю за это время 1000 обработает.

Уверены что из 1000 сайтов не найдется такой который будет три минуты тормозить?

seosniks
На сайте с 13.08.2007
Offline
389
#7
vavenko:
"SELECT * FROM xxxxx WHERE id and `chek`='0' limit 1000"
выбирать желательно не все поля, а те, которые используются в скрипте - будет быстрее.

выложите весь код, и да, какая цель оптимизации?

выборка идет из одного поля + условие `chek`='0' и того три ячейки попадают в выборку, в запросе.

$sql = mysql_query("SELECT * FROM xxxxx WHERE id and `chek`='0' limit 1000"); 

if(mysql_num_rows($sql) >0) {
while($r = mysql_fetch_array($sql)) {

ТОлько я что то не пойму как выбрать конкретные поля.

Да и по сути один запрос имеет очень мало данных

А структура Пример

CREATE TABLE IF NOT EXISTS `information` (

`id` int(55) NOT NULL auto_increment,

`model` varchar(100) NOT NULL default '',

`nomer` int(6) NOT NULL default '0',

`chek` int(1) default NULL,

`date_chek` datetime NOT NULL default '0000-00-00 00:00:00',

`status` varchar(255) NOT NULL default '',

`used` varchar(255) NOT NULL default '',

`pustoy` varchar(255) NOT NULL default '',

PRIMARY KEY (`id`),

UNIQUE KEY (`model`)

) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3960813 ;

--

-- Дамп данных таблицы `information`

--

INSERT INTO `information` (`id`, `model`, `nomer`, `chek`, `date_chek`, `status`, `used`, `pustoy`) VALUES(22, 'usa890654', 0, 1, '0000-00-00 00:00:00', '', '', '');

---------- Добавлено 05.09.2012 в 11:28 ----------

Ayavryk:
Уверены что из 1000 сайтов не найдется такой который будет три минуты тормозить?

Проверка идет нормально, хосты не проверяются, выборка идет с Яндекса.

toxic steel
На сайте с 28.12.2007
Offline
175
#8
seosniks:
выборка идет из одного поля

Orly? SELECT * FROM...

И вот этот фрагмент не понятен: WHERE id

seosniks:
Проверка идет нормально, хосты не проверяются, выборка идет с Яндекса.

И на старуху бывает проруха... :)

Есть отличные, недорогие рекламные места на агрофоруме (http://farmerforum.ru/viewtopic.php?t=1725)! Клуб истинных ценителей денег (http://coinshunter.ru/).

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