ugrás a tartalomhoz

insert into select, LEFT JOIN es memory limit problema

carstepPCE · 2008. Szep. 15. (H), 11.37
Udv Mindenkinek,

talalkozott mar valaki olyannal, hogy egy 'INSERT INTO SELECT ...' formaju lekerdezes memory limit okozna?

Hatter:

Vam egy import funkciom, amivel feltoltok szamos csv fajl, de mivel folyamatosan bovulo adatokrol van szo igyekszem a fajlokat elotte betenni egy temp_.. tablaba es Left joinnal csak az ujjakat athelyezni. Van egy memorialimitem a szolgaltatonal 16 MByte es van egy csv fajlom, amely 106 MByte nagy es 400000+ bejegyzest tartalmaz.

Most eppen az inicializalasnal vagyok, tehat minden adat bekerul a tablaba (400e+). A temptablaba beteszi az adatokat, de az INSERT INTO SELECT ... LEFT JOIN -nal mar nem birkozik meg, HTTP status 500-al elszall.

Van valakinek esetleg valamilyen tapasztalata ezzel?

Koszonettel:
Udv
Sanyi
 
1

Darabonként...

janoszen · 2008. Szep. 15. (H), 12.55
Szvsz inkább akard darabonként betölteni. A saját gépeden állítsd elő a darabolt formátumot és írj egy PHP alkalmazást, aminek meg tudod mondani, melyik darabot töltse be. Az egész kócerájt tölsd föl, majd a saját gépeden sorba hívd meg minden darabra.

Egyébként nem akarom mondani, de ha ekkora adatmennyiséggel dolgozol, akkor valószínűleg nem jó szolgáltatót választottál a feladathoz.

Az más lapra tartozik, hogy ahhoz hogy egy osztott tárhelyen ekkora adatbázist hatékonyan tudj használni, picit érteni is kell ha nem akarod, hogy a szolgáltató túlterhelés miatt kivágjon. Azért mondom ezt, mert viszonylag triviális a probléma megoldása, ami arra enged következtetni hogy nincs túl sok tapasztalatod ilyesmivel. Mindenképpen nézz utána az indexeknek és a betöltésnél is hagyd a szervert levegőhöz jutni.
2

kosz a megerositest

carstepPCE · 2008. Szep. 15. (H), 13.40
Udv,

valami hasonlora magam is gondoltam es implementaltam is a felet, csak be kell fejeznem. mivel phpmyadmin alatt nem volt gond a left join -os megoldassal( a szolgaltatonal sem), felteteleztem nalam sem lesz gond a kodban, de tevedtem (nem mindig hallgatok az elso megerzesemre). Gondolom, hogy valami trivialis problema a dolog, de nem talaltam meg micsoda (de megkeresem). :-(

koszi meg1x

Udv
Sanyi

UI: dedikalt a szerverunk, csak robosztusan akarom megirni a kodot a minimalis szerverigenyt figyelembe veve. Az index termeszetesen figyelembe van veve :-)
3

phpmyadmin limit

tgr · 2008. Szep. 15. (H), 14.06
A phpmyadmin hozzá szokott fűzni egy limit 30-at a lekérdezésekhez.
4

Dedikált...

janoszen · 2008. Szep. 15. (H), 14.15
Ha dedikált szerverről van szó, akkor miről beszélünk? Nem probléma a PHP max_execution_time, úgyhogy lehet soronként beolvasni és insert-elni az adatokat, nem számít a memory limit. Ha meg nem rendszeres betöltésről van szó, akkor helyi gépen csinálj egy SQL dumpot és húzd be konzolból.