Страницы: 12

Обо всем > Сервак виснет( 


Devils city    (20.02.11 22:56)  

Как можно оптимизировать? А то уходит в гейтвей таймаут на пару минут(
ПХПшеры есть?)

$database->setQuery() + $database->query(); = mysql_query

$database->setQuery("select product.product_id, product.product_sku,manufacturer.mf_name from manufacturer LEFT JOIN product_mf_xref on manufacturer.manufacturer_id = product_mf_xref.manufacturer_id LEFT JOIN product on product_mf_xref.product_id=product.product_id");
$rows = $database->loadAssocList(); - создается ассоциативный массив.

foreach($rows as $row)
$abslink = 'index.php?page=shop.product_details&product_id='.$row[product_id];

$seflink = self::getSefLink($row["mf_name"].'-'.$row["product_sku"]);
$database->setQuery("update sef_links set artificial_link='".$seflink."' where artificial_link!='".$seflink."' and original_link like '".$abslink."%'");
$database->query();

product - 10000 записей
manufacturer - 270 записей
product_mf_xref - 10000 записей


Demons city    (20.02.11 23:02)  

рааааанд!)))


Abandoned Plain    (20.02.11 23:04)  

не ари ,все виснут серваки походу в ангелсе возврат ваапше по 20сек кнопка появляеца


Angels city    (20.02.11 23:10)  


> Illuminat [12] (20.02.11 22:56)

Да фиг знает, индексы могут спасти мир, а может ещё помочь explain :)


Angels city    (20.02.11 23:11)  


> $abslink = 'index.php?page=shop.product_details&product_id='.$row[product_id];
>
> $seflink = self::getSefLink($row["mf_name"].'-'.$row["product_sku"]);
> $database->setQuery("update sef_links set artificial_link='".$seflink."'
> where artificial_link!='".$seflink."' and original_link
> like '".$abslink."%'");

Хотя вот эта часть мне не очень понятна :(
Можно ведь "на лету" конструировать линки, а не пихать их в БД


Abandoned Plain    (20.02.11 23:12)  

какое max_execution_time стоит?


Angels city    (20.02.11 23:13)  


>   CXPOH [12] (20.02.11 23:12)
> какое max_execution_time стоит?


Только не надо умничать:)
кроме этого есть ещё параметры пхп и, что не мало важно, самого мускула:)


Abandoned Plain    (20.02.11 23:14)  


> Только не надо умничать
> кроме этого есть ещё параметры пхп и, что не мало важно,
> самого мускула


я не умничаю, просто это одна из возможных причин зависания сервака при запуске тяжёлых скриптов


Abandoned Plain    (20.02.11 23:16)  

а вообще, тоже не слишком понимаю, зачем динамические ссылки хранить в базе


Angels city    (20.02.11 23:16)  


> CXPOH [12] (20.02.11 23:14)

Не спорю, но кроме этого есть ценнейший мануал на мускуле по оптимизации запросов, к томуже автор не написал конфигурацию сервера и сколько тудой пользователей ломицца:)


Abandoned Plain    (20.02.11 23:17)  


> сколько тудой пользователей ломицца


подозреваю, что сей скрипт запускается автором лично и вручную


Angels city    (20.02.11 23:18)  


> CXPOH [12] (20.02.11 23:17)

Возможно, посмотрим что напишет автор:)


Demons city    (20.02.11 23:28)  


> Можно ведь "на лету" конструировать линки, а не пихать их
> в БД

вот тут поподробней)
как на лету сконструировать нужный линк?
update blabla set bla = getSefLink('bla2') ?

т.е. как нормально апдейтнуть внутри запроса, исользуя пхп функцию на результатах запроса?


Angels city    (20.02.11 23:35)  

А зачем в БД держать линки урлов?


Angels city    (20.02.11 23:39)  

не надо в БД держать линки. достаточно id. тем более, что это на скорость не влияет (я на 99.9% уверен)

вопрос: а важно ли использовать left join? может, inner join даст тот же результат?..


Demons city    (20.02.11 23:40)  

update sef_links set artificial_link=getSefLink( '(select manufacturer.mf_name from manufacturer LEFT JOIN product_mf_xref on manufacturer.manufacturer_id = product_mf_xref.manufacturer_id LEFT JOIN product on product_mf_xref.product_id=product.product_id where product_id=".$row[product_id].")-'(select product.product_sku from manufacturer LEFT JOIN product_mf_xref on manufacturer.manufacturer_id = product_mf_xref.manufacturer_id LEFT JOIN product on product_mf_xref.product_id=product.product_id where product_id=".$row[product_id].") ' where artificial_link!='".$seflink."' and original_link like 'index.php?...product_id=".$row[product_id]."

так чтоли? только не уверен или getSefLink запустится внутри sql запроса..


Demons city    (20.02.11 23:43)  


> А зачем в БД держать линки урлов?

это короткие линки (SEF = search engine friendly), они генерятся и автоматически и юзером


> вопрос: а важно ли использовать left join? может, inner
> join даст тот же результат?..

inner join дал тот же результат - 504 Gateway Time-out ))


Angels city    (21.02.11 00:04)  

product_mf_xref.manufacturer_id индекс есть?
product.product_id индекс есть?

если есть индексы, то использование inner join должно дать выигрыш.

я упустил из виду, что тут идёт внутрискриптовая обработка...

foreach($rows as $row)
$abslink = 'index.php?page=shop.product_details&product_id='.$row[product_id];

$seflink = self::getSefLink($row["mf_name"].'-'.$row["product_sku"]);
$database->setQuery("update sef_links set artificial_link='".$seflink."' where artificial_link!='".$seflink."' and original_link like '".$abslink."%'");
$database->query();


если ты забыл фигурные скобки и весь код после foreach - тело цикла, то тут полная Ж... кроме того, необходимо наличие индекса по полю sef_links.original_link


Demons city    (21.02.11 00:18)  


> product_mf_xref

индекса нету

product.product_id - и есть индекс этой таблицы

фигурные скобки есть, чето не скопипастились

sef_links - есть индекс
CREATE TABLE `sef_links` (
`id` int(11) NOT NULL auto_increment,
`original_link` varchar(255) NOT NULL,
`artificial_link` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `artificial_link` (`artificial_link`)
) ENGINE=MyISAM AUTO_INCREMENT=99484 DEFAULT CHARSET=cp1251

Единственное решение которое вижу - это разбивать запрос по частям с помощью limit , скажем по 2000 записей... но это гемору дофига(


Demons city    (21.02.11 00:26)  

первый запрос где-то 25 секунд длится... так что вешает все уже update


Страницы: 12
© 2002 - 2025, «www.Combats.com»™
All rights reserved