|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Vadim Tzirulnicov 2:5020/400 20 Nov 2004 13:53:37 To : All Subject : Утечка памяти. Помогите ! -------------------------------------------------------------------------------- Я столкнулся с проблемой, которую уже несколько недель не могу решить. А проблема такая - для ускорения индексации фтп-ресурсов написал две дополнительные таблицы, одна из которых (phpmw_Ftpsearch_words) содержит слова из URL'ов в phpmw_ftpsearch_base. К примеру, URL ftp://possum.ints.ru/abc.zip разбивается в этой таблице на: ftp possum ossum ssum sum ints nts abc zip В таблице phpmw_ftpsearch_wordsmatch стоят соответствия между таблицей слов и таблицей юрлов. Скрипт отрабатывается с терминала от рута, и ограничений у него нет (проверено). Без использования таблицы слов и соответствий между словами и юрлами скрипт нормально отрабатывается. Когда же включаю строки кода, работающие с этими ополнительными таблицами: =head $insertid = $db_handle->{'mysql_insertid'}; @word_ar=split(/[^a-zA-Zа-яА-Я0-9]+/,($type eq 'd'?$dirName.'/':'').$name); foreach $temp(@word_ar){ while(1){ goto END_WHILE if $temp eq ''; # Проверяем, существует ли в phpmw_ftpsearch_words слово "$temp" $db_shandle=$db_handle->prepare("SELECT ftpsearchword_id from ".$db_prefix."_ftpsearch_words where ftpsearchword_text like ?") or die $db_shandle->errstr; $db_shandle->execute($temp); @rowTemp=$db_shandle->fetchrow_array; if (!scalar(@rowTemp)){ $db_shandle=$db_handle->prepare("INSERT into ".$db_prefix."_ftpsearch_words (ftpsearchword_text) VALUES (?)"); $db_shandle->execute($temp); $rowTemp[0]=$db_handle->{'mysql_insertid'}; } sql_query("INSERT INTO ".$db_prefix."_ftpsearch_wordmatch VALUES ($insertid,".$rowTemp[0].",".$row[0].")"); $temp=substr($temp,1); END_WHILE: last if length($temp)<3; } } =cut , скрипт некоторое время после старта нормально отрабатывается, а затем вываливается: DBD::MySQL::st failed: Outr of memory ! Хотя на момент получения даненой ошибки оперативная память используется не полностью - максимум на 3/4, своп вообще пуст. Вот эти две дополнительные таблицы: create table phpmw_ftpsearch_words( # До 4.294.967.294 слов ftpsearchword_text varchar(50) binary not null default '', ftpsearchword_id int(11) UNSIGNED NOT NULL auto_increment, PRIMARY KEY (ftpsearchword_text), KEY ftpsearchword_id (ftpsearchword_id) ); create table phpmw_ftpsearch_wordmatch( ftpsearchwm_baseid mediumint(8) UNSIGNED NOT NULL default '0', ftpsearchwm_wordid int(11) UNSIGNED NOT NULL default '0', ftpsearchwm_hostid mediumint(8) UNSIGNED NOT NULL default '0', KEY ftpsearchwm_baseid (ftpsearchwm_baseid), KEY ftpsearchwm_wordid (ftpsearchwm_wordid), KEY ftpsearchwm_hostid (ftpsearchwm_hostid) ); В скрипте use strict -w; стоит. Ограничений на выполнение скрипта, ещё раз повторяюсь, нет. Hа момент получения "out of memory" все таблицы, с которыми работает скрипт, имеют суммарный объём в 20-25 мег. --- ifmail v.2.15dev5.3 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/657738ed0a0e.html, оценка из 5, голосов 10
|