Jak bardzo statystyki systemowe wpływają na wybór planu wykonania?

Wiemy, że statystyki systemowe są ważnym opisem wydajności wykorzystywanej platformy sprzętowej oraz że kosztowy optymalizator zapytań Oracle Database odwołuje się do ich wartości podczas szacowania kosztów planów wykonania zapytań (pisaliśmy o statystykach systemowych TU). Wielu administratorów zastanawia się jednak, jak bardzo optymalizator zapytań jest „wrażliwy” na wartości tych statystyk (zbieranych metodami eksperymentalnymi). Aby odpowiedzieć na[…]

Czy długi klucz = zły klucz?

Histogramy wykorzystujemy dość powszechnie w celu mniej lub bardziej precyzyjnego szacowania selektywności predykatów użytych w zapytaniach (oczywiście dla kolumn o nierównomiernym rozkładzie statystycznym). W pewnych przypadkach możemy jednak paść ofiarą uproszczenia zastosowanego przez Oracle podczas generowania histogramów, czego efektem będą złe/bardzo złe szacunki selektywności. Uproszczenie to dotyczy kolumn typu tekstowego i polega na uwzględnianiu w[…]

Gdzie są moje histogramy? Słów kilka o SIZE AUTO

Dla poprawnego działania, kosztowy optymalizator zapytań musi posiadać wiedzę o rozkładzie wartości kolumny, na której oparty jest predykat w zapytaniu. Wiedzę taką może pozyskać na trzy sposoby: (1) pobierając losową próbkę danych w chwili wykonywania zapytania (dynamic sampling), (2) posługując się wcześniej zebranymi statystykami podstawowymi i przyjmując rozkład jednorodny wartości, (3) posługując się zebranym wcześniej[…]

A czy pamiętasz o statystykach systemowych?

Jak wiemy, aby trafnie estymować koszty planów wykonania zapytań, optymalizator zapytań wymaga obecności szeregu statystyk (modeli statystycznych). Statystyki te dzielą się na cztery kategorie: (1) statystyki opisujące tabele (liczba rekordów, liczba bloków, średni rozmiar rekordu), (2) statystyki opisujące indeksy (liczba bloków liści, liczba poziomów, współczynnik klastrowania), (3) statystyki opisujące kolumny tabel (liczba wartości, liczba wartości[…]

Dlaczego 99 ze 100 to tylko 1%?

W bazie danych umieszczamy tabelę zawierającą sto rekordów, które w kolumnie PŁEĆ posiadają 99 razy wartość ‘M’ i jeden raz wartość ‘K’. Gromadzimy statystyki dla tej tabeli, gromadzimy histogram dla kolumny PŁEĆ. Następnie wykonujemy zapytanie, które w klauzuli WHERE posiada predykat UPPER(PŁEĆ) = ‘M’. Jaka jest selektywność tego predykatu? Oczywiście 99%. Jaką selektywność oszacuje optymalizator[…]

Gdy brakuje (niektórych) statystyk dla optymalizatora

W jaki sposób kosztowy optymalizator zapytań estymuje koszt planu wykonania zapytania jeśli administrator/programista nie zadbał o zgromadzenie statystyk dla optymalizatora? Wcześniejsze wersje serwerów Oracle Database przełączały się wtedy w tryb optymalizacji regułowej. Serwer Oracle Database 11g skorzysta w tej sytuacji z tzw. dynamicznego próbkowania (dynamic sampling), polegającego na pobraniu losowej próbki bloków tabel uczestniczących w[…]