Kurs SQL i optymalizacji Oracle

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

Rejestracja: 1 rok temu

Ostatnio: 4 dni temu

Lokalizacja: Warszawa

1

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.


Zapraszam do mojego kursu programowania na bazie Oracle
Dla średniozaawansowanych + optymalizacja: KURS Oracle SQL
Dla początkujących bazy danych + SQL: KURS SQL
Jak zbudowany jest indeks BTREE ale pamiętaj, że oracle ma też indeksy typu BITMAP :) różnią się znacznie i warto o tym wspomnieć ;) - woolfik 2019-10-23 09:45
Ooooł tak. Budowa indeksów i ich rozróżnienie (nie pamiętam czy widziałam na blogu) do tego więcej o rzeczach administracyjnych. To co wpływa na wskaźnik wysokiej wody, undo/redo itd. konfiguracje i jak najwięcej optymalizacji hinty/partycje itd. - kate87 2019-10-23 10:15
@woolfik: @kate87 będzie i o indexach bitmapowych i o partycjonowaniu i o wielu innych tylko po kolei :) chce skończyć cykl indeksów btree dalej mam plan na metody klonowania, partycje, btree i międzyczasie inne :) - oracledev 2019-10-23 10:19

Pozostało 580 znaków

2019-07-24 09:15

Rejestracja: 1 rok temu

Ostatnio: 7 minut temu

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ęć: 138
edytowany 1x, ostatnio: pavarotti, 2019-07-24 09:20

Pozostało 580 znaków

2019-07-24 17:17

Rejestracja: 1 rok temu

Ostatnio: 4 dni temu

Lokalizacja: Warszawa

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ść :)


Zapraszam do mojego kursu programowania na bazie Oracle
Dla średniozaawansowanych + optymalizacja: KURS Oracle SQL
Dla początkujących bazy danych + SQL: KURS SQL
edytowany 5x, ostatnio: oracledev, 2019-07-24 17:18

Pozostało 580 znaków

2019-07-25 09:46

Rejestracja: 1 rok temu

Ostatnio: 27 minut temu

2

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.

Oczywiście wydłuży, kilka milisekund? Ale za to zapytanie zamiast 10 min trwa kilka milisekund! - _13th_Dragon 2019-10-20 20:17

Pozostało 580 znaków

2019-07-25 10:39

Rejestracja: 5 lat temu

Ostatnio: 9 godzin temu

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

Rejestracja: 1 rok temu

Ostatnio: 4 dni temu

Lokalizacja: Warszawa

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 :)


Zapraszam do mojego kursu programowania na bazie Oracle
Dla średniozaawansowanych + optymalizacja: KURS Oracle SQL
Dla początkujących bazy danych + SQL: KURS SQL
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

Rejestracja: 1 rok temu

Ostatnio: 4 dni temu

Lokalizacja: Warszawa

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 :)


Zapraszam do mojego kursu programowania na bazie Oracle
Dla średniozaawansowanych + optymalizacja: KURS Oracle SQL
Dla początkujących bazy danych + SQL: KURS SQL

Pozostało 580 znaków

2019-07-31 13:54

Rejestracja: 10 lat temu

Ostatnio: 3 godziny temu

0

Czyli hinty.

Pozostało 580 znaków

2019-07-31 14:24

Rejestracja: 5 lat temu

Ostatnio: 9 godzin temu

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

Rejestracja: 1 rok temu

Ostatnio: 4 dni temu

Lokalizacja: Warszawa

0

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


Zapraszam do mojego kursu programowania na bazie Oracle
Dla średniozaawansowanych + optymalizacja: KURS Oracle SQL
Dla początkujących bazy danych + SQL: KURS SQL

Pozostało 580 znaków

2019-08-06 18:26

Rejestracja: 1 rok temu

Ostatnio: 4 dni temu

Lokalizacja: Warszawa

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 :)


Zapraszam do mojego kursu programowania na bazie Oracle
Dla średniozaawansowanych + optymalizacja: KURS Oracle SQL
Dla początkujących bazy danych + SQL: KURS SQL

Pozostało 580 znaków

Odpowiedz

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

Użytkownik: PablotT