Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.

> Profilowanie aplikacji
nospor
post 27.03.2007, 16:03:15
Post #1





Grupa: Moderatorzy
Postów: 36 477
Pomógł: 6301
Dołączył: 27.12.2004




Zgodnie z życzeniem: "Profilowanie aplikacji".
Zachęcam do udziału w dyskusji smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Krolik
post 31.10.2007, 12:58:11
Post #2





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 16.11.2004

Ostrzeżenie: (0%)
-----


Pytanie było specjalnie takie, żeby nie było jednoznacznej odpowiedzi. Słabsze systemy najprawdopodobniej wybiorą mniejsze zło, tj. tak jak napisał DevV:

LIMIT (1, 10)
|
+ SORT (cena)
|
+ INDEX_SCAN (miasto = 'Krakow' AND cena < 5000) <-- indeks na (miasto, cena)


Albo tak (nieco gorzej):


LIMIT (1, 10)
|
+ SORT (cena)
|
+ FILTER (cena < 5000)
|
+ INDEX_SCAN (miasto = 'Krakow') <--- indeks tylko na (miasto)


Wszystko zależy trochę od rozkładu wartości w bazie, ale można się spodziewać, że ponieważ Kraków jest dużym miastem,
to warunek miasto = Kraków ma słabą selektywność (załóżmy 20%), podobnie warunek na cenę też ma b. słabą selektywność (ok. 50%, jeśli rozkład jest równomierny). W tej sytuacji najlepszy byłby indeks klastrujący na cena, żeby uniknąć sortowania:

LIMIT(1, 10)
|
+ FILTER (miasto = 'Krakow')
|
INDEX SCAN (cena < 5000) <--- indeks tylko na (cena)

Niezależnie od sumarycznej liczby rekordów ten plan wymaga odczytania średnio raptem ok. 50 rekordów tabeli, ze względu na możliwość wykonania iteracyjnego i LIMIT, podczas gdy poprzednie plany czytają odpowiednio 10% * liczba_rekordów (pierwszy) i 20% * liczba_rekordów (drugi) i oba sortują 10% rekordów całej tabeli. Pewnie DB/2 lub Oracle potrafiłoby znaleźć ten plan bez hintów, ale muszę sprawdzić. Jeśli optymalizator nie zauważy, że można wyeliminować sortowanie oraz że można przerwać skanowanie po osiągnięciu 10 rekordów wyniku, ten plan automatycznie staje się prawie najgorszym z możliwych.

To tyle omówienia zadania. Zadanie miało na celu tylko zilustrowanie, że problem wprawdzie prosty nie jest i rozwiązanie mocno zależny od jakości optymalizatora bazy danych, to nie jest wcale żadną tajemnicą, co potrafią robić różne optymalizatory i program może to uwzględniać. Wydaje mi się, że nawet w niektórych przypadkach może to zrobić lepiej niż człowiek - kto z Was zna szczegóły działania optymalizatora MySQL czy PostgreSQL? Raczej stosuje się metodę "prób i błędów" a nie podejście naukowe. Podobnie program bez trudu potrafi oszacować selektywność warunków i zrobić podobną analizę, którą przedstawiłem przy okazji zadania.

BTW. Istnieje taki projekt dla DB/2 i działa nieźle. Dla MySQLa byłoby dużo prosciej, bo on potrafi zdecydowanie mniej (ma regułowy optymalizator -> łatwo się go przewiduje). Ponadto nie zalezy mi na tym, by ten program dawał zawsze najlepszy możliwy wynik, ale żeby raczej stanowił pomoc w "zgrubnym" dobraniu większości indeksów, w bardzo krótkim czasie.


--------------------
Projekty: PLAY, optymalizator baz danych
Go to the top of the page
+Quote Post

Posty w temacie
- nospor   Profilowanie aplikacji   27.03.2007, 16:03:15
- - Strzałek   Myślę że śmiało możn...   27.03.2007, 20:04:01
- - Whisller   W PHP Solution ostatnio ukazał się artykuł na tema...   5.04.2007, 17:44:13
- - rashid   Luzne mysli profilerskie 1. Nie optymalizuj dopok...   23.04.2007, 16:04:42
|- - darektbg   Cytat(rashid @ 23.04.2007, 17:04:42 )...   24.04.2007, 06:55:44
|- - rashid   Cytat(darektbg @ 24.04.2007, 07:55:44...   24.04.2007, 12:45:51
- - athabus   Wydaje mi się, że trudno nauczyć się profilowania ...   24.04.2007, 08:28:37
- - marast78   zanim zaczniecie używać jakichkolwiek benchmarków/...   1.05.2007, 12:08:40
|- - Jarod   Cytat(marast78 @ 1.05.2007, 11:08:40 ...   1.05.2007, 14:10:55
|- - cicik   Cytat(marast78 @ 1.05.2007, 13:08:40 ...   1.05.2007, 17:17:01
|- - rashid   Cytat(cicik @ 1.05.2007, 18:17:01 ) T...   1.05.2007, 20:19:31
- - athabus   Wydaje mi się, że jest to podejście od złej strony...   1.05.2007, 12:58:46
- - marast78   różnice są wszystko zależy od tego w jakiej wersji...   1.05.2007, 18:47:29
|- - cicik   Cytat(marast78 @ 1.05.2007, 19:47:29 ...   1.05.2007, 19:09:13
- - sopel   @marast78, to porównanie między php4 i php5 ma się...   1.05.2007, 19:03:40
- - marast78   nie chce prowadzić konwersacji na ten temat, chcia...   1.05.2007, 20:04:49
- - jastu   Korzystam z xDebug ale dla zainteresowanych link   25.05.2007, 15:01:48
- - deirathe   Ja też uważam że powinniśmy zwracać uwagę na to ja...   28.06.2007, 15:54:58
- - Sh4dow   ja osobiscie nie zawsze mialem dostep do servera z...   3.07.2007, 14:43:02
- - athabus   Sh4dow poruszył dosyć ciekawą kwestię, przez którą...   5.07.2007, 11:27:57
- - Krolik   Właśnie - bardzo często problemem jest wydajność b...   3.10.2007, 11:52:58
- - NuLL   Krolik - mowisz o wybieraniu sposobu indeksownia t...   3.10.2007, 12:04:13
- - Krolik   Nie, mam na myśli generalnie dobór indeksów a nie ...   3.10.2007, 12:34:11
- - zimi   nie bardzo to widzę... musiałaby to być złożona kl...   3.10.2007, 20:51:55
- - Krolik   Zimi, nie pytałem, czy to się da zrobić, tylko czy...   4.10.2007, 10:53:07
- - athabus   Jak dla mnie sam pomysł aplikacji jest bardzo dobr...   4.10.2007, 12:57:06
- - zimi   CytatJedynie ma znaczenie kolejność kolumn w indek...   4.10.2007, 22:38:40
|- - Krolik   Cytat(zimi @ 4.10.2007, 21:38:40 ) za...   5.10.2007, 10:25:32
- - NuLL   Krolik to pytanie dotyczy Postgres-a czy MySQLa ? ...   6.10.2007, 02:03:55
- - Krolik   Pytanie dotyczy dowolnego RDBMS. I nie chodzi mi t...   6.10.2007, 09:37:05
- - SongoQ   Padła informacja o sposobie dobierania indeksow i ...   15.10.2007, 17:53:02
- - DeyV   @Krolik - dobre pytanie. Niby takie proste, a jed...   22.10.2007, 23:20:46
- - Krolik   Pytanie było specjalnie takie, żeby nie było jedno...   31.10.2007, 12:58:11


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 6.06.2024 - 21:17