При выполнении дампов обнаружил что даже очень приличная память на моем сервере долго не выдерживает вроде бы и коннект выключаю,и файл закрываю,а тем не менее при выполнении дампиков по 800мб память в 4гб засирается в 4-5 выполнений т.е. этот скриптсчас прекрасно годится для вызывания зависания сервера как бы это можно исправить может кто помочь? (ну кроме докупки оперативной памяти? ) Код (Text): // процедура восстановления базы данных из дампа. if (($dump)AND($start==cmsg(DALEE))) { $path=getcwd ()."/_local/dump/"; @$connect = mysql_connect ($prdbdata[$tbl][6], $sd[14] , $sd[17]); $dumpfile=$dump[0]; $f=fopen ($path.$dumpfile,"r"); if ($views) print_r ($dump); echo "file=$path $dumpfile"; $query=""; while ($a=fgets ($f)) {// пока читается if ($a[0]==="#") continue; if ($a[1]==="#") continue;// skip comment lines $najti=strpos ($a,";"); $najti2=strpos ($a,"SELECT DATABASE"); $najti3=strpos ($a,"create database if not exists"); if ($najti2!==false) {$a=str_replace ("SELECT DATABASE ","USE ",$a);} if ($najti3!==false) {mysql_query ($a,$connect); $a=str_replace ("create database if not exists","USE ",$a); echo "<br>".cmsg (W_NDB_FORC)."($a)<br>"; } if ($najti===false) {$query.=$a;continue;} if ($najti!==false) {$query.=$a;} if ($views) echo "<br>EXECUTING:".$query."<br>"; $result=mysql_query ($query,$connect); $query=""; $queries++; //if ($queries) ob_flush();//die ("lim"); if (($result==false)) {$err++; if ($views) echo "ERROR QUERY:$a<br><br>";} // вот это верно а не -1 тут false сверятся должен!!!! if ($result==0) $skipped++; sqlerr();ob_flush(); } if (!$pr[8]) echo "DEBUG $query.<br>"; $x=cmsg (WF_EXQUES)."$queries"; echo "$x<br>"; //$x=cmsg ("BCK_TBL+")."".$tables; echo "$x<br>"; $x=cmsg (BCK_SKIP).$skipped; echo "$x<br>"; $x=cmsg (BCK_ERR).$err; echo "$x<br>"; $query=""; mysql_close($connect); fclose ($f); ob_clean(); //apache_child_terminate(); } PS И еще как можно установить 16 и более ГБ памяти если в продаже есть линейки только на 2гб максимум.? Доб. Вроде решил ,осталось серв перегрузить еще разок для чистоты проверки - нет все равно с каждым разом памяти становиться все меньше и меньше ((
АП ну у меня заливка дампа за 4-5 заходов засоряет всю память серву и превращается в лагодром до перезагрузки ПС про память чисто из интереса спросил, экстенсивным методом проблемы решатьне привык.
в том то и дело смотрю через Gnome системный монитор и видно в общем занято 3.9гб из 4 но приэтом все программы в сумме едва занимают 500мб такое ощущение что памят просто так выбрасывается
dj--alex И чего, система виснет? Или работать начинает медленней? 1. Какая самая медленная система в компьютере? Правильный ответ: система ввода-вывода. 2. Какая самая быстрая система в компьютере? Правильный ответ: процессор-память (а память внутри проца еще быстрее, но речь не о ней). 3. Как ускорить работу системы ввода-вывода для большинства случаев? Правильный ответ, думаю, ясен.
сначала начинает медленней работать когда кончается оперативка начинает свопить если продолжать запускать все новые и новые бэкапы систему охватывает паралич и мышку можно двигать только 1 раз в минуту. и то она дикими рывками прыгает после этого уже ничего не работает. если дать компу время часиков 10 то он всеже выполняет эти задачи,но память и своп остаются занятыми но в процессах их нету,т.е. память свободна ,но она на самом деле не свободна, но она свободна,но она на самом деле не свободна, но она свободна ,но на самом деле не свободна, но она свободна....
Размер оперативы и размер свопа - какой? через top и иже с ними нельзя считать напрямую загрузку памяти, ибо там не учитываеются шаринг либ. Да, и не стоит на такие вещи запускать апач. Лучше просто CLI php, память у тебя вполне может где то там и терятся.
т.е. апач просто не предназначен для таких операций? жалко,я думал его можно полноценно использовать для любых целей. эмм cli выйдет запустить из под веб ? если да то супер
dj--alex Лучший способ импортировать большой дамп - скормить его напрямую бинарнику мускула. Под виндой это выглядит так: C:\...\MySQL4\bin\mysql.exe --character-sets-dir=C:\...\MySQL4\share\charsets -uroot -p12345 <bigdump.sql Только надо в начало файла дампа добавить команду выбора базы: USE mydatabase;
мм у меня линуха ubuntu 8 из под php выйдет сгенерировать и запустить команду под правами юзера apache? команды будут каждый раз разными меня права на файлы там добивают,все предусмотреть нужно или RO будет. и я что то читал что в mysql6 уберут комнды backup table,restore table это же ужасно еще одим методом бэкапирования меньше
а все дело в кеше запросов Mysql помоему счас после 5 запросов тоько на 500 мб объем невозвращенной памяти вырос но я заливал 2 одни и теже базы на 1.5гб в объеме. сум.
dj--alex Я тебе подсказал прекрасный способ, который много раз пользовался... уверяю, перенаправлять потоки можно и под *nix-ом...