konto usunięte

Temat: Full Scan - pytanie

Witam mam pytanie:
Czy zgodnie z Metalinkiem [ID 77496.1] jeśli w klauzuli where użyjemy like, a po nim zmiennej bindowanej (przykład poniżej):

select * from TABLE where COLUMN like :COLUMN_BIND_VARIABLE

to oracle zawsze wykona full scan na tabeli, czy jest jakaś możliwość, żeby jednak skorzystał z indeksu.

do zmiennej :COLUMN_BIND_VARIABLE w aplikacji którą analizuję podstawiane są wartości w formacie
'TEKST%'

Wg tego samego artykułu na metalinku ORACLE potrafi dla takiej składni:
select * from CITIES WHERE CITY LIKE 'YORK%'
wykorzystać indeks.

Temat: Full Scan - pytanie

Marek K.:
Witam mam pytanie:
Czy zgodnie z Metalinkiem [ID 77496.1] jeśli w klauzuli where użyjemy like, a po nim zmiennej bindowanej (przykład poniżej):

select * from TABLE where COLUMN like :COLUMN_BIND_VARIABLE

to oracle zawsze wykona full scan na tabeli, czy jest jakaś możliwość, żeby jednak skorzystał z indeksu.

do zmiennej :COLUMN_BIND_VARIABLE w aplikacji którą analizuję podstawiane są wartości w formacie
'TEKST%'

Wg tego samego artykułu na metalinku ORACLE potrafi dla takiej składni:
select * from CITIES WHERE CITY LIKE 'YORK%'
wykorzystać indeks.


Witam,
Jesli masz 8 albo 9i i uzywasz RBO to tak bedzie.

Ale Rule based optimizer nie jest supportowany od wersji 10g.
To czy baza uzyje indeksu czy nie zalezy od w przypadku tego query od statystyka zebranych dla indeksu i tabeli oraz w zaleznosci od wersji bazy od wartosci przekazanego parametru:
dla 10g bedzie to pierwsza przekazana wartosc i ten plan bedzie obowiazywal do konca zycia zapytania w shared pool
dla 11g jest mozliwosc zmiany planu dla roznych wartosci parameteru.

ps.
czytajac MOS-a nalezy duza uwage zwracac na date publikacji lub zmiany noty oraz na wersje bazy.

pozdrawiam,
Marcin

konto usunięte

Temat: Full Scan - pytanie

Marcin Przepiórowski:
Witam,
Jesli masz 8 albo 9i i uzywasz RBO to tak bedzie.

ps.
czytajac MOS-a nalezy duza uwage zwracac na date publikacji lub zmiany noty oraz na wersje bazy.

pozdrawiam,
Marcin
Marcinie
dzięki za odpowiedź, dopiero teraz dokładnie ją przeczytałem

Jeszcze dwa pytania:
1. Rozumiem że przy zastosowaniu optymalizatora kosztowego możliwe jest wykorzystanie indeksu w zapytaniu:
select * from TABLE where COLUMN like :COLUMN_BIND_VARIABLE

2. Czy jeśli używany jest optymalizator kosztowy i naliczone są statystyki dla tabeli i indeksu założonego na kolumnie o którą się rozchodzi, a nadal wykonywany jest full scan, to po prostu optymalizator uznaje, że to najlepsze rozwiązanie i lepiej w to nie ingerować ?

Pozdrawiam.Marek K. edytował(a) ten post dnia 28.01.10 o godzinie 19:55

konto usunięte

Temat: Full Scan - pytanie

Marek K.:
2. Czy jeśli używany jest optymalizator kosztowy i naliczone są statystyki dla tabeli i indeksu założonego na kolumnie o którą się rozchodzi, a nadal wykonywany jest full scan, to po prostu optymalizator uznaje, że to najlepsze rozwiązanie i lepiej w to nie ingerować ?

Przy niedużej ilości rekordów do przetworzenia jak i szybkim sprzęcie to w często nie ma znaczenia.

Ale przy większych bazach ... dość często idzie złą ścieżką. Jakiś czas temu "walczyliśmy" z bazą, gdzie największa tabela miała 25 miliardów rekordów .... NA ROK. A łączyło się ją z "milionowymi" tabelami. I bardzo często bez hintów po prostu nie było szans doczekać na wynik.

Temat: Full Scan - pytanie

Krzysztof Pułapa:
Marek K.:
2. Czy jeśli używany jest optymalizator kosztowy i naliczone są statystyki dla tabeli i indeksu założonego na kolumnie o którą się rozchodzi, a nadal wykonywany jest full scan, to po prostu optymalizator uznaje, że to najlepsze rozwiązanie i lepiej w to nie ingerować ?

Ale przy większych bazach ... dość często idzie złą ścieżką. Jakiś czas temu "walczyliśmy" z bazą, gdzie największa tabela miała 25 miliardów rekordów .... NA ROK. A łączyło się ją z "milionowymi" tabelami. I bardzo często bez hintów po prostu nie było szans doczekać na wynik.

Witam,

Zla droga wynika ze zlych obliczen w planie - w wiekszosci przypadkow chodzi o to ze CBO zle zaklada kardynalosc zlaczenia a co za tym idzie kolejosc zlaczen i ich rodzaj.
Musze przyznac ze z wersji na wersje jest coraz lepiej
a i dodatki w postaci constraintow sa juz wykorzystywane przez CBO w celu optymalizacji i eliminacji zlaczen.

Rozwiazania sa 3:
- hinty - ja osobiscie za nimi nie przepadam
- fake table statistics tak zeby plan byl po naszej mysli
- sql_profile/outline

pozdrawiam,
Marcin

konto usunięte

Temat: Full Scan - pytanie

Dziękuję Panowie za odpowiedzi.
Z pytaniem 1 to rozumiem że oracle przy przekazaniu w zapytaniu zmiennej bindowanej przy wykorzystywaniu optymalizatora kosztowego również może użyć indeksu, jeśli tylko uzna że będzie to lepsze rozwiązanie.

Pozdrawiam

konto usunięte

Temat: Full Scan - pytanie

Marcin Przepiórowski:
Krzysztof Pułapa:
Marek K.:
2. Czy jeśli używany jest optymalizator kosztowy i naliczone są statystyki dla tabeli i indeksu założonego na kolumnie o którą się rozchodzi, a nadal wykonywany jest full scan, to po prostu optymalizator uznaje, że to najlepsze rozwiązanie i lepiej w to nie ingerować ?

Ale przy większych bazach ... dość często idzie złą ścieżką. Jakiś czas temu "walczyliśmy" z bazą, gdzie największa tabela miała 25 miliardów rekordów .... NA ROK. A łączyło się ją z "milionowymi" tabelami. I bardzo często bez hintów po prostu nie było szans doczekać na wynik.

Witam,

Zla droga wynika ze zlych obliczen w planie - w wiekszosci przypadkow chodzi o to ze CBO zle zaklada kardynalosc zlaczenia a co za tym idzie kolejosc zlaczen i ich rodzaj.
Musze przyznac ze z wersji na wersje jest coraz lepiej
a i dodatki w postaci constraintow sa juz wykorzystywane przez CBO w celu optymalizacji i eliminacji zlaczen.

Rozwiazania sa 3:
- hinty - ja osobiscie za nimi nie przepadam
- fake table statistics tak zeby plan byl po naszej mysli
- sql_profile/outline

pozdrawiam,
Marcin

Witam,
A w przypadku bind variables w zapytaniach to statystyki i histogramy przypadkiem nie maja znaczenia? W chwili wykonywania polecenia oracle nie zna rzeczywistej wartosci, wiec nie moze opierac sie na statystykach. Dlategóż azaliż oracle wprowadził nowy feature (po polskiemu zmora dibijeja) bind peeking. Czyli zasadniczo jakis baran barankiewicz wykonuje na bazie pierwszy raz zapytanie z kretyńskimi wartościami (a tak sobie sprawdze co sie stanie) wywołującymi full scana, i potem każde następne wykonanie ominie idealny index;).
Proponuje wyłączyć bind peeking, a w przypadku pojawienia sie zapytań z bindami które z racji wyliczania kosztu opieraja sie na fixed values, zapodać outline:)

konto usunięte

Temat: Full Scan - pytanie

select /* indeks (tabela nazwa indeksu)/* , [inne kolumny] from abc

wtedy nie bedzie skanował całej tabeli

konto usunięte

Temat: Full Scan - pytanie

Dzięki za informację Radku, proszę jednak o uszczegółowienie. Czy po ponownym naliczeniu statystyk na tabeli oraz indeksie i pierwszym uruchomieniu tego zapytania oracle znowu stworzy nowy plan zapytania (np. wykorzystujący ten indeks) ? Innymi słowy - co może spowodować "wyczyszczenie" tego nieoptymalnego planu zapytania.

Chodzi o bazę 9iMarek K. edytował(a) ten post dnia 29.01.10 o godzinie 11:00

Temat: Full Scan - pytanie

Radosław Zyskowski:
Witam,
A w przypadku bind variables w zapytaniach to statystyki i histogramy przypadkiem nie maja znaczenia? W chwili wykonywania polecenia oracle nie zna rzeczywistej wartosci, wiec nie moze opierac sie na statystykach. Dlategóż azaliż oracle wprowadził nowy feature (po polskiemu zmora dibijeja) bind peeking. Czyli zasadniczo jakis baran barankiewicz wykonuje na bazie pierwszy raz zapytanie z kretyńskimi wartościami (a tak sobie sprawdze co sie stanie) wywołującymi full scana, i potem każde następne wykonanie ominie idealny index;).
Proponuje wyłączyć bind peeking, a w przypadku pojawienia sie zapytań z bindami które z racji wyliczania kosztu opieraja sie na fixed values, zapodać outline:)


Witam,

Statystyki i histy maja znaczenie. Bind peeking polega na przeczytaniu wartosci zmiennej i na tej podstawie i podstawie statystyk liczony jest plan zapytania. Masz racje jesli beda dziwne wartosci i pierwszy plan jest nieoptymalny to generalnie bedzie kiepsko.

Jakie jest rozwiazanie ? hmmm w 9i to faktycznie outline albo hint
albo unikanie bind dla wartosci ktore moga rozlozyc zapytanie.

Swoja droga fixed value oznacza dla warunku ze 5 % wierszy zostanie pobranych czyli dla

select * from tabela where id:=v_id - CBO zaklada zwrocenie 5 % wierszy i tak liczy plan

ale np dla

select * from tabela where id between :v_id1 and :v_id2 - CBO zaklada zgodnie z logika ze 0.05 * 0.05 = 0.0025 i zalozy
zwrocenie 0.25 % wierszy z tabeli

Dlatego z bindami trzeba ostroznie - a najlepsza odpowiedz
na to co jest lepsze bindy czy literaly - to odpowiedz - to zalezy ;)

pozdrawiam,
Marcin
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Full Scan - pytanie

Marcin Przepiórowski:
Rozwiazania sa 3:
- hinty - ja osobiscie za nimi nie przepadam
- fake table statistics tak zeby plan byl po naszej mysli
- sql_profile/outline


Przy fake table statistics chyba trzeba się liczyć z tym, że wiele zapytań zostanie tym dotkniętych. A nie tylko to jedno, które nam sprawia problem :)

konto usunięte

Temat: Full Scan - pytanie

Marcin Przepiórowski:
Radosław Zyskowski:
Witam,
A w przypadku bind variables w zapytaniach to statystyki i histogramy przypadkiem nie maja znaczenia? W chwili wykonywania polecenia oracle nie zna rzeczywistej wartosci, wiec nie moze opierac sie na statystykach. Dlategóż azaliż oracle wprowadził nowy feature (po polskiemu zmora dibijeja) bind peeking. Czyli zasadniczo jakis baran barankiewicz wykonuje na bazie pierwszy raz zapytanie z kretyńskimi wartościami (a tak sobie sprawdze co sie stanie) wywołującymi full scana, i potem każde następne wykonanie ominie idealny index;).
Proponuje wyłączyć bind peeking, a w przypadku pojawienia sie zapytań z bindami które z racji wyliczania kosztu opieraja sie na fixed values, zapodać outline:)


Witam,

Statystyki i histy maja znaczenie. Bind peeking polega na przeczytaniu wartosci zmiennej i na tej podstawie i podstawie statystyk liczony jest plan zapytania. Masz racje jesli beda dziwne wartosci i pierwszy plan jest nieoptymalny to generalnie bedzie kiepsko.

Jakie jest rozwiazanie ? hmmm w 9i to faktycznie outline albo hint
albo unikanie bind dla wartosci ktore moga rozlozyc zapytanie.

Swoja droga fixed value oznacza dla warunku ze 5 % wierszy zostanie pobranych czyli dla

select * from tabela where id:=v_id - CBO zaklada zwrocenie 5 % wierszy i tak liczy plan

ale np dla

select * from tabela where id between :v_id1 and :v_id2 - CBO zaklada zgodnie z logika ze 0.05 * 0.05 = 0.0025 i zalozy
zwrocenie 0.25 % wierszy z tabeli

Dlatego z bindami trzeba ostroznie - a najlepsza odpowiedz
na to co jest lepsze bindy czy literaly - to odpowiedz - to zalezy ;)

pozdrawiam,
Marcin

Czyli jednak używa fixed values DLA kolumn bindowanych, nieprawdzaż:)? Zgadza się, pozostałe warunki po innych kolumnach skorzystają z mądrości i wiedzy statystyk.
Ja jednak jestem zdania że lepsze są bindy, przy spełnieniu jednego z warunków:
1. wyłączonym peekowaniu.
2. rozstrzelanie nierozgarnietych użytkowników

A outliny docenią wszyscy którzy dostaną na swoją ukochaną bazkę aplikacje w której o hintach można powiedzieć tylko tyle ze "nie da sie"

Marku,
a pozbyć wrednego planu można przez flush shared poola na przykład. Dramatyczne ale zadziała;)

Temat: Full Scan - pytanie

Radosław Zyskowski:
Czyli jednak używa fixed values DLA kolumn bindowanych, nieprawdzaż:)?

To zalezy ;)

Jesli nie masz peekowania to korzysta z fixed.
Jesli ma peekowanie to liczy na podstawie statystyk i histo.

ale explain plan for .... zawsze korzysta z fixed ;)
przez co moze sie okazac ze plan pokazywane przez explain ma sie nijak to planu rzeczywistego.

pozdrawia,
Marcin

konto usunięte

Temat: Full Scan - pytanie

Marcin Przepiórowski:
Radosław Zyskowski:
Czyli jednak używa fixed values DLA kolumn bindowanych, nieprawdzaż:)?

To zalezy ;)

Jesli nie masz peekowania to korzysta z fixed.
Jesli ma peekowanie to liczy na podstawie statystyk i histo.

ale explain plan for .... zawsze korzysta z fixed ;)
przez co moze sie okazac ze plan pokazywane przez explain ma sie

a tak to sie zgadzam w całej rozciągłości:).
również z tym ze explain plan przy bindach strasznie ssie...

konto usunięte

Temat: Full Scan - pytanie

Marcin Przepiórowski:
Radosław Zyskowski:
Czyli jednak używa fixed values DLA kolumn bindowanych, nieprawdzaż:)?

To zalezy ;)

Jesli nie masz peekowania to korzysta z fixed.
Jesli ma peekowanie to liczy na podstawie statystyk i histo.

ale explain plan for .... zawsze korzysta z fixed ;)
przez co moze sie okazac ze plan pokazywane przez explain ma sie nijak to planu rzeczywistego.

pozdrawia,
Marcin

Na bazie mam włączone peekowanie, więc rozumiem, że liczy na podstawie statystyk i histo. Niestety zapytanie jest bardzo rozbudowane, a ta zmienna bindowana wskazuje na nazwisko :(
Nie wchodzi w grę wyłączenie peekowania bo wtedy wszystko inne by się chyba położyło (większość zapytań w aplikacji używa bind variables i wyłaczenie peekowania spowodowałoby dużą liczbę parsowań zapytań, co w konsekwencji byłoby chyba jeszcze gorsze).
Albo wykorzystam hinta, albo poproszę użytkownika o wyczyszczenie shared poola i wykonanie zapytania z "rozsądną" wartością w polu nazwisko (pewnie ktoś tam np wpisał literkę k i wtedy poleciał full scan).

konto usunięte

Temat: Full Scan - pytanie

Marek K.:
Na bazie mam włączone peekowanie, więc rozumiem, że liczy na podstawie statystyk i histo. Niestety zapytanie jest bardzo rozbudowane, a ta zmienna bindowana wskazuje na nazwisko :(
Nie wchodzi w grę wyłączenie peekowania bo wtedy wszystko inne by się chyba położyło (większość zapytań w aplikacji używa bind variables i wyłaczenie peekowania spowodowałoby dużą liczbę parsowań zapytań, co w konsekwencji byłoby chyba jeszcze gorsze).
Albo wykorzystam hinta, albo poproszę użytkownika o wyczyszczenie shared poola i wykonanie zapytania z "rozsądną" wartością w polu nazwisko (pewnie ktoś tam np wpisał literkę k i wtedy poleciał full scan).

Liczy. ale Liczy za pierwszym wykonaniem, potem uzywa zapamietanego explain planu.
Duza liczba parsowan? Niom. Tylko że warto sie zastanowić co ma wiekszy wplyw - czas dodatkowego parsowania czy wybor nieoptymalnego wykonania. Wyczyszczenia shared poola - dodatkowanie parsowanie:).

Jezeli masz mozliwosc zhintowania i lubisz bycie manipulowanym, to ja bym zhintowal;)
Piotr Czeczko

Piotr Czeczko Technical Director

Temat: Full Scan - pytanie

Radosław Zyskowski:
Marek K.:
Na bazie mam włączone peekowanie, więc rozumiem, że liczy na podstawie statystyk i histo. Niestety zapytanie jest bardzo rozbudowane, a ta zmienna bindowana wskazuje na nazwisko :(
Nie wchodzi w grę wyłączenie peekowania bo wtedy wszystko inne by się chyba położyło (większość zapytań w aplikacji używa bind variables i wyłaczenie peekowania spowodowałoby dużą liczbę parsowań zapytań, co w konsekwencji byłoby chyba jeszcze gorsze).
Albo wykorzystam hinta, albo poproszę użytkownika o wyczyszczenie shared poola i wykonanie zapytania z "rozsądną" wartością w polu nazwisko (pewnie ktoś tam np wpisał literkę k i wtedy poleciał full scan).

Liczy. ale Liczy za pierwszym wykonaniem, potem uzywa zapamietanego explain planu.
Duza liczba parsowan? Niom. Tylko że warto sie zastanowić co ma wiekszy wplyw - czas dodatkowego parsowania czy wybor nieoptymalnego wykonania. Wyczyszczenia shared poola - dodatkowanie parsowanie:).

Jezeli masz mozliwosc zhintowania i lubisz bycie manipulowanym, to ja bym zhintowal;)

Ja rowniez bym zhintowal ale przez outline.
Nie zawsze jest mozliwosc zmiany zapytania zaszytego w srodku aplikacji.

Pozdrawiam
Piotrek

konto usunięte

Temat: Full Scan - pytanie

Ja postaram się przeforsować zmianę taką by w pewnych przypadkach wartości dla tych kolumn przekazywać w zapytaniu jako literały, a nie zmienne bindowane. Zapytanie jest wykonywane w tej postaci, która mi sprawia problemy bardzo rzadko, więc może pójść w tą stronę.

konto usunięte

Temat: Full Scan - pytanie

Piotr Czeczko:
Ja rowniez bym zhintowal ale przez outline.
Nie zawsze jest mozliwosc zmiany zapytania zaszytego w srodku aplikacji.

Pozdrawiam
Piotrek

No zakladamy ze Marek taka możliwość ma skoro ją rozważał:).
Outliny fajniusie są, ale szacun wielki dla każdego kto w 10g popoprawia recznie outliny zeby zmienić jednocześnie rodzaj joina i kolejność tablic, no i access path do tablic (mówimy o możliwie niemożliwych do dalszej komplikacji wytworach złośliwych developerów). Myk z dwoma outlinami i sprytnym updatem ratuje życie:)Radosław Zyskowski edytował(a) ten post dnia 01.02.10 o godzinie 14:22

Następna dyskusja:

Oracle Spatial - pytanie




Wyślij zaproszenie do