Добрый вечер, подскажите, пожалуйста... 1)как запустить скрипт? написала скрипт в планировщике задач, назначила ближайшее время, не выполнился... результат выполнения скрипта не написалось в text.txt (файл text.txt вообще не создался и не написал результат в себя ("hello world")) Код (Text): %progdir%\modules\php\%phpdriver%\php-win.exe -c %progdir%\userdata\temp\config\php.ini -q -f %sitedir%\site.loc\hello.php -O %progdir%\userdata\temp\temp.txt Это пробный скрипт hello.php. Вопрос. Как нужно сделать, чтобы результат выполнения скрипта записался в лог? 2)Дайте мне, плиз, документацию, по Код (Text): -c,-q,-f, -O Гуглила на эту тему, не нашла... Какой запрос вбить в поисковике? 3)Моя основная задача это сделать выборки из других таблиц и занести в одну. Скажу, что таблица , из которой делается выборка, большая, содержит 46549259 строк. И скрипт, наверное, будет выполнятся 3 дня... На что обратить внимание, и как его запустить, и чтобы результат занесения скрипта заносился в файл? Я попробовала запустить скрипт hello.php(см. выше), у меня не получилось(см. выше) или я что-то неправильно делаю?
Денис, очень долго, надо обработать столько строк. Два дня работает.И он стал заносить результат выборки в нужную таблицу в базу- и хостингу не хватило памяти для занесения.(писал не хватает памяти на жестком диске) Для решения этой проблемы я почистила /tmp, /var/log Диска вроде хватает...память свободная есть. Код (PHP): df -h /var/lib/mysql/ Filesystem Size Used Avail Use% Mounted on /dev/ploop40716p1 252G 15G 225G 7% / Если запустить запрос в лимитом в 100,500 строк- работает 3,432 сек. Добавлено спустя 2 минуты 54 секунды: Структура таблиц написана на сайте http://manual.mstarproject.com/index.php/Tecdoc_tables.txt Запрос: Код (PHP): SELECT DISTINCT ART_LOOKUP.ARL_SEARCH_NUMBER AS Art, IF (ART_LOOKUP.ARL_KIND IN (3, 4), BRANDS.BRA_BRAND, SUPPLIERS.SUP_BRAND) AS MfcName, ART_LOOKUP2.ARL_SEARCH_NUMBER AS ArtCanonical, IF (ART_LOOKUP2.ARL_KIND = 3, BRANDS2.BRA_BRAND, SUPPLIERS2.SUP_BRAND) AS MfcNameCanonical, DES_TEXTS.TEX_TEXT AS `Desc` FROM (ART_LOOKUP, (SELECT ARL_SEARCH_NUMBER,ARL_BRA_ID FROM ART_LOOKUP) as tab) LEFT JOIN BRANDS ON BRANDS.BRA_ID = ART_LOOKUP.ARL_BRA_ID INNER JOIN ARTICLES ON ARTICLES.ART_ID = ART_LOOKUP.ARL_ART_ID INNER JOIN SUPPLIERS ON SUPPLIERS.SUP_ID = ARTICLES.ART_SUP_ID INNER JOIN DESIGNATIONS ON DESIGNATIONS.DES_ID = ARTICLES.ART_COMPLETE_DES_ID INNER JOIN DES_TEXTS ON DES_TEXTS.TEX_ID = DESIGNATIONS.DES_TEX_ID INNER JOIN ART_LOOKUP AS ART_LOOKUP2 FORCE KEY (PRIMARY) ON ART_LOOKUP2.ARL_ART_ID = ART_LOOKUP.ARL_ART_ID LEFT JOIN BRANDS AS BRANDS2 ON BRANDS2.BRA_ID = ART_LOOKUP2.ARL_BRA_ID INNER JOIN ARTICLES AS ARTICLES2 ON ARTICLES2.ART_ID = ART_LOOKUP2.ARL_ART_ID INNER JOIN SUPPLIERS AS SUPPLIERS2 FORCE KEY (PRIMARY) ON SUPPLIERS2.SUP_ID = ARTICLES2.ART_SUP_ID WHERE ART_LOOKUP.ARL_SEARCH_NUMBER = tab.ARL_SEARCH_NUMBER AND (ART_LOOKUP.ARL_KIND IN (3, 4) AND ART_LOOKUP.ARL_BRA_ID=tab.ARL_BRA_ID) AND (ART_LOOKUP.ARL_KIND, ART_LOOKUP2.ARL_KIND) IN ((1, 1), (1, 2), (1, 3),(2, 1), (2, 2), (2, 3),(3, 1), (3, 2), (3, 3), (4, 1)) AND ищет аналоги для каждого оригинала из таблицы ART_LOOKUP. PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
хм, всего 46kk записей, 100k за 4 секунды, может просто обработать за раз по 100k записей, а не ждать 2 дня? ещё можно всё пихнуть в документо ореинтированную базу данных, например Elasticseach/Sphinx и искать через неё, а то возможно реляционная mysql не подходит
если было б нафиг, тогда бы не спрашивала... Добавлено спустя 41 секунду: На хостинге памяти вообще не хъватило.
ладно, зачем отвечать на разумные вопросы об архитектуре, когда можно сосредоточиться на решении насущных проблем. =)
kotik2 не знаю какой у тебя ресурс ограничен, деньги или время, может ещё чего, пока я вижу два выхода: переезд на сервер, например http://ru.hetzner.com/hosting/produkte_rootserver/ex60 или переделать архитектуру, может и запрос оптимизировать
да, и/или сервак нормальный взять. Не должно возникать такого, что тебе надо четыре миллиона записей побырику перекинуть из одной бд в другую каждый день часто и помногу. Это косяк в подходе. Подход надо менять.
ну расскажи пожалуйста подробнее. Не возможно же давать советы не зная всех аспектов. Что за машина? Почему так много записей живёт в другой бд? Почему не используешь одну бд? Сервис коммерчекий? У тебя есть сто евро в месяц? А пятьдесят?
Я понимаю, я делала циклом while. по лимитам типа , сначала Код (Text): $n=6000000 ; $limit =0; while ($limit<=$n){$limit2=$limit;$limit=$limit+1000 ; $query="SELECT DISTINCT ART_LOOKUP.ARL_SEARCH_NUMBER AS Art, IF (ART_LOOKUP.ARL_KIND IN (3, 4), BRANDS.BRA_BRAND, SUPPLIERS.SUP_BRAND) AS MfcName, ART_LOOKUP2.ARL_SEARCH_NUMBER AS ArtCanonical, IF (ART_LOOKUP2.ARL_KIND = 3, BRANDS2.BRA_BRAND, SUPPLIERS2.SUP_BRAND) AS MfcNameCanonical, DES_TEXTS.TEX_TEXT AS `Desc` FROM (ART_LOOKUP, (SELECT ARL_SEARCH_NUMBER,ARL_BRA_ID FROM ART_LOOKUP ".$limit2.",".$limit.") as tab) LEFT JOIN BRANDS ON BRANDS.BRA_ID = ART_LOOKUP.ARL_BRA_ID INNER JOIN ARTICLES ON ARTICLES.ART_ID = ART_LOOKUP.ARL_ART_ID INNER JOIN SUPPLIERS ON SUPPLIERS.SUP_ID = ARTICLES.ART_SUP_ID INNER JOIN DESIGNATIONS ON DESIGNATIONS.DES_ID = ARTICLES.ART_COMPLETE_DES_ID INNER JOIN DES_TEXTS ON DES_TEXTS.TEX_ID = DESIGNATIONS.DES_TEX_ID INNER JOIN ART_LOOKUP AS ART_LOOKUP2 FORCE KEY (PRIMARY) ON ART_LOOKUP2.ARL_ART_ID = ART_LOOKUP.ARL_ART_ID LEFT JOIN BRANDS AS BRANDS2 ON BRANDS2.BRA_ID = ART_LOOKUP2.ARL_BRA_ID INNER JOIN ARTICLES AS ARTICLES2 ON ARTICLES2.ART_ID = ART_LOOKUP2.ARL_ART_ID INNER JOIN SUPPLIERS AS SUPPLIERS2 FORCE KEY (PRIMARY) ON SUPPLIERS2.SUP_ID = ARTICLES2.ART_SUP_ID WHERE ART_LOOKUP.ARL_SEARCH_NUMBER = tab.ARL_SEARCH_NUMBER AND (ART_LOOKUP.ARL_KIND IN (3, 4) AND ART_LOOKUP.ARL_BRA_ID=tab.ARL_BRA_ID) AND (ART_LOOKUP.ARL_KIND, ART_LOOKUP2.ARL_KIND) IN ((1, 1), (1, 2), (1, 3),(2, 1), (2, 2), (2, 3),(3, 1), (3, 2), (3, 3), (4, 1))"; $res=mysql_query($query) or die(mysql_error()); } Все равно не катит, пишет "Got error 28 from storage engine" Скажите, пожалуйста, как насчет первых двух вопросов... Думаю на опенсервере запустить скрипт.
Я не видела ваше сообщение, его вроде не было, когда я вам отвечала. Помогите, пожалуйста. Ось дебиан. Есть база текдок, она всемирная база запчастей автомобилей. И из нее нужно выбрать все аналоги и сунуть в одну таблицу (аналоги, как и бренды выбираются из других таблиц посредством джоины). Потому что есть таблица дополнительная аналогов, чтобы не запрашивать из двух -трех и т.д таблиц.был найден путь объединения готовых данных и дополнительной таблицы в одну. Сервер коммерческий не мой, называется FastVPS, содержит Код (Text): Filesystem Size Used Avail Use% Mounted on /dev/ploop40716p1 252G 15G 225G 7% / вот столько памяти. Добавлено спустя 2 минуты 48 секунд: скажите если то так, то папка mysql не ограничена , так?
kotik2 так это жёсткий диск, а не оперативная память, оперативная на порядки быстрее, особенно для мелких данных, может mysql просто начинает в swap уходить вот и тормозит
Я запустила скрипт на хостинге в фоновом режиме, выдал в лог ошибку "Got error 28 from storage engine". Поэтому и спрашивала про жесткий диск. Делала по статье http://www.cyberciti.biz/faq/mysql-error-28-and-solution/ мне не помогло, я делала все по этой статье, кроме "Increase disk". Добавлено спустя 7 минут 54 секунды: Что делать? и как определить? у меня вот не тормозит, а выдает ошибку "Got error 28 from storage engine". Решила запустить скрипт на опенсервере,третий день комп работает, как я поняла он создал в папке /userdata/temp #sqle98_3_2.MYD размером 43 ГБ. и пока молчит-делает, как я понимаю выборки, -закончит- будет писать в нужную таблицу Код (Text): INSERT INTO .... FROM SELECT Не знаю как долго будет работать скрипт на опенсервере, а этот файл можно посмотреть?
посмотри в диспетчере задач, mysql использует swap или нет, или зная сколько на сервер оперативной памяти посмотри сколько скушала mysql больше или меньше
смотрю в диспетчере задач по команде Код (Text): ps -A Код (Text): PID TTY TIME CMD 1 ? 00:00:00 init 2 ? 00:00:00 kthreadd/79615 3 ? 00:00:00 khelper/79615 106 ? 00:00:00 upstart-udev-br 118 ? 00:00:00 udevd 137 ? 00:00:00 udevd 139 ? 00:00:00 udevd 274 ? 00:00:00 upstart-socket- 1593 ? 00:00:16 rsyslogd 1638 ? 00:00:00 saslauthd 1639 ? 00:00:00 saslauthd 1717 ? 00:00:07 cron 1750 ? 00:04:12 fail2ban-server 1861 ? 00:00:00 mysqld_safe 2200 ? 3-03:55:50 mysqld 2201 ? 00:00:00 logger 2286 ? 00:00:20 pdns_server 2288 ? 00:00:00 pdns_server 2342 ? 00:00:00 sshd 2369 ? 00:00:00 dovecot 2388 ? 00:00:00 anvil 2389 ? 00:00:00 log 2496 ? 00:00:06 master 2507 ? 00:00:20 qmgr 2527 ? 00:01:42 monit 2565 ? 00:00:13 memcached 2568 ? 00:00:00 php 2570 tty1 00:00:00 getty 2577 tty2 00:00:00 getty 3809 ? 00:04:29 main.php 3972 ? 00:00:00 tlsmgr 14036 ? 00:00:00 nginx 14037 ? 00:00:00 nginx 14103 ? 00:00:08 apache2 18009 ? 00:00:00 ssl-params 21579 ? 00:00:03 apache2 21581 ? 00:00:00 apache2 22886 ? 00:00:00 cleanup 22888 ? 00:00:00 smtp 22963 ? 00:00:00 trivial-rewrite 22981 ? 00:00:00 config 23040 ? 00:00:00 pickup 23157 ? 00:00:00 sshd 23165 ? 00:00:00 bounce 23166 pts/0 00:00:00 bash 23179 ? 00:00:00 smtpd 23180 ? 00:00:00 proxymap 23181 ? 00:00:00 anvil 23182 ? 00:00:00 auth 23184 ? 00:00:00 auth 23192 pts/0 00:00:00 ps 23996 ? 00:00:05 php 23997 ? 00:00:00 apache2 24005 ? 00:00:00 apache2 24006 ? 00:00:09 php 24008 ? 00:00:00 apache2 24009 ? 00:00:05 php Добавлено спустя 18 минут 29 секунд: как я поняла, что по параметру %CPU модуль mysqld потребляет больше оперативной памяти. -всего 99,9% Жутко вот растроилась... ума не приложу, что делать
CPU понятно что 99%, а вот memory, swap? Просто не понятно, если ей не хватает памяти оперативной, то будет использовать диск и ждать придётся долго
Код (Text): free -m total used free shared buffers cached Mem: 32768 2801 29966 0 0 2580 -/+ buffers/cache: 221 32546 Swap: 4096 49 4046 Судя по написаному, вроде мало оперативки используется, также свопа мало используется. Как я понимаю,это выводится в байтах. если это так, то это мало 32 мб оперативки. (как в далеких 2000) и что делать... Вопрос по-другому? Какие параметры нужны для интернет-магазина?Спасибо...