Chcę przeprowadzić analizę porównawczą zapytania zawierającego zdefiniowaną przez użytkownika funkcję, którą napisałem dla PostgreSQL. Czy są jakieś standardowe sposoby przeprowadzenia takiego testu porównawczego?
Wiem, że czas można włączyć \timing
w wierszu polecenia psql, ale idealnie chciałbym mieć skrypt, który zajmie się wszystkim automatycznie: uruchamianie zapytania kilka razy, czyszczenie pamięci podręcznej PostgreSQL po każdym uruchomieniu (prawdopodobnie przez ponowne uruchomienie PostgreSQL's usługi) i wyprowadzenie średniego czasu działania (a wykorzystana pamięć to plus).
postgresql
benchmark
Franck Dernoncourt
źródło
źródło
pgbench
; możesz uruchomić go z niestandardowymi skryptami, aby zrobić to, co chcesz. Ze skryptem otoki powłoki, aby zatrzymać i ponownie uruchomić Pg oraz upuścić pamięć podręczną dysku systemu operacyjnego, masz większość tego, czego potrzebujesz.Odpowiedzi:
Powszechnie używanym narzędziem jest polecenie SQL
EXPLAIN ANALYZE
, prawdopodobnie z większą liczbą opcji pozwalających uzyskać więcej szczegółów w odpowiedzi. To generuje plan zapytań wraz z szacunkami planisty oraz faktycznymi czasami wykonania.Dlaczego chcesz wyczyścić pamięć podręczną? Ogólnie bardziej prawdopodobnym przypadkiem użycia jest zapełnienie pamięci podręcznej. Jeśli nadal chcesz wybrać tę trasę, oto pokrewna odpowiedź na temat SO .
Nie resetując pamięci podręcznej, oto dwa proste sposoby testowania z wieloma iteracjami:
Prosty UDF
Lub z losowym wprowadzaniem - liczby losowe od 0 do 5000 w przykładzie:
Lub z prawdziwym stołem:
Bardziej złożone funkcje / zapytania
Połączenie:
Ostrożnie : zapytanie jest faktycznie wykonywane!
Ostrożnie : nie nadaje się do użytku publicznego. Możliwy zastrzyk SQL.
Ponownie w razie potrzeby można użyć losowych parametrów. Być może z
USING
klauzuląEXECUTE
.źródło