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
Post #1





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Zgodnie z życzeniem: "Profilowanie aplikacji".
Zachęcam do udziału w dyskusji (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zimi
post
Post #2





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


Cytat
Jedynie ma znaczenie kolejność kolumn w indeksach wielokolumnowych, ale to indeksy dobiera się do zapytań, a nie na odwrót.

nie mam wiedzy absolutnej na temat optymalizacji zapytań... co więcej jest ona dość nikła, dopiero wydrukowałem sobie z manuala MySQL co ciekawego napisali o optymalizacji i będę sobie to powoli przyswajał
więc teraz aby się upewnić czy się rozumiemy
załóżmy że mamy indeks na 3 polach w kolejności a, b, c
a następnie zapytanie:
Kod
SELECT (...) WHERE a="1" AND b="2" AND c="3"

i wtedy nasz indeks będzie działał, i teraz drugie zapytanie:
Kod
SELECT (...) WHERE b="2" AND c="3" AND a="1"

i tutaj nasz indeks już nic nie da...
jeśli mam rację to:
Cytat
Mianowicie mijasz się z prawdą twierdząc, że indeksowanie wymaga zmiany zapytań.

jednak wymaga to zmiany zapytania gdyż jedynie o ten przypadek mi chodziło... i sytuacje w której niczego nieświadomy użytkownik pomyli sobie kolejność kolumn albo nawet nie będzie wiedział że to ma znaczenie i zrobi odwrotnie "bo tak"
Cytat
ale to indeksy dobiera się do zapytań, a nie na odwrót

w tym momencie Twój projekt staje się jedynie rozwiązaniem połowicznym... gdyż projekt robisz jak rozumiem docelowo dla amatorów którzy nie mają pojęcia o indeksacji i ogólnie optymalizacji zapytań... jeśli tak to indeksy wielokolumnowe niewątpliwie stoją już na wyższym poziomie, a generalnie idea powinna być "trudne uprościć" a nie "łatwe uprościć"(to ew. przy okazji), przy jednokolumnowych indeksach (przy ich tworzeniu) to na dobrą sprawę "widzę że przez to polę wyszukuję często dane" => "robię indeks" (no ew. jeszcze kilka reguł, ale ta w sumie najprostsza), nie ma w tym zbyt wielkiej filozofii, a przynajmniej ja (zaznaczam że mam braki w tej dziedzinie, jak się wymądrzam to przepraszam i poprawcie mnie) nie widzę w tym większej filozofii, choć przydatnym narzędziem będą logi zapytań, ile czasu zajmuje zapytanie, tudzież stosunek czasu do ilości rekordów w tabeli bądź inne statystyki i analiza zapytania na poziomie abstrakcji bazy aby z klauzul WHERE, ORDER BY, GROUP BY, HAVING i chyba jeszcze jakiś wydobywał nazwy kolumn i weryfikował czy na danym polu jest indeks czy nie, oczywiście niekoniecznie w momencie wykonywania każdego zapytania

poza tym niezależnie od indeksów wielokolumnowych podejrzewam że optymalizacja może mieć również związek z kolejnością w klauzuli WHERE, gdyż prawdopodobnie (choć może i nie) zachodzi tam "skracanie" warunku (nie pamiętam czy miało to jakąś fachową nazwę, a jeśli tak to jaką...), a czytanie warunku zachodzi z tego co wiem od lewej do prawej
chodzi o to że jeśli będziemy mieli np.
Kod
SELECT ... WHERE 1=0 AND (inne warunki)

1=0 oczywiście nie ma być docelowym warunkiem, chodzi mi o to że programista przy pisaniu kodu ma świadomość, że coś często będzie fałszem lub prawdą i to wstawia na "pierwsze pozycje"
serwer SQL prawdopodobnie wiersz odpuści już po pierwszym warunku 1=0 gdyż z góry będzie fałszywy bezwzględu jakie wartości przybiorą kolejne zdania logiczne
natomiast gdy zamienimy kolejność:
Kod
SELECT ... WHERE (inne warunki) AND 1=0

serwer może sporo danych przewertować, stracić dużo zasobów a i tak w końcu wyjdzie że dany wiersz nas nie interesuję...
w tego typu przypadkach Twoja klasa/funkcja/program/cokolwiek nie będzie miało już wiele do gadania bo są to dość skomplikowane zagadnienia zresztą to była tylko taka dygresja o znaczeniu kolejności
no ale w sumie chyba wszystko można zaprogramować (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Cytat
A optymalizatory zapytań w RDBMS?

szczerze mówiąc nie wiem, a nawet nie wiedziałem o ich istnieniu choć ich istnienie wydaję się być zrozumiałe... nie mniej podejrzewam że mają minimalne znaczenie dla efektywności zapytań, podobnie jak w kodach PHP, podobno Zend Optimizer zamienia $d++ na ++$d bo jest szybsze (nie wiem czy to prawda, tak gdzieś przeczytałem... mało ważne) jednak znaczenie takiej optymalizacji przy skopanym algrotymie jest tak nikłe że nawet niewarto o nim wspominać
Cytat
Słyszałeś o uczeniu maszynowym? AI?

tak słyszałem, choć nie mam chwilowo pojęcia w jaki sposób działa (nie próbowałem się nawet nad tym bardziej zastanawiać), nie douczałem się w tej materii...
nie mniej gdy o tym wspomniałeś odbieram wrażenie że to przerost formy nad treścią...
i znacznie lepiej dla każdego kto potrzebuję optymalizacji będzie przeczytanie kilku stron o tym zagadnieniu niż skorzystaniu z takiej aplikacji, przynajmniej chwilowo taka moja opinia

Cytat
Plus tego taki, że programista nie zawsze ma dobre rozeznanie co i jak jest obciążone w bazie

a więc potrzebujesz logów a niekoniecznie takiej aplikacji, a resztę robisz dalej "zdroworozsądkowo", a taka aplikacja może się zacząć "wymądrzać" co różne programy mają do siebie... co zaczyna być działaniem szkodliwym
Go to the top of the page
+Quote Post
Krolik
post
Post #3





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

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


Cytat(zimi @ 4.10.2007, 21:38:40 ) *
załóżmy że mamy indeks na 3 polach w kolejności a, b, c
a następnie zapytanie:
Kod
SELECT (...) WHERE a="1" AND b="2" AND c="3"

i wtedy nasz indeks będzie działał, i teraz drugie zapytanie:
Kod
SELECT (...) WHERE b="2" AND c="3" AND a="1"

i tutaj nasz indeks już nic nie da...


Jeśli tak rzeczywiście jest w MySQL, to gratuluję jego twórcom lamerstwa (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
To, że są słabi w te klocki, to wiedziałem, ale żeby aż tak, to się trzeba mocno wysilić.
Dlatego niezbyt Ci wierzę Ci i jeszcze to sprawdzę. W normalnym systemie oba zapytania użyją indeksu - nie ma żadnego przeciwskazania, żeby tak nie było.

Cytat
abstrakcji bazy aby z klauzul WHERE, ORDER BY, GROUP BY, HAVING i chyba jeszcze jakiś wydobywał nazwy kolumn i weryfikował czy na danym polu jest indeks czy nie, oczywiście niekoniecznie w momencie wykonywania każdego zapytania

Przy tym podejściu miałbyś 5 razy tyle indeksów co potrzeba. Czyli rozmiar bazy większy i niepotrzebnie spowolniony update/insert.

Dalszej części postu komentował nie będę tylko polecę Ci lekturę porządnej książki o optymalizacji zapytań, konstrukcji RDBMS np. z serii Klasyka informatyki "Implementacja systemów baz danych". Mam nieodparte wrażenie, że Twoja wiedza na ten temat kłada się głównie z tego "jak myślisz, że RDBMS działa" a nie jak jest zrobiony w rzeczywistości. Poza tym wzorowanie się w tym zakresie na MySQL to zły pomysł.

Cytat
tak słyszałem, choć nie mam chwilowo pojęcia w jaki sposób działa (nie próbowałem się nawet nad tym bardziej zastanawiać), nie douczałem się w tej materii...


Widać.

Cytat
nie mniej gdy o tym wspomniałeś odbieram wrażenie że to przerost formy nad treścią...
i znacznie lepiej dla każdego kto potrzebuję optymalizacji będzie przeczytanie kilku stron o tym zagadnieniu niż skorzystaniu z takiej aplikacji, przynajmniej chwilowo taka moja opinia
a więc potrzebujesz logów a niekoniecznie takiej aplikacji, a resztę robisz dalej "zdroworozsądkowo", a taka aplikacja może się zacząć "wymądrzać" co różne programy mają do siebie... co zaczyna być działaniem szkodliwym


Ok, przyjąłem tę opinię do wiadomości.

Dodam, że optymalizacja pewnej niewielkiej bazy danych (raptem 30 tabel) u nas w firmie zajęła metodą "analizy logów i EXPLAIN" jednemu wykwalifikowanemu adminowi 4 dni. Może i mało, ale należy pamiętać,że taką optymalizację robi się co jakiś czas, bo aplikacja / dane się zmieniają i że to była raptem jedna mała baza danych. A co gdybyśmy byli firmą hostingową i hostowali 100 aplikacji? Myślisz, że ktoś miałby czas bawić się i sprawdzać, czy jakiś lamer nie walnął selecta bez indeksu, który jedzie po tabeli na milion rekordów? Ten program nie ma być lepszy od wykwalifikowanego DBA, ale ma przede wszystkim zaoszczędzić czas. Podłączasz do bazy danych, wskazujesz log, klikasz jeden guzik i za 5 minut masz zestaw "prawie" optymalnych indeksów.

I jeszcze takie małe, łatwe pytanie kontrolne. Jakie indeksy są najlepsze w tym przypadku:

SELECT nazwa_produktu, cena, opis FROM produkty WHERE cena < 5000 AND miasto = 'Krakow' ORDER BY cena LIMIT 10;

W bazie są produkty o cenach od 10 do 10000, z całego kraju. To jest klasyczne pytanie na jakie musi odpowiedzieć każdy DBA. Odpowiedź trzeba uzasadnić.
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 03:11