[ORACLE] Problem z insertem
=?ISO-8859-2?Q?qqru=BCNIK?= - 12-04-2007 00:08
[ORACLE] Problem z insertem
Wciąż często Oracle mnie zadziwia - niestety zazwyczaj negatywnie.
insert into MojaTabela (/wypisane pola/})
select /te same pola/ itd..
Selekcik jest dość złożony i korzysta z wielu tabel i vidoków (z czego niektóre mają naprawdę dużo rekordów), sprawdza także existem czy rekordy z wyniku już nie siedzą w "MojaTabela"
Wykonanie samego selecta (bez insertowania) zajmuje ok 2 min - długo ale to wyjątkowo rzadko wykonywana operacja - więc do zniesienia.
Jeżeli zaś wynik wrzucany jest do MojejTabeli wykonanie tego trwa 2h a czasem 15h (w zależności od chumoru servera)
Co może powodować takie trudności z zainsertowaniem?
MojaTabela zawiera ok. 10 tyś. rekordów a dorzucam do niej ok 50 tyś. (w sumie żadna ilość).
MojaTabela nie posiada triggerów, kluczy, indeksów - nic. Poprostu ma tylko same pola (służy mi tylko do chwilowego zgromadzenia wyników).
Obciążenie serwera podczas całej tej operacji jest znikome.
Co jest grane? Ma ktoś jakiś pomysł?
Dodam, że to nie pierwszy raz mam taki problem. :o/
Pozdroofki -------------- qqruźNIK
Marek Horodyski - 12-04-2007 00:08
Użytkownik "qqruźNIK" <qqruznik@wywalto.poczta.onet.pl> napisał w wiadomości news:evi6f6$tk4$1@news.onet.pl... > Wciąż często Oracle mnie zadziwia - niestety zazwyczaj negatywnie. > > > insert into MojaTabela (/wypisane pola/}) > [...] > Wykonanie samego selecta (bez insertowania) zajmuje ok 2 min - długo ale > to wyjątkowo rzadko wykonywana operacja - więc do zniesienia. > > Jeżeli zaś wynik wrzucany jest do MojejTabeli wykonanie tego trwa 2h a > czasem 15h (w zależności od chumoru servera) > > Co może powodować takie trudności z zainsertowaniem?
A czy to napewno jest problem z insertem ? Probowales skipowac/feczowac/listowac wynik tego zapytania ? Zdarzalo mi sie ze pewne zapytania w konstrukcji "A" dawaly pierwsze rekordy po 3s, ale odczytanie wyniku selecta konczylo sie po 40 min., natomiast po zmianie zapytania na konstrukcje "B" mialem pierwsze rekordy po 5s, a caly przeczytany w 6stej sekundzie.
Pozdrawiam, Marek Horodyski
=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 12-04-2007 00:08
Marek Horodyski wrote: > Zdarzalo mi sie ze pewne zapytania w konstrukcji "A" dawaly pierwsze > rekordy po 3s, ale odczytanie wyniku selecta konczylo sie po 40 min., > natomiast po zmianie zapytania na konstrukcje "B" mialem pierwsze rekordy > po 5s, a caly przeczytany w 6stej sekundzie.
A to oczywiście też możliwe. Wystarczy dodać +all_rows i ogólnie testować raczej przez sqlplusa (set timing on), a nie przez SQLDeveloper/TOAD/etc, bo one z racji graficznego interfejsu starają się stronicować wyniki i możemy dać się oszukać.
-- Michał Kuratczyk
=?ISO-8859-2?Q?qqru=BCNIK?= - 12-04-2007 00:08
Marek Horodyski napisał(a):
> A czy to napewno jest problem z insertem ? > Probowales skipowac/feczowac/listowac wynik tego zapytania ?
Tak feczowałem do końca - To było pierwsze co mi przyszło na myśl. :-/ Resztę rekordów zaciągał szybko - nie pamiętam czasu ale na oko można powiedzieć że leciało to z prędkością zbliżoną do szybkości z jaką końcówka mogła allokować pamięć na wynik.
Pozdroofki ----------- qqruźNIK
Marek Horodyski - 13-04-2007 00:03
Użytkownik "qqruźNIK" <qqruznik@wywalto.poczta.onet.pl> napisał w wiadomości news:eviu1b$bjf$1@news.onet.pl... > Marek Horodyski napisał(a): > >> A czy to napewno jest problem z insertem ? >> Probowales skipowac/feczowac/listowac wynik tego zapytania ? > > Tak feczowałem do końca - To było pierwsze co mi przyszło na myśl. :-/ > Resztę rekordów zaciągał szybko - nie pamiętam czasu ale na oko można > powiedzieć że leciało to z prędkością zbliżoną do szybkości z jaką > końcówka mogła allokować pamięć na wynik.
No to jedyne co mi przychodzi na mysl, to wkladanie w transakcjach i commitowanie co jakies n rekordow. To n w jednym z algorytmow ostatnio dobieralem "na oko" testujac pomiedzy 100 a 600, pozostajac na 500. Nie wiedzialem czym sie kierowac dokladnie, stad ten empiryzm. Zbyt rewelacyjnycyjnych wynikow nie uzyskalem, rzedu 30%. To tez bylo insertowanie rzedu 50k rekordow, i faktycznie moze trwac ladnie ponad 0.5h. Jak baza zarznieta to i ponad godzine. Algorytm wyglada tak, ze jest czytanie z remote bazy A do lokalnego dbfa w jakies kilka[nascie] sekund (pomijajac czas pierwotnego zapytania), praktycznie niemierzalny czas przeliczen, a potem insertowane do lokalnej bazy B - i tu juz trwa to naprawde zauwazalnie dlugo. Widac "ten typ tak ma" :(. Sprobuj jeszcze z tymi transakcjami po wiekszej grupie rekordow.
Pozdrawiam, Marek Horodyski
Marcin 'goral' Goralski - 13-04-2007 00:03
qqruźNIK wrote:
> Co jest grane? Ma ktoś jakiś pomysł?
taki sobie luzny pomysl - wprawdzie 50k rekordow to nie specjalnie wiele, ale ... sprawdz co sie dzieje z redo logami i ich przelaczaniem - czy przypadkiem nie ma zwloki na online'owym backupie. Byc moze odpowiednie ustawienie parametrow logow pomoze. Baza chodzi w archivelog ? Jesli tak, to przy malej wielkosci plikow tworzacych grupe redo warto zerknac na ilosc procesow archivera. Piszesz, ze zapis idzie wolno - jak wyglada w ogole przydzial pamieci dla tej instancji ? Niestety, ciezko gdybyac nie znajac konfiguracji - obciazenie servera piszesz, ze minimalne - a jak obciazenie zasobow dyskowych, gdzie skladowana jest ta tablica ? Jej tablespace zawiera sie w jednym pliku na jednym urzadzeniu (fizycznym), czy tez moze masz to rozproszone /
marcin
PS sprawdzales, jak by to wygladalo gdybys ladowal dane z pliku, np sqlloaderem ?
=?ISO-8859-2?Q?S=B3awomir_Szysz=B3o?= - 13-04-2007 00:03
Dnia Wed, 11 Apr 2007 10:33:52 +0200, qqruźNIK <qqruznik@wywalto.poczta.onet.pl> wklepał(-a):
>Wciąż często Oracle mnie zadziwia - niestety zazwyczaj negatywnie. > > >insert into MojaTabela (/wypisane pola/}) > >select /te same pola/ >itd.. > > >Selekcik jest dość złożony i korzysta z wielu tabel i vidoków (z czego >niektóre mają naprawdę dużo rekordów), sprawdza także existem czy ^^^^^^^^^^^^^^^^^^^^^^^ >rekordy z wyniku już nie siedzą w "MojaTabela" > >Wykonanie samego selecta (bez insertowania) zajmuje ok 2 min - długo ale >to wyjątkowo rzadko wykonywana operacja - więc do zniesienia.
A bez tego exists to jak działa?
Może coś takiego będzie lepsze:
insert ... select a, b, c minus select a, b, c from MojaTabela;
o ile te rekordy wstawiane kolejny raz są identyczne z istniejącymi. -- Sławomir Szyszło mailto:slaszysz@poczta.onet.pl Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/ Archiwum http://groups.google.com/groups?grou...mp.bazy-danych
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?=
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
[Oracle] jak =?ISO-8859-2?Q?ograniczy=E6_pami=EA=E6_dla_se?==?ISO-8859-2?Q?rwera=3F?=
=?ISO-8859-2?Q?=5BOT=5D_Zdany_egzamin_Oracle_1Z0-007_a?==?ISO-8859-2?Q?_brak_informacji_na_stronie_Prometric_-_czy?==?ISO-8859-2?Q?_co=B6_nie_tak=3F?=
[oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?=
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
[oracle 10g] czy =?ISO-8859-2?Q?mo=BFna_wy=B3=B1czy=E6_wszys?==?ISO-8859-2?Q?tkie_wi=EAzy_w_schemacie=3F?=
MSSQL Express czy Oracle Express
=?iso-8859-2?q?[oracle]_Jak_sprawdzi=E6_wielko=B6=E6_tabeli_=3F=3F?=
=?ISO-8859-2?Q?Poszukjue_ksi=B1=BFki_"Oracle_?= =?ISO-8859-2?Q?optymalizacja_wydajno=B6ci"..?=
zanotowane.pldoc.pisz.plpdf.pisz.plnawschodzie.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|