Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: [PostgreSQL] Informacje o zapytaniu

Czy jest możliwość sprawdzenia w Postgre (lub innej bazie) z jakich tabel i kolumn korzysta działające (lub nie) zapytanie?

Mam kilkaset zapytań i potrzebuję wyciągnąć z nich listę tabel i kolumn z których korzystają, a nie chce mi się tego sprawdzać ręcznie ;)
Janusz Skudrzyk

Janusz Skudrzyk Członek zarządu,
weblabs.pl

Temat: [PostgreSQL] Informacje o zapytaniu

w mysql explain, w postgre też jest
pokaże na jakich tabelach jest zapytanie oraz jakie indeksy biorą w nim udział

edit:
albo trochę inaczej, w mysql:

explain extended select * from tabela where warunek order by kolumna ;
show warnings ;

(w phpmyadminie w zależności od wersji trzeba ustawić, żeby pokazało pełny tekst odpowiedzi)Janusz Skudrzyk edytował(a) ten post dnia 20.06.09 o godzinie 17:57

konto usunięte

Temat: [PostgreSQL] Informacje o zapytaniu

Postgresql ma bardzo dobrego explaina, chociaż może być problem z wyciągnięciem listy kolumn.
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: [PostgreSQL] Informacje o zapytaniu

Dzięki za podpowiedź.
Użyłem EXPLAIN z opcją VERBOSE. W rezultacie otrzymałem dosyć szczegółowe informacje na temat zapytania, które złożone są z dwóch części; pierwsza, zawarta między klamrami {} posiada informacje na temat kolumn zwracanych w wyniku zapytania (:resname) oraz w miarę stałą strukturę, którą da się przerobić np. na tablicę.

Druga części ("Seq Scan on ...") zawiera nazwy tabel oraz pola użyte w warunkach zapytania, lecz nie posiada już takiej prostej struktury i o ile dla prostego SELECTa wygląda dosyć czytelnie, to dla bardziej skomplikowanych zapytań trudno będzie to sparsować.


" {SEQSCAN "
" :startup_cost 0.00 "
" :total_cost 129.85 "
" :plan_rows 1 "
" :plan_width 4 "
" :targetlist ("
" {TARGETENTRY "
" :expr "
" {VAR "
" :varno 1 "
" :varattno 1 "
" :vartype 23 "
" :vartypmod -1 "
" :varlevelsup 0 "
" :varnoold 1 "
" :varoattno 1"
" }"
" :resno 1 "
" :resname idx_zapytania "
" :ressortgroupref 0 "
" :resorigtbl 16407 "
" :resorigcol 1 "
" :resjunk false"
" }"
" )"
" :qual ("
" {OPEXPR "
" :opno 1627 "
" :opfuncid 1633 "
" :opresulttype 16 "
" :opretset false "
" :args ("
" {VAR "
" :varno 1 "
" :varattno 3 "
" :vartype 25 "
" :vartypmod -1 "
" :varlevelsup 0 "
" :varnoold 1 "
" :varoattno 3"
" }"
" {CONST "
" :consttype 25 "
" :consttypmod -1 "
" :constlen -1 "
" :constbyval false "
" :constisnull false "
" :constvalue 11 [ 44 0 0 0 73 78 83 69 82 84 37 ]"
" }"
" )"
" }"
" )"
" :lefttree <> "
" :righttree <> "
" :initPlan <> "
" :extParam (b)"
" :allParam (b)"
" :scanrelid 1"
" }"
""
"Seq Scan on zapytania z (cost=0.00..129.85 rows=1 width=4)"
" Filter: (zapytanie_sql ~~* 'INSERT%'::text)"


Czy da się wyciągnąć te informacje jakoś inaczej? Może planner udostępnia jakieś API z którego można skorzystać?Łukasz Schabek edytował(a) ten post dnia 22.06.09 o godzinie 11:34

konto usunięte

Temat: [PostgreSQL] Informacje o zapytaniu

Łukasz Schabek:
[...]
Czy da się wyciągnąć te informacje jakoś inaczej? Może planner udostępnia jakieś API z którego można skorzystać?

AFAIK nie. Dla niego to jest wyciągnięcie strony, dane są o tyle istotne, że jest ich np. 200 bajtów. Z dobrym przybliżeniem można powiedzieć, że dane to taki rekord znany z C - jaką strukturę się przyłoży - tak będzie wyglądać. Z punktu widzenia optymalizacji, planowania - znaczenie mają tylko te kolumny, które wymienił - explicite.

A co konkretnie kolega chce uzyskać? Bo wygląda na próbę analizy stanu zastanego. Jeżeli chodzi o optymalizację istniejącego systemu - zwykle zbiera się logi, potem statystyka i walka z tym co stanowi problem. Zwykle system buduje zapytania dynamicznie, do tego nie wszystkie zapytania pojawiają się w analizowanym okresie czasu i próba zmiany systemu na podstawie tego co się w danym momencie dzieje... jest słabym pomysłem. ;)
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: [PostgreSQL] Informacje o zapytaniu

Na szczęście nie przyszło mi nic optymalizować ;) Muszę jedynie zebrać informacje na temat tego, z jakich tabel i pól w tabelach bazy danych korzysta aplikacja, mając do dyspozycji zbiór kwerend z tej aplikacji. Na tej podstawie będą robione dalsze analizy itd itd.

Explain plan nie daje mi tego co potrzebuję, bo nawet jeśli chodzi o pola zwracane w rezultatach to w przypadku użycia aliasu w planie zapytania będzie nazwa aliasu zamiast nazwy kolumny.

Następna dyskusja:

Problem z filtrowaniem wyni...




Wyślij zaproszenie do