Oracle 8.1.7 - Explain Plan
Marek Horodyski - 11-04-2007 00:02
Oracle 8.1.7 - Explain Plan
Mam kolosalne roznice w wykonaniu tego samego zapytania w 2 roznych bazach. Moge zalogowac sie do tych baz na wlasciciela schematu. Jak sprawdzic plan wykonania zapytania w tych bazach (zwyklego selecta, nie procedury, co jest w faq) ?
Pozdrawiam, Marek Horodyski
Marek Horodyski - 11-04-2007 00:02
Użytkownik "Marek Horodyski" <m.horodyski@pzuzycie.com.pl> napisał w wiadomości news:evffnv$m24$1@atlantis.news.tpi.pl... > Mam kolosalne roznice w wykonaniu tego samego zapytania w 2 roznych > bazach. [...] > procedury, co jest w faq) ?
Juz mam ( z "system" co prawda, ale jest :)
Pozdrawiam, Marek Horodyski
Marek Horodyski - 11-04-2007 00:02
Użytkownik "Marek Horodyski" <m.horodyski@pzuzycie.com.pl> napisał w wiadomości news:evfqhn$hrh$1@atlantis.news.tpi.pl... > > Użytkownik "Marek Horodyski" <m.horodyski@pzuzycie.com.pl> napisał w > wiadomości news:evffnv$m24$1@atlantis.news.tpi.pl... >> Mam kolosalne roznice w wykonaniu tego samego zapytania w 2 roznych >> bazach. > [...] >> procedury, co jest w faq) ? > > Juz mam ( z "system" co prawda, ale jest :)
Dwa identyczne schematy, ale na jednym sa swieze statystyki, i baza zamiast skorzystac z indeksu robi full scan jednej z tabel. Rozne takie /*+ INDEX( tabela nazwa_indeksu)*/ nie skutkuja (albo nie umie uzyc). Pozostalo tylko zdropowac statystyki - tylko jakim poleceniem ?
Pozdrawiam, Marek Horodyski
ThomasO@cpas.com - 11-04-2007 00:02
On Apr 10, 8:00 am, "Marek Horodyski" <m.horody...@pzuzycie.com.pl> wrote: > Użytkownik "Marek Horodyski" <m.horody...@pzuzycie.com.pl> napisał w > wiadomościnews:evfqhn$hrh$1@atlantis.news.tpi.pl.. . > > > > > Użytkownik "Marek Horodyski" <m.horody...@pzuzycie.com.pl> napisał w > > wiadomościnews:evffnv$m24$1@atlantis.news.tpi.pl.. . > >> Mam kolosalne roznice w wykonaniu tego samego zapytania w 2 roznych > >> bazach. > > [...] > >> procedury, co jest w faq) ? > > > Juz mam ( z "system" co prawda, ale jest :) > > Dwa identyczne schematy, ale na jednym sa swieze statystyki, i baza zamiast > skorzystac z indeksu robi full scan jednej z tabel. > Rozne takie /*+ INDEX( tabela nazwa_indeksu)*/ nie skutkuja (albo nie umie > uzyc). Pozostalo tylko zdropowac statystyki - tylko jakim poleceniem ? > > Pozdrawiam, > Marek Horodyski
Marek, Syntax do HINT jest: SELECT /* INDEX( <table name>, <index name> ) */... Hint jest ignorowany jezeli masz syntax error "," lub index nie istnieje.
Drop stats - to bardzo zly pomysl. Syntax: begin dbms_utility.ANALYZE_SCHEMA(<schema name>,'DELETE'); end; Thomas
Marek Horodyski - 11-04-2007 00:02
Użytkownik <ThomasO@cpas.com> napisał w wiadomości news:1176211810.945582.84390@n76g2000hsh.googlegro ups.com... On Apr 10, 8:00 am, "Marek Horodyski" <m.horody...@pzuzycie.com.pl> wrote: > Użytkownik "Marek Horodyski" <m.horody...@pzuzycie.com.pl> napisał w > wiadomościnews:evfqhn$hrh$1@atlantis.news.tpi.pl.. . > > > > > Użytkownik "Marek Horodyski" <m.horody...@pzuzycie.com.pl> napisał w
[...]
Dzieki. Koniec koncow - statystyki zostaly - chociaz wyglada na to, ze to wlasnie po ich uaktualnieniu sie popsulo. Dziwnie to wyglada, ale /* INDEX( <table name>, <index name> ) */ nie pomagalo. Owszem, wykorzystywal indeks, ale robil na nim full scan. Trwalo tak samo dlugo jak full scan na tabeli. Troche przez przypadek (i zaskoczenie!) kolega wpadl innego hinta :
/*+ ordered */
i index zaczal byc RANGE SCAN. No i mam 78 msec. zamiast 5s. :) Niby nie na to wskazuje ten hint, ale dziala, i chwalic go za to !
Pozdrawiam, Marek Horodyski
ThomasO@cpas.com - 11-04-2007 00:02
On Apr 10, 11:06 am, "Marek Horodyski" <m.horody...@pzuzycie.com.pl> wrote: > Użytkownik <Thom...@cpas.com> napisał w wiadomościnews:1176211810.945582.84390@n76g2000hsh .googlegroups.com... > On Apr 10, 8:00 am, "Marek Horodyski" <m.horody...@pzuzycie.com.pl> > wrote: > > > Użytkownik "Marek Horodyski" <m.horody...@pzuzycie.com.pl> napisał w > > wiadomościnews:evfqhn$hrh$1@atlantis.news.tpi.pl.. . > > > > Użytkownik "Marek Horodyski" <m.horody...@pzuzycie.com.pl> napisał w > > [...] > > Dzieki. > Koniec koncow - statystyki zostaly - chociaz wyglada na to, ze to wlasniepo > ich uaktualnieniu sie popsulo. > Dziwnie to wyglada, ale /* INDEX( <table name>, <index name> ) */ nie > pomagalo. Owszem, wykorzystywal indeks, ale robil na nim full scan. > Trwalo tak samo dlugo jak full scan na tabeli. Troche przez przypadek (i > zaskoczenie!) kolega wpadl innego hinta : > > /*+ ordered */ > > i index zaczal byc RANGE SCAN. No i mam 78 msec. zamiast 5s. :) > Niby nie na to wskazuje ten hint, ale dziala, i chwalic go za to ! > > Pozdrawiam, > Marek Horodyski
Marek, Moja wina: Syntax jest: SELECT /*+ INDEX( <table name>, <index name> ) */... Zapomnialem o "+" Thomas
pwola - 11-04-2007 00:02
>Koniec koncow - statystyki zostaly - chociaz wyglada na to, ze to wlasnie po >ich uaktualnieniu sie popsulo. > kolega wpadl innego hinta : > > /*+ ordered */ >
Sprawdź jeszcze
/*+ USE_NL(table1 table2) */ albo /*+ USE_HASH(table1 table2) */
To pierwsze jest lepsze gdy wynik łaczenia tabel ma tylko kilka rekordów, to drugie gdy trzeba połączyć większość rekordów.
No i niestety ten typ tak ma, że naliczanie statystyk to czasem nie jest dobry pomysł. Też tak miałem - po naliczeniu statystyk ORACLE zaczął forsować HASH_JOINy chociaż NESTED_LOOPS dawało kilkanaście razy szybsze odpowiedzi. Nie udało mi się wtedy znaleźć odpowiedzi jak dotrzeć bezpośrednio do parametrów optymalizatora, żeby go przekonać, że nie ma racji ;-) i trzeba było dopisać hinty do kilkudziesięciu zapytań i skasować statystyki :-(
I jeszcze na koniec drobna uwaga - gdy ORACLE gwałtownie zaczyna zmieniać sposoby wykonania zapytań może to być sygnałem, że w systemie zaczyna się coś dziać ( tabele przekroczyły jakieś krytyczne wielkości, fragmentacja tabel jest za duża, system dyskowy zaczyna mieć problemy itp.)
Marek Horodyski - 12-04-2007 00:08
Użytkownik "pwola" <pwola@polbox.com> napisał w wiadomości news:t4rn13t2cpcflep9r9n0h97a7v3rjhvtg6@4ax.com... > >Koniec koncow - statystyki zostaly - chociaz wyglada na to, ze to wlasnie > >po >>ich uaktualnieniu sie popsulo. >> kolega wpadl innego hinta : >> >> /*+ ordered */ >> > > Sprawdź jeszcze > > /*+ USE_NL(table1 table2) */ > albo > /*+ USE_HASH(table1 table2) */
Tylko ordered :) Powyzsze bylo probowane, i kolega prawie sie poddajac, ze slawami "nic nie poradze" wpisal ten ordered przed index( - jakby 2 hinty na raz - i zadzialalo - co bylo [nie]malym zaskoczeniem :). Zostalo /*+ ordered */ - dziala wyśmienicie, no i statystyki pozostały (ich skasowanie nie pomagalo).
Pozdrawiam, Marek Horodyski
Marek Horodyski - 12-04-2007 00:08
Użytkownik <ThomasO@cpas.com> napisał w wiadomości news:1176229080.269410.138230@d57g2000hsg.googlegr oups.com... On Apr 10, 11:06 am, "Marek Horodyski" <m.horody...@pzuzycie.com.pl> wrote: > Użytkownik <Thom...@cpas.com> napisał w > wiadomościnews:1176211810.945582.84390@n76g2000hsh .googlegroups.com... > On Apr 10, 8:00 am, "Marek Horodyski" <m.horody...@pzuzycie.com.pl> > wrote: > > > Użytkownik "Marek Horodyski" <m.horody...@pzuzycie.com.pl> napisał w > > wiadomościnews:evfqhn$hrh$1@atlantis.news.tpi.pl.. . > > > > Użytkownik "Marek Horodyski" <m.horody...@pzuzycie.com.pl> napisał w >
[...]
>Marek, >Moja wina: >Syntax jest: >SELECT /*+ INDEX( <table name>, <index name> ) */... >Zapomnialem o "+" >Thomas
O "+" wiedzialem. Nie pomagalo. Pewnikiem dlatego ze dotyczylo to "like" i konkatenacji po takich "dziwnych" polach IE$0..n, z odfiltrowaniem po uzyciu funkcji statystycznych. Cos na ksztalt :
select nvl( sum( kwota), 0) from ( select /*+ ordered */ p.id_ub, data_od, kwota, row_number() over( PARTITION BY p.id_ub ORDER BY data_od DESC) porzadek from id_ub p, war w where p.IS_DELETED = 'N' and w.IS_DELETED = 'N' and p.ie$1 like :1||'%' and w.ie$0 like p.ID_UB||'%' and data_od <= :2) where porzadek = 1
Mozna by pozakladac inaczej indeksy, ale przyczyna takich zapytan lezy w mieszaniu roznych technologii. Powoduje to "ssanie dwóch matek" :)
Pozdrawiam,
Marek Horodyski
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 19g +Insert +Insert +Insert...
[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?=
[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.plczterowers.keep.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 |
|