Kurs SQL i optymalizacji Oracle

Odpowiedz Nowy wątek
2019-07-23 19:04
0

Cześć
Jakiś czas temu nosiłem się z zamiarem napisania czegoś w rodzaju kursu/blogu o programowaniu w SQL, PL/SQL i bazie Oracle. Bardziej zaawansowanego niż większość kursów gdzie nauka zaczyna się na SELECT i kończy na JOIN.
Do tej pory napisałem dwa wpisy/kursy i pisze kolejne o indexach w Oracle, mam jeszcze kilka pomysłów o czym pisać(dalej indexy, partycjonowanie, uprawnienia role, jak czytać plany zapytan, jakieś dobre praktyki, listenery).

Poniżej dwa pierwsze kursy jakie napisalem:
Jak zbudowany jest Index w Oracle: https://oracledev.pl/kurs-index-w-oracle/
Jak używać Unique Index: https://oracledev.pl/sql-index-unique-scan/

Dajcie proszę znać o czym warto jeszcze napisać oraz co ewentualnie poprawić w już napisanych kursach żeby lepiej się czytało i wynosiło więcej wartości.

Pozostało 580 znaków

2019-07-24 09:15
1

https://oracledev.pl/kurs-index-w-oracle/

Same bloki liści poza tym, że są powiązane z blokami gałęzi są również powiązane między sobą. I tak np. blok 0-3 jest powiązany z blokiem 0-6 a ten z kolei z blokiem 0-7 itd.

Tu nie ma przypadkiem bloków 0-3, 3-6, 7-10? I ta pogrubiona 3 nie powinna być przypadkiem 4? :P

I tam na zdjęciu w załączniku przy pkt. 2, który zaznaczyłem jest właśnie zakres 0-3, a tam przy pkt. 1 masz 0, 0, 1, 2. Nie brakuje tej 3? I czemu 0 jest zdublowane?
Pytam bo może to jest dobrze, ale ja Oracla aż tak nie ogarniam

  • scr.PNG (0,06 MB) - ściągnięć: 10
edytowany 1x, ostatnio: pavarotti, 2019-07-24 09:20

Pozostało 580 znaków

2019-07-24 17:17
0

Tu nie ma przypadkiem bloków 0-3, 3-6, 7-10? I ta pogrubiona 3 nie powinna być przypadkiem 4? :P

Masz w pełni rację, poprawiłem :)

I tam na zdjęciu w załączniku przy pkt. 2, który zaznaczyłem jest właśnie zakres 0-3, a tam przy pkt. 1 masz 0, 0, 1, 2. Nie brakuje tej 3? I czemu 0 jest zdublowane?

0 jest zdublowane bo indeks nie musi (może i akurat taki indeks opisałem w drugim wpisie: https://oracledev.pl/sql-index-unique-scan/) mieć tylko wartości unikalne.
Co do braku 3 to wprost nie ma nigdzie w dokumentacji, że blok gałęzi zawiera tylko zakres wartości w bloku liścia. Natomiast patrząc po tabeli zorganizowanej jako index (link) dokumentacja pokazuje, że mogą być "dziury" tzn. możemy mieć wskazanie 0-30 w bloku gałęzi ale w bloku liścia mogą zawierać się kluczę z wartością 20 i 30 a pozostałych jest brak. W związku z tym, przez analogię myślę, że jest to poprawne :)
@pavarotti Dzięki wielkie za info zwrotne i uważność :)

edytowany 5x, ostatnio: oracledev, 2019-07-24 17:18

Pozostało 580 znaków

2019-07-25 09:46
1

Trochę uproszczony jest temat indeksów. O użyciu indeksu bądź nie decyduje optymalizator, od kilku wersji jest tylko optymalizator kosztowy i może się okazać, że mimo utworzenia indeksu i spełnienia innych warunków indeks nie zostanie wykorzystany. Na prostym zapytaniu wszystko jest jasne. na bardziej złożonych można się nieźle przejechać. no i należy pamiętać, że dodanie indeksu wydłuża operacje typy INSERT.

Pozostało 580 znaków

2019-07-25 10:39
1

Kursów wszelkiej maści n/t Oracle jest dużo, nie wiem czy to dobra nisza ;-) Może na rodzimym podwórku plusem będzie to, że po blog po polsku.

Jeśli chodzi o optymalizację, to przydałoby się wyjaśnienie:
1) Jak wyglądają fazy przetwarzania zapytania (od wysłania przez klienta, po odebranie wyników). Tu jednak trzeba wyjaśnić architekturę bazy, bo sekwencja kroków będzie niezrozumiała.
2) wprowadzenie czego dotyczy optymalizacja, bo mogą być różne "funkcje celu" (IO/CPU/RAM) i jak działa optymalizator zapytań.

A do tego potrzebne będzie zrozumienie ścieżek dostępu do danych ("access paths"), typów złączeń ("hash join", "nested loop", "sort-merge", "cluster"), czym są "anti-joins", "semi-joins" i "joins",
czym są statystyki systemowe, czym histogramy, latche, mutexy, etc. Cała masa teorii, która trzeba łyknąć zanim się weźmie za optymalizację.

Kiedyś miałem podobny pomysł na bloga, ale zrezygnowałem ze względu na istnienie takich materiałów jak:

Od jednego z kolegów nauczyłem się bardzo prostej techniki. Zadawać pytanie "Dlaczego sądzisz, że to rozwiąże problem?" do każdego pomysłu na rozwiązanie problemu.
Dzięki temu oduczyłem się wprowadzać losowe zmiany, np. dodawanie indeksów, modyfikacja parametrów bazy i sprawdzenie czy pomogło ;-) Wstyd, ale kiedyś tak "optymalizowałem".

Jak chcesz pisać o optymalizacji, to przede wszystkim opisz systematyczne podejście (metodykę).

Pokaż pozostałe 2 komentarze
@Kenshin206: MSSQL nie znam na dobrym poziomie i nie wiem jakie książki warto przeczytać, czy jakie blogi śledzić. Na pewno ktoś z forumowiczów jest w stanie coś polecić :) Sam korzystałem z takiej cegły ~1500 stron, ale tytułu nie pamiętam i nie mam pod ręką półki z książkami. - yarel 2019-07-25 13:19
SQL - stopien podtawowy mam opanowany , teraz chcialbym stopien srednio-zaawansowany opanowac, Piszac podstawowy mam na myli joiny CTE procedury Trigery funkcje. - Kenshin206 2019-07-25 22:08
Itzik Ben-Gan, Brent Ozar, Adam Machanic i sporo innych. Poczytaj, a mózg Ci się zgotuje 😀 - hyde 2019-07-26 01:31
ja dokładnie polecam ta pozycje. Kompleksowa, dobrze napisana: https://bonito.pl/k-90417469-[...]qJewWxqWVuu09S7hoCV_MQAvD_BwE - Tomek Pycia 2019-07-26 09:01
dzieki zamowione. - Kenshin206 2019-07-26 22:33

Pozostało 580 znaków

2019-07-25 19:40
0

@yarel: Niestety, od jakiegoś czasu mam wrażenie, że w ogóle znajomość baz danych staje się niszą.
Dzięki za fajne tematy, na pewno napiszę o joinach, architekturze Oracle, jednak wszystko po kolei :)
Co do samej metodyki to trzeba wiedzieć jakie działania co robią i jakie niosą konsekwencje. Też kiedyś waliłem indeksy na oślep, tworzyłem dziwne struktury czy zmieniałem parametry bazy żeby zobaczyć czy zaskoczy, ale zmieniło się to gdy zacząłem rozumieć jak działa baza i to chciałbym pokazać w tym blogu/kursie :)

U większość programistów krąży przeświadczenie, że baza to nie ich problem i potem lecą takie krzaczki w zapytaniach, że głowa mała. Z inne strony mam wrzenie, że rodzaj bazy nie wybiera się na postawie zapotrzebowania tylko mody. Bo wszyscy robią w NoSQL, to ja też siebie zrobię Mongo a potem wychodzą potworki, że głowa mała. - Tomek Pycia 2019-07-26 09:03

Pozostało 580 znaków

2019-07-30 22:11
1

Dla zainteresowanych dodałem nowy wpis o RANGE INDEX SCAN: https://oracledev.pl/sql-index-range-scan/
Kolejny wpis będzie odejściem od indexów ale nadal w temacie optymalizacji :)

Pozostało 580 znaków

2019-07-31 13:54
0

Czyli hinty.

Pozostało 580 znaków

2019-07-31 14:24
0

Zanim odejdziesz od indeksów, to może warto jeszcze parę słów o innych zagadnieniach związanych z indeksami ;-)

  • reverse range scan
  • skip scan
  • fast index scan
  • full index scan
  • index join / merge
  • parallel index scan
  • function based indexes
  • domain indexes
  • partitioned indexes
  • compressed indexes
  • reverse key indexes
  • virtual indexes
  • invisible indexes
  • local index vs global index

Pozostało 580 znaków

2019-07-31 15:09
0

@kate87 @yarel
Nie hinty a znaczenie kolejności w klauzuli WHERE :)
Natomiast temat indeksów będę kontynuował:)

Pozostało 580 znaków

2019-08-06 18:26
0

Tak jak obiecałem dodałem nowy wpis o kolejności wykonywania predykatów w klauzuli WHERE w SQL Oracle.
Link do kursu: https://oracledev.pl/kolejnosc-warunkow-w-where/
W kolejnych wpisach wrócę do opisywania Indexów :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0